@dxos/echo 0.8.4-main.70d3990 → 0.8.4-main.74a063c4e0

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 (609) hide show
  1. package/README.md +3 -4
  2. package/dist/lib/neutral/Annotation.mjs +37 -0
  3. package/dist/lib/neutral/Database.mjs +47 -0
  4. package/dist/lib/neutral/Entity.mjs +59 -0
  5. package/dist/lib/neutral/Err.mjs +12 -0
  6. package/dist/lib/neutral/Extension.mjs +18 -0
  7. package/dist/lib/neutral/Extension.mjs.map +7 -0
  8. package/dist/lib/neutral/Feed.mjs +48 -0
  9. package/dist/lib/neutral/Feed.mjs.map +7 -0
  10. package/dist/lib/neutral/Filter.mjs +70 -0
  11. package/dist/lib/neutral/Filter.mjs.map +7 -0
  12. package/dist/lib/neutral/Format.mjs +66 -0
  13. package/dist/lib/neutral/Format.mjs.map +7 -0
  14. package/dist/lib/neutral/JsonSchema.mjs +19 -0
  15. package/dist/lib/neutral/JsonSchema.mjs.map +7 -0
  16. package/dist/lib/neutral/Key.mjs +12 -0
  17. package/dist/lib/neutral/Key.mjs.map +7 -0
  18. package/dist/lib/neutral/Obj.mjs +113 -0
  19. package/dist/lib/neutral/Obj.mjs.map +7 -0
  20. package/dist/lib/neutral/Order.mjs +12 -0
  21. package/dist/lib/neutral/Order.mjs.map +7 -0
  22. package/dist/lib/neutral/Query.mjs +38 -0
  23. package/dist/lib/neutral/Query.mjs.map +7 -0
  24. package/dist/lib/neutral/QueryResult.mjs +2 -0
  25. package/dist/lib/neutral/QueryResult.mjs.map +7 -0
  26. package/dist/lib/neutral/Ref.mjs +24 -0
  27. package/dist/lib/neutral/Ref.mjs.map +7 -0
  28. package/dist/lib/neutral/Relation.mjs +94 -0
  29. package/dist/lib/neutral/Relation.mjs.map +7 -0
  30. package/dist/lib/neutral/SchemaRegistry.mjs +2 -0
  31. package/dist/lib/neutral/SchemaRegistry.mjs.map +7 -0
  32. package/dist/lib/neutral/Tag.mjs +29 -0
  33. package/dist/lib/neutral/Tag.mjs.map +7 -0
  34. package/dist/lib/neutral/Type.mjs +37 -0
  35. package/dist/lib/neutral/Type.mjs.map +7 -0
  36. package/dist/lib/neutral/chunk-2U2BZDLU.mjs +121 -0
  37. package/dist/lib/neutral/chunk-2U2BZDLU.mjs.map +7 -0
  38. package/dist/lib/neutral/chunk-46QNGNTY.mjs +45 -0
  39. package/dist/lib/neutral/chunk-46QNGNTY.mjs.map +7 -0
  40. package/dist/lib/neutral/chunk-66GBFH43.mjs +298 -0
  41. package/dist/lib/neutral/chunk-66GBFH43.mjs.map +7 -0
  42. package/dist/lib/neutral/chunk-6URFBQJH.mjs +361 -0
  43. package/dist/lib/neutral/chunk-6URFBQJH.mjs.map +7 -0
  44. package/dist/lib/neutral/chunk-7QQMUDE6.mjs +159 -0
  45. package/dist/lib/neutral/chunk-7QQMUDE6.mjs.map +7 -0
  46. package/dist/lib/neutral/chunk-ANHVGJI4.mjs +21 -0
  47. package/dist/lib/neutral/chunk-ANHVGJI4.mjs.map +7 -0
  48. package/dist/lib/neutral/chunk-BNCCGLJN.mjs +7 -0
  49. package/dist/lib/neutral/chunk-BNCCGLJN.mjs.map +7 -0
  50. package/dist/lib/neutral/chunk-DQYLD2RB.mjs +402 -0
  51. package/dist/lib/neutral/chunk-DQYLD2RB.mjs.map +7 -0
  52. package/dist/lib/neutral/chunk-E5PBQJWV.mjs +27 -0
  53. package/dist/lib/neutral/chunk-E5PBQJWV.mjs.map +7 -0
  54. package/dist/lib/neutral/chunk-EBVB5NOH.mjs +133 -0
  55. package/dist/lib/neutral/chunk-EBVB5NOH.mjs.map +7 -0
  56. package/dist/lib/neutral/chunk-FNEFSO2C.mjs +787 -0
  57. package/dist/lib/neutral/chunk-FNEFSO2C.mjs.map +7 -0
  58. package/dist/lib/neutral/chunk-GZQTCRJB.mjs +73 -0
  59. package/dist/lib/neutral/chunk-GZQTCRJB.mjs.map +7 -0
  60. package/dist/lib/neutral/chunk-J5LGTIGS.mjs +10 -0
  61. package/dist/lib/neutral/chunk-J5LGTIGS.mjs.map +7 -0
  62. package/dist/lib/neutral/chunk-KPY6FC5I.mjs +415 -0
  63. package/dist/lib/neutral/chunk-KPY6FC5I.mjs.map +7 -0
  64. package/dist/lib/neutral/chunk-MYMU4TWK.mjs +299 -0
  65. package/dist/lib/neutral/chunk-MYMU4TWK.mjs.map +7 -0
  66. package/dist/lib/neutral/chunk-MZXWVR3T.mjs +97 -0
  67. package/dist/lib/neutral/chunk-MZXWVR3T.mjs.map +7 -0
  68. package/dist/lib/neutral/chunk-OMUPQMLR.mjs +7 -0
  69. package/dist/lib/neutral/chunk-OMUPQMLR.mjs.map +7 -0
  70. package/dist/lib/neutral/chunk-QWAOTFCY.mjs +396 -0
  71. package/dist/lib/neutral/chunk-QWAOTFCY.mjs.map +7 -0
  72. package/dist/lib/neutral/chunk-R72KFH2X.mjs +34 -0
  73. package/dist/lib/neutral/chunk-R72KFH2X.mjs.map +7 -0
  74. package/dist/lib/neutral/chunk-TBKX6JQO.mjs +67 -0
  75. package/dist/lib/neutral/chunk-TBKX6JQO.mjs.map +7 -0
  76. package/dist/lib/neutral/chunk-UBEZSGXY.mjs +51 -0
  77. package/dist/lib/neutral/chunk-UBEZSGXY.mjs.map +7 -0
  78. package/dist/lib/neutral/chunk-UI6MWK5W.mjs +42 -0
  79. package/dist/lib/neutral/chunk-UI6MWK5W.mjs.map +7 -0
  80. package/dist/lib/neutral/chunk-VCAP4OOT.mjs +120 -0
  81. package/dist/lib/neutral/chunk-VCAP4OOT.mjs.map +7 -0
  82. package/dist/lib/neutral/chunk-WMFVS4KR.mjs +2830 -0
  83. package/dist/lib/neutral/chunk-WMFVS4KR.mjs.map +7 -0
  84. package/dist/lib/neutral/chunk-XZJUNTML.mjs +335 -0
  85. package/dist/lib/neutral/chunk-XZJUNTML.mjs.map +7 -0
  86. package/dist/lib/neutral/chunk-XZM7FERR.mjs +56 -0
  87. package/dist/lib/neutral/chunk-XZM7FERR.mjs.map +7 -0
  88. package/dist/lib/neutral/chunk-YS6Q3XAD.mjs +50 -0
  89. package/dist/lib/neutral/chunk-YS6Q3XAD.mjs.map +7 -0
  90. package/dist/lib/neutral/chunk-ZIXGDU6F.mjs +45 -0
  91. package/dist/lib/neutral/chunk-ZIXGDU6F.mjs.map +7 -0
  92. package/dist/lib/neutral/index.mjs +101 -0
  93. package/dist/lib/neutral/index.mjs.map +7 -0
  94. package/dist/lib/{node-esm → neutral}/internal/index.mjs +261 -123
  95. package/dist/lib/neutral/internal/index.mjs.map +7 -0
  96. package/dist/lib/neutral/meta.json +1 -0
  97. package/dist/lib/{browser → neutral}/testing/index.mjs +98 -52
  98. package/dist/lib/neutral/testing/index.mjs.map +7 -0
  99. package/dist/types/src/Annotation.d.ts +23 -1
  100. package/dist/types/src/Annotation.d.ts.map +1 -1
  101. package/dist/types/src/Collection.d.ts +16 -0
  102. package/dist/types/src/Collection.d.ts.map +1 -0
  103. package/dist/types/src/Database.d.ts +146 -87
  104. package/dist/types/src/Database.d.ts.map +1 -1
  105. package/dist/types/src/Dataset.d.ts +19 -0
  106. package/dist/types/src/Dataset.d.ts.map +1 -0
  107. package/dist/types/src/Entity.d.ts +141 -9
  108. package/dist/types/src/Entity.d.ts.map +1 -1
  109. package/dist/types/src/Entity.test.d.ts +2 -0
  110. package/dist/types/src/Entity.test.d.ts.map +1 -0
  111. package/dist/types/src/Err.d.ts +107 -0
  112. package/dist/types/src/Err.d.ts.map +1 -0
  113. package/dist/types/src/Extension.d.ts +80 -0
  114. package/dist/types/src/Extension.d.ts.map +1 -0
  115. package/dist/types/src/Extension.test.d.ts +2 -0
  116. package/dist/types/src/Extension.test.d.ts.map +1 -0
  117. package/dist/types/src/Feed.d.ts +171 -0
  118. package/dist/types/src/Feed.d.ts.map +1 -0
  119. package/dist/types/src/Filter.d.ts +136 -0
  120. package/dist/types/src/Filter.d.ts.map +1 -0
  121. package/dist/types/src/Filter.test.d.ts +2 -0
  122. package/dist/types/src/Filter.test.d.ts.map +1 -0
  123. package/dist/types/src/Format.d.ts +3 -3
  124. package/dist/types/src/Format.d.ts.map +1 -1
  125. package/dist/types/src/Hypergraph.d.ts +65 -0
  126. package/dist/types/src/Hypergraph.d.ts.map +1 -0
  127. package/dist/types/src/JsonSchema.d.ts +11 -4
  128. package/dist/types/src/JsonSchema.d.ts.map +1 -1
  129. package/dist/types/src/Obj.d.ts +403 -84
  130. package/dist/types/src/Obj.d.ts.map +1 -1
  131. package/dist/types/src/Obj.test.d.ts +2 -0
  132. package/dist/types/src/Obj.test.d.ts.map +1 -0
  133. package/dist/types/src/Order.d.ts +16 -0
  134. package/dist/types/src/Order.d.ts.map +1 -0
  135. package/dist/types/src/Query.d.ts +209 -0
  136. package/dist/types/src/Query.d.ts.map +1 -0
  137. package/dist/types/src/Query.test.d.ts +2 -0
  138. package/dist/types/src/Query.test.d.ts.map +1 -0
  139. package/dist/types/src/QueryResult.d.ts +80 -0
  140. package/dist/types/src/QueryResult.d.ts.map +1 -0
  141. package/dist/types/src/Ref.d.ts +61 -11
  142. package/dist/types/src/Ref.d.ts.map +1 -1
  143. package/dist/types/src/Relation.d.ts +281 -18
  144. package/dist/types/src/Relation.d.ts.map +1 -1
  145. package/dist/types/src/Relation.test.d.ts +2 -0
  146. package/dist/types/src/Relation.test.d.ts.map +1 -0
  147. package/dist/types/src/SchemaRegistry.d.ts +84 -0
  148. package/dist/types/src/SchemaRegistry.d.ts.map +1 -0
  149. package/dist/types/src/Tag.d.ts +8 -7
  150. package/dist/types/src/Tag.d.ts.map +1 -1
  151. package/dist/types/src/Type.d.ts +124 -90
  152. package/dist/types/src/Type.d.ts.map +1 -1
  153. package/dist/types/src/Type.test.d.ts +2 -0
  154. package/dist/types/src/Type.test.d.ts.map +1 -0
  155. package/dist/types/src/View.d.ts +68 -0
  156. package/dist/types/src/View.d.ts.map +1 -0
  157. package/dist/types/src/hierarchy.test.d.ts +2 -0
  158. package/dist/types/src/hierarchy.test.d.ts.map +1 -0
  159. package/dist/types/src/index.d.ts +13 -2
  160. package/dist/types/src/index.d.ts.map +1 -1
  161. package/dist/types/src/internal/{annotations → Annotation}/annotations.d.ts +84 -27
  162. package/dist/types/src/internal/Annotation/annotations.d.ts.map +1 -0
  163. package/dist/types/src/internal/Annotation/annotations.test.d.ts.map +1 -0
  164. package/dist/types/src/internal/Annotation/index.d.ts +4 -0
  165. package/dist/types/src/internal/Annotation/index.d.ts.map +1 -0
  166. package/dist/types/src/internal/Annotation/sorting.d.ts +24 -0
  167. package/dist/types/src/internal/Annotation/sorting.d.ts.map +1 -0
  168. package/dist/types/src/internal/{annotations → Annotation}/util.d.ts +14 -1
  169. package/dist/types/src/internal/Annotation/util.d.ts.map +1 -0
  170. package/dist/types/src/internal/Entity/api.d.ts +13 -0
  171. package/dist/types/src/internal/Entity/api.d.ts.map +1 -0
  172. package/dist/types/src/internal/Entity/entity.d.ts +20 -0
  173. package/dist/types/src/internal/Entity/entity.d.ts.map +1 -0
  174. package/dist/types/src/internal/Entity/index.d.ts +8 -0
  175. package/dist/types/src/internal/Entity/index.d.ts.map +1 -0
  176. package/dist/types/src/internal/{entities → Entity}/model.d.ts +14 -29
  177. package/dist/types/src/internal/Entity/model.d.ts.map +1 -0
  178. package/dist/types/src/internal/Entity/object.d.ts +18 -0
  179. package/dist/types/src/internal/Entity/object.d.ts.map +1 -0
  180. package/dist/types/src/internal/Entity/relation.d.ts +35 -0
  181. package/dist/types/src/internal/Entity/relation.d.ts.map +1 -0
  182. package/dist/types/src/internal/Entity/util.d.ts.map +1 -0
  183. package/dist/types/src/internal/Entity/version.d.ts +42 -0
  184. package/dist/types/src/internal/Entity/version.d.ts.map +1 -0
  185. package/dist/types/src/internal/Format/date.d.ts.map +1 -0
  186. package/dist/types/src/internal/Format/date.test.d.ts.map +1 -0
  187. package/dist/types/src/internal/{formats → Format}/format.d.ts +4 -4
  188. package/dist/types/src/internal/Format/format.d.ts.map +1 -0
  189. package/dist/types/src/internal/Format/format.test.d.ts.map +1 -0
  190. package/dist/types/src/internal/Format/index.d.ts.map +1 -0
  191. package/dist/types/src/internal/Format/number.d.ts.map +1 -0
  192. package/dist/types/src/internal/Format/object.d.ts.map +1 -0
  193. package/dist/types/src/internal/{formats → Format}/select.d.ts +6 -4
  194. package/dist/types/src/internal/Format/select.d.ts.map +1 -0
  195. package/dist/types/src/internal/{formats → Format}/string.d.ts +4 -0
  196. package/dist/types/src/internal/Format/string.d.ts.map +1 -0
  197. package/dist/types/src/internal/{formats → Format}/types.d.ts +7 -3
  198. package/dist/types/src/internal/Format/types.d.ts.map +1 -0
  199. package/dist/types/src/internal/{json-schema → JsonSchema}/annotations.d.ts +1 -1
  200. package/dist/types/src/internal/JsonSchema/annotations.d.ts.map +1 -0
  201. package/dist/types/src/internal/JsonSchema/effect-schema.test.d.ts.map +1 -0
  202. package/dist/types/src/internal/JsonSchema/index.d.ts.map +1 -0
  203. package/dist/types/src/internal/JsonSchema/json-schema-normalize.d.ts.map +1 -0
  204. package/dist/types/src/internal/{json-schema → JsonSchema}/json-schema-type.d.ts +131 -30
  205. package/dist/types/src/internal/JsonSchema/json-schema-type.d.ts.map +1 -0
  206. package/dist/types/src/internal/{json-schema → JsonSchema}/json-schema.d.ts +2 -1
  207. package/dist/types/src/internal/JsonSchema/json-schema.d.ts.map +1 -0
  208. package/dist/types/src/internal/JsonSchema/json-schema.test.d.ts.map +1 -0
  209. package/dist/types/src/internal/Obj/clone.d.ts +8 -0
  210. package/dist/types/src/internal/Obj/clone.d.ts.map +1 -0
  211. package/dist/types/src/internal/Obj/common.d.ts.map +1 -0
  212. package/dist/types/src/internal/{object → Obj}/create-object.d.ts +3 -3
  213. package/dist/types/src/internal/Obj/create-object.d.ts.map +1 -0
  214. package/dist/types/src/internal/Obj/create-object.test.d.ts.map +1 -0
  215. package/dist/types/src/internal/{object → Obj}/deleted.d.ts +1 -1
  216. package/dist/types/src/internal/Obj/deleted.d.ts.map +1 -0
  217. package/dist/types/src/internal/Obj/ids.d.ts.map +1 -0
  218. package/dist/types/src/internal/{object → Obj}/index.d.ts +3 -0
  219. package/dist/types/src/internal/Obj/index.d.ts.map +1 -0
  220. package/dist/types/src/internal/Obj/inspect.d.ts.map +1 -0
  221. package/dist/types/src/internal/Obj/json-serializer.d.ts +44 -0
  222. package/dist/types/src/internal/Obj/json-serializer.d.ts.map +1 -0
  223. package/dist/types/src/internal/Obj/json-serializer.test.d.ts.map +1 -0
  224. package/dist/types/src/internal/Obj/schema-validator.d.ts +2 -0
  225. package/dist/types/src/internal/Obj/schema-validator.d.ts.map +1 -0
  226. package/dist/types/src/internal/Obj/schema-validator.test.d.ts.map +1 -0
  227. package/dist/types/src/internal/Obj/set-value.d.ts +7 -0
  228. package/dist/types/src/internal/Obj/set-value.d.ts.map +1 -0
  229. package/dist/types/src/internal/Obj/set-value.test.d.ts +2 -0
  230. package/dist/types/src/internal/Obj/set-value.test.d.ts.map +1 -0
  231. package/dist/types/src/internal/Obj/snapshot.d.ts +6 -0
  232. package/dist/types/src/internal/Obj/snapshot.d.ts.map +1 -0
  233. package/dist/types/src/internal/Obj/typed-object.d.ts +25 -0
  234. package/dist/types/src/internal/Obj/typed-object.d.ts.map +1 -0
  235. package/dist/types/src/internal/Obj/typed-object.test.d.ts.map +1 -0
  236. package/dist/types/src/internal/Query.d.ts +10 -0
  237. package/dist/types/src/internal/Query.d.ts.map +1 -0
  238. package/dist/types/src/internal/Ref/index.d.ts.map +1 -0
  239. package/dist/types/src/internal/{ref → Ref}/ref-array.d.ts +4 -4
  240. package/dist/types/src/internal/Ref/ref-array.d.ts.map +1 -0
  241. package/dist/types/src/internal/{ref → Ref}/ref.d.ts +31 -9
  242. package/dist/types/src/internal/Ref/ref.d.ts.map +1 -0
  243. package/dist/types/src/internal/Ref/ref.test.d.ts.map +1 -0
  244. package/dist/types/src/internal/Type/compose.d.ts +7 -0
  245. package/dist/types/src/internal/Type/compose.d.ts.map +1 -0
  246. package/dist/types/src/internal/Type/compose.test.d.ts.map +1 -0
  247. package/dist/types/src/internal/{schema → Type}/echo-schema.d.ts +20 -7
  248. package/dist/types/src/internal/Type/echo-schema.d.ts.map +1 -0
  249. package/dist/types/src/internal/Type/index.d.ts +4 -0
  250. package/dist/types/src/internal/Type/index.d.ts.map +1 -0
  251. package/dist/types/src/internal/Type/manipulation.d.ts.map +1 -0
  252. package/dist/types/src/internal/Type/persistent-schema.d.ts +20 -0
  253. package/dist/types/src/internal/Type/persistent-schema.d.ts.map +1 -0
  254. package/dist/types/src/internal/common/api/index.d.ts +11 -0
  255. package/dist/types/src/internal/common/api/index.d.ts.map +1 -0
  256. package/dist/types/src/internal/common/api/meta.d.ts +42 -0
  257. package/dist/types/src/internal/common/api/meta.d.ts.map +1 -0
  258. package/dist/types/src/internal/common/index.d.ts +4 -0
  259. package/dist/types/src/internal/common/index.d.ts.map +1 -0
  260. package/dist/types/src/internal/common/proxy/change-context.d.ts +55 -0
  261. package/dist/types/src/internal/common/proxy/change-context.d.ts.map +1 -0
  262. package/dist/types/src/internal/common/proxy/change.test.d.ts +2 -0
  263. package/dist/types/src/internal/common/proxy/change.test.d.ts.map +1 -0
  264. package/dist/types/src/internal/common/proxy/define-hidden-property.d.ts +5 -0
  265. package/dist/types/src/internal/common/proxy/define-hidden-property.d.ts.map +1 -0
  266. package/dist/types/src/internal/common/proxy/errors.d.ts +19 -0
  267. package/dist/types/src/internal/common/proxy/errors.d.ts.map +1 -0
  268. package/dist/types/src/internal/common/proxy/event-batch.d.ts +10 -0
  269. package/dist/types/src/internal/common/proxy/event-batch.d.ts.map +1 -0
  270. package/dist/types/src/internal/common/proxy/handler.test.d.ts.map +1 -0
  271. package/dist/types/src/internal/common/proxy/index.d.ts +14 -0
  272. package/dist/types/src/internal/common/proxy/index.d.ts.map +1 -0
  273. package/dist/types/src/internal/common/proxy/json-serializer.d.ts +6 -0
  274. package/dist/types/src/internal/common/proxy/json-serializer.d.ts.map +1 -0
  275. package/dist/types/src/internal/{proxy → common/proxy}/make-object.d.ts +2 -4
  276. package/dist/types/src/internal/common/proxy/make-object.d.ts.map +1 -0
  277. package/dist/types/src/internal/common/proxy/ownership.d.ts +57 -0
  278. package/dist/types/src/internal/common/proxy/ownership.d.ts.map +1 -0
  279. package/dist/types/src/internal/common/proxy/proxy-types.d.ts +18 -0
  280. package/dist/types/src/internal/common/proxy/proxy-types.d.ts.map +1 -0
  281. package/dist/types/src/internal/common/proxy/proxy-utils.d.ts +47 -0
  282. package/dist/types/src/internal/common/proxy/proxy-utils.d.ts.map +1 -0
  283. package/dist/types/src/internal/common/proxy/reactive-array.d.ts +8 -0
  284. package/dist/types/src/internal/common/proxy/reactive-array.d.ts.map +1 -0
  285. package/dist/types/src/internal/common/proxy/reactive.d.ts +39 -0
  286. package/dist/types/src/internal/common/proxy/reactive.d.ts.map +1 -0
  287. package/dist/types/src/internal/common/proxy/schema-validator.d.ts.map +1 -0
  288. package/dist/types/src/internal/common/proxy/schema.test.d.ts.map +1 -0
  289. package/dist/types/src/internal/common/proxy/symbols.d.ts +3 -0
  290. package/dist/types/src/internal/common/proxy/symbols.d.ts.map +1 -0
  291. package/dist/types/src/internal/{proxy → common/proxy}/typed-handler.d.ts +16 -12
  292. package/dist/types/src/internal/common/proxy/typed-handler.d.ts.map +1 -0
  293. package/dist/types/src/internal/common/proxy/typed-handler.test.d.ts.map +1 -0
  294. package/dist/types/src/internal/common/proxy/typed-object.test.d.ts.map +1 -0
  295. package/dist/types/src/internal/{types → common/types}/base.d.ts +6 -16
  296. package/dist/types/src/internal/common/types/base.d.ts.map +1 -0
  297. package/dist/types/src/internal/common/types/entity.d.ts +37 -0
  298. package/dist/types/src/internal/common/types/entity.d.ts.map +1 -0
  299. package/dist/types/src/internal/{types → common/types}/index.d.ts +1 -0
  300. package/dist/types/src/internal/common/types/index.d.ts.map +1 -0
  301. package/dist/types/src/internal/{types → common/types}/meta.d.ts +8 -15
  302. package/dist/types/src/internal/common/types/meta.d.ts.map +1 -0
  303. package/dist/types/src/internal/common/types/model-symbols.d.ts +54 -0
  304. package/dist/types/src/internal/common/types/model-symbols.d.ts.map +1 -0
  305. package/dist/types/src/internal/{types → common/types}/typename.d.ts +8 -0
  306. package/dist/types/src/internal/common/types/typename.d.ts.map +1 -0
  307. package/dist/types/src/internal/{types → common/types}/version.d.ts +2 -2
  308. package/dist/types/src/internal/common/types/version.d.ts.map +1 -0
  309. package/dist/types/src/internal/index.d.ts +10 -10
  310. package/dist/types/src/internal/index.d.ts.map +1 -1
  311. package/dist/types/src/testing/test-data.d.ts.map +1 -1
  312. package/dist/types/src/testing/test-schema.d.ts +146 -179
  313. package/dist/types/src/testing/test-schema.d.ts.map +1 -1
  314. package/dist/types/src/testing/util.d.ts +6 -1
  315. package/dist/types/src/testing/util.d.ts.map +1 -1
  316. package/dist/types/tsconfig.tsbuildinfo +1 -1
  317. package/package.json +99 -61
  318. package/src/Annotation.ts +36 -5
  319. package/src/Collection.ts +37 -0
  320. package/src/Database.ts +263 -122
  321. package/src/Dataset.ts +26 -0
  322. package/src/Entity.test.ts +22 -0
  323. package/src/Entity.ts +196 -11
  324. package/src/Err.ts +40 -0
  325. package/src/Extension.test.ts +235 -0
  326. package/src/Extension.ts +122 -0
  327. package/src/Feed.ts +283 -0
  328. package/src/Filter.test.ts +90 -0
  329. package/src/Filter.ts +424 -0
  330. package/src/Format.ts +3 -5
  331. package/src/Hypergraph.ts +79 -0
  332. package/src/JsonSchema.ts +14 -4
  333. package/src/Obj.test.ts +539 -0
  334. package/src/Obj.ts +639 -289
  335. package/src/Order.ts +46 -0
  336. package/src/Query.test.ts +698 -0
  337. package/src/Query.ts +547 -0
  338. package/src/QueryResult.ts +106 -0
  339. package/src/Ref.ts +79 -9
  340. package/src/Relation.test.ts +88 -0
  341. package/src/Relation.ts +439 -68
  342. package/src/SchemaRegistry.ts +106 -0
  343. package/src/Tag.ts +7 -6
  344. package/src/Type.test.ts +52 -0
  345. package/src/Type.ts +167 -166
  346. package/src/View.ts +107 -0
  347. package/src/hierarchy.test.ts +33 -0
  348. package/src/index.ts +14 -5
  349. package/src/internal/{annotations → Annotation}/annotations.test.ts +62 -13
  350. package/src/internal/{annotations → Annotation}/annotations.ts +186 -71
  351. package/src/internal/{annotations → Annotation}/index.ts +1 -0
  352. package/src/internal/Annotation/sorting.ts +51 -0
  353. package/src/internal/{annotations → Annotation}/util.ts +16 -1
  354. package/src/internal/Entity/api.ts +30 -0
  355. package/src/internal/{entities → Entity}/entity.ts +39 -20
  356. package/src/internal/{entities → Entity}/index.ts +3 -1
  357. package/src/internal/{entities → Entity}/model.ts +29 -49
  358. package/src/internal/{entities → Entity}/object.ts +23 -11
  359. package/src/internal/{entities → Entity}/relation.ts +42 -43
  360. package/src/internal/Entity/version.ts +96 -0
  361. package/src/internal/{formats → Format}/date.test.ts +1 -2
  362. package/src/internal/{formats → Format}/format.test.ts +2 -3
  363. package/src/internal/{formats → Format}/format.ts +7 -8
  364. package/src/internal/{formats → Format}/object.ts +2 -2
  365. package/src/internal/{formats → Format}/select.ts +6 -4
  366. package/src/internal/{formats → Format}/string.ts +5 -0
  367. package/src/internal/{formats → Format}/types.ts +12 -6
  368. package/src/internal/{json-schema → JsonSchema}/annotations.ts +3 -3
  369. package/src/internal/{json-schema → JsonSchema}/json-schema-normalize.ts +4 -2
  370. package/src/internal/{json-schema → JsonSchema}/json-schema-type.ts +34 -35
  371. package/src/internal/{json-schema → JsonSchema}/json-schema.test.ts +67 -66
  372. package/src/internal/{json-schema → JsonSchema}/json-schema.ts +18 -13
  373. package/src/internal/Obj/clone.ts +48 -0
  374. package/src/internal/{object → Obj}/common.ts +2 -2
  375. package/src/internal/{object → Obj}/create-object.test.ts +5 -7
  376. package/src/internal/{object → Obj}/create-object.ts +6 -7
  377. package/src/internal/{object → Obj}/deleted.ts +2 -2
  378. package/src/internal/{object → Obj}/index.ts +3 -0
  379. package/src/internal/{object → Obj}/inspect.ts +4 -4
  380. package/src/internal/{object → Obj}/json-serializer.test.ts +33 -7
  381. package/src/internal/{object → Obj}/json-serializer.ts +77 -92
  382. package/src/internal/{object → Obj}/schema-validator.test.ts +3 -7
  383. package/src/internal/Obj/schema-validator.ts +6 -0
  384. package/src/internal/Obj/set-value.test.ts +281 -0
  385. package/src/internal/Obj/set-value.ts +165 -0
  386. package/src/internal/Obj/snapshot.ts +105 -0
  387. package/src/internal/{object → Obj}/typed-object.test.ts +12 -12
  388. package/src/internal/Obj/typed-object.ts +30 -0
  389. package/src/internal/Query.ts +132 -0
  390. package/src/internal/{ref → Ref}/ref-array.ts +4 -5
  391. package/src/internal/{ref → Ref}/ref.test.ts +5 -6
  392. package/src/internal/{ref → Ref}/ref.ts +90 -43
  393. package/src/internal/{schema → Type}/compose.test.ts +6 -7
  394. package/src/internal/{schema → Type}/compose.ts +14 -10
  395. package/src/internal/{schema → Type}/echo-schema.ts +55 -17
  396. package/src/internal/{schema → Type}/index.ts +0 -2
  397. package/src/internal/{schema → Type}/manipulation.ts +1 -1
  398. package/src/internal/Type/persistent-schema.ts +33 -0
  399. package/src/internal/{README.md → common/README.md} +36 -17
  400. package/src/internal/common/api/index.ts +15 -0
  401. package/src/internal/common/api/meta.ts +88 -0
  402. package/src/internal/common/index.ts +7 -0
  403. package/src/internal/common/proxy/change-context.ts +138 -0
  404. package/src/internal/common/proxy/change.test.ts +519 -0
  405. package/src/internal/common/proxy/define-hidden-property.ts +14 -0
  406. package/src/internal/common/proxy/errors.ts +42 -0
  407. package/src/internal/common/proxy/event-batch.ts +44 -0
  408. package/src/internal/{proxy → common/proxy}/handler.test.ts +32 -84
  409. package/src/internal/common/proxy/index.ts +17 -0
  410. package/src/internal/common/proxy/json-serializer.ts +90 -0
  411. package/src/internal/common/proxy/make-object.ts +105 -0
  412. package/src/internal/common/proxy/ownership.ts +252 -0
  413. package/src/internal/common/proxy/proxy-types.ts +23 -0
  414. package/src/internal/common/proxy/proxy-utils.ts +150 -0
  415. package/src/internal/common/proxy/reactive-array.ts +71 -0
  416. package/src/internal/common/proxy/reactive.ts +68 -0
  417. package/src/internal/{object → common/proxy}/schema-validator.ts +3 -1
  418. package/src/internal/{proxy → common/proxy}/schema.test.ts +29 -21
  419. package/src/internal/common/proxy/symbols.ts +7 -0
  420. package/src/internal/common/proxy/typed-handler.test.ts +313 -0
  421. package/src/internal/common/proxy/typed-handler.ts +447 -0
  422. package/src/internal/common/proxy/typed-object.test.ts +115 -0
  423. package/src/internal/{types → common/types}/base.ts +7 -22
  424. package/src/internal/common/types/entity.ts +54 -0
  425. package/src/internal/{types → common/types}/index.ts +1 -0
  426. package/src/internal/{types → common/types}/meta.ts +16 -25
  427. package/src/internal/common/types/model-symbols.ts +69 -0
  428. package/src/internal/{types → common/types}/typename.ts +10 -0
  429. package/src/internal/{types → common/types}/version.ts +2 -3
  430. package/src/internal/index.ts +10 -31
  431. package/src/testing/api.test.ts +32 -7
  432. package/src/testing/test-data.ts +0 -1
  433. package/src/testing/test-schema.ts +68 -41
  434. package/src/testing/util.ts +22 -15
  435. package/dist/lib/browser/chunk-7GH6RXJ3.mjs +0 -3683
  436. package/dist/lib/browser/chunk-7GH6RXJ3.mjs.map +0 -7
  437. package/dist/lib/browser/chunk-E4UTVJNF.mjs +0 -1111
  438. package/dist/lib/browser/chunk-E4UTVJNF.mjs.map +0 -7
  439. package/dist/lib/browser/index.mjs +0 -45
  440. package/dist/lib/browser/internal/index.mjs +0 -336
  441. package/dist/lib/browser/meta.json +0 -1
  442. package/dist/lib/browser/testing/index.mjs.map +0 -7
  443. package/dist/lib/node-esm/chunk-JE5RXM2I.mjs +0 -1111
  444. package/dist/lib/node-esm/chunk-JE5RXM2I.mjs.map +0 -7
  445. package/dist/lib/node-esm/chunk-M4B6BMD2.mjs +0 -3683
  446. package/dist/lib/node-esm/chunk-M4B6BMD2.mjs.map +0 -7
  447. package/dist/lib/node-esm/index.mjs +0 -45
  448. package/dist/lib/node-esm/meta.json +0 -1
  449. package/dist/lib/node-esm/testing/index.mjs +0 -328
  450. package/dist/lib/node-esm/testing/index.mjs.map +0 -7
  451. package/dist/types/src/errors.d.ts +0 -68
  452. package/dist/types/src/errors.d.ts.map +0 -1
  453. package/dist/types/src/internal/annotations/annotations.d.ts.map +0 -1
  454. package/dist/types/src/internal/annotations/annotations.test.d.ts.map +0 -1
  455. package/dist/types/src/internal/annotations/index.d.ts +0 -3
  456. package/dist/types/src/internal/annotations/index.d.ts.map +0 -1
  457. package/dist/types/src/internal/annotations/util.d.ts.map +0 -1
  458. package/dist/types/src/internal/entities/entity.d.ts +0 -10
  459. package/dist/types/src/internal/entities/entity.d.ts.map +0 -1
  460. package/dist/types/src/internal/entities/expando.d.ts +0 -16
  461. package/dist/types/src/internal/entities/expando.d.ts.map +0 -1
  462. package/dist/types/src/internal/entities/index.d.ts +0 -6
  463. package/dist/types/src/internal/entities/index.d.ts.map +0 -1
  464. package/dist/types/src/internal/entities/model.d.ts.map +0 -1
  465. package/dist/types/src/internal/entities/object.d.ts +0 -11
  466. package/dist/types/src/internal/entities/object.d.ts.map +0 -1
  467. package/dist/types/src/internal/entities/relation.d.ts +0 -55
  468. package/dist/types/src/internal/entities/relation.d.ts.map +0 -1
  469. package/dist/types/src/internal/entities/util.d.ts.map +0 -1
  470. package/dist/types/src/internal/formats/date.d.ts.map +0 -1
  471. package/dist/types/src/internal/formats/date.test.d.ts.map +0 -1
  472. package/dist/types/src/internal/formats/format.d.ts.map +0 -1
  473. package/dist/types/src/internal/formats/format.test.d.ts.map +0 -1
  474. package/dist/types/src/internal/formats/index.d.ts.map +0 -1
  475. package/dist/types/src/internal/formats/number.d.ts.map +0 -1
  476. package/dist/types/src/internal/formats/object.d.ts.map +0 -1
  477. package/dist/types/src/internal/formats/select.d.ts.map +0 -1
  478. package/dist/types/src/internal/formats/string.d.ts.map +0 -1
  479. package/dist/types/src/internal/formats/types.d.ts.map +0 -1
  480. package/dist/types/src/internal/json-schema/annotations.d.ts.map +0 -1
  481. package/dist/types/src/internal/json-schema/effect-schema.test.d.ts.map +0 -1
  482. package/dist/types/src/internal/json-schema/index.d.ts.map +0 -1
  483. package/dist/types/src/internal/json-schema/json-schema-normalize.d.ts.map +0 -1
  484. package/dist/types/src/internal/json-schema/json-schema-type.d.ts.map +0 -1
  485. package/dist/types/src/internal/json-schema/json-schema.d.ts.map +0 -1
  486. package/dist/types/src/internal/json-schema/json-schema.test.d.ts.map +0 -1
  487. package/dist/types/src/internal/object/common.d.ts.map +0 -1
  488. package/dist/types/src/internal/object/create-object.d.ts.map +0 -1
  489. package/dist/types/src/internal/object/create-object.test.d.ts.map +0 -1
  490. package/dist/types/src/internal/object/deleted.d.ts.map +0 -1
  491. package/dist/types/src/internal/object/ids.d.ts.map +0 -1
  492. package/dist/types/src/internal/object/index.d.ts.map +0 -1
  493. package/dist/types/src/internal/object/inspect.d.ts.map +0 -1
  494. package/dist/types/src/internal/object/json-serializer.d.ts +0 -31
  495. package/dist/types/src/internal/object/json-serializer.d.ts.map +0 -1
  496. package/dist/types/src/internal/object/json-serializer.test.d.ts.map +0 -1
  497. package/dist/types/src/internal/object/schema-validator.d.ts.map +0 -1
  498. package/dist/types/src/internal/object/schema-validator.test.d.ts.map +0 -1
  499. package/dist/types/src/internal/object/typed-object.d.ts +0 -31
  500. package/dist/types/src/internal/object/typed-object.d.ts.map +0 -1
  501. package/dist/types/src/internal/object/typed-object.test.d.ts.map +0 -1
  502. package/dist/types/src/internal/proxy/handler.test.d.ts.map +0 -1
  503. package/dist/types/src/internal/proxy/index.d.ts +0 -3
  504. package/dist/types/src/internal/proxy/index.d.ts.map +0 -1
  505. package/dist/types/src/internal/proxy/make-object.d.ts.map +0 -1
  506. package/dist/types/src/internal/proxy/schema.test.d.ts.map +0 -1
  507. package/dist/types/src/internal/proxy/typed-handler.d.ts.map +0 -1
  508. package/dist/types/src/internal/proxy/typed-handler.test.d.ts.map +0 -1
  509. package/dist/types/src/internal/proxy/typed-object.test.d.ts.map +0 -1
  510. package/dist/types/src/internal/ref/index.d.ts.map +0 -1
  511. package/dist/types/src/internal/ref/ref-array.d.ts.map +0 -1
  512. package/dist/types/src/internal/ref/ref.d.ts.map +0 -1
  513. package/dist/types/src/internal/ref/ref.test.d.ts.map +0 -1
  514. package/dist/types/src/internal/schema/compose.d.ts +0 -6
  515. package/dist/types/src/internal/schema/compose.d.ts.map +0 -1
  516. package/dist/types/src/internal/schema/compose.test.d.ts.map +0 -1
  517. package/dist/types/src/internal/schema/echo-schema.d.ts.map +0 -1
  518. package/dist/types/src/internal/schema/index.d.ts +0 -6
  519. package/dist/types/src/internal/schema/index.d.ts.map +0 -1
  520. package/dist/types/src/internal/schema/manipulation.d.ts.map +0 -1
  521. package/dist/types/src/internal/schema/persistent-schema.d.ts +0 -18
  522. package/dist/types/src/internal/schema/persistent-schema.d.ts.map +0 -1
  523. package/dist/types/src/internal/schema/runtime-schema-registry.d.ts +0 -18
  524. package/dist/types/src/internal/schema/runtime-schema-registry.d.ts.map +0 -1
  525. package/dist/types/src/internal/schema/snapshot.d.ts +0 -6
  526. package/dist/types/src/internal/schema/snapshot.d.ts.map +0 -1
  527. package/dist/types/src/internal/types/base.d.ts.map +0 -1
  528. package/dist/types/src/internal/types/entity.d.ts +0 -12
  529. package/dist/types/src/internal/types/entity.d.ts.map +0 -1
  530. package/dist/types/src/internal/types/index.d.ts.map +0 -1
  531. package/dist/types/src/internal/types/meta.d.ts.map +0 -1
  532. package/dist/types/src/internal/types/typename.d.ts.map +0 -1
  533. package/dist/types/src/internal/types/version.d.ts.map +0 -1
  534. package/dist/types/src/query/filter.d.ts +0 -167
  535. package/dist/types/src/query/filter.d.ts.map +0 -1
  536. package/dist/types/src/query/index.d.ts +0 -5
  537. package/dist/types/src/query/index.d.ts.map +0 -1
  538. package/dist/types/src/query/order.d.ts +0 -12
  539. package/dist/types/src/query/order.d.ts.map +0 -1
  540. package/dist/types/src/query/query.d.ts +0 -112
  541. package/dist/types/src/query/query.d.ts.map +0 -1
  542. package/dist/types/src/query/query.test.d.ts +0 -2
  543. package/dist/types/src/query/query.test.d.ts.map +0 -1
  544. package/dist/types/src/query/testing.d.ts +0 -51
  545. package/dist/types/src/query/testing.d.ts.map +0 -1
  546. package/dist/types/src/query/types.d.ts +0 -17
  547. package/dist/types/src/query/types.d.ts.map +0 -1
  548. package/dist/types/src/query/util.d.ts +0 -8
  549. package/dist/types/src/query/util.d.ts.map +0 -1
  550. package/src/errors.ts +0 -18
  551. package/src/internal/entities/expando.ts +0 -23
  552. package/src/internal/object/typed-object.ts +0 -94
  553. package/src/internal/proxy/index.ts +0 -6
  554. package/src/internal/proxy/make-object.ts +0 -113
  555. package/src/internal/proxy/typed-handler.test.ts +0 -102
  556. package/src/internal/proxy/typed-handler.ts +0 -233
  557. package/src/internal/proxy/typed-object.test.ts +0 -105
  558. package/src/internal/schema/persistent-schema.ts +0 -28
  559. package/src/internal/schema/runtime-schema-registry.ts +0 -78
  560. package/src/internal/schema/snapshot.ts +0 -25
  561. package/src/internal/types/entity.ts +0 -23
  562. package/src/query/filter.ts +0 -455
  563. package/src/query/index.ts +0 -9
  564. package/src/query/order.ts +0 -34
  565. package/src/query/query.test.ts +0 -334
  566. package/src/query/query.ts +0 -303
  567. package/src/query/testing.ts +0 -64
  568. package/src/query/types.ts +0 -23
  569. package/src/query/util.ts +0 -25
  570. /package/dist/lib/{browser/index.mjs.map → neutral/Annotation.mjs.map} +0 -0
  571. /package/dist/lib/{browser/internal/index.mjs.map → neutral/Database.mjs.map} +0 -0
  572. /package/dist/lib/{node-esm/index.mjs.map → neutral/Entity.mjs.map} +0 -0
  573. /package/dist/lib/{node-esm/internal/index.mjs.map → neutral/Err.mjs.map} +0 -0
  574. /package/dist/types/src/internal/{annotations → Annotation}/annotations.test.d.ts +0 -0
  575. /package/dist/types/src/internal/{entities → Entity}/util.d.ts +0 -0
  576. /package/dist/types/src/internal/{formats → Format}/date.d.ts +0 -0
  577. /package/dist/types/src/internal/{formats → Format}/date.test.d.ts +0 -0
  578. /package/dist/types/src/internal/{formats → Format}/format.test.d.ts +0 -0
  579. /package/dist/types/src/internal/{formats → Format}/index.d.ts +0 -0
  580. /package/dist/types/src/internal/{formats → Format}/number.d.ts +0 -0
  581. /package/dist/types/src/internal/{formats → Format}/object.d.ts +0 -0
  582. /package/dist/types/src/internal/{json-schema → JsonSchema}/effect-schema.test.d.ts +0 -0
  583. /package/dist/types/src/internal/{json-schema → JsonSchema}/index.d.ts +0 -0
  584. /package/dist/types/src/internal/{json-schema → JsonSchema}/json-schema-normalize.d.ts +0 -0
  585. /package/dist/types/src/internal/{json-schema → JsonSchema}/json-schema.test.d.ts +0 -0
  586. /package/dist/types/src/internal/{object → Obj}/common.d.ts +0 -0
  587. /package/dist/types/src/internal/{object → Obj}/create-object.test.d.ts +0 -0
  588. /package/dist/types/src/internal/{object → Obj}/ids.d.ts +0 -0
  589. /package/dist/types/src/internal/{object → Obj}/inspect.d.ts +0 -0
  590. /package/dist/types/src/internal/{object → Obj}/json-serializer.test.d.ts +0 -0
  591. /package/dist/types/src/internal/{object → Obj}/schema-validator.test.d.ts +0 -0
  592. /package/dist/types/src/internal/{object → Obj}/typed-object.test.d.ts +0 -0
  593. /package/dist/types/src/internal/{ref → Ref}/index.d.ts +0 -0
  594. /package/dist/types/src/internal/{ref → Ref}/ref.test.d.ts +0 -0
  595. /package/dist/types/src/internal/{schema → Type}/compose.test.d.ts +0 -0
  596. /package/dist/types/src/internal/{schema → Type}/manipulation.d.ts +0 -0
  597. /package/dist/types/src/internal/{proxy → common/proxy}/handler.test.d.ts +0 -0
  598. /package/dist/types/src/internal/{object → common/proxy}/schema-validator.d.ts +0 -0
  599. /package/dist/types/src/internal/{proxy → common/proxy}/schema.test.d.ts +0 -0
  600. /package/dist/types/src/internal/{proxy → common/proxy}/typed-handler.test.d.ts +0 -0
  601. /package/dist/types/src/internal/{proxy → common/proxy}/typed-object.test.d.ts +0 -0
  602. /package/src/internal/{entities → Entity}/util.ts +0 -0
  603. /package/src/internal/{formats → Format}/date.ts +0 -0
  604. /package/src/internal/{formats → Format}/index.ts +0 -0
  605. /package/src/internal/{formats → Format}/number.ts +0 -0
  606. /package/src/internal/{json-schema → JsonSchema}/effect-schema.test.ts +0 -0
  607. /package/src/internal/{json-schema → JsonSchema}/index.ts +0 -0
  608. /package/src/internal/{object → Obj}/ids.ts +0 -0
  609. /package/src/internal/{ref → Ref}/index.ts +0 -0
@@ -0,0 +1,132 @@
1
+ //
2
+ // Copyright 2025 DXOS.org
3
+ //
4
+
5
+ import { type QueryAST } from '@dxos/echo-protocol';
6
+
7
+ /**
8
+ * Returns a human-readable string representation of a Filter AST.
9
+ */
10
+ export const prettyFilter = (filter: QueryAST.Filter): string => {
11
+ switch (filter.type) {
12
+ case 'object': {
13
+ const parts: string[] = [];
14
+ if (filter.typename !== null) {
15
+ parts.push(String(filter.typename));
16
+ }
17
+ if (filter.id !== undefined && filter.id.length > 0) {
18
+ parts.push(`id: [${filter.id.join(', ')}]`);
19
+ }
20
+ const propEntries = Object.entries(filter.props);
21
+ if (propEntries.length > 0) {
22
+ const propsStr = propEntries.map(([k, v]) => `${k}: ${prettyFilter(v)}`).join(', ');
23
+ parts.push(`{ ${propsStr} }`);
24
+ }
25
+ if (filter.foreignKeys !== undefined && filter.foreignKeys.length > 0) {
26
+ parts.push(`foreignKeys: [${filter.foreignKeys.map((fk) => JSON.stringify(fk)).join(', ')}]`);
27
+ }
28
+ return parts.length > 0 ? `Filter.type(${parts.join(', ')})` : 'Filter.everything()';
29
+ }
30
+ case 'compare':
31
+ return `Filter.${filter.operator}(${JSON.stringify(filter.value)})`;
32
+ case 'in':
33
+ return `Filter.in([${filter.values.map((v) => JSON.stringify(v)).join(', ')}])`;
34
+ case 'contains':
35
+ return `Filter.contains(${JSON.stringify(filter.value)})`;
36
+ case 'tag':
37
+ return `Filter.tag(${JSON.stringify(filter.tag)})`;
38
+ case 'range':
39
+ return `Filter.range(${JSON.stringify(filter.from)}, ${JSON.stringify(filter.to)})`;
40
+ case 'text-search':
41
+ return filter.searchKind
42
+ ? `Filter.textSearch(${JSON.stringify(filter.text)}, ${JSON.stringify(filter.searchKind)})`
43
+ : `Filter.textSearch(${JSON.stringify(filter.text)})`;
44
+ case 'timestamp':
45
+ return `Filter.${filter.field}.${filter.operator}(${filter.value})`;
46
+ case 'not':
47
+ return `Filter.not(${prettyFilter(filter.filter)})`;
48
+ case 'and':
49
+ return `Filter.and(${filter.filters.map(prettyFilter).join(', ')})`;
50
+ case 'or':
51
+ return `Filter.or(${filter.filters.map(prettyFilter).join(', ')})`;
52
+ }
53
+ };
54
+
55
+ /**
56
+ * Returns a human-readable string representation of a Query AST.
57
+ */
58
+ export const prettyQuery = (query: QueryAST.Query): string => {
59
+ switch (query.type) {
60
+ case 'select':
61
+ return `Query.select(${prettyFilter(query.filter)})`;
62
+ case 'filter':
63
+ return `${prettyQuery(query.selection)}.select(${prettyFilter(query.filter)})`;
64
+ case 'reference-traversal':
65
+ return `${prettyQuery(query.anchor)}.reference(${JSON.stringify(query.property)})`;
66
+ case 'incoming-references': {
67
+ const args: string[] = [];
68
+ if (query.typename !== null) {
69
+ args.push(String(query.typename));
70
+ }
71
+ if (query.property !== null) {
72
+ args.push(JSON.stringify(query.property));
73
+ }
74
+ return `${prettyQuery(query.anchor)}.referencedBy(${args.join(', ')})`;
75
+ }
76
+ case 'relation': {
77
+ const method =
78
+ query.direction === 'outgoing' ? 'sourceOf' : query.direction === 'incoming' ? 'targetOf' : 'relationOf';
79
+ const filterStr = query.filter !== undefined ? prettyFilter(query.filter) : '';
80
+ return `${prettyQuery(query.anchor)}.${method}(${filterStr})`;
81
+ }
82
+ case 'relation-traversal':
83
+ return `${prettyQuery(query.anchor)}.${query.direction}()`;
84
+ case 'hierarchy-traversal':
85
+ return query.direction === 'to-parent'
86
+ ? `${prettyQuery(query.anchor)}.parent()`
87
+ : `${prettyQuery(query.anchor)}.children()`;
88
+ case 'union':
89
+ return `Query.all(${query.queries.map(prettyQuery).join(', ')})`;
90
+ case 'set-difference':
91
+ return `Query.without(${prettyQuery(query.source)}, ${prettyQuery(query.exclude)})`;
92
+ case 'order': {
93
+ const orders = query.order.map((o) => {
94
+ if (o.kind === 'natural') {
95
+ return 'Order.natural()';
96
+ } else if (o.kind === 'rank') {
97
+ return `Order.rank(${JSON.stringify(o.direction)})`;
98
+ } else {
99
+ return `Order.property(${JSON.stringify(o.property)}, ${JSON.stringify(o.direction)})`;
100
+ }
101
+ });
102
+ return `${prettyQuery(query.query)}.orderBy(${orders.join(', ')})`;
103
+ }
104
+ case 'options': {
105
+ const opts = query.options;
106
+ const parts: string[] = [];
107
+ if (opts.deleted !== undefined) {
108
+ parts.push(`deleted: ${JSON.stringify(opts.deleted)}`);
109
+ }
110
+ return `${prettyQuery(query.query)}.options({ ${parts.join(', ')} })`;
111
+ }
112
+ case 'from': {
113
+ if (query.from._tag === 'scope') {
114
+ const scope = query.from.scope;
115
+ const parts: string[] = [];
116
+ if (scope.spaceIds !== undefined) {
117
+ parts.push(`spaceIds: [${scope.spaceIds.map((s) => JSON.stringify(s)).join(', ')}]`);
118
+ }
119
+ if (scope.queues !== undefined) {
120
+ parts.push(`queues: [${scope.queues.map(String).join(', ')}]`);
121
+ }
122
+ if (scope.allQueuesFromSpaces !== undefined) {
123
+ parts.push(`allQueuesFromSpaces: ${scope.allQueuesFromSpaces}`);
124
+ }
125
+ return `${prettyQuery(query.query)}.from({ ${parts.join(', ')} })`;
126
+ }
127
+ return `${prettyQuery(query.query)}.from(${prettyQuery(query.from.query)})`;
128
+ }
129
+ case 'limit':
130
+ return `${prettyQuery(query.query)}.limit(${query.limit})`;
131
+ }
132
+ };
@@ -5,8 +5,7 @@
5
5
  import { type ObjectId } from '@dxos/keys';
6
6
  import { isNonNullable } from '@dxos/util';
7
7
 
8
- import { type AnyEchoObject } from '../types';
9
-
8
+ import { type AnyEntity } from '../common/types';
10
9
  import { Ref } from './ref';
11
10
 
12
11
  /**
@@ -16,21 +15,21 @@ export const RefArray = Object.freeze({
16
15
  /**
17
16
  * @returns all resolved targets.
18
17
  */
19
- targets: <T extends AnyEchoObject>(refs: readonly Ref<T>[]): T[] => {
18
+ targets: <T extends AnyEntity>(refs: readonly Ref<T>[]): T[] => {
20
19
  return refs.map((ref) => ref.target).filter(isNonNullable);
21
20
  },
22
21
 
23
22
  /**
24
23
  * Load all referenced objects.
25
24
  */
26
- loadAll: <T extends AnyEchoObject>(refs: readonly Ref<T>[]): Promise<T[]> => {
25
+ loadAll: <T extends AnyEntity>(refs: readonly Ref<T>[]): Promise<T[]> => {
27
26
  return Promise.all(refs.map((ref) => ref.load()));
28
27
  },
29
28
 
30
29
  /**
31
30
  * Removes the ref with the given id.
32
31
  */
33
- removeById: (refs: Ref<AnyEchoObject>[], id: ObjectId) => {
32
+ removeById: (refs: Ref<AnyEntity>[], id: ObjectId) => {
34
33
  const index = refs.findIndex(Ref.hasObjectId(id));
35
34
  if (index >= 0) {
36
35
  refs.splice(index, 1);
@@ -7,16 +7,15 @@ import { describe, expect, test } from 'vitest';
7
7
 
8
8
  import { DXN, ObjectId } from '@dxos/keys';
9
9
 
10
- import { EchoObjectSchema, getObjectDXN } from '../entities';
11
- import { createObject } from '../object';
12
-
10
+ import { EchoObjectSchema, getObjectDXN } from '../Entity';
11
+ import { createObject } from '../Obj';
13
12
  import { Ref, getReferenceAst } from './ref';
14
13
 
15
14
  const Task = Schema.Struct({
16
15
  title: Schema.optional(Schema.String),
17
16
  }).pipe(
18
17
  EchoObjectSchema({
19
- typename: 'example.com/type/Task',
18
+ typename: 'com.example.type.task',
20
19
  version: '0.1.0',
21
20
  }),
22
21
  );
@@ -26,10 +25,10 @@ type Task = Schema.Schema.Type<typeof Task>;
26
25
  const Contact = Schema.Struct({
27
26
  name: Schema.String,
28
27
  email: Schema.optional(Schema.String),
29
- tasks: Schema.mutable(Schema.Array(Ref(Task))),
28
+ tasks: Schema.Array(Ref(Task)),
30
29
  }).pipe(
31
30
  EchoObjectSchema({
32
- typename: 'example.com/type/Person',
31
+ typename: 'com.example.type.person',
33
32
  version: '0.1.0',
34
33
  }),
35
34
  );
@@ -3,19 +3,25 @@
3
3
  //
4
4
 
5
5
  import * as Effect from 'effect/Effect';
6
+ import * as Equal from 'effect/Equal';
7
+ import * as Hash from 'effect/Hash';
6
8
  import * as Option from 'effect/Option';
7
9
  import * as ParseResult from 'effect/ParseResult';
10
+ import * as Pipeable from 'effect/Pipeable';
8
11
  import * as Schema from 'effect/Schema';
9
12
  import * as SchemaAST from 'effect/SchemaAST';
13
+ import type * as Types from 'effect/Types';
10
14
 
11
- import { type EncodedReference, Reference } from '@dxos/echo-protocol';
12
- import { compositeRuntime } from '@dxos/echo-signals/runtime';
15
+ import { Event } from '@dxos/async';
16
+ import { type CustomInspectFunction, inspectCustom } from '@dxos/debug';
17
+ import { EncodedReference } from '@dxos/echo-protocol';
13
18
  import { assertArgument, invariant } from '@dxos/invariant';
14
19
  import { DXN, ObjectId } from '@dxos/keys';
15
20
 
16
- import { ReferenceAnnotationId, getSchemaDXN, getTypeAnnotation, getTypeIdentifierAnnotation } from '../annotations';
17
- import { type JsonSchemaType } from '../json-schema';
18
- import type { AnyProperties, WithId } from '../types';
21
+ import * as Database from '../../Database';
22
+ import { ReferenceAnnotationId, getSchemaDXN, getTypeAnnotation, getTypeIdentifierAnnotation } from '../Annotation';
23
+ import type { AnyEntity, AnyProperties } from '../common/types';
24
+ import { type JsonSchemaType } from '../JsonSchema';
19
25
 
20
26
  /**
21
27
  * The `$id` and `$ref` fields for an ECHO reference schema.
@@ -29,7 +35,7 @@ export const getSchemaReference = (property: JsonSchemaType): { typename: string
29
35
  }
30
36
  };
31
37
 
32
- export const createSchemaReference = (typename: string): JsonSchemaType => {
38
+ export const createSchemaReference = (typename: string): Types.DeepMutable<JsonSchemaType> => {
33
39
  return {
34
40
  $id: JSON_SCHEMA_ECHO_REF_ID,
35
41
  reference: {
@@ -70,7 +76,7 @@ export const RefTypeId: unique symbol = Symbol('@dxos/echo/internal/Ref');
70
76
  /**
71
77
  * Reference Schema.
72
78
  */
73
- export interface RefSchema<T extends WithId> extends Schema.SchemaClass<Ref<T>, EncodedReference> {}
79
+ export interface RefSchema<T extends AnyEntity> extends Schema.SchemaClass<Ref<T>, EncodedReference> {}
74
80
 
75
81
  /**
76
82
  * Type of the `Ref` function and extra methods attached to it.
@@ -101,8 +107,8 @@ export interface RefFn {
101
107
  /**
102
108
  * Constructs a reference that points to the given object.
103
109
  */
104
- // TODO(burdon): Narrow to Obj.Any?
105
- make: <T extends WithId>(object: T) => Ref<T>;
110
+ // TODO(burdon): Narrow to Obj.Unknown?
111
+ make: <T extends AnyEntity>(object: T) => Ref<T>;
106
112
 
107
113
  /**
108
114
  * Constructs a reference that points to the object specified by the provided DXN.
@@ -115,36 +121,33 @@ export interface RefFn {
115
121
  */
116
122
  export const Ref: RefFn = <S extends Schema.Schema.Any>(schema: S): RefSchema<Schema.Schema.Type<S>> => {
117
123
  assertArgument(Schema.isSchema(schema), 'schema', 'Must call with an instance of effect-schema');
118
-
119
124
  const annotation = getTypeAnnotation(schema);
120
125
  if (annotation == null) {
121
126
  throw new Error('Reference target must be an ECHO schema.');
122
127
  }
123
128
 
124
- return createEchoReferenceSchema(
125
- getTypeIdentifierAnnotation(schema),
126
- annotation.typename,
127
- annotation.version,
128
- getSchemaExpectedName(schema.ast),
129
- );
129
+ return createEchoReferenceSchema(getTypeIdentifierAnnotation(schema), annotation.typename, annotation.version);
130
130
  };
131
131
 
132
132
  /**
133
133
  * Represents materialized reference to a target.
134
134
  * This is the data type for the fields marked as ref.
135
135
  */
136
- export interface Ref<T> {
136
+ export interface Ref<T> extends Pipeable.Pipeable {
137
137
  /**
138
138
  * Target object DXN.
139
139
  */
140
140
  get dxn(): DXN;
141
141
 
142
+ /**
143
+ * Returns true if the reference has a target available (inlined or resolver set).
144
+ */
145
+ get isAvailable(): boolean;
146
+
142
147
  /**
143
148
  * @returns The reference target.
144
149
  * May return `undefined` if the object is not loaded in the working set.
145
150
  * Accessing this property, even if it returns `undefined` will trigger the object to be loaded to the working set.
146
- *
147
- * @reactive Supports signal subscriptions.
148
151
  */
149
152
  get target(): T | undefined;
150
153
 
@@ -158,6 +161,7 @@ export interface Ref<T> {
158
161
  /**
159
162
  * @returns Promise that will resolves with the target object or undefined if the object is not loaded locally.
160
163
  */
164
+
161
165
  tryLoad(): Promise<T | undefined>;
162
166
 
163
167
  /**
@@ -219,7 +223,7 @@ Ref.make = <T extends AnyProperties>(obj: T): Ref<T> => {
219
223
  // TODO(dmaretskyi): Extract to `getObjectDXN` function.
220
224
  const id = obj.id;
221
225
  invariant(ObjectId.isValid(id), 'Invalid object ID');
222
- const dxn = Reference.localObjectReference(id).toDXN();
226
+ const dxn = DXN.fromLocalObjectId(id);
223
227
  return new RefImpl(dxn, obj);
224
228
  };
225
229
 
@@ -244,7 +248,6 @@ export const createEchoReferenceSchema = (
244
248
  echoId: string | undefined,
245
249
  typename: string | undefined,
246
250
  version: string | undefined,
247
- schemaName?: string, // TODO(burdon): Not used.
248
251
  ): Schema.SchemaClass<Ref<any>, EncodedReference> => {
249
252
  if (!echoId && !typename) {
250
253
  throw new TypeError('Either echoId or typename must be provided.');
@@ -263,25 +266,39 @@ export const createEchoReferenceSchema = (
263
266
  [],
264
267
  {
265
268
  encode: () => {
266
- return (value) => {
267
- return Effect.succeed({
268
- '/': (value as Ref<any>).dxn.toString(),
269
+ return (value) =>
270
+ Effect.gen(function* () {
271
+ if (Ref.isRef(value)) {
272
+ return EncodedReference.fromDXN((value as Ref<any>).dxn);
273
+ } else if (EncodedReference.isEncodedReference(value)) {
274
+ return value;
275
+ }
276
+ throw new Error('Invalid reference');
269
277
  });
270
- };
271
278
  },
272
279
  decode: () => {
273
- return (value) => {
274
- // TODO(dmaretskyi): This branch seems to be taken by Schema.is
275
- if (Ref.isRef(value)) {
276
- return Effect.succeed(value);
277
- }
278
-
279
- if (typeof value !== 'object' || value == null || typeof (value as any)['/'] !== 'string') {
280
- return Effect.fail(new ParseResult.Unexpected(value, 'reference'));
281
- }
282
-
283
- return Effect.succeed(Ref.fromDXN(DXN.parse((value as any)['/'])));
284
- };
280
+ return (value) =>
281
+ Effect.gen(function* () {
282
+ const dbService = yield* Effect.serviceOption(Database.Service);
283
+
284
+ // TODO(dmaretskyi): This branch seems to be taken by Schema.is
285
+ if (Ref.isRef(value)) {
286
+ if (Option.isSome(dbService)) {
287
+ return dbService.value.db.makeRef(value.dxn);
288
+ } else {
289
+ return value;
290
+ }
291
+ }
292
+
293
+ if (!EncodedReference.isEncodedReference(value)) {
294
+ return yield* Effect.fail(new ParseResult.Unexpected(value, 'reference'));
295
+ }
296
+ if (Option.isSome(dbService)) {
297
+ return dbService.value.db.makeRef(EncodedReference.toDXN(value));
298
+ } else {
299
+ return Ref.fromDXN(EncodedReference.toDXN(value));
300
+ }
301
+ });
285
302
  },
286
303
  },
287
304
  {
@@ -331,7 +348,7 @@ export interface RefResolver {
331
348
  export class RefImpl<T> implements Ref<T> {
332
349
  #dxn: DXN;
333
350
  #resolver?: RefResolver = undefined;
334
- #signal = compositeRuntime.createSignal();
351
+ #resolved = new Event<void>();
335
352
 
336
353
  /**
337
354
  * Target is set when the reference is created from a specific object.
@@ -343,7 +360,7 @@ export class RefImpl<T> implements Ref<T> {
343
360
  * Callback to issue a reactive notification when object is resolved.
344
361
  */
345
362
  #resolverCallback = () => {
346
- this.#signal.notifyWrite();
363
+ this.#resolved.emit();
347
364
  };
348
365
 
349
366
  constructor(dxn: DXN, target?: T) {
@@ -358,11 +375,17 @@ export class RefImpl<T> implements Ref<T> {
358
375
  return this.#dxn;
359
376
  }
360
377
 
378
+ /**
379
+ * @inheritdoc
380
+ */
381
+ get isAvailable(): boolean {
382
+ return this.#target !== undefined || this.#resolver !== undefined;
383
+ }
384
+
361
385
  /**
362
386
  * @inheritdoc
363
387
  */
364
388
  get target(): T | undefined {
365
- this.#signal.notifyRead();
366
389
  if (this.#target) {
367
390
  return this.#target;
368
391
  }
@@ -390,6 +413,9 @@ export class RefImpl<T> implements Ref<T> {
390
413
  * @inheritdoc
391
414
  */
392
415
  async tryLoad(): Promise<T | undefined> {
416
+ if (this.#target) {
417
+ return this.#target;
418
+ }
393
419
  invariant(this.#resolver, 'Resolver is not set');
394
420
  return (await this.#resolver.resolve(this.#dxn)) as T | undefined;
395
421
  }
@@ -430,8 +456,27 @@ export class RefImpl<T> implements Ref<T> {
430
456
  return `Ref(${this.#dxn.toString()})`;
431
457
  }
432
458
 
459
+ [inspectCustom]: CustomInspectFunction = (depth, options, inspect) => {
460
+ return this.toString();
461
+ };
462
+
433
463
  [RefTypeId] = refVariance;
434
464
 
465
+ /**
466
+ * Effect Hash trait. Required for MutableHashMap-based caches (e.g., Atom.family)
467
+ * to deduplicate Ref instances that point to the same object.
468
+ * ECHO proxies return new RefImpl instances on every property access,
469
+ * so without this, each access would create a separate cache entry.
470
+ */
471
+ [Hash.symbol](): number {
472
+ return Hash.hash(this.#dxn.toString());
473
+ }
474
+
475
+ /** Effect Equal trait. See {@link Hash.symbol} for rationale. */
476
+ [Equal.symbol](that: Equal.Equal): boolean {
477
+ return that instanceof RefImpl && this.#dxn.toString() === that.dxn.toString();
478
+ }
479
+
435
480
  /**
436
481
  * Internal method to set the resolver.
437
482
  *
@@ -442,14 +487,16 @@ export class RefImpl<T> implements Ref<T> {
442
487
  }
443
488
 
444
489
  /**
445
- * Internal method to get the saved target.
446
- * Not the same as `target` which is resolved from the resolver.
447
- *
448
490
  * @internal
449
491
  */
450
492
  _getSavedTarget(): T | undefined {
451
493
  return this.#target;
452
494
  }
495
+
496
+ pipe() {
497
+ // eslint-disable-next-line prefer-rest-params
498
+ return Pipeable.pipeArguments(this, arguments);
499
+ }
453
500
  }
454
501
 
455
502
  /**
@@ -5,19 +5,18 @@
5
5
  import * as Schema from 'effect/Schema';
6
6
  import { describe, test } from 'vitest';
7
7
 
8
- import { FieldPath } from '../annotations';
9
- import { FormatAnnotation, TypeFormat } from '../formats';
10
- import { ECHO_ANNOTATIONS_NS_KEY, toJsonSchema } from '../json-schema';
11
- import { TypedObject } from '../object';
12
-
8
+ import { FieldPath } from '../Annotation';
9
+ import { EchoObjectSchema } from '../Entity';
10
+ import { FormatAnnotation, TypeFormat } from '../Format';
11
+ import { ECHO_ANNOTATIONS_NS_KEY, toJsonSchema } from '../JsonSchema';
13
12
  import { composeSchema } from './compose';
14
13
 
15
14
  describe('schema composition', () => {
16
15
  test('schema composition', ({ expect }) => {
17
- class BaseType extends TypedObject({ typename: 'example.com/Person', version: '0.1.0' })({
16
+ const BaseType = Schema.Struct({
18
17
  name: Schema.String,
19
18
  email: Schema.String,
20
- }) {}
19
+ }).pipe(EchoObjectSchema({ typename: 'com.example.person', version: '0.1.0' }));
21
20
 
22
21
  const OverlaySchema = Schema.Struct({
23
22
  email: Schema.String.pipe(FieldPath('$.email'), FormatAnnotation.set(TypeFormat.Email)),
@@ -2,19 +2,22 @@
2
2
  // Copyright 2024 DXOS.org
3
3
  //
4
4
 
5
- import { invariant } from '@dxos/invariant';
5
+ import type * as Types from 'effect/Types';
6
6
 
7
- import { type JsonSchemaType } from '../json-schema';
7
+ import { invariant } from '@dxos/invariant';
8
8
 
9
- import { getSnapshot } from './snapshot';
9
+ import { type JsonSchemaType } from '../JsonSchema';
10
10
 
11
11
  /**
12
12
  * Creates a composite schema from the source and projection schemas.
13
13
  */
14
14
  // TODO(burdon): Use effect schema projections.
15
15
  // TODO(burdon): Can avoid having to call this every time we modify any property on the view?
16
- export const composeSchema = (source: JsonSchemaType, target: JsonSchemaType): JsonSchemaType => {
17
- const result: JsonSchemaType = getSnapshot(target);
16
+ export const composeSchema = (
17
+ source: Types.Mutable<JsonSchemaType>,
18
+ target: Types.Mutable<JsonSchemaType>,
19
+ ): Types.Mutable<JsonSchemaType> => {
20
+ const result = structuredClone(target);
18
21
  invariant('type' in result && result.type === 'object', 'source schema must be an object');
19
22
  invariant('type' in source && source.type === 'object', 'target schema must be an object');
20
23
 
@@ -22,12 +25,13 @@ export const composeSchema = (source: JsonSchemaType, target: JsonSchemaType): J
22
25
  const propSchema = source.properties![prop]; // TODO(dmaretskyi): Find by json-path instead.
23
26
  const annotations = (propSchema as JsonSchemaType)?.annotations?.meta;
24
27
  if (annotations) {
25
- (result.properties[prop] as JsonSchemaType).annotations ??= {};
26
- (result.properties[prop] as JsonSchemaType).annotations!.meta ??= {};
28
+ const resultProp = result.properties[prop] as Record<string, any>;
29
+ resultProp.annotations ??= {};
30
+ resultProp.annotations.meta ??= {};
27
31
  for (const key in annotations) {
28
- (result.properties[prop] as JsonSchemaType).annotations!.meta![key] ??= {};
29
- Object.assign((result.properties[prop] as JsonSchemaType).annotations!.meta![key], annotations[key], {
30
- ...(result.properties[prop] as JsonSchemaType).annotations!.meta![key],
32
+ resultProp.annotations.meta[key] ??= {};
33
+ Object.assign(resultProp.annotations.meta[key], annotations[key], {
34
+ ...resultProp.annotations.meta[key],
31
35
  });
32
36
  }
33
37
  }