@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
@@ -0,0 +1,33 @@
1
+ //
2
+ // Copyright 2025 DXOS.org
3
+ //
4
+
5
+ import { describe, expect, test } from 'vitest';
6
+
7
+ import * as Obj from './Obj';
8
+ import { TestSchema } from './testing';
9
+
10
+ describe('Hierarchy', () => {
11
+ test('setParent and getParent', async () => {
12
+ const parent = Obj.make(TestSchema.Organization, { name: 'parent' });
13
+ const child = Obj.make(TestSchema.Person, { name: 'child' });
14
+ expect(Obj.getParent(child)).toBeUndefined();
15
+
16
+ Obj.setParent(child, parent);
17
+ expect(Obj.getParent(child)).toBe(parent);
18
+
19
+ Obj.setParent(child, undefined);
20
+ expect(Obj.getParent(child)).toBeUndefined();
21
+ });
22
+
23
+ test('create object with Obj.Parent in props', () => {
24
+ const parent = Obj.make(TestSchema.Organization, { name: 'DXOS' });
25
+ const child = Obj.make(TestSchema.Person, {
26
+ [Obj.Parent]: parent,
27
+ name: 'John',
28
+ });
29
+
30
+ expect(child.name).toBe('John');
31
+ expect(Obj.getParent(child)).toBe(parent);
32
+ });
33
+ });
package/src/index.ts CHANGED
@@ -10,6 +10,7 @@ export * as Annotation from './Annotation';
10
10
  export * as Database from './Database';
11
11
  export * as Entity from './Entity';
12
12
  export * as Err from './Err';
13
+ export * as Feed from './Feed';
13
14
  export * as Filter from './Filter';
14
15
  export * as Format from './Format';
15
16
  export * as Hypergraph from './Hypergraph';
@@ -24,3 +25,7 @@ export * as Relation from './Relation';
24
25
  export * as SchemaRegistry from './SchemaRegistry';
25
26
  export * as Tag from './Tag';
26
27
  export * as Type from './Type';
28
+ export * as Collection from './Collection';
29
+ export * as View from './View';
30
+ export * as Dataset from './Dataset';
31
+ export * as Extension from './Extension';
@@ -5,7 +5,7 @@
5
5
  import * as Schema from 'effect/Schema';
6
6
  import { describe, test } from 'vitest';
7
7
 
8
- import { EchoObjectSchema } from '../entities';
8
+ import { EchoObjectSchema } from '../Entity';
9
9
 
10
10
  import { LabelAnnotation, TypenameSchema, VersionSchema, getLabelWithSchema } from './annotations';
11
11
 
@@ -20,7 +20,7 @@ type TestObject = Schema.Schema.Type<typeof TestObject>;
20
20
 
21
21
  const TestEchoSchema = TestObject.pipe(
22
22
  EchoObjectSchema({
23
- typename: 'dxos.org/type/Test',
23
+ typename: 'org.dxos.type.test',
24
24
  version: '0.1.0',
25
25
  }),
26
26
  );
@@ -30,10 +30,10 @@ type TestEchoSchema = Schema.Schema.Type<typeof TestEchoSchema>;
30
30
  describe('annotations', () => {
31
31
  describe('Typename', () => {
32
32
  test('should validate typename', ({ expect }) => {
33
- // Valid.
34
- expect(TypenameSchema.make('dxos.org/type/foo')).to.exist;
35
- expect(TypenameSchema.make('dxos.org/type/foo-bar')).to.exist;
36
- expect(TypenameSchema.make('dxos.org/type/foo_bar')).to.exist;
33
+ // Valid (reverse-DNS format).
34
+ expect(TypenameSchema.make('org.dxos.type.foo')).to.exist;
35
+ expect(TypenameSchema.make('org.dxos.type.fooBar')).to.exist;
36
+ expect(TypenameSchema.make('org.dxos.type.foobar')).to.exist;
37
37
 
38
38
  // Invalid.
39
39
  expect(() => TypenameSchema.make('dxn:dxos.org')).to.throw();
@@ -82,6 +82,56 @@ describe('annotations', () => {
82
82
  expect(getLabelWithSchema(TestObject, obj)).toBeUndefined();
83
83
  });
84
84
 
85
+ test('should skip empty string and fallback to next path', ({ expect }) => {
86
+ const obj: TestObject = {
87
+ name: '',
88
+ fallbackName: 'Fallback Name',
89
+ other: 'Other',
90
+ };
91
+
92
+ expect(getLabelWithSchema(TestObject, obj)).toEqual('Fallback Name');
93
+ });
94
+
95
+ test('should skip whitespace-only string and fallback to next path', ({ expect }) => {
96
+ const obj: TestObject = {
97
+ name: ' ',
98
+ fallbackName: 'Fallback Name',
99
+ other: 'Other',
100
+ };
101
+
102
+ expect(getLabelWithSchema(TestObject, obj)).toEqual('Fallback Name');
103
+ });
104
+
105
+ test('should return undefined if all paths are empty strings', ({ expect }) => {
106
+ const obj: TestObject = {
107
+ name: '',
108
+ fallbackName: '',
109
+ other: 'Other',
110
+ };
111
+
112
+ expect(getLabelWithSchema(TestObject, obj)).toBeUndefined();
113
+ });
114
+
115
+ test('should return undefined if all paths are whitespace-only', ({ expect }) => {
116
+ const obj: TestObject = {
117
+ name: ' ',
118
+ fallbackName: '\t\n',
119
+ other: 'Other',
120
+ };
121
+
122
+ expect(getLabelWithSchema(TestObject, obj)).toBeUndefined();
123
+ });
124
+
125
+ test('should preserve original string with leading/trailing whitespace when valid', ({ expect }) => {
126
+ const obj: TestObject = {
127
+ name: ' Valid Name ',
128
+ fallbackName: 'Fallback Name',
129
+ other: 'Other',
130
+ };
131
+
132
+ expect(getLabelWithSchema(TestObject, obj)).toEqual(' Valid Name ');
133
+ });
134
+
85
135
  test('should return label from echo object', ({ expect }) => {
86
136
  const obj: TestEchoSchema = {
87
137
  id: 'test',
@@ -13,9 +13,10 @@ import { assertArgument, invariant } from '@dxos/invariant';
13
13
  import { DXN } from '@dxos/keys';
14
14
  import { type Primitive } from '@dxos/util';
15
15
 
16
- import { type AnyProperties, EntityKind, TypeId, getSchema } from '../types';
16
+ import { type Mutable } from '../common/proxy';
17
+ import { type AnyProperties, EntityKind, TypeId, getSchema } from '../common/types';
17
18
 
18
- import { createAnnotationHelper } from './util';
19
+ import { type AnnotationHelper, createAnnotationHelper } from './util';
19
20
 
20
21
  /**
21
22
  * @internal
@@ -87,16 +88,17 @@ export const getTypeDXNFromSpecifier = (input: Schema.Schema.All | string): DXN
87
88
 
88
89
  /**
89
90
  * Fully qualified globally unique typename.
90
- * Example: `dxos.org/type/Message`
91
- */
92
- // TODO(burdon): Reconcile with short DXN format.
93
- // TODO(burdon): Change "/type" => "/schema" throughout.
94
- export const TypenameSchema = Schema.String.pipe(Schema.pattern(/^[a-zA-Z]\w+\.[a-zA-Z]\w{1,}\/[\w/_-]+$/)).annotations(
95
- {
96
- description: 'Fully qualified globally unique typename',
97
- example: 'dxos.org/type/Message',
98
- },
99
- );
91
+ * Example: `org.dxos.type.message`
92
+ */
93
+ // TODO(wittjosiah): Factor out to DXN spec.
94
+ // TODO(wittjosiah): Switch to atproto NSID regex once legacy typenames are fully migrated:
95
+ // /^[a-zA-Z]([a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(\.[a-zA-Z0-9]([a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)+(\.[a-zA-Z]([a-zA-Z0-9]{0,62})?)$/
96
+ export const TypenameSchema = Schema.String.pipe(
97
+ Schema.pattern(/^[a-zA-Z][a-zA-Z0-9]*(\.[a-zA-Z][a-zA-Z0-9-]*){2,}$/),
98
+ ).annotations({
99
+ description: 'Fully qualified globally unique typename in reverse-DNS form.',
100
+ example: 'org.dxos.type.message',
101
+ });
100
102
 
101
103
  /**
102
104
  * Semantic version format: `major.minor.patch`
@@ -175,7 +177,7 @@ export const getSchemaVersion = (schema: Schema.Schema.All): string | undefined
175
177
  /**
176
178
  * Gets the typename of the object without the version.
177
179
  * Returns only the name portion, not the DXN.
178
- * @example "example.org/type/Contact"
180
+ * @example "org.example.type.contact"
179
181
  *
180
182
  * @internal (use Obj.getTypename)
181
183
  */
@@ -207,7 +209,7 @@ export const setTypename = (obj: any, typename: DXN): void => {
207
209
  /**
208
210
  * @returns Object type as {@link DXN}.
209
211
  * @returns undefined if the object doesn't have a type.
210
- * @example `dxn:example.com/type/Person:1.0.0`
212
+ * @example `dxn:com.example.type.person:1.0.0`
211
213
  *
212
214
  * @internal (use Obj.getTypeDXN)
213
215
  */
@@ -337,6 +339,7 @@ export const LabelAnnotation = createAnnotationHelper<string[]>(LabelAnnotationI
337
339
  /**
338
340
  * Returns the label for a given object based on {@link LabelAnnotationId}.
339
341
  * Lower-level version that requires explicit schema parameter.
342
+ * Skips empty strings and whitespace-only strings, continuing to the next field.
340
343
  */
341
344
  // TODO(burdon): Convert to JsonPath?
342
345
  export const getLabelWithSchema = <S extends Schema.Schema.Any>(
@@ -352,7 +355,13 @@ export const getLabelWithSchema = <S extends Schema.Schema.Any>(
352
355
  );
353
356
  const value = getField(object, accessor as JsonPath);
354
357
  switch (typeof value) {
355
- case 'string':
358
+ case 'string': {
359
+ const trimmed = value.trim();
360
+ if (trimmed.length > 0) {
361
+ return value;
362
+ }
363
+ continue;
364
+ }
356
365
  case 'number':
357
366
  case 'boolean':
358
367
  case 'bigint':
@@ -458,3 +467,113 @@ export type GeneratorAnnotationValue =
458
467
  };
459
468
 
460
469
  export const GeneratorAnnotation = createAnnotationHelper<GeneratorAnnotationValue>(GeneratorAnnotationId);
470
+
471
+ interface MakeAnnoationsProps<T> {
472
+ id: string;
473
+ schema: Schema.Schema<T, any, never>;
474
+ }
475
+
476
+ // TODO(wittjosiah): Comment.
477
+ export const makeUserAnnotation = <T>(props: MakeAnnoationsProps<T>): AnnotationHelper<T> => {
478
+ assertArgument(
479
+ /^[a-z][a-z0-9]*(\.[a-z][a-z0-9-]*){2,}$/.test(props.id),
480
+ 'id',
481
+ 'Annotation id must be in the FQN format (org.dxos.annotation.example).',
482
+ );
483
+
484
+ const getFromAst = (ast: SchemaAST.AST) =>
485
+ SchemaAST.getAnnotation<PropertyMetaAnnotation>(PropertyMetaAnnotationId)(ast).pipe(
486
+ Option.map((meta) => meta[props.id] as unknown),
487
+ Option.map(Schema.decodeUnknownSync(props.schema)),
488
+ );
489
+
490
+ return {
491
+ get: (schema) => getFromAst(schema.ast),
492
+ getFromAst: (ast) => getFromAst(ast),
493
+ set: (value) =>
494
+ PropertyMeta(props.id, Schema.encodeSync(props.schema)(value)) as <S extends Schema.Schema.Any>(schema: S) => S,
495
+ };
496
+ };
497
+
498
+ const IconAnnotationSchema = Schema.Struct({
499
+ /**
500
+ * Phosphor icon name (e.g., 'ph--user--regular', 'ph--cube--regular', 'ph--link--regular ', etc.)
501
+ */
502
+ icon: Schema.String.pipe(Schema.pattern(/^ph--[a-z-]+--[a-z]+$/)),
503
+
504
+ /**
505
+ * Color name.
506
+ *
507
+ * List of colors:
508
+ * - 'red'
509
+ * - 'orange'
510
+ * - 'amber'
511
+ * - 'yellow'
512
+ * - 'lime'
513
+ * - 'green'
514
+ * - 'emerald'
515
+ * - 'teal'
516
+ * - 'cyan'
517
+ * - 'violet'
518
+ * - 'purple'
519
+ * - 'fuchsia'
520
+ * - 'pink'
521
+ * - 'rose'
522
+ */
523
+
524
+ hue: Schema.optional(Schema.String),
525
+ });
526
+
527
+ export interface IconAnnotation extends Schema.Schema.Type<typeof IconAnnotationSchema> {}
528
+
529
+ /**
530
+ * Icon to render in the UI.
531
+ */
532
+ export const IconAnnotation = makeUserAnnotation<IconAnnotation>({
533
+ id: 'org.dxos.annotation.icon',
534
+ schema: IconAnnotationSchema,
535
+ });
536
+
537
+ /**
538
+ * Get the label of an entity.
539
+ * Accepts both reactive entities and snapshots.
540
+ */
541
+ export const getLabel = (entity: AnyProperties): string | undefined => {
542
+ const schema = getSchema(entity);
543
+ if (schema != null) {
544
+ return getLabelWithSchema(schema, entity);
545
+ }
546
+ };
547
+
548
+ /**
549
+ * Set the label of an entity.
550
+ * Must be called within an Obj.change or Relation.change callback.
551
+ */
552
+ export const setLabel = (entity: Mutable<AnyProperties>, label: string) => {
553
+ const schema = getSchema(entity);
554
+ if (schema != null) {
555
+ setLabelWithSchema(schema, entity, label);
556
+ }
557
+ };
558
+
559
+ /**
560
+ * Get the description of an entity.
561
+ * Accepts both reactive entities and snapshots.
562
+ */
563
+ export const getDescription = (entity: AnyProperties): string | undefined => {
564
+ const schema = getSchema(entity);
565
+ if (schema != null) {
566
+ return getDescriptionWithSchema(schema, entity);
567
+ }
568
+ };
569
+
570
+ /**
571
+ * Set the description of an entity.
572
+ * Must be called within an Obj.change or Relation.change callback.
573
+ */
574
+ export const setDescription = (entity: Mutable<AnyProperties>, description: string) => {
575
+ const schema = getSchema(entity);
576
+ if (schema != null) {
577
+ setDescriptionWithSchema(schema, entity, description);
578
+ }
579
+ };
@@ -3,4 +3,5 @@
3
3
  //
4
4
 
5
5
  export * from './annotations';
6
+ export * from './sorting';
6
7
  export * from './util';
@@ -2,10 +2,9 @@
2
2
  // Copyright 2025 DXOS.org
3
3
  //
4
4
 
5
- import { getTypename } from '../annotations';
6
- import type { AnyEntity } from '../types';
5
+ import type { AnyEntity } from '../common/types';
7
6
 
8
- import { getLabel } from './annotations';
7
+ import { getLabel, getTypename } from './annotations';
9
8
 
10
9
  /**
11
10
  * String comparison helper for sorting.
@@ -9,14 +9,27 @@ import * as SchemaAST from 'effect/SchemaAST';
9
9
  import { assertArgument } from '@dxos/invariant';
10
10
  import { DXN } from '@dxos/keys';
11
11
 
12
- import { EntityKind } from '../types';
12
+ import { EntityKind } from '../common/types';
13
13
 
14
14
  export interface AnnotationHelper<T> {
15
+ /**
16
+ * Get the annotation value from the schema.
17
+ */
15
18
  get: (schema: Schema.Schema.Any) => Option.Option<T>;
19
+ /**
20
+ * Get the annotation value from the AST.
21
+ */
16
22
  getFromAst: (ast: SchemaAST.AST) => Option.Option<T>;
23
+ /**
24
+ * Set the annotation value on the schema.
25
+ */
17
26
  set: (value: T) => <S extends Schema.Schema.Any>(schema: S) => S;
18
27
  }
19
28
 
29
+ /**
30
+ * Note: only for system annotations.
31
+ */
32
+ // TODO(dmaretskyi): Rename to createSystemAnnotationHelper.
20
33
  export const createAnnotationHelper = <T>(id: symbol): AnnotationHelper<T> => {
21
34
  return {
22
35
  get: (schema) => SchemaAST.getAnnotation(schema.ast, id),
@@ -6,8 +6,10 @@ import { invariant } from '@dxos/invariant';
6
6
  import { type DXN } from '@dxos/keys';
7
7
  import { assumeType } from '@dxos/util';
8
8
 
9
- import { type InternalObjectProps, ObjectDatabaseId, getObjectDXN } from '../entities';
10
- import type { AnyEntity } from '../types';
9
+ import type { AnyEntity } from '../common/types';
10
+
11
+ import { type InternalObjectProps, ObjectDatabaseId } from './model';
12
+ import { getObjectDXN } from './util';
11
13
 
12
14
  /**
13
15
  * Get the DXN of an entity.
@@ -8,8 +8,8 @@ import type * as Types from 'effect/Types';
8
8
 
9
9
  import { type ToMutable } from '@dxos/util';
10
10
 
11
- import { type TypeMeta } from '../annotations';
12
- import { type AnyEntity, type EntityKind, SchemaKindId } from '../types';
11
+ import { type TypeMeta } from '../Annotation';
12
+ import { type AnyEntity, type EntityKind, SchemaKindId } from '../common/types';
13
13
 
14
14
  // TODO(burdon): Define Schema type for `typename` and use consistently for all DXN-like properties.
15
15
 
@@ -22,7 +22,9 @@ export interface EchoTypeSchema<
22
22
  ExtraFields = {},
23
23
  K extends EntityKind = EntityKind,
24
24
  Fields extends Schema.Struct.Fields = Schema.Struct.Fields,
25
- > extends TypeMeta,
25
+ >
26
+ extends
27
+ TypeMeta,
26
28
  Schema.AnnotableClass<
27
29
  EchoTypeSchema<Self, ExtraFields, K, Fields>,
28
30
  EchoTypeSchemaProps<Schema.Schema.Type<Self>, ExtraFields>,
@@ -31,7 +33,7 @@ export interface EchoTypeSchema<
31
33
  > {
32
34
  /**
33
35
  * Schema kind key that marks this as an ECHO schema and indicates its kind.
34
- * Makes EchoTypeSchema satisfy the Type.Obj.Any or Type.Relation.Any type.
36
+ * Makes EchoTypeSchema satisfy the Type.AnyObj or Type.Relation.Any type.
35
37
  */
36
38
  readonly [SchemaKindId]: K;
37
39
 
@@ -2,8 +2,10 @@
2
2
  // Copyright 2024 DXOS.org
3
3
  //
4
4
 
5
+ export * from './api';
5
6
  export * from './entity';
6
7
  export * from './model'; // TODO(burdon): Rename.
7
8
  export * from './object';
8
9
  export * from './relation';
9
10
  export * from './util';
11
+ export * from './version';
@@ -12,58 +12,31 @@ import { assumeType } from '@dxos/util';
12
12
  import type * as Database from '../../Database';
13
13
  import {
14
14
  type ATTR_META,
15
+ type ATTR_PARENT,
15
16
  type ATTR_TYPE,
17
+ ATTR_DELETED,
18
+ ATTR_RELATION_SOURCE,
19
+ ATTR_RELATION_TARGET,
20
+ ATTR_SELF_DXN,
16
21
  EntityKind,
17
22
  KindId,
18
23
  type MetaId,
24
+ ObjectDatabaseId,
25
+ ObjectDeletedId,
19
26
  type ObjectMeta,
20
- type SchemaId,
21
- TypeId,
22
- type Version,
23
- } from '../types';
24
-
25
- import {
26
- type ATTR_RELATION_SOURCE,
27
- type ATTR_RELATION_TARGET,
27
+ ObjectVersionId,
28
+ type ParentId,
28
29
  RelationSourceDXNId,
29
30
  RelationSourceId,
30
31
  RelationTargetDXNId,
31
32
  RelationTargetId,
32
- } from './relation';
33
-
34
- //
35
- // Defines the internal model of the echo object.
36
- //
37
-
38
- /**
39
- * Property name for self DXN when object is serialized to JSON.
40
- */
41
- export const ATTR_SELF_DXN = '@dxn';
42
-
43
- /**
44
- * DXN to the object itself.
45
- */
46
- export const SelfDXNId = Symbol.for('@dxos/echo/DXN');
47
-
48
- /**
49
- * Property name for deleted when object is serialized to JSON.
50
- */
51
- export const ATTR_DELETED = '@deleted';
52
-
53
- /**
54
- * Deletion marker.
55
- */
56
- export const ObjectDeletedId = Symbol.for('@dxos/echo/Deleted');
57
-
58
- /**
59
- * Object version accessor symbol.
60
- */
61
- export const ObjectVersionId: unique symbol = Symbol.for('@dxos/echo/Version');
33
+ type SchemaId,
34
+ SelfDXNId,
35
+ TypeId,
36
+ type Version,
37
+ } from '../common/types';
62
38
 
63
- /**
64
- * Object database accessor symbol.
65
- */
66
- export const ObjectDatabaseId = Symbol.for('@dxos/echo/Database');
39
+ export { ATTR_DELETED, ATTR_SELF_DXN, ObjectDatabaseId, ObjectDeletedId, ObjectVersionId, SelfDXNId };
67
40
 
68
41
  /**
69
42
  * Internal runtime representation of an object.
@@ -77,6 +50,7 @@ export interface InternalObjectProps {
77
50
  readonly [SchemaId]: Schema.Schema.AnyNoContext;
78
51
  readonly [TypeId]: DXN;
79
52
  readonly [MetaId]?: ObjectMeta;
53
+ [ParentId]?: InternalObjectProps;
80
54
  readonly [ObjectDatabaseId]?: Database.Database;
81
55
  readonly [ObjectDeletedId]?: boolean;
82
56
  readonly [ObjectVersionId]?: Version;
@@ -101,6 +75,7 @@ export interface ObjectJSON {
101
75
  id: string;
102
76
  [ATTR_TYPE]: DXN.String;
103
77
  [ATTR_SELF_DXN]?: DXN.String;
78
+ [ATTR_PARENT]?: string; // Encoded reference
104
79
  [ATTR_DELETED]?: boolean;
105
80
  [ATTR_META]?: ObjectMetaJSON;
106
81
  [ATTR_RELATION_SOURCE]?: DXN.String;
@@ -7,8 +7,8 @@ import * as SchemaAST from 'effect/SchemaAST';
7
7
 
8
8
  import { invariant } from '@dxos/invariant';
9
9
 
10
- import { type TypeAnnotation, TypeAnnotationId, type TypeMeta, makeTypeJsonSchemaAnnotation } from '../annotations';
11
- import { EntityKind } from '../types';
10
+ import { type TypeAnnotation, TypeAnnotationId, type TypeMeta, makeTypeJsonSchemaAnnotation } from '../Annotation';
11
+ import { EntityKind } from '../common/types';
12
12
 
13
13
  import { type EchoTypeSchema, makeEchoTypeSchema } from './entity';
14
14
 
@@ -17,45 +17,28 @@ import {
17
17
  getSchemaTypename,
18
18
  getTypeIdentifierAnnotation,
19
19
  makeTypeJsonSchemaAnnotation,
20
- } from '../annotations';
21
- import { EntityKind } from '../types';
20
+ } from '../Annotation';
21
+ import {
22
+ ATTR_RELATION_SOURCE,
23
+ ATTR_RELATION_TARGET,
24
+ EntityKind,
25
+ RelationSourceDXNId,
26
+ RelationSourceId,
27
+ RelationTargetDXNId,
28
+ RelationTargetId,
29
+ } from '../common/types';
30
+
31
+ export {
32
+ ATTR_RELATION_SOURCE,
33
+ ATTR_RELATION_TARGET,
34
+ RelationSourceDXNId,
35
+ RelationSourceId,
36
+ RelationTargetDXNId,
37
+ RelationTargetId,
38
+ };
22
39
 
23
40
  import { type EchoTypeSchema, makeEchoTypeSchema } from './entity';
24
41
 
25
- /**
26
- * Property name for relation source when object is serialized to JSON.
27
- */
28
- export const ATTR_RELATION_SOURCE = '@relationSource';
29
-
30
- /**
31
- * Used to access relation source ref on live ECHO objects.
32
- * Reading this symbol must return `Live<EchoObjectSchema<any>>` or a DXN.
33
- */
34
- export const RelationSourceId: unique symbol = Symbol.for('@dxos/echo/RelationSource');
35
-
36
- /**
37
- * Used to access relation source ref on live ECHO objects.
38
- * Reading this symbol must return `Live<EchoObjectSchema<any>>` or a DXN.
39
- */
40
- export const RelationSourceDXNId: unique symbol = Symbol.for('@dxos/echo/RelationSourceDXN');
41
-
42
- /**
43
- * Property name for relation target when object is serialized to JSON.
44
- */
45
- export const ATTR_RELATION_TARGET = '@relationTarget';
46
-
47
- /**
48
- * Used to access relation target ref on live ECHO objects.
49
- * Reading this symbol must return `Live<EchoObjectSchema<any>>` or a DXN.
50
- */
51
- export const RelationTargetId: unique symbol = Symbol.for('@dxos/echo/RelationTarget');
52
-
53
- /**
54
- * Used to access relation target ref on live ECHO objects.
55
- * Reading this symbol must return `Live<EchoObjectSchema<any>>` or a DXN.
56
- */
57
- export const RelationTargetDXNId: unique symbol = Symbol.for('@dxos/echo/RelationTargetDXN');
58
-
59
42
  /**
60
43
  * Source and target props on relations.
61
44
  */
@@ -4,8 +4,9 @@
4
4
 
5
5
  import { assertArgument } from '@dxos/invariant';
6
6
 
7
- import { ObjectVersionId } from '../entities';
8
- import { type AnyEntity, VersionTypeId } from '../types';
7
+ import { type AnyEntity, VersionTypeId } from '../common/types';
8
+
9
+ import { ObjectVersionId } from './model';
9
10
 
10
11
  /**
11
12
  * Represent entity version.
@@ -7,7 +7,7 @@ import { describe, expect, test } from 'vitest';
7
7
 
8
8
  import { log } from '@dxos/log';
9
9
 
10
- import { toJsonSchema } from '../json-schema';
10
+ import { toJsonSchema } from '../JsonSchema';
11
11
 
12
12
  import {
13
13
  DateOnly,
@@ -5,7 +5,7 @@
5
5
  import * as Schema from 'effect/Schema';
6
6
  import { describe, test } from 'vitest';
7
7
 
8
- import { toJsonSchema } from '../json-schema';
8
+ import { toJsonSchema } from '../JsonSchema';
9
9
 
10
10
  import { Format } from './format';
11
11
  import { TypeEnum, TypeFormat, getTypeEnum } from './types';
@@ -7,8 +7,8 @@ import type * as JSONSchema from 'effect/JSONSchema';
7
7
  import * as Option from 'effect/Option';
8
8
  import * as SchemaAST from 'effect/SchemaAST';
9
9
 
10
- import { createAnnotationHelper } from '../annotations';
11
- import { type JsonSchemaType } from '../json-schema';
10
+ import { createAnnotationHelper } from '../Annotation';
11
+ import { type JsonSchemaType } from '../JsonSchema';
12
12
 
13
13
  // TODO(burdon): Rename PropertyType.
14
14
  export type ScalarType =
@@ -135,7 +135,7 @@ export const typeToFormat: Partial<Record<TypeEnum, TypeFormat>> = {
135
135
  * Map of format to type.
136
136
  */
137
137
  export const formatToType: Record<TypeFormat, TypeEnum> = {
138
- [TypeFormat.None]: undefined as any,
138
+ [TypeFormat.None]: TypeEnum.String,
139
139
  [TypeFormat.String]: TypeEnum.String,
140
140
  [TypeFormat.Number]: TypeEnum.Number,
141
141
  [TypeFormat.Boolean]: TypeEnum.Boolean,
@@ -4,9 +4,9 @@
4
4
 
5
5
  import * as SchemaAST from 'effect/SchemaAST';
6
6
 
7
- import { GeneratorAnnotationId, LabelAnnotationId, PropertyMetaAnnotationId } from '../annotations';
8
- import { CurrencyAnnotationId, FormatAnnotationId } from '../formats';
9
- import { type JsonSchemaEchoAnnotations, type JsonSchemaType } from '../json-schema';
7
+ import { GeneratorAnnotationId, LabelAnnotationId, PropertyMetaAnnotationId } from '../Annotation';
8
+ import { CurrencyAnnotationId, FormatAnnotationId } from '../Format';
9
+ import { type JsonSchemaEchoAnnotations, type JsonSchemaType } from '../JsonSchema';
10
10
 
11
11
  //
12
12
  // This file configures annotations for JSON encoding/decoding.