@dxos/echo 0.8.4-main.bc674ce → 0.8.4-main.bcb3aa67d6

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 (539) hide show
  1. package/README.md +2 -2
  2. package/dist/lib/neutral/Annotation.mjs +8 -3
  3. package/dist/lib/neutral/Database.mjs +36 -6
  4. package/dist/lib/neutral/Entity.mjs +18 -10
  5. package/dist/lib/neutral/Err.mjs +3 -1
  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 +45 -0
  9. package/dist/lib/neutral/Feed.mjs.map +7 -0
  10. package/dist/lib/neutral/Filter.mjs +19 -10
  11. package/dist/lib/neutral/Format.mjs +3 -3
  12. package/dist/lib/neutral/JsonSchema.mjs +9 -9
  13. package/dist/lib/neutral/Obj.mjs +35 -15
  14. package/dist/lib/neutral/Order.mjs +1 -1
  15. package/dist/lib/neutral/Query.mjs +21 -9
  16. package/dist/lib/neutral/Ref.mjs +9 -7
  17. package/dist/lib/neutral/Relation.mjs +20 -11
  18. package/dist/lib/neutral/SchemaRegistry.mjs +1 -1
  19. package/dist/lib/neutral/Tag.mjs +13 -10
  20. package/dist/lib/neutral/Type.mjs +13 -23
  21. package/dist/lib/neutral/chunk-24XI6DOL.mjs +34 -0
  22. package/dist/lib/neutral/chunk-24XI6DOL.mjs.map +7 -0
  23. package/dist/lib/neutral/{chunk-VB5HVDCA.mjs → chunk-4YAAHG3E.mjs} +53 -5
  24. package/dist/lib/neutral/chunk-4YAAHG3E.mjs.map +7 -0
  25. package/dist/lib/neutral/{chunk-CUDIBUM4.mjs → chunk-4ZRIO2QF.mjs} +104 -25
  26. package/dist/lib/neutral/chunk-4ZRIO2QF.mjs.map +7 -0
  27. package/dist/lib/neutral/{chunk-SU2LVM7J.mjs → chunk-7C2A2RP6.mjs} +1731 -2747
  28. package/dist/lib/neutral/chunk-7C2A2RP6.mjs.map +7 -0
  29. package/dist/lib/neutral/{chunk-4L6DOFXP.mjs → chunk-BNCCGLJN.mjs} +1 -1
  30. package/dist/lib/neutral/{chunk-4L6DOFXP.mjs.map → chunk-BNCCGLJN.mjs.map} +1 -1
  31. package/dist/lib/neutral/{chunk-2MTHJ5UW.mjs → chunk-CAB5PWUF.mjs} +134 -24
  32. package/dist/lib/neutral/chunk-CAB5PWUF.mjs.map +7 -0
  33. package/dist/lib/neutral/{chunk-62DWJ6CE.mjs → chunk-DQYLD2RB.mjs} +14 -14
  34. package/dist/lib/neutral/chunk-DQYLD2RB.mjs.map +7 -0
  35. package/dist/lib/neutral/{chunk-XMIDBDE6.mjs → chunk-DUTD5HFU.mjs} +11 -56
  36. package/dist/lib/neutral/chunk-DUTD5HFU.mjs.map +7 -0
  37. package/dist/lib/neutral/chunk-EKQJGGA3.mjs +396 -0
  38. package/dist/lib/neutral/chunk-EKQJGGA3.mjs.map +7 -0
  39. package/dist/lib/neutral/{chunk-VR4A4WGG.mjs → chunk-EOIR5O5I.mjs} +72 -23
  40. package/dist/lib/neutral/chunk-EOIR5O5I.mjs.map +7 -0
  41. package/dist/lib/neutral/{chunk-HMOXCO27.mjs → chunk-GVY6O76A.mjs} +8 -3
  42. package/dist/lib/neutral/chunk-GVY6O76A.mjs.map +7 -0
  43. package/dist/lib/neutral/{chunk-4TT624YA.mjs → chunk-GZQTCRJB.mjs} +2 -2
  44. package/dist/lib/neutral/{chunk-4TT624YA.mjs.map → chunk-GZQTCRJB.mjs.map} +1 -1
  45. package/dist/lib/neutral/chunk-HGHJ36DH.mjs +117 -0
  46. package/dist/lib/neutral/chunk-HGHJ36DH.mjs.map +7 -0
  47. package/dist/lib/neutral/{chunk-3ZEAZF7T.mjs → chunk-IICPQK3M.mjs} +8 -4
  48. package/dist/lib/neutral/chunk-IICPQK3M.mjs.map +7 -0
  49. package/dist/lib/neutral/{chunk-IP2GHXWA.mjs → chunk-NKPWM67P.mjs} +5 -5
  50. package/dist/lib/neutral/chunk-NKPWM67P.mjs.map +7 -0
  51. package/dist/lib/neutral/{chunk-6QPSGMEF.mjs → chunk-OPMZTWI3.mjs} +32 -8
  52. package/dist/lib/neutral/chunk-OPMZTWI3.mjs.map +7 -0
  53. package/dist/lib/neutral/{chunk-NWUO5FKZ.mjs → chunk-OPQEHU36.mjs} +8 -2
  54. package/dist/lib/neutral/chunk-OPQEHU36.mjs.map +7 -0
  55. package/dist/lib/neutral/chunk-QDV7C7VM.mjs +299 -0
  56. package/dist/lib/neutral/chunk-QDV7C7VM.mjs.map +7 -0
  57. package/dist/lib/neutral/{chunk-YQYMWZAD.mjs → chunk-TBKX6JQO.mjs} +4 -4
  58. package/dist/lib/neutral/chunk-TBKX6JQO.mjs.map +7 -0
  59. package/dist/lib/neutral/{chunk-RPB6V4BE.mjs → chunk-UBEZSGXY.mjs} +14 -1
  60. package/dist/lib/neutral/chunk-UBEZSGXY.mjs.map +7 -0
  61. package/dist/lib/neutral/{chunk-ROKO4RKJ.mjs → chunk-UI6MWK5W.mjs} +2 -2
  62. package/dist/lib/neutral/chunk-UI6MWK5W.mjs.map +7 -0
  63. package/dist/lib/neutral/chunk-XV5R2XZH.mjs +133 -0
  64. package/dist/lib/neutral/chunk-XV5R2XZH.mjs.map +7 -0
  65. package/dist/lib/neutral/chunk-YPGDBRPH.mjs +159 -0
  66. package/dist/lib/neutral/chunk-YPGDBRPH.mjs.map +7 -0
  67. package/dist/lib/neutral/chunk-YS6Q3XAD.mjs +50 -0
  68. package/dist/lib/neutral/chunk-YS6Q3XAD.mjs.map +7 -0
  69. package/dist/lib/neutral/chunk-ZCBOJ6I7.mjs +787 -0
  70. package/dist/lib/neutral/chunk-ZCBOJ6I7.mjs.map +7 -0
  71. package/dist/lib/neutral/index.mjs +42 -25
  72. package/dist/lib/neutral/internal/index.mjs +56 -38
  73. package/dist/lib/neutral/meta.json +1 -1
  74. package/dist/lib/neutral/testing/index.mjs +42 -34
  75. package/dist/lib/neutral/testing/index.mjs.map +3 -3
  76. package/dist/types/src/Annotation.d.ts +23 -1
  77. package/dist/types/src/Annotation.d.ts.map +1 -1
  78. package/dist/types/src/Collection.d.ts +16 -0
  79. package/dist/types/src/Collection.d.ts.map +1 -0
  80. package/dist/types/src/Database.d.ts +86 -84
  81. package/dist/types/src/Database.d.ts.map +1 -1
  82. package/dist/types/src/Dataset.d.ts +19 -0
  83. package/dist/types/src/Dataset.d.ts.map +1 -0
  84. package/dist/types/src/Entity.d.ts +41 -15
  85. package/dist/types/src/Entity.d.ts.map +1 -1
  86. package/dist/types/src/Err.d.ts +43 -0
  87. package/dist/types/src/Err.d.ts.map +1 -1
  88. package/dist/types/src/Extension.d.ts +80 -0
  89. package/dist/types/src/Extension.d.ts.map +1 -0
  90. package/dist/types/src/Extension.test.d.ts +2 -0
  91. package/dist/types/src/Extension.test.d.ts.map +1 -0
  92. package/dist/types/src/Feed.d.ts +163 -0
  93. package/dist/types/src/Feed.d.ts.map +1 -0
  94. package/dist/types/src/Filter.d.ts +21 -5
  95. package/dist/types/src/Filter.d.ts.map +1 -1
  96. package/dist/types/src/Filter.test.d.ts +2 -0
  97. package/dist/types/src/Filter.test.d.ts.map +1 -0
  98. package/dist/types/src/Format.d.ts +3 -3
  99. package/dist/types/src/Format.d.ts.map +1 -1
  100. package/dist/types/src/Hypergraph.d.ts +8 -3
  101. package/dist/types/src/Hypergraph.d.ts.map +1 -1
  102. package/dist/types/src/JsonSchema.d.ts +11 -4
  103. package/dist/types/src/JsonSchema.d.ts.map +1 -1
  104. package/dist/types/src/Obj.d.ts +158 -43
  105. package/dist/types/src/Obj.d.ts.map +1 -1
  106. package/dist/types/src/Order.d.ts.map +1 -1
  107. package/dist/types/src/Query.d.ts +109 -15
  108. package/dist/types/src/Query.d.ts.map +1 -1
  109. package/dist/types/src/Ref.d.ts +58 -10
  110. package/dist/types/src/Ref.d.ts.map +1 -1
  111. package/dist/types/src/Relation.d.ts +75 -28
  112. package/dist/types/src/Relation.d.ts.map +1 -1
  113. package/dist/types/src/SchemaRegistry.d.ts +4 -4
  114. package/dist/types/src/SchemaRegistry.d.ts.map +1 -1
  115. package/dist/types/src/Tag.d.ts +4 -3
  116. package/dist/types/src/Tag.d.ts.map +1 -1
  117. package/dist/types/src/Type.d.ts +51 -180
  118. package/dist/types/src/Type.d.ts.map +1 -1
  119. package/dist/types/src/View.d.ts +68 -0
  120. package/dist/types/src/View.d.ts.map +1 -0
  121. package/dist/types/src/hierarchy.test.d.ts +2 -0
  122. package/dist/types/src/hierarchy.test.d.ts.map +1 -0
  123. package/dist/types/src/index.d.ts +5 -0
  124. package/dist/types/src/index.d.ts.map +1 -1
  125. package/dist/types/src/internal/{annotations → Annotation}/annotations.d.ts +69 -8
  126. package/dist/types/src/internal/Annotation/annotations.d.ts.map +1 -0
  127. package/dist/types/src/internal/Annotation/annotations.test.d.ts.map +1 -0
  128. package/dist/types/src/internal/Annotation/index.d.ts +4 -0
  129. package/dist/types/src/internal/Annotation/index.d.ts.map +1 -0
  130. package/dist/types/src/internal/{api → Annotation}/sorting.d.ts +1 -1
  131. package/dist/types/src/internal/Annotation/sorting.d.ts.map +1 -0
  132. package/dist/types/src/internal/{annotations → Annotation}/util.d.ts +13 -1
  133. package/dist/types/src/internal/Annotation/util.d.ts.map +1 -0
  134. package/dist/types/src/internal/{api/entity.d.ts → Entity/api.d.ts} +2 -2
  135. package/dist/types/src/internal/Entity/api.d.ts.map +1 -0
  136. package/dist/types/src/internal/{entities → Entity}/entity.d.ts +3 -3
  137. package/dist/types/src/internal/Entity/entity.d.ts.map +1 -0
  138. package/dist/types/src/internal/{entities → Entity}/index.d.ts +2 -0
  139. package/dist/types/src/internal/Entity/index.d.ts.map +1 -0
  140. package/dist/types/src/internal/{entities → Entity}/model.d.ts +4 -26
  141. package/dist/types/src/internal/Entity/model.d.ts.map +1 -0
  142. package/dist/types/src/internal/{entities → Entity}/object.d.ts +2 -2
  143. package/dist/types/src/internal/Entity/object.d.ts.map +1 -0
  144. package/dist/types/src/internal/{entities → Entity}/relation.d.ts +3 -30
  145. package/dist/types/src/internal/Entity/relation.d.ts.map +1 -0
  146. package/dist/types/src/internal/Entity/util.d.ts.map +1 -0
  147. package/dist/types/src/internal/{api → Entity}/version.d.ts +1 -1
  148. package/dist/types/src/internal/Entity/version.d.ts.map +1 -0
  149. package/dist/types/src/internal/Format/date.d.ts.map +1 -0
  150. package/dist/types/src/internal/Format/date.test.d.ts.map +1 -0
  151. package/dist/types/src/internal/Format/format.d.ts.map +1 -0
  152. package/dist/types/src/internal/Format/format.test.d.ts.map +1 -0
  153. package/dist/types/src/internal/Format/index.d.ts.map +1 -0
  154. package/dist/types/src/internal/Format/number.d.ts.map +1 -0
  155. package/dist/types/src/internal/Format/object.d.ts.map +1 -0
  156. package/dist/types/src/internal/Format/select.d.ts.map +1 -0
  157. package/dist/types/src/internal/Format/string.d.ts.map +1 -0
  158. package/dist/types/src/internal/{formats → Format}/types.d.ts +1 -1
  159. package/dist/types/src/internal/Format/types.d.ts.map +1 -0
  160. package/dist/types/src/internal/{json-schema → JsonSchema}/annotations.d.ts +1 -1
  161. package/dist/types/src/internal/JsonSchema/annotations.d.ts.map +1 -0
  162. package/dist/types/src/internal/JsonSchema/effect-schema.test.d.ts.map +1 -0
  163. package/dist/types/src/internal/JsonSchema/index.d.ts.map +1 -0
  164. package/dist/types/src/internal/JsonSchema/json-schema-normalize.d.ts.map +1 -0
  165. package/dist/types/src/internal/{json-schema → JsonSchema}/json-schema-type.d.ts +19 -19
  166. package/dist/types/src/internal/JsonSchema/json-schema-type.d.ts.map +1 -0
  167. package/dist/types/src/internal/JsonSchema/json-schema.d.ts.map +1 -0
  168. package/dist/types/src/internal/JsonSchema/json-schema.test.d.ts.map +1 -0
  169. package/dist/types/src/internal/Obj/clone.d.ts.map +1 -0
  170. package/dist/types/src/internal/Obj/common.d.ts.map +1 -0
  171. package/dist/types/src/internal/{object → Obj}/create-object.d.ts +2 -2
  172. package/dist/types/src/internal/Obj/create-object.d.ts.map +1 -0
  173. package/dist/types/src/internal/Obj/create-object.test.d.ts.map +1 -0
  174. package/dist/types/src/internal/{object → Obj}/deleted.d.ts +1 -1
  175. package/dist/types/src/internal/Obj/deleted.d.ts.map +1 -0
  176. package/dist/types/src/internal/Obj/ids.d.ts.map +1 -0
  177. package/dist/types/src/internal/Obj/index.d.ts.map +1 -0
  178. package/dist/types/src/internal/Obj/inspect.d.ts.map +1 -0
  179. package/dist/types/src/internal/{object → Obj}/json-serializer.d.ts +12 -5
  180. package/dist/types/src/internal/Obj/json-serializer.d.ts.map +1 -0
  181. package/dist/types/src/internal/Obj/json-serializer.test.d.ts.map +1 -0
  182. package/dist/types/src/internal/Obj/schema-validator.d.ts +2 -0
  183. package/dist/types/src/internal/Obj/schema-validator.d.ts.map +1 -0
  184. package/dist/types/src/internal/Obj/schema-validator.test.d.ts.map +1 -0
  185. package/dist/types/src/internal/{object → Obj}/set-value.d.ts +1 -1
  186. package/dist/types/src/internal/Obj/set-value.d.ts.map +1 -0
  187. package/dist/types/src/internal/Obj/set-value.test.d.ts.map +1 -0
  188. package/dist/types/src/internal/Obj/snapshot.d.ts.map +1 -0
  189. package/dist/types/src/internal/{object → Obj}/typed-object.d.ts +4 -4
  190. package/dist/types/src/internal/Obj/typed-object.d.ts.map +1 -0
  191. package/dist/types/src/internal/Obj/typed-object.test.d.ts.map +1 -0
  192. package/dist/types/src/internal/Query.d.ts +10 -0
  193. package/dist/types/src/internal/Query.d.ts.map +1 -0
  194. package/dist/types/src/internal/Ref/index.d.ts.map +1 -0
  195. package/dist/types/src/internal/{ref → Ref}/ref-array.d.ts +1 -1
  196. package/dist/types/src/internal/Ref/ref-array.d.ts.map +1 -0
  197. package/dist/types/src/internal/{ref → Ref}/ref.d.ts +16 -3
  198. package/dist/types/src/internal/Ref/ref.d.ts.map +1 -0
  199. package/dist/types/src/internal/Ref/ref.test.d.ts.map +1 -0
  200. package/dist/types/src/internal/{schema → Type}/compose.d.ts +1 -1
  201. package/dist/types/src/internal/Type/compose.d.ts.map +1 -0
  202. package/dist/types/src/internal/Type/compose.test.d.ts.map +1 -0
  203. package/dist/types/src/internal/{schema → Type}/echo-schema.d.ts +8 -7
  204. package/dist/types/src/internal/Type/echo-schema.d.ts.map +1 -0
  205. package/dist/types/src/internal/Type/index.d.ts.map +1 -0
  206. package/dist/types/src/internal/Type/manipulation.d.ts.map +1 -0
  207. package/dist/types/src/internal/{schema → Type}/persistent-schema.d.ts +2 -2
  208. package/dist/types/src/internal/Type/persistent-schema.d.ts.map +1 -0
  209. package/dist/types/src/internal/{api → common/api}/index.d.ts +0 -4
  210. package/dist/types/src/internal/common/api/index.d.ts.map +1 -0
  211. package/dist/types/src/internal/common/api/meta.d.ts.map +1 -0
  212. package/dist/types/src/internal/common/index.d.ts +4 -0
  213. package/dist/types/src/internal/common/index.d.ts.map +1 -0
  214. package/dist/types/src/internal/common/proxy/change-context.d.ts.map +1 -0
  215. package/dist/types/src/internal/common/proxy/change.test.d.ts.map +1 -0
  216. package/dist/types/src/internal/common/proxy/define-hidden-property.d.ts.map +1 -0
  217. package/dist/types/src/internal/common/proxy/errors.d.ts.map +1 -0
  218. package/dist/types/src/internal/common/proxy/event-batch.d.ts.map +1 -0
  219. package/dist/types/src/internal/common/proxy/handler.test.d.ts.map +1 -0
  220. package/dist/types/src/internal/common/proxy/index.d.ts.map +1 -0
  221. package/dist/types/src/internal/common/proxy/json-serializer.d.ts.map +1 -0
  222. package/dist/types/src/internal/common/proxy/make-object.d.ts.map +1 -0
  223. package/dist/types/src/internal/common/proxy/ownership.d.ts.map +1 -0
  224. package/dist/types/src/internal/common/proxy/proxy-types.d.ts.map +1 -0
  225. package/dist/types/src/internal/common/proxy/proxy-utils.d.ts.map +1 -0
  226. package/dist/types/src/internal/common/proxy/reactive-array.d.ts.map +1 -0
  227. package/dist/types/src/internal/{proxy → common/proxy}/reactive.d.ts +1 -1
  228. package/dist/types/src/internal/common/proxy/reactive.d.ts.map +1 -0
  229. package/dist/types/src/internal/common/proxy/schema-validator.d.ts.map +1 -0
  230. package/dist/types/src/internal/common/proxy/schema.test.d.ts.map +1 -0
  231. package/dist/types/src/internal/common/proxy/symbols.d.ts.map +1 -0
  232. package/dist/types/src/internal/{proxy → common/proxy}/typed-handler.d.ts +2 -1
  233. package/dist/types/src/internal/common/proxy/typed-handler.d.ts.map +1 -0
  234. package/dist/types/src/internal/common/proxy/typed-handler.test.d.ts.map +1 -0
  235. package/dist/types/src/internal/common/proxy/typed-object.test.d.ts.map +1 -0
  236. package/dist/types/src/internal/{types → common/types}/base.d.ts +1 -0
  237. package/dist/types/src/internal/common/types/base.d.ts.map +1 -0
  238. package/dist/types/src/internal/{types → common/types}/entity.d.ts +2 -2
  239. package/dist/types/src/internal/common/types/entity.d.ts.map +1 -0
  240. package/dist/types/src/internal/{types → common/types}/index.d.ts +1 -0
  241. package/dist/types/src/internal/common/types/index.d.ts.map +1 -0
  242. package/dist/types/src/internal/{types → common/types}/meta.d.ts +2 -1
  243. package/dist/types/src/internal/common/types/meta.d.ts.map +1 -0
  244. package/dist/types/src/internal/common/types/model-symbols.d.ts +54 -0
  245. package/dist/types/src/internal/common/types/model-symbols.d.ts.map +1 -0
  246. package/dist/types/src/internal/{types → common/types}/typename.d.ts +8 -0
  247. package/dist/types/src/internal/common/types/typename.d.ts.map +1 -0
  248. package/dist/types/src/internal/{types → common/types}/version.d.ts +2 -2
  249. package/dist/types/src/internal/common/types/version.d.ts.map +1 -0
  250. package/dist/types/src/internal/index.d.ts +9 -10
  251. package/dist/types/src/internal/index.d.ts.map +1 -1
  252. package/dist/types/src/testing/test-schema.d.ts +19 -18
  253. package/dist/types/src/testing/test-schema.d.ts.map +1 -1
  254. package/dist/types/tsconfig.tsbuildinfo +1 -1
  255. package/package.json +24 -14
  256. package/src/Annotation.ts +31 -1
  257. package/src/Collection.ts +37 -0
  258. package/src/Database.ts +167 -173
  259. package/src/Dataset.ts +26 -0
  260. package/src/Entity.ts +73 -54
  261. package/src/Err.ts +22 -0
  262. package/src/Extension.test.ts +235 -0
  263. package/src/Extension.ts +122 -0
  264. package/src/Feed.ts +268 -0
  265. package/src/Filter.test.ts +90 -0
  266. package/src/Filter.ts +55 -7
  267. package/src/Format.ts +3 -3
  268. package/src/Hypergraph.ts +9 -4
  269. package/src/JsonSchema.ts +14 -4
  270. package/src/Obj.test.ts +69 -8
  271. package/src/Obj.ts +285 -140
  272. package/src/Order.ts +3 -1
  273. package/src/Query.test.ts +248 -15
  274. package/src/Query.ts +275 -24
  275. package/src/Ref.ts +64 -11
  276. package/src/Relation.test.ts +8 -2
  277. package/src/Relation.ts +165 -131
  278. package/src/SchemaRegistry.ts +5 -4
  279. package/src/Tag.ts +6 -5
  280. package/src/Type.test.ts +10 -10
  281. package/src/Type.ts +70 -303
  282. package/src/View.ts +107 -0
  283. package/src/hierarchy.test.ts +33 -0
  284. package/src/index.ts +5 -0
  285. package/src/internal/{annotations → Annotation}/annotations.test.ts +56 -6
  286. package/src/internal/{annotations → Annotation}/annotations.ts +134 -15
  287. package/src/internal/{annotations → Annotation}/index.ts +1 -0
  288. package/src/internal/{api → Annotation}/sorting.ts +2 -3
  289. package/src/internal/{annotations → Annotation}/util.ts +14 -1
  290. package/src/internal/{api/entity.ts → Entity/api.ts} +4 -2
  291. package/src/internal/{entities → Entity}/entity.ts +6 -4
  292. package/src/internal/{entities → Entity}/index.ts +2 -0
  293. package/src/internal/{entities → Entity}/model.ts +17 -42
  294. package/src/internal/{entities → Entity}/object.ts +2 -2
  295. package/src/internal/{entities → Entity}/relation.ts +19 -36
  296. package/src/internal/{api → Entity}/version.ts +3 -2
  297. package/src/internal/{formats → Format}/date.test.ts +1 -1
  298. package/src/internal/{formats → Format}/format.test.ts +1 -1
  299. package/src/internal/{formats → Format}/types.ts +3 -3
  300. package/src/internal/{json-schema → JsonSchema}/annotations.ts +3 -3
  301. package/src/internal/{json-schema → JsonSchema}/json-schema-type.ts +4 -4
  302. package/src/internal/{json-schema → JsonSchema}/json-schema.test.ts +48 -48
  303. package/src/internal/{json-schema → JsonSchema}/json-schema.ts +6 -4
  304. package/src/internal/{object → Obj}/clone.ts +3 -3
  305. package/src/internal/{object → Obj}/common.ts +2 -2
  306. package/src/internal/{object → Obj}/create-object.test.ts +4 -4
  307. package/src/internal/{object → Obj}/create-object.ts +5 -5
  308. package/src/internal/{object → Obj}/deleted.ts +2 -2
  309. package/src/internal/{object → Obj}/inspect.ts +2 -2
  310. package/src/internal/{object → Obj}/json-serializer.test.ts +31 -8
  311. package/src/internal/{object → Obj}/json-serializer.ts +42 -15
  312. package/src/internal/{object → Obj}/schema-validator.ts +1 -1
  313. package/src/internal/{object → Obj}/set-value.test.ts +24 -24
  314. package/src/internal/{object → Obj}/set-value.ts +2 -2
  315. package/src/internal/Obj/snapshot.ts +105 -0
  316. package/src/internal/{object → Obj}/typed-object.test.ts +3 -3
  317. package/src/internal/{object → Obj}/typed-object.ts +4 -4
  318. package/src/internal/Query.ts +132 -0
  319. package/src/internal/{ref → Ref}/ref-array.ts +1 -1
  320. package/src/internal/{ref → Ref}/ref.test.ts +4 -4
  321. package/src/internal/{ref → Ref}/ref.ts +27 -4
  322. package/src/internal/{schema → Type}/compose.test.ts +5 -5
  323. package/src/internal/{schema → Type}/compose.ts +1 -1
  324. package/src/internal/{schema → Type}/echo-schema.ts +11 -10
  325. package/src/internal/{schema → Type}/manipulation.ts +1 -1
  326. package/src/internal/{schema → Type}/persistent-schema.ts +10 -4
  327. package/src/internal/{README.md → common/README.md} +1 -1
  328. package/src/internal/{api → common/api}/index.ts +0 -4
  329. package/src/internal/common/index.ts +7 -0
  330. package/src/internal/{proxy → common/proxy}/change.test.ts +58 -58
  331. package/src/internal/{proxy → common/proxy}/handler.test.ts +2 -2
  332. package/src/internal/{proxy → common/proxy}/json-serializer.ts +6 -3
  333. package/src/internal/{proxy → common/proxy}/make-object.ts +13 -3
  334. package/src/internal/{proxy → common/proxy}/reactive.ts +1 -1
  335. package/src/internal/{proxy → common/proxy}/schema.test.ts +10 -10
  336. package/src/internal/{proxy → common/proxy}/typed-handler.test.ts +6 -6
  337. package/src/internal/{proxy → common/proxy}/typed-handler.ts +10 -3
  338. package/src/internal/{proxy → common/proxy}/typed-object.test.ts +4 -4
  339. package/src/internal/{types → common/types}/base.ts +1 -1
  340. package/src/internal/{types → common/types}/entity.ts +2 -2
  341. package/src/internal/{types → common/types}/index.ts +1 -0
  342. package/src/internal/{types → common/types}/meta.ts +4 -1
  343. package/src/internal/common/types/model-symbols.ts +69 -0
  344. package/src/internal/{types → common/types}/typename.ts +10 -0
  345. package/src/internal/{types → common/types}/version.ts +2 -3
  346. package/src/internal/index.ts +9 -31
  347. package/src/testing/api.test.ts +4 -4
  348. package/src/testing/test-schema.ts +20 -18
  349. package/dist/lib/neutral/chunk-2MTHJ5UW.mjs.map +0 -7
  350. package/dist/lib/neutral/chunk-3ZEAZF7T.mjs.map +0 -7
  351. package/dist/lib/neutral/chunk-62DWJ6CE.mjs.map +0 -7
  352. package/dist/lib/neutral/chunk-6QPSGMEF.mjs.map +0 -7
  353. package/dist/lib/neutral/chunk-CUDIBUM4.mjs.map +0 -7
  354. package/dist/lib/neutral/chunk-HMOXCO27.mjs.map +0 -7
  355. package/dist/lib/neutral/chunk-IP2GHXWA.mjs.map +0 -7
  356. package/dist/lib/neutral/chunk-KRHDMXSU.mjs +0 -132
  357. package/dist/lib/neutral/chunk-KRHDMXSU.mjs.map +0 -7
  358. package/dist/lib/neutral/chunk-NWUO5FKZ.mjs.map +0 -7
  359. package/dist/lib/neutral/chunk-ROKO4RKJ.mjs.map +0 -7
  360. package/dist/lib/neutral/chunk-RPB6V4BE.mjs.map +0 -7
  361. package/dist/lib/neutral/chunk-SU2LVM7J.mjs.map +0 -7
  362. package/dist/lib/neutral/chunk-VB5HVDCA.mjs.map +0 -7
  363. package/dist/lib/neutral/chunk-VR4A4WGG.mjs.map +0 -7
  364. package/dist/lib/neutral/chunk-X2MPMYYN.mjs +0 -13
  365. package/dist/lib/neutral/chunk-X2MPMYYN.mjs.map +0 -7
  366. package/dist/lib/neutral/chunk-XK5OUUBY.mjs +0 -157
  367. package/dist/lib/neutral/chunk-XK5OUUBY.mjs.map +0 -7
  368. package/dist/lib/neutral/chunk-XMIDBDE6.mjs.map +0 -7
  369. package/dist/lib/neutral/chunk-YQYMWZAD.mjs.map +0 -7
  370. package/dist/types/src/internal/annotations/annotations.d.ts.map +0 -1
  371. package/dist/types/src/internal/annotations/annotations.test.d.ts.map +0 -1
  372. package/dist/types/src/internal/annotations/index.d.ts +0 -3
  373. package/dist/types/src/internal/annotations/index.d.ts.map +0 -1
  374. package/dist/types/src/internal/annotations/util.d.ts.map +0 -1
  375. package/dist/types/src/internal/api/annotations.d.ts +0 -23
  376. package/dist/types/src/internal/api/annotations.d.ts.map +0 -1
  377. package/dist/types/src/internal/api/entity.d.ts.map +0 -1
  378. package/dist/types/src/internal/api/index.d.ts.map +0 -1
  379. package/dist/types/src/internal/api/meta.d.ts.map +0 -1
  380. package/dist/types/src/internal/api/sorting.d.ts.map +0 -1
  381. package/dist/types/src/internal/api/version.d.ts.map +0 -1
  382. package/dist/types/src/internal/entities/entity.d.ts.map +0 -1
  383. package/dist/types/src/internal/entities/index.d.ts.map +0 -1
  384. package/dist/types/src/internal/entities/model.d.ts.map +0 -1
  385. package/dist/types/src/internal/entities/object.d.ts.map +0 -1
  386. package/dist/types/src/internal/entities/relation.d.ts.map +0 -1
  387. package/dist/types/src/internal/entities/util.d.ts.map +0 -1
  388. package/dist/types/src/internal/formats/date.d.ts.map +0 -1
  389. package/dist/types/src/internal/formats/date.test.d.ts.map +0 -1
  390. package/dist/types/src/internal/formats/format.d.ts.map +0 -1
  391. package/dist/types/src/internal/formats/format.test.d.ts.map +0 -1
  392. package/dist/types/src/internal/formats/index.d.ts.map +0 -1
  393. package/dist/types/src/internal/formats/number.d.ts.map +0 -1
  394. package/dist/types/src/internal/formats/object.d.ts.map +0 -1
  395. package/dist/types/src/internal/formats/select.d.ts.map +0 -1
  396. package/dist/types/src/internal/formats/string.d.ts.map +0 -1
  397. package/dist/types/src/internal/formats/types.d.ts.map +0 -1
  398. package/dist/types/src/internal/json-schema/annotations.d.ts.map +0 -1
  399. package/dist/types/src/internal/json-schema/effect-schema.test.d.ts.map +0 -1
  400. package/dist/types/src/internal/json-schema/index.d.ts.map +0 -1
  401. package/dist/types/src/internal/json-schema/json-schema-normalize.d.ts.map +0 -1
  402. package/dist/types/src/internal/json-schema/json-schema-type.d.ts.map +0 -1
  403. package/dist/types/src/internal/json-schema/json-schema.d.ts.map +0 -1
  404. package/dist/types/src/internal/json-schema/json-schema.test.d.ts.map +0 -1
  405. package/dist/types/src/internal/object/clone.d.ts.map +0 -1
  406. package/dist/types/src/internal/object/common.d.ts.map +0 -1
  407. package/dist/types/src/internal/object/create-object.d.ts.map +0 -1
  408. package/dist/types/src/internal/object/create-object.test.d.ts.map +0 -1
  409. package/dist/types/src/internal/object/deleted.d.ts.map +0 -1
  410. package/dist/types/src/internal/object/ids.d.ts.map +0 -1
  411. package/dist/types/src/internal/object/index.d.ts.map +0 -1
  412. package/dist/types/src/internal/object/inspect.d.ts.map +0 -1
  413. package/dist/types/src/internal/object/json-serializer.d.ts.map +0 -1
  414. package/dist/types/src/internal/object/json-serializer.test.d.ts.map +0 -1
  415. package/dist/types/src/internal/object/schema-validator.d.ts +0 -2
  416. package/dist/types/src/internal/object/schema-validator.d.ts.map +0 -1
  417. package/dist/types/src/internal/object/schema-validator.test.d.ts.map +0 -1
  418. package/dist/types/src/internal/object/set-value.d.ts.map +0 -1
  419. package/dist/types/src/internal/object/set-value.test.d.ts.map +0 -1
  420. package/dist/types/src/internal/object/snapshot.d.ts.map +0 -1
  421. package/dist/types/src/internal/object/typed-object.d.ts.map +0 -1
  422. package/dist/types/src/internal/object/typed-object.test.d.ts.map +0 -1
  423. package/dist/types/src/internal/proxy/change-context.d.ts.map +0 -1
  424. package/dist/types/src/internal/proxy/change.test.d.ts.map +0 -1
  425. package/dist/types/src/internal/proxy/define-hidden-property.d.ts.map +0 -1
  426. package/dist/types/src/internal/proxy/errors.d.ts.map +0 -1
  427. package/dist/types/src/internal/proxy/event-batch.d.ts.map +0 -1
  428. package/dist/types/src/internal/proxy/handler.test.d.ts.map +0 -1
  429. package/dist/types/src/internal/proxy/index.d.ts.map +0 -1
  430. package/dist/types/src/internal/proxy/json-serializer.d.ts.map +0 -1
  431. package/dist/types/src/internal/proxy/make-object.d.ts.map +0 -1
  432. package/dist/types/src/internal/proxy/ownership.d.ts.map +0 -1
  433. package/dist/types/src/internal/proxy/proxy-types.d.ts.map +0 -1
  434. package/dist/types/src/internal/proxy/proxy-utils.d.ts.map +0 -1
  435. package/dist/types/src/internal/proxy/reactive-array.d.ts.map +0 -1
  436. package/dist/types/src/internal/proxy/reactive.d.ts.map +0 -1
  437. package/dist/types/src/internal/proxy/schema-validator.d.ts.map +0 -1
  438. package/dist/types/src/internal/proxy/schema.test.d.ts.map +0 -1
  439. package/dist/types/src/internal/proxy/symbols.d.ts.map +0 -1
  440. package/dist/types/src/internal/proxy/typed-handler.d.ts.map +0 -1
  441. package/dist/types/src/internal/proxy/typed-handler.test.d.ts.map +0 -1
  442. package/dist/types/src/internal/proxy/typed-object.test.d.ts.map +0 -1
  443. package/dist/types/src/internal/ref/index.d.ts.map +0 -1
  444. package/dist/types/src/internal/ref/ref-array.d.ts.map +0 -1
  445. package/dist/types/src/internal/ref/ref.d.ts.map +0 -1
  446. package/dist/types/src/internal/ref/ref.test.d.ts.map +0 -1
  447. package/dist/types/src/internal/schema/compose.d.ts.map +0 -1
  448. package/dist/types/src/internal/schema/compose.test.d.ts.map +0 -1
  449. package/dist/types/src/internal/schema/echo-schema.d.ts.map +0 -1
  450. package/dist/types/src/internal/schema/index.d.ts.map +0 -1
  451. package/dist/types/src/internal/schema/manipulation.d.ts.map +0 -1
  452. package/dist/types/src/internal/schema/persistent-schema.d.ts.map +0 -1
  453. package/dist/types/src/internal/types/base.d.ts.map +0 -1
  454. package/dist/types/src/internal/types/entity.d.ts.map +0 -1
  455. package/dist/types/src/internal/types/index.d.ts.map +0 -1
  456. package/dist/types/src/internal/types/meta.d.ts.map +0 -1
  457. package/dist/types/src/internal/types/typename.d.ts.map +0 -1
  458. package/dist/types/src/internal/types/version.d.ts.map +0 -1
  459. package/src/internal/api/annotations.ts +0 -60
  460. package/src/internal/object/snapshot.ts +0 -70
  461. /package/dist/types/src/internal/{annotations → Annotation}/annotations.test.d.ts +0 -0
  462. /package/dist/types/src/internal/{entities → Entity}/util.d.ts +0 -0
  463. /package/dist/types/src/internal/{formats → Format}/date.d.ts +0 -0
  464. /package/dist/types/src/internal/{formats → Format}/date.test.d.ts +0 -0
  465. /package/dist/types/src/internal/{formats → Format}/format.d.ts +0 -0
  466. /package/dist/types/src/internal/{formats → Format}/format.test.d.ts +0 -0
  467. /package/dist/types/src/internal/{formats → Format}/index.d.ts +0 -0
  468. /package/dist/types/src/internal/{formats → Format}/number.d.ts +0 -0
  469. /package/dist/types/src/internal/{formats → Format}/object.d.ts +0 -0
  470. /package/dist/types/src/internal/{formats → Format}/select.d.ts +0 -0
  471. /package/dist/types/src/internal/{formats → Format}/string.d.ts +0 -0
  472. /package/dist/types/src/internal/{json-schema → JsonSchema}/effect-schema.test.d.ts +0 -0
  473. /package/dist/types/src/internal/{json-schema → JsonSchema}/index.d.ts +0 -0
  474. /package/dist/types/src/internal/{json-schema → JsonSchema}/json-schema-normalize.d.ts +0 -0
  475. /package/dist/types/src/internal/{json-schema → JsonSchema}/json-schema.d.ts +0 -0
  476. /package/dist/types/src/internal/{json-schema → JsonSchema}/json-schema.test.d.ts +0 -0
  477. /package/dist/types/src/internal/{object → Obj}/clone.d.ts +0 -0
  478. /package/dist/types/src/internal/{object → Obj}/common.d.ts +0 -0
  479. /package/dist/types/src/internal/{object → Obj}/create-object.test.d.ts +0 -0
  480. /package/dist/types/src/internal/{object → Obj}/ids.d.ts +0 -0
  481. /package/dist/types/src/internal/{object → Obj}/index.d.ts +0 -0
  482. /package/dist/types/src/internal/{object → Obj}/inspect.d.ts +0 -0
  483. /package/dist/types/src/internal/{object → Obj}/json-serializer.test.d.ts +0 -0
  484. /package/dist/types/src/internal/{object → Obj}/schema-validator.test.d.ts +0 -0
  485. /package/dist/types/src/internal/{object → Obj}/set-value.test.d.ts +0 -0
  486. /package/dist/types/src/internal/{object → Obj}/snapshot.d.ts +0 -0
  487. /package/dist/types/src/internal/{object → Obj}/typed-object.test.d.ts +0 -0
  488. /package/dist/types/src/internal/{ref → Ref}/index.d.ts +0 -0
  489. /package/dist/types/src/internal/{ref → Ref}/ref.test.d.ts +0 -0
  490. /package/dist/types/src/internal/{schema → Type}/compose.test.d.ts +0 -0
  491. /package/dist/types/src/internal/{schema → Type}/index.d.ts +0 -0
  492. /package/dist/types/src/internal/{schema → Type}/manipulation.d.ts +0 -0
  493. /package/dist/types/src/internal/{api → common/api}/meta.d.ts +0 -0
  494. /package/dist/types/src/internal/{proxy → common/proxy}/change-context.d.ts +0 -0
  495. /package/dist/types/src/internal/{proxy → common/proxy}/change.test.d.ts +0 -0
  496. /package/dist/types/src/internal/{proxy → common/proxy}/define-hidden-property.d.ts +0 -0
  497. /package/dist/types/src/internal/{proxy → common/proxy}/errors.d.ts +0 -0
  498. /package/dist/types/src/internal/{proxy → common/proxy}/event-batch.d.ts +0 -0
  499. /package/dist/types/src/internal/{proxy → common/proxy}/handler.test.d.ts +0 -0
  500. /package/dist/types/src/internal/{proxy → common/proxy}/index.d.ts +0 -0
  501. /package/dist/types/src/internal/{proxy → common/proxy}/json-serializer.d.ts +0 -0
  502. /package/dist/types/src/internal/{proxy → common/proxy}/make-object.d.ts +0 -0
  503. /package/dist/types/src/internal/{proxy → common/proxy}/ownership.d.ts +0 -0
  504. /package/dist/types/src/internal/{proxy → common/proxy}/proxy-types.d.ts +0 -0
  505. /package/dist/types/src/internal/{proxy → common/proxy}/proxy-utils.d.ts +0 -0
  506. /package/dist/types/src/internal/{proxy → common/proxy}/reactive-array.d.ts +0 -0
  507. /package/dist/types/src/internal/{proxy → common/proxy}/schema-validator.d.ts +0 -0
  508. /package/dist/types/src/internal/{proxy → common/proxy}/schema.test.d.ts +0 -0
  509. /package/dist/types/src/internal/{proxy → common/proxy}/symbols.d.ts +0 -0
  510. /package/dist/types/src/internal/{proxy → common/proxy}/typed-handler.test.d.ts +0 -0
  511. /package/dist/types/src/internal/{proxy → common/proxy}/typed-object.test.d.ts +0 -0
  512. /package/src/internal/{entities → Entity}/util.ts +0 -0
  513. /package/src/internal/{formats → Format}/date.ts +0 -0
  514. /package/src/internal/{formats → Format}/format.ts +0 -0
  515. /package/src/internal/{formats → Format}/index.ts +0 -0
  516. /package/src/internal/{formats → Format}/number.ts +0 -0
  517. /package/src/internal/{formats → Format}/object.ts +0 -0
  518. /package/src/internal/{formats → Format}/select.ts +0 -0
  519. /package/src/internal/{formats → Format}/string.ts +0 -0
  520. /package/src/internal/{json-schema → JsonSchema}/effect-schema.test.ts +0 -0
  521. /package/src/internal/{json-schema → JsonSchema}/index.ts +0 -0
  522. /package/src/internal/{json-schema → JsonSchema}/json-schema-normalize.ts +0 -0
  523. /package/src/internal/{object → Obj}/ids.ts +0 -0
  524. /package/src/internal/{object → Obj}/index.ts +0 -0
  525. /package/src/internal/{object → Obj}/schema-validator.test.ts +0 -0
  526. /package/src/internal/{ref → Ref}/index.ts +0 -0
  527. /package/src/internal/{schema → Type}/index.ts +0 -0
  528. /package/src/internal/{api → common/api}/meta.ts +0 -0
  529. /package/src/internal/{proxy → common/proxy}/change-context.ts +0 -0
  530. /package/src/internal/{proxy → common/proxy}/define-hidden-property.ts +0 -0
  531. /package/src/internal/{proxy → common/proxy}/errors.ts +0 -0
  532. /package/src/internal/{proxy → common/proxy}/event-batch.ts +0 -0
  533. /package/src/internal/{proxy → common/proxy}/index.ts +0 -0
  534. /package/src/internal/{proxy → common/proxy}/ownership.ts +0 -0
  535. /package/src/internal/{proxy → common/proxy}/proxy-types.ts +0 -0
  536. /package/src/internal/{proxy → common/proxy}/proxy-utils.ts +0 -0
  537. /package/src/internal/{proxy → common/proxy}/reactive-array.ts +0 -0
  538. /package/src/internal/{proxy → common/proxy}/schema-validator.ts +0 -0
  539. /package/src/internal/{proxy → common/proxy}/symbols.ts +0 -0
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dxos/echo",
3
- "version": "0.8.4-main.bc674ce",
3
+ "version": "0.8.4-main.bcb3aa67d6",
4
4
  "description": "ECHO API",
5
5
  "homepage": "https://dxos.org",
6
6
  "bugs": "https://github.com/dxos/dxos/issues",
@@ -48,6 +48,11 @@
48
48
  "types": "./dist/types/src/Err.d.ts",
49
49
  "default": "./dist/lib/neutral/Err.mjs"
50
50
  },
51
+ "./Feed": {
52
+ "source": "./src/Feed.ts",
53
+ "types": "./dist/types/src/Feed.d.ts",
54
+ "default": "./dist/lib/neutral/Feed.mjs"
55
+ },
51
56
  "./Filter": {
52
57
  "source": "./src/Filter.ts",
53
58
  "types": "./dist/types/src/Filter.d.ts",
@@ -112,6 +117,11 @@
112
117
  "source": "./src/Type.ts",
113
118
  "types": "./dist/types/src/Type.d.ts",
114
119
  "default": "./dist/lib/neutral/Type.mjs"
120
+ },
121
+ "./Extension": {
122
+ "source": "./src/Extension.ts",
123
+ "types": "./dist/types/src/Extension.d.ts",
124
+ "default": "./dist/lib/neutral/Extension.mjs"
115
125
  }
116
126
  },
117
127
  "files": [
@@ -119,19 +129,19 @@
119
129
  "src"
120
130
  ],
121
131
  "dependencies": {
122
- "effect": "3.19.11",
123
- "@dxos/context": "0.8.4-main.bc674ce",
124
- "@dxos/debug": "0.8.4-main.bc674ce",
125
- "@dxos/echo-protocol": "0.8.4-main.bc674ce",
126
- "@dxos/effect": "0.8.4-main.bc674ce",
127
- "@dxos/errors": "0.8.4-main.bc674ce",
128
- "@dxos/invariant": "0.8.4-main.bc674ce",
129
- "@dxos/log": "0.8.4-main.bc674ce",
130
- "@dxos/keys": "0.8.4-main.bc674ce",
131
- "@dxos/node-std": "0.8.4-main.bc674ce",
132
- "@dxos/protocols": "0.8.4-main.bc674ce",
133
- "@dxos/async": "0.8.4-main.bc674ce",
134
- "@dxos/util": "0.8.4-main.bc674ce"
132
+ "effect": "3.20.0",
133
+ "@dxos/async": "0.8.4-main.bcb3aa67d6",
134
+ "@dxos/context": "0.8.4-main.bcb3aa67d6",
135
+ "@dxos/echo-protocol": "0.8.4-main.bcb3aa67d6",
136
+ "@dxos/debug": "0.8.4-main.bcb3aa67d6",
137
+ "@dxos/errors": "0.8.4-main.bcb3aa67d6",
138
+ "@dxos/effect": "0.8.4-main.bcb3aa67d6",
139
+ "@dxos/invariant": "0.8.4-main.bcb3aa67d6",
140
+ "@dxos/keys": "0.8.4-main.bcb3aa67d6",
141
+ "@dxos/log": "0.8.4-main.bcb3aa67d6",
142
+ "@dxos/util": "0.8.4-main.bcb3aa67d6",
143
+ "@dxos/node-std": "0.8.4-main.bcb3aa67d6",
144
+ "@dxos/protocols": "0.8.4-main.bcb3aa67d6"
135
145
  },
136
146
  "publishConfig": {
137
147
  "access": "public"
package/src/Annotation.ts CHANGED
@@ -2,6 +2,8 @@
2
2
  // Copyright 2025 DXOS.org
3
3
  //
4
4
 
5
+ // @import-as-namespace
6
+
5
7
  export {
6
8
  DescriptionAnnotation,
7
9
  FormInputAnnotation,
@@ -15,4 +17,32 @@ export {
15
17
  getTypeAnnotation,
16
18
  setDescriptionWithSchema,
17
19
  setLabelWithSchema,
18
- } from './internal/annotations';
20
+ IconAnnotation,
21
+ } from './internal/Annotation';
22
+
23
+ import type * as Schema from 'effect/Schema';
24
+
25
+ import * as internalAnnotations from './internal/Annotation';
26
+
27
+ interface MakeProps<T> {
28
+ id: string;
29
+ schema: Schema.Schema<T, any, never>;
30
+ }
31
+
32
+ /**
33
+ * Create a new schema annotation.
34
+ * Annotation can be assigned both to fields and to the schema itself.
35
+ * Annotation is serialized with the schema.
36
+ *
37
+ * @example
38
+ * ```ts
39
+ * const ColorAnnotation = Annotation.make({
40
+ * id: 'org.dxos.annotation.color',
41
+ * schema: Schema.String,
42
+ * });
43
+ *
44
+ * const schema = Schema.String.annotations(ColorAnnotation.set('red'));
45
+ * ```
46
+ */
47
+ export const make: <T>(props: MakeProps<T>) => internalAnnotations.AnnotationHelper<T> =
48
+ internalAnnotations.makeUserAnnotation;
@@ -0,0 +1,37 @@
1
+ //
2
+ // Copyright 2024 DXOS.org
3
+ //
4
+
5
+ // @import-as-namespace
6
+
7
+ import * as Schema from 'effect/Schema';
8
+
9
+ import * as internal from './internal';
10
+ import * as Annotation from './Annotation';
11
+ import * as Obj from './Obj';
12
+ import * as Ref from './Ref';
13
+ import * as Type from './Type';
14
+
15
+ /**
16
+ * A an ordered set of objects.
17
+ */
18
+ export const Collection = Schema.Struct({
19
+ name: Schema.String.pipe(Schema.optional),
20
+ objects: Schema.Array(Ref.Ref(Obj.Unknown)).pipe(internal.FormInputAnnotation.set(false)),
21
+ }).pipe(
22
+ Type.object({
23
+ typename: 'org.dxos.type.collection',
24
+ version: '0.1.0',
25
+ }),
26
+ Annotation.IconAnnotation.set({
27
+ icon: 'ph--folder--regular',
28
+ hue: 'neutral',
29
+ }),
30
+ );
31
+
32
+ export interface Collection extends Schema.Schema.Type<typeof Collection> {}
33
+
34
+ export const make = (props: Partial<Obj.MakeProps<typeof Collection>> = {}): Collection =>
35
+ Obj.make(Collection, { objects: [], ...props });
36
+
37
+ export const isCollection: (value: unknown) => value is Collection = Obj.instanceOf(Collection);
package/src/Database.ts CHANGED
@@ -2,6 +2,8 @@
2
2
  // Copyright 2025 DXOS.org
3
3
  //
4
4
 
5
+ // @import-as-namespace
6
+
5
7
  import * as Context from 'effect/Context';
6
8
  import * as Effect from 'effect/Effect';
7
9
  import * as Layer from 'effect/Layer';
@@ -9,71 +11,30 @@ import * as Option from 'effect/Option';
9
11
  import * as Schema from 'effect/Schema';
10
12
  import type * as Types from 'effect/Types';
11
13
 
12
- import { type QueryAST } from '@dxos/echo-protocol';
13
14
  import { promiseWithCauseCapture } from '@dxos/effect';
14
15
  import { invariant } from '@dxos/invariant';
15
- import { DXN, type PublicKey, type SpaceId } from '@dxos/keys';
16
- import { type QueryOptions as QueryOptionsProto } from '@dxos/protocols/proto/dxos/echo/filter';
16
+ import { DXN, type SpaceId } from '@dxos/keys';
17
17
 
18
18
  import type * as Entity from './Entity';
19
19
  import * as Err from './Err';
20
20
  import type * as Filter from './Filter';
21
21
  import type * as Hypergraph from './Hypergraph';
22
- import { isInstanceOf } from './internal/annotations';
23
- import type { Ref } from './internal/ref/ref';
24
- import { type AnyProperties } from './internal/types';
22
+ import { isInstanceOf } from './internal/Annotation';
23
+ import type { Ref } from './internal/Ref/ref';
24
+ import { type AnyProperties } from './internal/common/types';
25
25
  import type * as Obj from './Obj';
26
26
  import type * as Query from './Query';
27
27
  import type * as QueryResult from './QueryResult';
28
28
  import type * as SchemaRegistry from './SchemaRegistry';
29
29
  import type * as Type from './Type';
30
30
 
31
- /**
32
- * @deprecated Use `QueryAST.QueryOptions` instead.
33
- */
34
- export type QueryOptions = {
35
- /**
36
- * @deprecated Use `spaceIds` instead.
37
- */
38
- spaces?: PublicKey[];
39
-
40
- /**
41
- * Query only in specific spaces.
42
- */
43
- // TODO(dmaretskyi): Change this to SpaceId.
44
- spaceIds?: string[];
45
-
46
- /**
47
- * Return only the first `limit` results.
48
- */
49
- limit?: number;
50
-
51
- /**
52
- * Query only local spaces, or remote on agent.
53
- * @default `QueryOptions.DataLocation.LOCAL`
54
- *
55
- * Options:
56
- * - proto3_optional = true
57
- */
58
- // TODO(burdon): Remove?
59
- dataLocation?: QueryOptionsProto.DataLocation;
60
- };
61
-
62
31
  /**
63
32
  * `query` API function declaration.
64
33
  */
65
34
  // TODO(burdon): Reconcile Query and Filter (should only have one root type).
66
- // TODO(dmaretskyi): Remove query options.
67
35
  export interface QueryFn {
68
- <Q extends Query.Any>(
69
- query: Q,
70
- options?: (QueryAST.QueryOptions & QueryOptions) | undefined,
71
- ): QueryResult.QueryResult<Query.Type<Q>>;
72
-
73
- <F extends Filter.Any>(
74
- filter: F,
75
- options?: (QueryAST.QueryOptions & QueryOptions) | undefined,
76
- ): QueryResult.QueryResult<Filter.Type<F>>;
36
+ <Q extends Query.Any>(query: Q): QueryResult.QueryResult<Query.Type<Q>>;
37
+ <F extends Filter.Any>(filter: F): QueryResult.QueryResult<Filter.Type<F>>;
77
38
  }
78
39
 
79
40
  /**
@@ -110,7 +71,7 @@ export type FlushOptions = {
110
71
 
111
72
  /**
112
73
  * Wait for pending index updates.
113
- * @default false
74
+ * @default true
114
75
  */
115
76
  indexes?: boolean;
116
77
 
@@ -145,7 +106,10 @@ export interface Database extends Queryable {
145
106
  /**
146
107
  * Return object by local ID.
147
108
  */
148
- getObjectById<T extends Obj.Unknown = Obj.Obj<AnyProperties>>(id: string, opts?: GetObjectByIdOptions): T | undefined;
109
+ getObjectById<T extends Obj.Unknown = Obj.OfShape<AnyProperties>>(
110
+ id: string,
111
+ opts?: GetObjectByIdOptions,
112
+ ): T | undefined;
149
113
 
150
114
  /**
151
115
  * Query objects.
@@ -186,151 +150,181 @@ export const isDatabase = (obj: unknown): obj is Database => {
186
150
 
187
151
  export const Database: Schema.Schema<Database> = Schema.Any.pipe(Schema.filter((space) => isDatabase(space)));
188
152
 
153
+ /**
154
+ * Effect service tag for Database dependency injection.
155
+ */
189
156
  export class Service extends Context.Tag('@dxos/echo/Database/Service')<
190
157
  Service,
191
158
  {
192
159
  readonly db: Database;
193
160
  }
194
- >() {
195
- static notAvailable = Layer.succeed(Service, {
196
- get db(): Database {
197
- throw new Error('Database not available');
198
- },
199
- });
200
-
201
- static make = (db: Database): Context.Tag.Service<Service> => {
202
- return {
203
- get db() {
204
- return db;
205
- },
206
- };
207
- };
161
+ >() {}
162
+
163
+ /**
164
+ * Layer that provides a Database service that throws when accessed.
165
+ * Useful as a default layer when no database is available.
166
+ */
167
+ export const notAvailable = Layer.succeed(Service, {
168
+ get db(): Database {
169
+ throw new Error('Database not available');
170
+ },
171
+ });
208
172
 
209
- static layer = (db: Database): Layer.Layer<Service> => {
210
- return Layer.succeed(Service, Service.make(db));
173
+ /**
174
+ * Creates a Database service instance from a Database.
175
+ */
176
+ export const makeService = (db: Database): Context.Tag.Service<Service> => {
177
+ return {
178
+ get db() {
179
+ return db;
180
+ },
211
181
  };
182
+ };
212
183
 
213
- // TODO(dmaretskyi): Move all those to the top-level API of Database.ts module.
184
+ /**
185
+ * Creates a Layer that provides the Database service.
186
+ */
187
+ export const layer = (db: Database): Layer.Layer<Service> => {
188
+ return Layer.succeed(Service, makeService(db));
189
+ };
214
190
 
215
- /**
216
- * Returns the space ID of the database.
217
- */
218
- static spaceId = Effect.gen(function* () {
219
- const { db } = yield* Service;
220
- return db.spaceId;
221
- });
191
+ /**
192
+ * Returns the space ID of the database.
193
+ */
194
+ export const spaceId = Effect.gen(function* () {
195
+ const { db } = yield* Service;
196
+ return db.spaceId;
197
+ });
222
198
 
223
- /**
224
- * Resolves an object by its DXN.
225
- */
226
- static resolve: {
227
- // No type check.
228
- (ref: DXN | Ref<any>): Effect.Effect<Entity.Unknown, never, Service>;
229
- // Check matches schema.
230
- <S extends Type.Entity.Any>(
231
- ref: DXN | Ref<any>,
232
- schema: S,
233
- ): Effect.Effect<Schema.Schema.Type<S>, Err.ObjectNotFoundError, Service>;
234
- } = (<S extends Type.Entity.Any>(
199
+ /**
200
+ * Resolves an object by its DXN.
201
+ */
202
+ export const resolve: {
203
+ // No type check.
204
+ (ref: DXN | Ref<any>): Effect.Effect<Entity.Unknown, never, Service>;
205
+ // Check matches schema.
206
+ <S extends Type.AnyEntity>(
235
207
  ref: DXN | Ref<any>,
236
- schema?: S,
237
- ): Effect.Effect<Schema.Schema.Type<S>, Err.ObjectNotFoundError, Service> =>
238
- Effect.gen(function* () {
239
- const { db } = yield* Service;
240
- const dxn = ref instanceof DXN ? ref : ref.dxn;
241
- const object = yield* promiseWithCauseCapture(() =>
242
- db.graph
243
- .createRefResolver({
244
- context: {
245
- space: db.spaceId,
246
- },
247
- })
248
- .resolve(dxn),
249
- );
250
-
251
- if (!object) {
252
- return yield* Effect.fail(new Err.ObjectNotFoundError(dxn));
253
- }
254
- invariant(!schema || isInstanceOf(schema, object), 'Object type mismatch.');
255
- return object as any;
256
- })) as any;
208
+ schema: S,
209
+ ): Effect.Effect<Schema.Schema.Type<S>, Err.ObjectNotFoundError, Service>;
210
+ } = (<S extends Type.AnyEntity>(
211
+ ref: DXN | Ref<any>,
212
+ schema?: S,
213
+ ): Effect.Effect<Schema.Schema.Type<S>, Err.ObjectNotFoundError, Service> =>
214
+ Effect.gen(function* () {
215
+ const { db } = yield* Service;
216
+ const dxn = ref instanceof DXN ? ref : ref.dxn;
217
+ const object = yield* promiseWithCauseCapture(() =>
218
+ db.graph
219
+ .createRefResolver({
220
+ context: {
221
+ space: db.spaceId,
222
+ },
223
+ })
224
+ .resolve(dxn),
225
+ );
257
226
 
258
- /**
259
- * Loads an object reference.
260
- */
261
- static load: <T>(ref: Ref<T>) => Effect.Effect<T, Err.ObjectNotFoundError, never> = Effect.fn(function* (ref) {
262
- const object = yield* promiseWithCauseCapture(() => ref.tryLoad());
263
227
  if (!object) {
264
- return yield* Effect.fail(new Err.ObjectNotFoundError(ref.dxn));
228
+ return yield* Effect.fail(new Err.ObjectNotFoundError(dxn));
265
229
  }
266
- return object;
267
- });
230
+ invariant(!schema || isInstanceOf(schema, object), 'Object type mismatch.');
231
+ return object as any;
232
+ })) as any;
268
233
 
269
- /**
270
- * Loads an object reference option.
271
- */
272
- // TODO(dmaretskyi): Do we need this -- you can just use `Effect.catchTag` in calling code instead.
273
- static loadOption: <T>(ref: Ref<T>) => Effect.Effect<Option.Option<T>, never, never> = Effect.fn(function* (ref) {
274
- const object = yield* Service.load(ref).pipe(
275
- Effect.catchTag('ObjectNotFoundError', () => Effect.succeed(undefined)),
276
- );
234
+ /**
235
+ * Loads an object reference.
236
+ */
237
+ export const load: <T>(ref: Ref<T>) => Effect.Effect<T, Err.ObjectNotFoundError, never> = Effect.fn(function* (ref) {
238
+ const object = yield* promiseWithCauseCapture(() => ref.tryLoad());
239
+ if (!object) {
240
+ return yield* Effect.fail(new Err.ObjectNotFoundError(ref.dxn));
241
+ }
242
+ return object;
243
+ });
277
244
 
278
- return Option.fromNullable(object);
279
- });
245
+ /**
246
+ * Loads an object reference option.
247
+ */
248
+ // TODO(dmaretskyi): Do we need this -- you can just use `Effect.catchTag` in calling code instead.
249
+ export const loadOption: <T>(ref: Ref<T>) => Effect.Effect<Option.Option<T>, never, never> = Effect.fn(function* (ref) {
250
+ const object = yield* load(ref).pipe(Effect.catchTag('ObjectNotFoundError', () => Effect.succeed(undefined)));
280
251
 
281
- /**
282
- * @link EchoDatabase.add
283
- */
284
- static add = <T extends Entity.Unknown>(obj: T): Effect.Effect<T, never, Service> =>
285
- Service.pipe(Effect.map(({ db }) => db.add(obj)));
252
+ return Option.fromNullable(object);
253
+ });
286
254
 
287
- /**
288
- * @link EchoDatabase.remove
289
- */
290
- static remove = <T extends Entity.Unknown>(obj: T): Effect.Effect<void, never, Service> =>
291
- Service.pipe(Effect.map(({ db }) => db.remove(obj)));
255
+ /**
256
+ * Adds an object to the database.
257
+ * @see {@link Database.add}
258
+ */
259
+ export const add = <T extends Entity.Unknown>(obj: T): Effect.Effect<T, never, Service> =>
260
+ Service.pipe(Effect.map(({ db }) => db.add(obj)));
292
261
 
293
- /**
294
- * @link EchoDatabase.flush
295
- */
296
- static flush = (opts?: FlushOptions) =>
297
- Service.pipe(Effect.flatMap(({ db }) => promiseWithCauseCapture(() => db.flush(opts))));
262
+ /**
263
+ * Removes an object from the database.
264
+ * @see {@link Database.remove}
265
+ */
266
+ export const remove = <T extends Entity.Unknown>(obj: T): Effect.Effect<void, never, Service> =>
267
+ Service.pipe(Effect.map(({ db }) => db.remove(obj)));
298
268
 
299
- /**
300
- * Creates a `QueryResult` object that can be subscribed to.
301
- */
302
- static query: {
303
- <Q extends Query.Any>(query: Q): Effect.Effect<QueryResult.QueryResult<Query.Type<Q>>, never, Service>;
304
- <F extends Filter.Any>(filter: F): Effect.Effect<QueryResult.QueryResult<Filter.Type<F>>, never, Service>;
305
- } = (queryOrFilter: Query.Any | Filter.Any) =>
306
- Service.pipe(
307
- Effect.map(({ db }) => db.query(queryOrFilter as any) as QueryResult.QueryResult<any>),
308
- Effect.withSpan('Service.query'),
309
- );
269
+ /**
270
+ * Flushes pending changes to disk.
271
+ * @see {@link Database.flush}
272
+ */
273
+ export const flush = (opts?: FlushOptions) =>
274
+ Service.pipe(Effect.flatMap(({ db }) => promiseWithCauseCapture(() => db.flush(opts))));
310
275
 
311
- /**
312
- * Executes the query once and returns the results.
313
- */
314
- static runQuery: {
315
- <Q extends Query.Any>(query: Q): Effect.Effect<Query.Type<Q>[], never, Service>;
316
- <F extends Filter.Any>(filter: F): Effect.Effect<Filter.Type<F>[], never, Service>;
317
- } = (queryOrFilter: Query.Any | Filter.Any) =>
318
- Service.query(queryOrFilter as any).pipe(
319
- Effect.flatMap((queryResult) => promiseWithCauseCapture(() => queryResult.run())),
320
- );
276
+ /**
277
+ * Creates a `QueryResult` object that can be subscribed to.
278
+ */
279
+ export const query: {
280
+ <Q extends Query.Any>(query: Q): Effect.Effect<QueryResult.QueryResult<Query.Type<Q>>, never, Service>;
281
+ <F extends Filter.Any>(filter: F): Effect.Effect<QueryResult.QueryResult<Filter.Type<F>>, never, Service>;
282
+ } = (queryOrFilter: Query.Any | Filter.Any) =>
283
+ Service.pipe(
284
+ Effect.map(({ db }) => db.query(queryOrFilter as any) as QueryResult.QueryResult<any>),
285
+ Effect.withSpan('Database.query'),
286
+ );
321
287
 
322
- // TODO(dmaretskyi): Change API to `yield* Service.querySchema(...).first` and `yield* Service.querySchema(...).schema`.
288
+ /**
289
+ * Executes the query once and returns the results.
290
+ */
291
+ export const runQuery: {
292
+ <Q extends Query.Any>(query: Q): Effect.Effect<Query.Type<Q>[], never, Service>;
293
+ <F extends Filter.Any>(filter: F): Effect.Effect<Filter.Type<F>[], never, Service>;
294
+ } = (queryOrFilter: Query.Any | Filter.Any) =>
295
+ query(queryOrFilter as any).pipe(Effect.flatMap((queryResult) => promiseWithCauseCapture(() => queryResult.run())));
323
296
 
324
- static schemaQuery = <Q extends Types.NoExcessProperties<SchemaRegistry.Query, Q>>(
325
- query?: Q & SchemaRegistry.Query,
326
- ): Effect.Effect<QueryResult.QueryResult<SchemaRegistry.ExtractQueryResult<Q>>, never, Service> =>
327
- Service.pipe(
328
- Effect.map(({ db }) => db.schemaRegistry.query(query)),
329
- Effect.withSpan('Service.schemaQuery'),
330
- );
297
+ /**
298
+ * Executes the query once and returns the first result as or None.
299
+ */
300
+ export const runQueryFirst: {
301
+ <Q extends Query.Any>(query: Q): Effect.Effect<Option.Option<Query.Type<Q>>, never, Service>;
302
+ <F extends Filter.Any>(filter: F): Effect.Effect<Option.Option<Filter.Type<F>>, never, Service>;
303
+ } = (queryOrFilter: Query.Any | Filter.Any) =>
304
+ query(queryOrFilter as any).pipe(
305
+ Effect.flatMap((queryResult) =>
306
+ promiseWithCauseCapture(async () => Option.fromNullable(await queryResult.firstOrUndefined())),
307
+ ),
308
+ );
331
309
 
332
- static runSchemaQuery = <Q extends Types.NoExcessProperties<SchemaRegistry.Query, Q>>(
333
- query?: Q & SchemaRegistry.Query,
334
- ): Effect.Effect<SchemaRegistry.ExtractQueryResult<Q>[], never, Service> =>
335
- Service.schemaQuery(query).pipe(Effect.flatMap((queryResult) => promiseWithCauseCapture(() => queryResult.run())));
336
- }
310
+ /**
311
+ * Creates a schema query result that can be subscribed to.
312
+ */
313
+ // TODO(dmaretskyi): Change API to `yield* Database.querySchema(...).first` and `yield* Database.querySchema(...).schema`.
314
+ export const schemaQuery = <Q extends Types.NoExcessProperties<SchemaRegistry.Query, Q>>(
315
+ schemaQueryOptions?: Q & SchemaRegistry.Query,
316
+ ): Effect.Effect<QueryResult.QueryResult<SchemaRegistry.ExtractQueryResult<Q>>, never, Service> =>
317
+ Service.pipe(
318
+ Effect.map(({ db }) => db.schemaRegistry.query(schemaQueryOptions)),
319
+ Effect.withSpan('Database.schemaQuery'),
320
+ );
321
+
322
+ /**
323
+ * Executes a schema query once and returns the results.
324
+ */
325
+ export const runSchemaQuery = <Q extends Types.NoExcessProperties<SchemaRegistry.Query, Q>>(
326
+ schemaQueryOptions?: Q & SchemaRegistry.Query,
327
+ ): Effect.Effect<SchemaRegistry.ExtractQueryResult<Q>[], never, Service> =>
328
+ schemaQuery(schemaQueryOptions).pipe(
329
+ Effect.flatMap((queryResult) => promiseWithCauseCapture(() => queryResult.run())),
330
+ );
package/src/Dataset.ts ADDED
@@ -0,0 +1,26 @@
1
+ //
2
+ // Copyright 2026 DXOS.org
3
+ //
4
+
5
+ // @import-as-namespace
6
+
7
+ import { pipe } from 'effect/Function';
8
+ import * as Predicate from 'effect/Predicate';
9
+ import * as Schema from 'effect/Schema';
10
+
11
+ import * as Collection from './Collection';
12
+ import * as Feed from './Feed';
13
+ import * as Obj from './Obj';
14
+ import * as View from './View';
15
+
16
+ /**
17
+ * Abstart set of objects, represented by a view, feed, or collection.
18
+ */
19
+ export const Dataset = Schema.Union(Feed.Feed, Collection.Collection, View.View);
20
+ export type Dataset = Feed.Feed | Collection.Collection | View.View;
21
+
22
+ export const isDataset: (value: unknown) => value is Dataset = pipe(
23
+ Obj.instanceOf(Feed.Feed),
24
+ Predicate.or(Obj.instanceOf(Collection.Collection)),
25
+ Predicate.or(Obj.instanceOf(View.View)),
26
+ );