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

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 (523) hide show
  1. package/README.md +2 -2
  2. package/dist/lib/neutral/Annotation.mjs +8 -3
  3. package/dist/lib/neutral/Database.mjs +34 -6
  4. package/dist/lib/neutral/Entity.mjs +18 -10
  5. package/dist/lib/neutral/Err.mjs +3 -1
  6. package/dist/lib/neutral/Feed.mjs +47 -0
  7. package/dist/lib/neutral/Feed.mjs.map +7 -0
  8. package/dist/lib/neutral/Filter.mjs +11 -8
  9. package/dist/lib/neutral/Format.mjs +3 -3
  10. package/dist/lib/neutral/JsonSchema.mjs +9 -9
  11. package/dist/lib/neutral/Obj.mjs +35 -15
  12. package/dist/lib/neutral/Order.mjs +1 -1
  13. package/dist/lib/neutral/Query.mjs +19 -9
  14. package/dist/lib/neutral/Ref.mjs +9 -7
  15. package/dist/lib/neutral/Relation.mjs +20 -11
  16. package/dist/lib/neutral/SchemaRegistry.mjs +1 -1
  17. package/dist/lib/neutral/Tag.mjs +13 -10
  18. package/dist/lib/neutral/Type.mjs +13 -23
  19. package/dist/lib/neutral/chunk-43Y5DOS6.mjs +396 -0
  20. package/dist/lib/neutral/chunk-43Y5DOS6.mjs.map +7 -0
  21. package/dist/lib/neutral/{chunk-2MTHJ5UW.mjs → chunk-4JRI2ZJI.mjs} +134 -24
  22. package/dist/lib/neutral/chunk-4JRI2ZJI.mjs.map +7 -0
  23. package/dist/lib/neutral/chunk-6DNYDXCV.mjs +159 -0
  24. package/dist/lib/neutral/chunk-6DNYDXCV.mjs.map +7 -0
  25. package/dist/lib/neutral/chunk-6GPU7XC3.mjs +283 -0
  26. package/dist/lib/neutral/chunk-6GPU7XC3.mjs.map +7 -0
  27. package/dist/lib/neutral/{chunk-IP2GHXWA.mjs → chunk-6K2MVI2O.mjs} +5 -5
  28. package/dist/lib/neutral/chunk-6K2MVI2O.mjs.map +7 -0
  29. package/dist/lib/neutral/chunk-7VNVH63N.mjs +106 -0
  30. package/dist/lib/neutral/chunk-7VNVH63N.mjs.map +7 -0
  31. package/dist/lib/neutral/{chunk-62DWJ6CE.mjs → chunk-B5OXLWZL.mjs} +14 -14
  32. package/dist/lib/neutral/chunk-B5OXLWZL.mjs.map +7 -0
  33. package/dist/lib/neutral/{chunk-4L6DOFXP.mjs → chunk-BNCCGLJN.mjs} +1 -1
  34. package/dist/lib/neutral/{chunk-4L6DOFXP.mjs.map → chunk-BNCCGLJN.mjs.map} +1 -1
  35. package/dist/lib/neutral/chunk-BOZZPUXE.mjs +787 -0
  36. package/dist/lib/neutral/chunk-BOZZPUXE.mjs.map +7 -0
  37. package/dist/lib/neutral/{chunk-SU2LVM7J.mjs → chunk-C4JZK4J7.mjs} +1596 -2730
  38. package/dist/lib/neutral/chunk-C4JZK4J7.mjs.map +7 -0
  39. package/dist/lib/neutral/{chunk-HMOXCO27.mjs → chunk-FXEG7EOK.mjs} +8 -3
  40. package/dist/lib/neutral/chunk-FXEG7EOK.mjs.map +7 -0
  41. package/dist/lib/neutral/{chunk-4TT624YA.mjs → chunk-FZO7LQO7.mjs} +2 -2
  42. package/dist/lib/neutral/{chunk-4TT624YA.mjs.map → chunk-FZO7LQO7.mjs.map} +1 -1
  43. package/dist/lib/neutral/chunk-NEGC54NE.mjs +130 -0
  44. package/dist/lib/neutral/chunk-NEGC54NE.mjs.map +7 -0
  45. package/dist/lib/neutral/{chunk-VB5HVDCA.mjs → chunk-NXMFBIT5.mjs} +16 -4
  46. package/dist/lib/neutral/chunk-NXMFBIT5.mjs.map +7 -0
  47. package/dist/lib/neutral/{chunk-NWUO5FKZ.mjs → chunk-OENWMTE6.mjs} +8 -2
  48. package/dist/lib/neutral/chunk-OENWMTE6.mjs.map +7 -0
  49. package/dist/lib/neutral/{chunk-6QPSGMEF.mjs → chunk-ROAGDPV7.mjs} +32 -8
  50. package/dist/lib/neutral/chunk-ROAGDPV7.mjs.map +7 -0
  51. package/dist/lib/neutral/{chunk-CUDIBUM4.mjs → chunk-SEMVAGBM.mjs} +97 -24
  52. package/dist/lib/neutral/chunk-SEMVAGBM.mjs.map +7 -0
  53. package/dist/lib/neutral/{chunk-RPB6V4BE.mjs → chunk-UBEZSGXY.mjs} +14 -1
  54. package/dist/lib/neutral/chunk-UBEZSGXY.mjs.map +7 -0
  55. package/dist/lib/neutral/{chunk-ROKO4RKJ.mjs → chunk-UI6MWK5W.mjs} +2 -2
  56. package/dist/lib/neutral/chunk-UI6MWK5W.mjs.map +7 -0
  57. package/dist/lib/neutral/{chunk-3ZEAZF7T.mjs → chunk-UTBRYVQC.mjs} +8 -4
  58. package/dist/lib/neutral/chunk-UTBRYVQC.mjs.map +7 -0
  59. package/dist/lib/neutral/{chunk-VR4A4WGG.mjs → chunk-W47JKR3X.mjs} +72 -23
  60. package/dist/lib/neutral/chunk-W47JKR3X.mjs.map +7 -0
  61. package/dist/lib/neutral/{chunk-YQYMWZAD.mjs → chunk-WYOKA6AE.mjs} +4 -4
  62. package/dist/lib/neutral/chunk-WYOKA6AE.mjs.map +7 -0
  63. package/dist/lib/neutral/{chunk-XMIDBDE6.mjs → chunk-YMNSMKKW.mjs} +11 -56
  64. package/dist/lib/neutral/chunk-YMNSMKKW.mjs.map +7 -0
  65. package/dist/lib/neutral/chunk-YWXWXIE5.mjs +34 -0
  66. package/dist/lib/neutral/chunk-YWXWXIE5.mjs.map +7 -0
  67. package/dist/lib/neutral/index.mjs +39 -26
  68. package/dist/lib/neutral/internal/index.mjs +52 -38
  69. package/dist/lib/neutral/meta.json +1 -1
  70. package/dist/lib/neutral/testing/index.mjs +41 -34
  71. package/dist/lib/neutral/testing/index.mjs.map +3 -3
  72. package/dist/types/src/Annotation.d.ts +23 -1
  73. package/dist/types/src/Annotation.d.ts.map +1 -1
  74. package/dist/types/src/Collection.d.ts +16 -0
  75. package/dist/types/src/Collection.d.ts.map +1 -0
  76. package/dist/types/src/Database.d.ts +79 -84
  77. package/dist/types/src/Database.d.ts.map +1 -1
  78. package/dist/types/src/Dataset.d.ts +18 -0
  79. package/dist/types/src/Dataset.d.ts.map +1 -0
  80. package/dist/types/src/Entity.d.ts +38 -12
  81. package/dist/types/src/Entity.d.ts.map +1 -1
  82. package/dist/types/src/Err.d.ts +43 -0
  83. package/dist/types/src/Err.d.ts.map +1 -1
  84. package/dist/types/src/Feed.d.ts +165 -0
  85. package/dist/types/src/Feed.d.ts.map +1 -0
  86. package/dist/types/src/Filter.d.ts +1 -1
  87. package/dist/types/src/Filter.d.ts.map +1 -1
  88. package/dist/types/src/Format.d.ts +3 -3
  89. package/dist/types/src/Format.d.ts.map +1 -1
  90. package/dist/types/src/Hypergraph.d.ts +8 -3
  91. package/dist/types/src/Hypergraph.d.ts.map +1 -1
  92. package/dist/types/src/JsonSchema.d.ts +11 -4
  93. package/dist/types/src/JsonSchema.d.ts.map +1 -1
  94. package/dist/types/src/Obj.d.ts +151 -36
  95. package/dist/types/src/Obj.d.ts.map +1 -1
  96. package/dist/types/src/Order.d.ts.map +1 -1
  97. package/dist/types/src/Query.d.ts +101 -14
  98. package/dist/types/src/Query.d.ts.map +1 -1
  99. package/dist/types/src/Ref.d.ts +58 -10
  100. package/dist/types/src/Ref.d.ts.map +1 -1
  101. package/dist/types/src/Relation.d.ts +73 -26
  102. package/dist/types/src/Relation.d.ts.map +1 -1
  103. package/dist/types/src/SchemaRegistry.d.ts +4 -4
  104. package/dist/types/src/SchemaRegistry.d.ts.map +1 -1
  105. package/dist/types/src/Tag.d.ts +4 -3
  106. package/dist/types/src/Tag.d.ts.map +1 -1
  107. package/dist/types/src/Type.d.ts +51 -180
  108. package/dist/types/src/Type.d.ts.map +1 -1
  109. package/dist/types/src/View.d.ts +68 -0
  110. package/dist/types/src/View.d.ts.map +1 -0
  111. package/dist/types/src/hierarchy.test.d.ts +2 -0
  112. package/dist/types/src/hierarchy.test.d.ts.map +1 -0
  113. package/dist/types/src/index.d.ts +4 -0
  114. package/dist/types/src/index.d.ts.map +1 -1
  115. package/dist/types/src/internal/{annotations → Annotation}/annotations.d.ts +68 -8
  116. package/dist/types/src/internal/Annotation/annotations.d.ts.map +1 -0
  117. package/dist/types/src/internal/Annotation/annotations.test.d.ts.map +1 -0
  118. package/dist/types/src/internal/Annotation/index.d.ts +4 -0
  119. package/dist/types/src/internal/Annotation/index.d.ts.map +1 -0
  120. package/dist/types/src/internal/{api → Annotation}/sorting.d.ts +1 -1
  121. package/dist/types/src/internal/Annotation/sorting.d.ts.map +1 -0
  122. package/dist/types/src/internal/{annotations → Annotation}/util.d.ts +13 -1
  123. package/dist/types/src/internal/Annotation/util.d.ts.map +1 -0
  124. package/dist/types/src/internal/{api/entity.d.ts → Entity/api.d.ts} +2 -2
  125. package/dist/types/src/internal/Entity/api.d.ts.map +1 -0
  126. package/dist/types/src/internal/{entities → Entity}/entity.d.ts +3 -3
  127. package/dist/types/src/internal/Entity/entity.d.ts.map +1 -0
  128. package/dist/types/src/internal/{entities → Entity}/index.d.ts +2 -0
  129. package/dist/types/src/internal/Entity/index.d.ts.map +1 -0
  130. package/dist/types/src/internal/{entities → Entity}/model.d.ts +4 -26
  131. package/dist/types/src/internal/Entity/model.d.ts.map +1 -0
  132. package/dist/types/src/internal/{entities → Entity}/object.d.ts +2 -2
  133. package/dist/types/src/internal/Entity/object.d.ts.map +1 -0
  134. package/dist/types/src/internal/{entities → Entity}/relation.d.ts +3 -30
  135. package/dist/types/src/internal/Entity/relation.d.ts.map +1 -0
  136. package/dist/types/src/internal/Entity/util.d.ts.map +1 -0
  137. package/dist/types/src/internal/{api → Entity}/version.d.ts +1 -1
  138. package/dist/types/src/internal/Entity/version.d.ts.map +1 -0
  139. package/dist/types/src/internal/Format/date.d.ts.map +1 -0
  140. package/dist/types/src/internal/Format/date.test.d.ts.map +1 -0
  141. package/dist/types/src/internal/Format/format.d.ts.map +1 -0
  142. package/dist/types/src/internal/Format/format.test.d.ts.map +1 -0
  143. package/dist/types/src/internal/Format/index.d.ts.map +1 -0
  144. package/dist/types/src/internal/Format/number.d.ts.map +1 -0
  145. package/dist/types/src/internal/Format/object.d.ts.map +1 -0
  146. package/dist/types/src/internal/Format/select.d.ts.map +1 -0
  147. package/dist/types/src/internal/Format/string.d.ts.map +1 -0
  148. package/dist/types/src/internal/{formats → Format}/types.d.ts +1 -1
  149. package/dist/types/src/internal/Format/types.d.ts.map +1 -0
  150. package/dist/types/src/internal/{json-schema → JsonSchema}/annotations.d.ts +1 -1
  151. package/dist/types/src/internal/JsonSchema/annotations.d.ts.map +1 -0
  152. package/dist/types/src/internal/JsonSchema/effect-schema.test.d.ts.map +1 -0
  153. package/dist/types/src/internal/JsonSchema/index.d.ts.map +1 -0
  154. package/dist/types/src/internal/JsonSchema/json-schema-normalize.d.ts.map +1 -0
  155. package/dist/types/src/internal/{json-schema → JsonSchema}/json-schema-type.d.ts +19 -19
  156. package/dist/types/src/internal/JsonSchema/json-schema-type.d.ts.map +1 -0
  157. package/dist/types/src/internal/JsonSchema/json-schema.d.ts.map +1 -0
  158. package/dist/types/src/internal/JsonSchema/json-schema.test.d.ts.map +1 -0
  159. package/dist/types/src/internal/Obj/clone.d.ts.map +1 -0
  160. package/dist/types/src/internal/Obj/common.d.ts.map +1 -0
  161. package/dist/types/src/internal/{object → Obj}/create-object.d.ts +2 -2
  162. package/dist/types/src/internal/Obj/create-object.d.ts.map +1 -0
  163. package/dist/types/src/internal/Obj/create-object.test.d.ts.map +1 -0
  164. package/dist/types/src/internal/{object → Obj}/deleted.d.ts +1 -1
  165. package/dist/types/src/internal/Obj/deleted.d.ts.map +1 -0
  166. package/dist/types/src/internal/Obj/ids.d.ts.map +1 -0
  167. package/dist/types/src/internal/Obj/index.d.ts.map +1 -0
  168. package/dist/types/src/internal/Obj/inspect.d.ts.map +1 -0
  169. package/dist/types/src/internal/{object → Obj}/json-serializer.d.ts +12 -5
  170. package/dist/types/src/internal/Obj/json-serializer.d.ts.map +1 -0
  171. package/dist/types/src/internal/Obj/json-serializer.test.d.ts.map +1 -0
  172. package/dist/types/src/internal/Obj/schema-validator.d.ts +2 -0
  173. package/dist/types/src/internal/Obj/schema-validator.d.ts.map +1 -0
  174. package/dist/types/src/internal/Obj/schema-validator.test.d.ts.map +1 -0
  175. package/dist/types/src/internal/{object → Obj}/set-value.d.ts +1 -1
  176. package/dist/types/src/internal/Obj/set-value.d.ts.map +1 -0
  177. package/dist/types/src/internal/Obj/set-value.test.d.ts.map +1 -0
  178. package/dist/types/src/internal/Obj/snapshot.d.ts.map +1 -0
  179. package/dist/types/src/internal/{object → Obj}/typed-object.d.ts +4 -4
  180. package/dist/types/src/internal/Obj/typed-object.d.ts.map +1 -0
  181. package/dist/types/src/internal/Obj/typed-object.test.d.ts.map +1 -0
  182. package/dist/types/src/internal/Ref/index.d.ts.map +1 -0
  183. package/dist/types/src/internal/{ref → Ref}/ref-array.d.ts +1 -1
  184. package/dist/types/src/internal/Ref/ref-array.d.ts.map +1 -0
  185. package/dist/types/src/internal/{ref → Ref}/ref.d.ts +16 -3
  186. package/dist/types/src/internal/Ref/ref.d.ts.map +1 -0
  187. package/dist/types/src/internal/Ref/ref.test.d.ts.map +1 -0
  188. package/dist/types/src/internal/{schema → Type}/compose.d.ts +1 -1
  189. package/dist/types/src/internal/Type/compose.d.ts.map +1 -0
  190. package/dist/types/src/internal/Type/compose.test.d.ts.map +1 -0
  191. package/dist/types/src/internal/{schema → Type}/echo-schema.d.ts +8 -7
  192. package/dist/types/src/internal/Type/echo-schema.d.ts.map +1 -0
  193. package/dist/types/src/internal/Type/index.d.ts.map +1 -0
  194. package/dist/types/src/internal/Type/manipulation.d.ts.map +1 -0
  195. package/dist/types/src/internal/{schema → Type}/persistent-schema.d.ts +2 -2
  196. package/dist/types/src/internal/Type/persistent-schema.d.ts.map +1 -0
  197. package/dist/types/src/internal/{api → common/api}/index.d.ts +0 -4
  198. package/dist/types/src/internal/common/api/index.d.ts.map +1 -0
  199. package/dist/types/src/internal/common/api/meta.d.ts.map +1 -0
  200. package/dist/types/src/internal/common/index.d.ts +4 -0
  201. package/dist/types/src/internal/common/index.d.ts.map +1 -0
  202. package/dist/types/src/internal/common/proxy/change-context.d.ts.map +1 -0
  203. package/dist/types/src/internal/common/proxy/change.test.d.ts.map +1 -0
  204. package/dist/types/src/internal/common/proxy/define-hidden-property.d.ts.map +1 -0
  205. package/dist/types/src/internal/common/proxy/errors.d.ts.map +1 -0
  206. package/dist/types/src/internal/common/proxy/event-batch.d.ts.map +1 -0
  207. package/dist/types/src/internal/common/proxy/handler.test.d.ts.map +1 -0
  208. package/dist/types/src/internal/common/proxy/index.d.ts.map +1 -0
  209. package/dist/types/src/internal/common/proxy/json-serializer.d.ts.map +1 -0
  210. package/dist/types/src/internal/common/proxy/make-object.d.ts.map +1 -0
  211. package/dist/types/src/internal/common/proxy/ownership.d.ts.map +1 -0
  212. package/dist/types/src/internal/common/proxy/proxy-types.d.ts.map +1 -0
  213. package/dist/types/src/internal/common/proxy/proxy-utils.d.ts.map +1 -0
  214. package/dist/types/src/internal/common/proxy/reactive-array.d.ts.map +1 -0
  215. package/dist/types/src/internal/{proxy → common/proxy}/reactive.d.ts +1 -1
  216. package/dist/types/src/internal/common/proxy/reactive.d.ts.map +1 -0
  217. package/dist/types/src/internal/common/proxy/schema-validator.d.ts.map +1 -0
  218. package/dist/types/src/internal/common/proxy/schema.test.d.ts.map +1 -0
  219. package/dist/types/src/internal/common/proxy/symbols.d.ts.map +1 -0
  220. package/dist/types/src/internal/{proxy → common/proxy}/typed-handler.d.ts +2 -1
  221. package/dist/types/src/internal/common/proxy/typed-handler.d.ts.map +1 -0
  222. package/dist/types/src/internal/common/proxy/typed-handler.test.d.ts.map +1 -0
  223. package/dist/types/src/internal/common/proxy/typed-object.test.d.ts.map +1 -0
  224. package/dist/types/src/internal/{types → common/types}/base.d.ts +1 -0
  225. package/dist/types/src/internal/common/types/base.d.ts.map +1 -0
  226. package/dist/types/src/internal/{types → common/types}/entity.d.ts +2 -2
  227. package/dist/types/src/internal/common/types/entity.d.ts.map +1 -0
  228. package/dist/types/src/internal/{types → common/types}/index.d.ts +1 -0
  229. package/dist/types/src/internal/common/types/index.d.ts.map +1 -0
  230. package/dist/types/src/internal/{types → common/types}/meta.d.ts +2 -1
  231. package/dist/types/src/internal/common/types/meta.d.ts.map +1 -0
  232. package/dist/types/src/internal/common/types/model-symbols.d.ts +54 -0
  233. package/dist/types/src/internal/common/types/model-symbols.d.ts.map +1 -0
  234. package/dist/types/src/internal/{types → common/types}/typename.d.ts +8 -0
  235. package/dist/types/src/internal/common/types/typename.d.ts.map +1 -0
  236. package/dist/types/src/internal/{types → common/types}/version.d.ts +2 -2
  237. package/dist/types/src/internal/common/types/version.d.ts.map +1 -0
  238. package/dist/types/src/internal/index.d.ts +8 -10
  239. package/dist/types/src/internal/index.d.ts.map +1 -1
  240. package/dist/types/src/testing/test-schema.d.ts +19 -18
  241. package/dist/types/src/testing/test-schema.d.ts.map +1 -1
  242. package/dist/types/tsconfig.tsbuildinfo +1 -1
  243. package/package.json +19 -14
  244. package/src/Annotation.ts +31 -1
  245. package/src/Collection.ts +37 -0
  246. package/src/Database.ts +154 -173
  247. package/src/Dataset.ts +26 -0
  248. package/src/Entity.ts +71 -51
  249. package/src/Err.ts +22 -0
  250. package/src/Feed.ts +262 -0
  251. package/src/Filter.ts +19 -4
  252. package/src/Format.ts +3 -3
  253. package/src/Hypergraph.ts +9 -4
  254. package/src/JsonSchema.ts +14 -4
  255. package/src/Obj.test.ts +63 -2
  256. package/src/Obj.ts +278 -133
  257. package/src/Order.ts +3 -1
  258. package/src/Query.test.ts +181 -14
  259. package/src/Query.ts +249 -23
  260. package/src/Ref.ts +64 -11
  261. package/src/Relation.test.ts +8 -2
  262. package/src/Relation.ts +163 -129
  263. package/src/SchemaRegistry.ts +5 -4
  264. package/src/Tag.ts +6 -5
  265. package/src/Type.test.ts +10 -10
  266. package/src/Type.ts +70 -303
  267. package/src/View.ts +107 -0
  268. package/src/hierarchy.test.ts +33 -0
  269. package/src/index.ts +4 -0
  270. package/src/internal/{annotations → Annotation}/annotations.test.ts +6 -6
  271. package/src/internal/{annotations → Annotation}/annotations.ts +120 -9
  272. package/src/internal/{annotations → Annotation}/index.ts +1 -0
  273. package/src/internal/{api → Annotation}/sorting.ts +2 -3
  274. package/src/internal/{annotations → Annotation}/util.ts +14 -1
  275. package/src/internal/{api/entity.ts → Entity/api.ts} +4 -2
  276. package/src/internal/{entities → Entity}/entity.ts +6 -4
  277. package/src/internal/{entities → Entity}/index.ts +2 -0
  278. package/src/internal/{entities → Entity}/model.ts +17 -42
  279. package/src/internal/{entities → Entity}/object.ts +2 -2
  280. package/src/internal/{entities → Entity}/relation.ts +19 -36
  281. package/src/internal/{api → Entity}/version.ts +3 -2
  282. package/src/internal/{formats → Format}/date.test.ts +1 -1
  283. package/src/internal/{formats → Format}/format.test.ts +1 -1
  284. package/src/internal/{formats → Format}/types.ts +3 -3
  285. package/src/internal/{json-schema → JsonSchema}/annotations.ts +3 -3
  286. package/src/internal/{json-schema → JsonSchema}/json-schema-type.ts +4 -4
  287. package/src/internal/{json-schema → JsonSchema}/json-schema.test.ts +48 -48
  288. package/src/internal/{json-schema → JsonSchema}/json-schema.ts +6 -4
  289. package/src/internal/{object → Obj}/clone.ts +3 -3
  290. package/src/internal/{object → Obj}/common.ts +2 -2
  291. package/src/internal/{object → Obj}/create-object.test.ts +4 -4
  292. package/src/internal/{object → Obj}/create-object.ts +5 -5
  293. package/src/internal/{object → Obj}/deleted.ts +2 -2
  294. package/src/internal/{object → Obj}/inspect.ts +2 -2
  295. package/src/internal/{object → Obj}/json-serializer.test.ts +29 -6
  296. package/src/internal/{object → Obj}/json-serializer.ts +42 -15
  297. package/src/internal/{object → Obj}/schema-validator.ts +1 -1
  298. package/src/internal/{object → Obj}/set-value.ts +2 -2
  299. package/src/internal/Obj/snapshot.ts +105 -0
  300. package/src/internal/{object → Obj}/typed-object.test.ts +3 -3
  301. package/src/internal/{object → Obj}/typed-object.ts +4 -4
  302. package/src/internal/{ref → Ref}/ref-array.ts +1 -1
  303. package/src/internal/{ref → Ref}/ref.test.ts +4 -4
  304. package/src/internal/{ref → Ref}/ref.ts +27 -4
  305. package/src/internal/{schema → Type}/compose.test.ts +5 -5
  306. package/src/internal/{schema → Type}/compose.ts +1 -1
  307. package/src/internal/{schema → Type}/echo-schema.ts +11 -10
  308. package/src/internal/{schema → Type}/manipulation.ts +1 -1
  309. package/src/internal/{schema → Type}/persistent-schema.ts +10 -4
  310. package/src/internal/{README.md → common/README.md} +1 -1
  311. package/src/internal/{api → common/api}/index.ts +0 -4
  312. package/src/internal/common/index.ts +7 -0
  313. package/src/internal/{proxy → common/proxy}/change.test.ts +3 -3
  314. package/src/internal/{proxy → common/proxy}/handler.test.ts +2 -2
  315. package/src/internal/{proxy → common/proxy}/json-serializer.ts +6 -3
  316. package/src/internal/{proxy → common/proxy}/make-object.ts +13 -3
  317. package/src/internal/{proxy → common/proxy}/reactive.ts +1 -1
  318. package/src/internal/{proxy → common/proxy}/schema.test.ts +10 -10
  319. package/src/internal/{proxy → common/proxy}/typed-handler.test.ts +6 -6
  320. package/src/internal/{proxy → common/proxy}/typed-handler.ts +10 -3
  321. package/src/internal/{proxy → common/proxy}/typed-object.test.ts +4 -4
  322. package/src/internal/{types → common/types}/base.ts +1 -1
  323. package/src/internal/{types → common/types}/entity.ts +2 -2
  324. package/src/internal/{types → common/types}/index.ts +1 -0
  325. package/src/internal/{types → common/types}/meta.ts +4 -1
  326. package/src/internal/common/types/model-symbols.ts +69 -0
  327. package/src/internal/{types → common/types}/typename.ts +10 -0
  328. package/src/internal/{types → common/types}/version.ts +2 -3
  329. package/src/internal/index.ts +8 -31
  330. package/src/testing/api.test.ts +4 -4
  331. package/src/testing/test-schema.ts +20 -18
  332. package/dist/lib/neutral/chunk-2MTHJ5UW.mjs.map +0 -7
  333. package/dist/lib/neutral/chunk-3ZEAZF7T.mjs.map +0 -7
  334. package/dist/lib/neutral/chunk-62DWJ6CE.mjs.map +0 -7
  335. package/dist/lib/neutral/chunk-6QPSGMEF.mjs.map +0 -7
  336. package/dist/lib/neutral/chunk-CUDIBUM4.mjs.map +0 -7
  337. package/dist/lib/neutral/chunk-HMOXCO27.mjs.map +0 -7
  338. package/dist/lib/neutral/chunk-IP2GHXWA.mjs.map +0 -7
  339. package/dist/lib/neutral/chunk-KRHDMXSU.mjs +0 -132
  340. package/dist/lib/neutral/chunk-KRHDMXSU.mjs.map +0 -7
  341. package/dist/lib/neutral/chunk-NWUO5FKZ.mjs.map +0 -7
  342. package/dist/lib/neutral/chunk-ROKO4RKJ.mjs.map +0 -7
  343. package/dist/lib/neutral/chunk-RPB6V4BE.mjs.map +0 -7
  344. package/dist/lib/neutral/chunk-SU2LVM7J.mjs.map +0 -7
  345. package/dist/lib/neutral/chunk-VB5HVDCA.mjs.map +0 -7
  346. package/dist/lib/neutral/chunk-VR4A4WGG.mjs.map +0 -7
  347. package/dist/lib/neutral/chunk-X2MPMYYN.mjs +0 -13
  348. package/dist/lib/neutral/chunk-X2MPMYYN.mjs.map +0 -7
  349. package/dist/lib/neutral/chunk-XK5OUUBY.mjs +0 -157
  350. package/dist/lib/neutral/chunk-XK5OUUBY.mjs.map +0 -7
  351. package/dist/lib/neutral/chunk-XMIDBDE6.mjs.map +0 -7
  352. package/dist/lib/neutral/chunk-YQYMWZAD.mjs.map +0 -7
  353. package/dist/types/src/internal/annotations/annotations.d.ts.map +0 -1
  354. package/dist/types/src/internal/annotations/annotations.test.d.ts.map +0 -1
  355. package/dist/types/src/internal/annotations/index.d.ts +0 -3
  356. package/dist/types/src/internal/annotations/index.d.ts.map +0 -1
  357. package/dist/types/src/internal/annotations/util.d.ts.map +0 -1
  358. package/dist/types/src/internal/api/annotations.d.ts +0 -23
  359. package/dist/types/src/internal/api/annotations.d.ts.map +0 -1
  360. package/dist/types/src/internal/api/entity.d.ts.map +0 -1
  361. package/dist/types/src/internal/api/index.d.ts.map +0 -1
  362. package/dist/types/src/internal/api/meta.d.ts.map +0 -1
  363. package/dist/types/src/internal/api/sorting.d.ts.map +0 -1
  364. package/dist/types/src/internal/api/version.d.ts.map +0 -1
  365. package/dist/types/src/internal/entities/entity.d.ts.map +0 -1
  366. package/dist/types/src/internal/entities/index.d.ts.map +0 -1
  367. package/dist/types/src/internal/entities/model.d.ts.map +0 -1
  368. package/dist/types/src/internal/entities/object.d.ts.map +0 -1
  369. package/dist/types/src/internal/entities/relation.d.ts.map +0 -1
  370. package/dist/types/src/internal/entities/util.d.ts.map +0 -1
  371. package/dist/types/src/internal/formats/date.d.ts.map +0 -1
  372. package/dist/types/src/internal/formats/date.test.d.ts.map +0 -1
  373. package/dist/types/src/internal/formats/format.d.ts.map +0 -1
  374. package/dist/types/src/internal/formats/format.test.d.ts.map +0 -1
  375. package/dist/types/src/internal/formats/index.d.ts.map +0 -1
  376. package/dist/types/src/internal/formats/number.d.ts.map +0 -1
  377. package/dist/types/src/internal/formats/object.d.ts.map +0 -1
  378. package/dist/types/src/internal/formats/select.d.ts.map +0 -1
  379. package/dist/types/src/internal/formats/string.d.ts.map +0 -1
  380. package/dist/types/src/internal/formats/types.d.ts.map +0 -1
  381. package/dist/types/src/internal/json-schema/annotations.d.ts.map +0 -1
  382. package/dist/types/src/internal/json-schema/effect-schema.test.d.ts.map +0 -1
  383. package/dist/types/src/internal/json-schema/index.d.ts.map +0 -1
  384. package/dist/types/src/internal/json-schema/json-schema-normalize.d.ts.map +0 -1
  385. package/dist/types/src/internal/json-schema/json-schema-type.d.ts.map +0 -1
  386. package/dist/types/src/internal/json-schema/json-schema.d.ts.map +0 -1
  387. package/dist/types/src/internal/json-schema/json-schema.test.d.ts.map +0 -1
  388. package/dist/types/src/internal/object/clone.d.ts.map +0 -1
  389. package/dist/types/src/internal/object/common.d.ts.map +0 -1
  390. package/dist/types/src/internal/object/create-object.d.ts.map +0 -1
  391. package/dist/types/src/internal/object/create-object.test.d.ts.map +0 -1
  392. package/dist/types/src/internal/object/deleted.d.ts.map +0 -1
  393. package/dist/types/src/internal/object/ids.d.ts.map +0 -1
  394. package/dist/types/src/internal/object/index.d.ts.map +0 -1
  395. package/dist/types/src/internal/object/inspect.d.ts.map +0 -1
  396. package/dist/types/src/internal/object/json-serializer.d.ts.map +0 -1
  397. package/dist/types/src/internal/object/json-serializer.test.d.ts.map +0 -1
  398. package/dist/types/src/internal/object/schema-validator.d.ts +0 -2
  399. package/dist/types/src/internal/object/schema-validator.d.ts.map +0 -1
  400. package/dist/types/src/internal/object/schema-validator.test.d.ts.map +0 -1
  401. package/dist/types/src/internal/object/set-value.d.ts.map +0 -1
  402. package/dist/types/src/internal/object/set-value.test.d.ts.map +0 -1
  403. package/dist/types/src/internal/object/snapshot.d.ts.map +0 -1
  404. package/dist/types/src/internal/object/typed-object.d.ts.map +0 -1
  405. package/dist/types/src/internal/object/typed-object.test.d.ts.map +0 -1
  406. package/dist/types/src/internal/proxy/change-context.d.ts.map +0 -1
  407. package/dist/types/src/internal/proxy/change.test.d.ts.map +0 -1
  408. package/dist/types/src/internal/proxy/define-hidden-property.d.ts.map +0 -1
  409. package/dist/types/src/internal/proxy/errors.d.ts.map +0 -1
  410. package/dist/types/src/internal/proxy/event-batch.d.ts.map +0 -1
  411. package/dist/types/src/internal/proxy/handler.test.d.ts.map +0 -1
  412. package/dist/types/src/internal/proxy/index.d.ts.map +0 -1
  413. package/dist/types/src/internal/proxy/json-serializer.d.ts.map +0 -1
  414. package/dist/types/src/internal/proxy/make-object.d.ts.map +0 -1
  415. package/dist/types/src/internal/proxy/ownership.d.ts.map +0 -1
  416. package/dist/types/src/internal/proxy/proxy-types.d.ts.map +0 -1
  417. package/dist/types/src/internal/proxy/proxy-utils.d.ts.map +0 -1
  418. package/dist/types/src/internal/proxy/reactive-array.d.ts.map +0 -1
  419. package/dist/types/src/internal/proxy/reactive.d.ts.map +0 -1
  420. package/dist/types/src/internal/proxy/schema-validator.d.ts.map +0 -1
  421. package/dist/types/src/internal/proxy/schema.test.d.ts.map +0 -1
  422. package/dist/types/src/internal/proxy/symbols.d.ts.map +0 -1
  423. package/dist/types/src/internal/proxy/typed-handler.d.ts.map +0 -1
  424. package/dist/types/src/internal/proxy/typed-handler.test.d.ts.map +0 -1
  425. package/dist/types/src/internal/proxy/typed-object.test.d.ts.map +0 -1
  426. package/dist/types/src/internal/ref/index.d.ts.map +0 -1
  427. package/dist/types/src/internal/ref/ref-array.d.ts.map +0 -1
  428. package/dist/types/src/internal/ref/ref.d.ts.map +0 -1
  429. package/dist/types/src/internal/ref/ref.test.d.ts.map +0 -1
  430. package/dist/types/src/internal/schema/compose.d.ts.map +0 -1
  431. package/dist/types/src/internal/schema/compose.test.d.ts.map +0 -1
  432. package/dist/types/src/internal/schema/echo-schema.d.ts.map +0 -1
  433. package/dist/types/src/internal/schema/index.d.ts.map +0 -1
  434. package/dist/types/src/internal/schema/manipulation.d.ts.map +0 -1
  435. package/dist/types/src/internal/schema/persistent-schema.d.ts.map +0 -1
  436. package/dist/types/src/internal/types/base.d.ts.map +0 -1
  437. package/dist/types/src/internal/types/entity.d.ts.map +0 -1
  438. package/dist/types/src/internal/types/index.d.ts.map +0 -1
  439. package/dist/types/src/internal/types/meta.d.ts.map +0 -1
  440. package/dist/types/src/internal/types/typename.d.ts.map +0 -1
  441. package/dist/types/src/internal/types/version.d.ts.map +0 -1
  442. package/src/internal/api/annotations.ts +0 -60
  443. package/src/internal/object/snapshot.ts +0 -70
  444. /package/dist/types/src/internal/{annotations → Annotation}/annotations.test.d.ts +0 -0
  445. /package/dist/types/src/internal/{entities → Entity}/util.d.ts +0 -0
  446. /package/dist/types/src/internal/{formats → Format}/date.d.ts +0 -0
  447. /package/dist/types/src/internal/{formats → Format}/date.test.d.ts +0 -0
  448. /package/dist/types/src/internal/{formats → Format}/format.d.ts +0 -0
  449. /package/dist/types/src/internal/{formats → Format}/format.test.d.ts +0 -0
  450. /package/dist/types/src/internal/{formats → Format}/index.d.ts +0 -0
  451. /package/dist/types/src/internal/{formats → Format}/number.d.ts +0 -0
  452. /package/dist/types/src/internal/{formats → Format}/object.d.ts +0 -0
  453. /package/dist/types/src/internal/{formats → Format}/select.d.ts +0 -0
  454. /package/dist/types/src/internal/{formats → Format}/string.d.ts +0 -0
  455. /package/dist/types/src/internal/{json-schema → JsonSchema}/effect-schema.test.d.ts +0 -0
  456. /package/dist/types/src/internal/{json-schema → JsonSchema}/index.d.ts +0 -0
  457. /package/dist/types/src/internal/{json-schema → JsonSchema}/json-schema-normalize.d.ts +0 -0
  458. /package/dist/types/src/internal/{json-schema → JsonSchema}/json-schema.d.ts +0 -0
  459. /package/dist/types/src/internal/{json-schema → JsonSchema}/json-schema.test.d.ts +0 -0
  460. /package/dist/types/src/internal/{object → Obj}/clone.d.ts +0 -0
  461. /package/dist/types/src/internal/{object → Obj}/common.d.ts +0 -0
  462. /package/dist/types/src/internal/{object → Obj}/create-object.test.d.ts +0 -0
  463. /package/dist/types/src/internal/{object → Obj}/ids.d.ts +0 -0
  464. /package/dist/types/src/internal/{object → Obj}/index.d.ts +0 -0
  465. /package/dist/types/src/internal/{object → Obj}/inspect.d.ts +0 -0
  466. /package/dist/types/src/internal/{object → Obj}/json-serializer.test.d.ts +0 -0
  467. /package/dist/types/src/internal/{object → Obj}/schema-validator.test.d.ts +0 -0
  468. /package/dist/types/src/internal/{object → Obj}/set-value.test.d.ts +0 -0
  469. /package/dist/types/src/internal/{object → Obj}/snapshot.d.ts +0 -0
  470. /package/dist/types/src/internal/{object → Obj}/typed-object.test.d.ts +0 -0
  471. /package/dist/types/src/internal/{ref → Ref}/index.d.ts +0 -0
  472. /package/dist/types/src/internal/{ref → Ref}/ref.test.d.ts +0 -0
  473. /package/dist/types/src/internal/{schema → Type}/compose.test.d.ts +0 -0
  474. /package/dist/types/src/internal/{schema → Type}/index.d.ts +0 -0
  475. /package/dist/types/src/internal/{schema → Type}/manipulation.d.ts +0 -0
  476. /package/dist/types/src/internal/{api → common/api}/meta.d.ts +0 -0
  477. /package/dist/types/src/internal/{proxy → common/proxy}/change-context.d.ts +0 -0
  478. /package/dist/types/src/internal/{proxy → common/proxy}/change.test.d.ts +0 -0
  479. /package/dist/types/src/internal/{proxy → common/proxy}/define-hidden-property.d.ts +0 -0
  480. /package/dist/types/src/internal/{proxy → common/proxy}/errors.d.ts +0 -0
  481. /package/dist/types/src/internal/{proxy → common/proxy}/event-batch.d.ts +0 -0
  482. /package/dist/types/src/internal/{proxy → common/proxy}/handler.test.d.ts +0 -0
  483. /package/dist/types/src/internal/{proxy → common/proxy}/index.d.ts +0 -0
  484. /package/dist/types/src/internal/{proxy → common/proxy}/json-serializer.d.ts +0 -0
  485. /package/dist/types/src/internal/{proxy → common/proxy}/make-object.d.ts +0 -0
  486. /package/dist/types/src/internal/{proxy → common/proxy}/ownership.d.ts +0 -0
  487. /package/dist/types/src/internal/{proxy → common/proxy}/proxy-types.d.ts +0 -0
  488. /package/dist/types/src/internal/{proxy → common/proxy}/proxy-utils.d.ts +0 -0
  489. /package/dist/types/src/internal/{proxy → common/proxy}/reactive-array.d.ts +0 -0
  490. /package/dist/types/src/internal/{proxy → common/proxy}/schema-validator.d.ts +0 -0
  491. /package/dist/types/src/internal/{proxy → common/proxy}/schema.test.d.ts +0 -0
  492. /package/dist/types/src/internal/{proxy → common/proxy}/symbols.d.ts +0 -0
  493. /package/dist/types/src/internal/{proxy → common/proxy}/typed-handler.test.d.ts +0 -0
  494. /package/dist/types/src/internal/{proxy → common/proxy}/typed-object.test.d.ts +0 -0
  495. /package/src/internal/{entities → Entity}/util.ts +0 -0
  496. /package/src/internal/{formats → Format}/date.ts +0 -0
  497. /package/src/internal/{formats → Format}/format.ts +0 -0
  498. /package/src/internal/{formats → Format}/index.ts +0 -0
  499. /package/src/internal/{formats → Format}/number.ts +0 -0
  500. /package/src/internal/{formats → Format}/object.ts +0 -0
  501. /package/src/internal/{formats → Format}/select.ts +0 -0
  502. /package/src/internal/{formats → Format}/string.ts +0 -0
  503. /package/src/internal/{json-schema → JsonSchema}/effect-schema.test.ts +0 -0
  504. /package/src/internal/{json-schema → JsonSchema}/index.ts +0 -0
  505. /package/src/internal/{json-schema → JsonSchema}/json-schema-normalize.ts +0 -0
  506. /package/src/internal/{object → Obj}/ids.ts +0 -0
  507. /package/src/internal/{object → Obj}/index.ts +0 -0
  508. /package/src/internal/{object → Obj}/schema-validator.test.ts +0 -0
  509. /package/src/internal/{object → Obj}/set-value.test.ts +0 -0
  510. /package/src/internal/{ref → Ref}/index.ts +0 -0
  511. /package/src/internal/{schema → Type}/index.ts +0 -0
  512. /package/src/internal/{api → common/api}/meta.ts +0 -0
  513. /package/src/internal/{proxy → common/proxy}/change-context.ts +0 -0
  514. /package/src/internal/{proxy → common/proxy}/define-hidden-property.ts +0 -0
  515. /package/src/internal/{proxy → common/proxy}/errors.ts +0 -0
  516. /package/src/internal/{proxy → common/proxy}/event-batch.ts +0 -0
  517. /package/src/internal/{proxy → common/proxy}/index.ts +0 -0
  518. /package/src/internal/{proxy → common/proxy}/ownership.ts +0 -0
  519. /package/src/internal/{proxy → common/proxy}/proxy-types.ts +0 -0
  520. /package/src/internal/{proxy → common/proxy}/proxy-utils.ts +0 -0
  521. /package/src/internal/{proxy → common/proxy}/reactive-array.ts +0 -0
  522. /package/src/internal/{proxy → common/proxy}/schema-validator.ts +0 -0
  523. /package/src/internal/{proxy → common/proxy}/symbols.ts +0 -0
package/src/Entity.ts CHANGED
@@ -2,46 +2,28 @@
2
2
  // Copyright 2025 DXOS.org
3
3
  //
4
4
 
5
+ // @import-as-namespace
6
+
5
7
  import type { ForeignKey } from '@dxos/echo-protocol';
6
8
  import type { DXN, ObjectId } from '@dxos/keys';
7
9
 
8
- import {
9
- type ChangeCallback,
10
- EntityKind,
11
- EntityKindSchema,
12
- KindId,
13
- type Mutable,
14
- type ObjectJSON,
15
- type ObjectMeta,
16
- type ReadonlyMeta,
17
- SnapshotKindId,
18
- addTag as addTag$,
19
- change as change$,
20
- getDXN as getDXN$,
21
- getDatabase as getDatabase$,
22
- getDescription as getDescription$,
23
- getEntityKind,
24
- getKeys as getKeys$,
25
- getLabel as getLabel$,
26
- getMetaChecked as getMeta$,
27
- getTypeDXN as getTypeDXN$,
28
- getTypename as getTypename$,
29
- isDeleted as isDeleted$,
30
- removeTag as removeTag$,
31
- subscribe as subscribe$,
32
- objectToJSON as toJSON$,
33
- } from './internal';
10
+ import * as entityInternal from './internal/Entity';
11
+ import * as internal from './internal';
12
+ import type * as Relation from './Relation';
34
13
 
35
14
  // Re-export KindId and SnapshotKindId from internal.
36
- export { KindId, SnapshotKindId };
15
+ export const KindId = internal.KindId;
16
+ export type KindId = typeof internal.KindId;
17
+ export const SnapshotKindId = internal.SnapshotKindId;
18
+ export type SnapshotKindId = typeof internal.SnapshotKindId;
37
19
 
38
20
  // NOTE: Relation does not extend Obj so that, for example, we can prevent Relations from being used as source and target objects.
39
21
  // However, we generally refer to Obj and Relation instances as "objects",
40
22
  // and many API methods accept both Obj.Unknown and Relation.Unknown (i.e., Entity.Unknown) instances.
41
23
 
42
- export const Kind = EntityKind;
43
- export type Kind = EntityKind;
44
- export const KindSchema = EntityKindSchema;
24
+ export const Kind = internal.EntityKind;
25
+ export type Kind = internal.EntityKind;
26
+ export const KindSchema = internal.EntityKindSchema;
45
27
 
46
28
  /**
47
29
  * Assigns a kind to an Object or Relation instance.
@@ -89,7 +71,45 @@ export interface Any extends OfKind<Kind> {
89
71
  [key: string]: unknown;
90
72
  }
91
73
 
92
- export const getKind = getEntityKind;
74
+ /**
75
+ * Returns all properties of an object or relation except for the id and kind.
76
+ */
77
+ export type Properties<T> = Omit<T, 'id' | KindId | Relation.Source | Relation.Target>;
78
+
79
+ /**
80
+ * Check if a value is an ECHO entity (object or relation).
81
+ * Returns `false` for snapshots.
82
+ */
83
+ export const isEntity = (value: unknown): value is Unknown => {
84
+ if (typeof value !== 'object' || value === null) {
85
+ return false;
86
+ }
87
+ return (value as any)[KindId] !== undefined;
88
+ };
89
+
90
+ /**
91
+ * Check if a value is an ECHO entity snapshot.
92
+ * Returns `false` for entities.
93
+ */
94
+ export const isSnapshot = (value: unknown): value is Snapshot => {
95
+ if (typeof value !== 'object' || value === null) {
96
+ return false;
97
+ }
98
+ return (value as any)[SnapshotKindId] !== undefined;
99
+ };
100
+
101
+ // TODO(dmaretskyi): Type introspection -- move to kind.
102
+ export const getKind = internal.getEntityKind;
103
+
104
+ /**
105
+ * Property that accesses metadata for an entity.
106
+ */
107
+ export const Meta: unique symbol = internal.MetaId as any;
108
+
109
+ /**
110
+ * Property that accesses metadata for an entity.
111
+ */
112
+ export type Meta = typeof Meta;
93
113
 
94
114
  //
95
115
  // Entity-level functions that work on any entity (object or relation).
@@ -100,27 +120,27 @@ export const getKind = getEntityKind;
100
120
  /**
101
121
  * JSON representation of an entity.
102
122
  */
103
- export type JSON = ObjectJSON;
123
+ export type JSON = internal.ObjectJSON;
104
124
 
105
125
  /**
106
126
  * Get the DXN of an entity (object or relation).
107
127
  */
108
- export const getDXN = (entity: Unknown | Snapshot): DXN => getDXN$(entity);
128
+ export const getDXN = (entity: Unknown | Snapshot): DXN => internal.getDXN(entity);
109
129
 
110
130
  /**
111
131
  * Get the DXN of an entity's type.
112
132
  */
113
- export const getTypeDXN = getTypeDXN$;
133
+ export const getTypeDXN = internal.getTypeDXN;
114
134
 
115
135
  /**
116
136
  * Get the typename of an entity's type.
117
137
  */
118
- export const getTypename = (entity: Unknown | Snapshot): string | undefined => getTypename$(entity);
138
+ export const getTypename = (entity: Unknown | Snapshot): string | undefined => internal.getTypename(entity);
119
139
 
120
140
  /**
121
141
  * Get the database an entity belongs to.
122
142
  */
123
- export const getDatabase = (entity: Unknown | Snapshot): any | undefined => getDatabase$(entity);
143
+ export const getDatabase = (entity: Unknown | Snapshot): any | undefined => internal.getDatabase(entity);
124
144
 
125
145
  /**
126
146
  * Get the metadata for an entity.
@@ -128,43 +148,43 @@ export const getDatabase = (entity: Unknown | Snapshot): any | undefined => getD
128
148
  * Returns read-only meta when passed a regular entity or snapshot.
129
149
  */
130
150
  // TODO(wittjosiah): When passed a Snapshot, should return a snapshot of meta, not the live meta proxy.
131
- export function getMeta(entity: Mutable<Unknown>): ObjectMeta;
132
- export function getMeta(entity: Unknown | Snapshot): ReadonlyMeta;
133
- export function getMeta(entity: Unknown | Snapshot | Mutable<Unknown>): ObjectMeta | ReadonlyMeta {
134
- return getMeta$(entity);
151
+ export function getMeta(entity: Mutable<Unknown>): internal.ObjectMeta;
152
+ export function getMeta(entity: Unknown | Snapshot): internal.ReadonlyMeta;
153
+ export function getMeta(entity: Unknown | Snapshot | Mutable<Unknown>): internal.ObjectMeta | internal.ReadonlyMeta {
154
+ return internal.getMetaChecked(entity);
135
155
  }
136
156
 
137
157
  /**
138
158
  * Get foreign keys for an entity from the specified source.
139
159
  */
140
- export const getKeys = (entity: Unknown | Snapshot, source: string): ForeignKey[] => getKeys$(entity, source);
160
+ export const getKeys = (entity: Unknown | Snapshot, source: string): ForeignKey[] => internal.getKeys(entity, source);
141
161
 
142
162
  /**
143
163
  * Check if an entity is deleted.
144
164
  */
145
- export const isDeleted = (entity: Unknown | Snapshot): boolean => isDeleted$(entity);
165
+ export const isDeleted = (entity: Unknown | Snapshot): boolean => internal.isDeleted(entity);
146
166
 
147
167
  /**
148
168
  * Get the label of an entity.
149
169
  */
150
- export const getLabel = (entity: Unknown | Snapshot): string | undefined => getLabel$(entity);
170
+ export const getLabel = (entity: Unknown | Snapshot): string | undefined => internal.getLabel(entity);
151
171
 
152
172
  /**
153
173
  * Get the description of an entity.
154
174
  */
155
- export const getDescription = (entity: Unknown | Snapshot): string | undefined => getDescription$(entity);
175
+ export const getDescription = (entity: Unknown | Snapshot): string | undefined => internal.getDescription(entity);
156
176
 
157
177
  /**
158
178
  * Convert an entity to its JSON representation.
159
179
  */
160
- export const toJSON = (entity: Unknown | Snapshot): JSON => toJSON$(entity);
180
+ export const toJSON = (entity: Unknown | Snapshot): JSON => internal.objectToJSON(entity);
161
181
 
162
182
  /**
163
183
  * Subscribe to changes on an entity (object or relation).
164
184
  * @returns Unsubscribe function.
165
185
  */
166
186
  export const subscribe = (entity: Unknown, callback: () => void): (() => void) => {
167
- return subscribe$(entity, callback);
187
+ return internal.subscribe(entity, callback);
168
188
  };
169
189
 
170
190
  //
@@ -174,7 +194,7 @@ export const subscribe = (entity: Unknown, callback: () => void): (() => void) =
174
194
  /**
175
195
  * Used to provide a mutable view of an entity within `Entity.change`.
176
196
  */
177
- export type { Mutable };
197
+ export type Mutable<T> = internal.Mutable<T>;
178
198
 
179
199
  /**
180
200
  * Perform mutations on an entity (object or relation) within a change context.
@@ -200,18 +220,18 @@ export type { Mutable };
200
220
  *
201
221
  * Note: For type-specific operations, prefer `Obj.change` or `Relation.change`.
202
222
  */
203
- export const change = <T extends Unknown>(entity: T, callback: ChangeCallback<T>): void => {
204
- change$(entity, callback);
223
+ export const change = <T extends Unknown>(entity: T, callback: internal.ChangeCallback<T>): void => {
224
+ internal.change(entity, callback);
205
225
  };
206
226
 
207
227
  /**
208
228
  * Add a tag to an entity.
209
229
  * Must be called within an `Entity.change`, `Obj.change`, or `Relation.change` callback.
210
230
  */
211
- export const addTag = (entity: Mutable<Unknown>, tag: string): void => addTag$(entity, tag);
231
+ export const addTag = (entity: Mutable<Unknown>, tag: string): void => internal.addTag(entity, tag);
212
232
 
213
233
  /**
214
234
  * Remove a tag from an entity.
215
235
  * Must be called within an `Entity.change`, `Obj.change`, or `Relation.change` callback.
216
236
  */
217
- export const removeTag = (entity: Mutable<Unknown>, tag: string): void => removeTag$(entity, tag);
237
+ export const removeTag = (entity: Mutable<Unknown>, tag: string): void => internal.removeTag(entity, tag);
package/src/Err.ts CHANGED
@@ -2,6 +2,8 @@
2
2
  // Copyright 2025 DXOS.org
3
3
  //
4
4
 
5
+ // @import-as-namespace
6
+
5
7
  import { BaseError, type BaseErrorOptions } from '@dxos/errors';
6
8
  import { type DXN } from '@dxos/keys';
7
9
 
@@ -16,3 +18,23 @@ export class ObjectNotFoundError extends BaseError.extend('ObjectNotFoundError',
16
18
  super({ context: { dxn }, ...options });
17
19
  }
18
20
  }
21
+
22
+ /**
23
+ * Reason why getting a reactive object from a snapshot failed.
24
+ * - `no-database`: The snapshot is not associated with a database.
25
+ * - `object-not-found`: The object was removed or does not exist in the database.
26
+ */
27
+ export type GetReactiveErrorReason = 'no-database' | 'object-not-found';
28
+
29
+ /**
30
+ * Error thrown when a reactive object cannot be resolved from a snapshot.
31
+ * Extends `BaseError` with a `reason` and optional `snapshotId` in its context.
32
+ */
33
+ export class GetReactiveError extends BaseError.extend(
34
+ 'GetReactiveError',
35
+ 'Failed to get reactive object from snapshot',
36
+ ) {
37
+ constructor(options: { reason: GetReactiveErrorReason; snapshotId?: string } & BaseErrorOptions) {
38
+ super({ context: { reason: options.reason, snapshotId: options.snapshotId }, ...options });
39
+ }
40
+ }
package/src/Feed.ts ADDED
@@ -0,0 +1,262 @@
1
+ //
2
+ // Copyright 2025 DXOS.org
3
+ //
4
+
5
+ // @import-as-namespace
6
+
7
+ import * as Context from 'effect/Context';
8
+ import * as Effect from 'effect/Effect';
9
+ import * as Layer from 'effect/Layer';
10
+ import type * as Option from 'effect/Option';
11
+ import * as Schema from 'effect/Schema';
12
+
13
+ import { DXN } from '@dxos/keys';
14
+
15
+ import type * as Entity from './Entity';
16
+ import type * as Filter from './Filter';
17
+ import * as internal from './internal';
18
+ import * as Obj from './Obj';
19
+ import type * as Query from './Query';
20
+ import type * as QueryResult from './QueryResult';
21
+ import * as Type from './Type';
22
+ import * as Annotation from './Annotation';
23
+
24
+ /**
25
+ * Runtime schema for a Feed object.
26
+ *
27
+ * @example
28
+ * ```ts
29
+ * const feed = Obj.make(Feed.Feed, { name: 'notifications', kind: 'org.dxos.plugin.notifications.v1' });
30
+ * ```
31
+ */
32
+ export const Feed = Schema.Struct({
33
+ /** User-facing display name. */
34
+ name: Schema.String.pipe(Schema.optional),
35
+ /** Identifier for the feed's kind (e.g., plugin id). */
36
+ kind: Schema.String.pipe(internal.FormInputAnnotation.set(false), Schema.optional),
37
+ }).pipe(
38
+ Type.object({
39
+ typename: 'org.dxos.type.feed',
40
+ version: '0.1.0',
41
+ }),
42
+ internal.SystemTypeAnnotation.set(true),
43
+ Annotation.IconAnnotation.set({
44
+ icon: 'ph--rows--regular',
45
+ hue: 'yellow',
46
+ }),
47
+ );
48
+
49
+ /**
50
+ * TypeScript instance type for a Feed object.
51
+ */
52
+ export interface Feed extends Schema.Schema.Type<typeof Feed> {}
53
+
54
+ //
55
+ // Types
56
+ //
57
+
58
+ /**
59
+ * Meta key source for storing the backing DXN bound to a feed object.
60
+ */
61
+ // TODO(dmaretskyi): Enforce that Feed ObjectId = feed storage ID. And remove this key.
62
+ export const DXN_KEY = 'org.dxos.key.feed';
63
+
64
+ /**
65
+ * Opaque cursor for iterating over feed items.
66
+ */
67
+ // TODO(dmaretskyi): T needs to be referenced in the type structure for typescript to respect it during inference and type-checking.
68
+ export interface Cursor<T = Obj.Snapshot> {
69
+ readonly _tag: 'Cursor';
70
+ }
71
+
72
+ /**
73
+ * Retention options for a feed.
74
+ */
75
+ export interface RetentionOptions {
76
+ /** Retain items after this cursor position. */
77
+ // TODO(wittjosiah): Use FeedCursor from @dxos/feed?
78
+ cursor?: string;
79
+ }
80
+
81
+ //
82
+ // Factory
83
+ //
84
+
85
+ /**
86
+ * Creates a new feed object.
87
+ *
88
+ * @example
89
+ * ```ts
90
+ * const feed = Feed.make({ name: 'notifications', kind: 'org.dxos.plugin.notifications.v1' });
91
+ * ```
92
+ */
93
+ // TODO(wittjosiah): How to control the feed namespace (data/trace)? Why do feeds have namespaces?
94
+ export const make = (props: Obj.MakeProps<typeof Feed> = {}): Feed => Obj.make(Feed, props);
95
+
96
+ /**
97
+ * Reads the queue DXN from feed metadata.
98
+ *
99
+ * @deprecated
100
+ */
101
+ // TODO(wittjosiah): Align backing feed dxn's with object DXN.
102
+ export const getQueueDxn = (feed: Feed): DXN | undefined => {
103
+ const keys = Obj.getKeys(feed, DXN_KEY);
104
+ return keys.length === 0 ? undefined : DXN.parse(keys[0].id);
105
+ };
106
+
107
+ //
108
+ // Service
109
+ //
110
+
111
+ /**
112
+ * Effect service for feed operations.
113
+ * Provides the bridge to the underlying storage implementation.
114
+ * Must be provided by the application layer (e.g., echo-db).
115
+ */
116
+ export class Service extends Context.Tag('@dxos/echo/Feed/Service')<
117
+ Service,
118
+ {
119
+ /**
120
+ * Appends items to a feed.
121
+ */
122
+ append(feed: Feed, items: Entity.Unknown[]): Promise<void>;
123
+
124
+ /**
125
+ * Removes items from a feed by ID.
126
+ */
127
+ // TODO(dmaretskyi): Change type to ObjectId.
128
+ remove(feed: Feed, ids: string[]): Promise<void>;
129
+
130
+ /**
131
+ * Queries items in a feed.
132
+ */
133
+ query: {
134
+ <Q extends Query.Any>(feed: Feed, query: Q): QueryResult.QueryResult<Query.Type<Q>>;
135
+ <F extends Filter.Any>(feed: Feed, filter: F): QueryResult.QueryResult<Filter.Type<F>>;
136
+ };
137
+ }
138
+ >() {}
139
+
140
+ /**
141
+ * Layer that provides a Feed service that throws when accessed.
142
+ * Useful as a default layer when no feed service is available.
143
+ */
144
+ export const notAvailable: Layer.Layer<Service> = Layer.succeed(Service, {
145
+ append: () => {
146
+ throw new Error('Feed.Service not available');
147
+ },
148
+ remove: () => {
149
+ throw new Error('Feed.Service not available');
150
+ },
151
+ query: () => {
152
+ throw new Error('Feed.Service not available');
153
+ },
154
+ } as Context.Tag.Service<Service>);
155
+
156
+ //
157
+ // Operations
158
+ //
159
+
160
+ /**
161
+ * Appends items to a feed.
162
+ *
163
+ * @example
164
+ * ```ts
165
+ * yield* Feed.append(feed, [Obj.make(Notification, { title: 'Hello' })]);
166
+ * ```
167
+ */
168
+ export const append = (feed: Feed, items: Entity.Unknown[]): Effect.Effect<void, never, Service> =>
169
+ Effect.gen(function* () {
170
+ const service = yield* Service;
171
+ yield* Effect.promise(() => service.append(feed, items));
172
+ });
173
+
174
+ /**
175
+ * Removes items from a feed.
176
+ *
177
+ * @example
178
+ * ```ts
179
+ * yield* Feed.remove(feed, [item]);
180
+ * ```
181
+ */
182
+ // TODO(dmaretskyi): Should we allow snapshots here? - what does it mean to remove a snapshot?
183
+ export const remove = (feed: Feed, items: (Entity.Unknown | Obj.Snapshot)[]): Effect.Effect<void, never, Service> =>
184
+ Effect.gen(function* () {
185
+ const service = yield* Service;
186
+ const ids = items.map((item) => item.id);
187
+ yield* Effect.promise(() => service.remove(feed, ids));
188
+ });
189
+
190
+ /**
191
+ * Creates a reactive query over items in a feed.
192
+ *
193
+ * @example
194
+ * ```ts
195
+ * const result = yield* Feed.query(feed, Filter.type(Person));
196
+ * ```
197
+ */
198
+ // TODO(dmaretskyi): Suport chained queries:
199
+ // const result = yield* feed.pipe(Feed.query(Filter.type(Person))); result.subscribe(...)
200
+ // const objects = yield* feed.pipe(Feed.query(Filter.type(Person))).run;
201
+ // const object = yield* feed.pipe(Feed.query(Filter.type(Person))).first;
202
+ // ... unify for Database and schema queries.
203
+ export const query: {
204
+ <Q extends Query.Any>(feed: Feed, query: Q): Effect.Effect<QueryResult.QueryResult<Query.Type<Q>>, never, Service>;
205
+ <F extends Filter.Any>(feed: Feed, filter: F): Effect.Effect<QueryResult.QueryResult<Filter.Type<F>>, never, Service>;
206
+ } = (feed: Feed, queryOrFilter: Query.Any | Filter.Any) =>
207
+ Service.pipe(Effect.map((service) => service.query(feed, queryOrFilter as any) as QueryResult.QueryResult<any>));
208
+
209
+ /**
210
+ * Executes a feed query once and returns the results.
211
+ *
212
+ * @example
213
+ * ```ts
214
+ * const items = yield* Feed.runQuery(feed, Filter.type(Person));
215
+ * ```
216
+ */
217
+ export const runQuery: {
218
+ <Q extends Query.Any>(feed: Feed, query: Q): Effect.Effect<Query.Type<Q>[], never, Service>;
219
+ <F extends Filter.Any>(feed: Feed, filter: F): Effect.Effect<Filter.Type<F>[], never, Service>;
220
+ } = (feed: Feed, queryOrFilter: Query.Any | Filter.Any) =>
221
+ query(feed, queryOrFilter as any).pipe(Effect.flatMap((queryResult) => Effect.promise(() => queryResult.run())));
222
+
223
+ /**
224
+ * Creates a cursor for iterating over feed items.
225
+ * Currently stubbed — cursor operations are not yet implemented.
226
+ *
227
+ * @example
228
+ * ```ts
229
+ * const cursor = yield* Feed.cursor<Person>(feed);
230
+ * const item = yield* Feed.next(cursor);
231
+ * ```
232
+ */
233
+ // TODO(wittjosiah): Implement cursor operations. Use Effect streams?
234
+ export const cursor = <T = Obj.Snapshot>(_feed: Feed): Effect.Effect<Cursor<T>, never, Service> =>
235
+ Effect.succeed({ _tag: 'Cursor' } as Cursor<T>);
236
+
237
+ /**
238
+ * Returns the next item from a feed cursor.
239
+ * Currently stubbed — cursor operations are not yet implemented.
240
+ */
241
+ export const next = <T = Obj.Snapshot>(_cursor: Cursor<T>): Effect.Effect<T, never, Service> =>
242
+ Effect.die('Feed.next is not yet implemented');
243
+
244
+ /**
245
+ * Returns the next item from a feed cursor as an Option.
246
+ * Currently stubbed — cursor operations are not yet implemented.
247
+ */
248
+ export const nextOption = <T = Obj.Snapshot>(_cursor: Cursor<T>): Effect.Effect<Option.Option<T>, never, Service> =>
249
+ Effect.die('Feed.nextOption is not yet implemented');
250
+
251
+ /**
252
+ * Sets the local retention policy for a feed.
253
+ * Currently stubbed — queues do not yet support retention.
254
+ *
255
+ * @example
256
+ * ```ts
257
+ * yield* Feed.setRetention(feed, { count: 1000 });
258
+ * ```
259
+ */
260
+ // TODO(feed): Implement when queue retention is supported.
261
+ export const setRetention = (_feed: Feed, _options: RetentionOptions): Effect.Effect<void, never, Service> =>
262
+ Effect.void;
package/src/Filter.ts CHANGED
@@ -2,15 +2,18 @@
2
2
  // Copyright 2025 DXOS.org
3
3
  //
4
4
 
5
+ // @import-as-namespace
6
+
5
7
  import * as Match from 'effect/Match';
6
8
  import * as Schema from 'effect/Schema';
9
+ import * as SchemaAST from 'effect/SchemaAST';
7
10
  import type * as Types from 'effect/Types';
8
11
 
9
12
  import { type ForeignKey, type QueryAST } from '@dxos/echo-protocol';
10
13
  import { assertArgument } from '@dxos/invariant';
11
14
  import { DXN, ObjectId } from '@dxos/keys';
12
15
 
13
- import { getTypeDXNFromSpecifier } from './internal';
16
+ import * as internal from './internal';
14
17
  import * as Ref from './Ref';
15
18
 
16
19
  export interface Filter<T> {
@@ -30,7 +33,7 @@ export type Any = Filter<any>;
30
33
  export type Type<F extends Any> = F extends Filter<infer T> ? T : never;
31
34
 
32
35
  class FilterClass implements Any {
33
- private static variance: Any['~Filter'] = {} as Any['~Filter'];
36
+ private static 'variance': Any['~Filter'] = {} as Any['~Filter'];
34
37
 
35
38
  constructor(public readonly ast: QueryAST.Filter) {}
36
39
 
@@ -101,7 +104,19 @@ export const type = <S extends Schema.Schema.All>(
101
104
  schema: S | string,
102
105
  props?: Props<Schema.Schema.Type<S>>,
103
106
  ): Filter<Schema.Schema.Type<S>> => {
104
- const dxn = getTypeDXNFromSpecifier(schema);
107
+ if (Schema.isSchema(schema) && SchemaAST.isUnion(schema.ast)) {
108
+ const typenames = schema.ast.types.map((type) => internal.getTypeDXNFromSpecifier(Schema.make(type)));
109
+ return new FilterClass({
110
+ type: 'or',
111
+ filters: typenames.map((typename) => ({
112
+ type: 'object',
113
+ typename: typename.toString(),
114
+ props: {},
115
+ })),
116
+ });
117
+ }
118
+
119
+ const dxn = internal.getTypeDXNFromSpecifier(schema);
105
120
  return new FilterClass({
106
121
  type: 'object',
107
122
  typename: dxn.toString(),
@@ -180,7 +195,7 @@ export const foreignKeys = <S extends Schema.Schema.All>(
180
195
  schema: S | string,
181
196
  keys: ForeignKey[],
182
197
  ): Filter<Schema.Schema.Type<S>> => {
183
- const dxn = getTypeDXNFromSpecifier(schema);
198
+ const dxn = internal.getTypeDXNFromSpecifier(schema);
184
199
  return new FilterClass({
185
200
  type: 'object',
186
201
  typename: dxn.toString(),
package/src/Format.ts CHANGED
@@ -2,8 +2,8 @@
2
2
  // Copyright 2025 DXOS.org
3
3
  //
4
4
 
5
- import { type TypeFormat as Format } from './internal';
5
+ import type * as internal from './internal';
6
6
 
7
- export * from './internal/formats';
7
+ export * from './internal/Format';
8
8
 
9
- export type { Format };
9
+ export type Format = internal.TypeFormat;
package/src/Hypergraph.ts CHANGED
@@ -6,7 +6,7 @@ import { type DXN } from '@dxos/keys';
6
6
 
7
7
  import type * as Database from './Database';
8
8
  import type * as Entity from './Entity';
9
- import { type AnyProperties } from './internal';
9
+ import type * as internal from './internal';
10
10
  import type * as Key from './Key';
11
11
  import type * as Ref from './Ref';
12
12
  import type * as SchemaRegistry from './SchemaRegistry';
@@ -39,13 +39,12 @@ export interface RefResolverOptions {
39
39
  * Middleware to change the resolved object before returning it.
40
40
  * @deprecated On track to be removed.
41
41
  */
42
- middleware?: (obj: AnyProperties) => AnyProperties;
42
+ middleware?: (obj: internal.AnyProperties) => internal.AnyProperties;
43
43
  }
44
44
 
45
45
  /**
46
- *
46
+ * Manages cross-space database interactions.
47
47
  */
48
- // TODO(burdon): Comment required.
49
48
  export interface Hypergraph extends Database.Queryable {
50
49
  get schemaRegistry(): SchemaRegistry.SchemaRegistry;
51
50
 
@@ -71,4 +70,10 @@ export interface Hypergraph extends Database.Queryable {
71
70
  */
72
71
  // TODO(dmaretskyi): Restructure API: Remove middleware.
73
72
  createRefResolver(options: RefResolverOptions): Ref.Resolver;
73
+
74
+ /**
75
+ * Get a database by space ID.
76
+ * @returns The database for the given space ID, or undefined if not found.
77
+ */
78
+ getDatabase(spaceId: Key.SpaceId): Database.Database | undefined;
74
79
  }
package/src/JsonSchema.ts CHANGED
@@ -2,15 +2,25 @@
2
2
  // Copyright 2025 DXOS.org
3
3
  //
4
4
 
5
+ // @import-as-namespace
6
+
5
7
  import type * as Schema from 'effect/Schema';
6
8
 
7
- import { JsonSchemaType } from './internal';
9
+ import * as jsonSchemaInternal from './internal/JsonSchema';
10
+
11
+ /**
12
+ * Decode JSON Schema to Effect Schema.
13
+ */
14
+ export const toEffectSchema = jsonSchemaInternal.toEffectSchema;
8
15
 
9
- export { toEffectSchema, toJsonSchema } from './internal';
16
+ /**
17
+ * Encode Effect Schema to JSON Schema.
18
+ */
19
+ export const toJsonSchema = jsonSchemaInternal.toJsonSchema;
10
20
 
11
21
  /**
12
22
  * Serializable JsonSchema type definition.
13
23
  */
14
- export type JsonSchema = JsonSchemaType;
24
+ export type JsonSchema = jsonSchemaInternal.JsonSchemaType;
15
25
 
16
- export const JsonSchema: Schema.Schema<JsonSchemaType> = JsonSchemaType;
26
+ export const JsonSchema: Schema.Schema<jsonSchemaInternal.JsonSchemaType> = jsonSchemaInternal.JsonSchemaType;