@dxos/echo 0.8.3 → 0.8.4-main.1c7ec43d41

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 (546) hide show
  1. package/README.md +6 -7
  2. package/dist/lib/neutral/Annotation.mjs +39 -0
  3. package/dist/lib/neutral/Database.mjs +49 -0
  4. package/dist/lib/neutral/Entity.mjs +61 -0
  5. package/dist/lib/neutral/Entity.mjs.map +7 -0
  6. package/dist/lib/neutral/Err.mjs +12 -0
  7. package/dist/lib/neutral/Err.mjs.map +7 -0
  8. package/dist/lib/neutral/Extension.mjs +18 -0
  9. package/dist/lib/neutral/Extension.mjs.map +7 -0
  10. package/dist/lib/neutral/Feed.mjs +50 -0
  11. package/dist/lib/neutral/Feed.mjs.map +7 -0
  12. package/dist/lib/neutral/Filter.mjs +72 -0
  13. package/dist/lib/neutral/Filter.mjs.map +7 -0
  14. package/dist/lib/neutral/Format.mjs +66 -0
  15. package/dist/lib/neutral/Format.mjs.map +7 -0
  16. package/dist/lib/neutral/JsonSchema.mjs +19 -0
  17. package/dist/lib/neutral/JsonSchema.mjs.map +7 -0
  18. package/dist/lib/neutral/Key.mjs +12 -0
  19. package/dist/lib/neutral/Key.mjs.map +7 -0
  20. package/dist/lib/neutral/Migration.mjs +17 -0
  21. package/dist/lib/neutral/Migration.mjs.map +7 -0
  22. package/dist/lib/neutral/Obj.mjs +113 -0
  23. package/dist/lib/neutral/Obj.mjs.map +7 -0
  24. package/dist/lib/neutral/Order.mjs +12 -0
  25. package/dist/lib/neutral/Order.mjs.map +7 -0
  26. package/dist/lib/neutral/Query.mjs +38 -0
  27. package/dist/lib/neutral/Query.mjs.map +7 -0
  28. package/dist/lib/neutral/QueryResult.mjs +2 -0
  29. package/dist/lib/neutral/QueryResult.mjs.map +7 -0
  30. package/dist/lib/neutral/Ref.mjs +24 -0
  31. package/dist/lib/neutral/Ref.mjs.map +7 -0
  32. package/dist/lib/neutral/Relation.mjs +94 -0
  33. package/dist/lib/neutral/Relation.mjs.map +7 -0
  34. package/dist/lib/neutral/SchemaRegistry.mjs +2 -0
  35. package/dist/lib/neutral/SchemaRegistry.mjs.map +7 -0
  36. package/dist/lib/neutral/Tag.mjs +29 -0
  37. package/dist/lib/neutral/Tag.mjs.map +7 -0
  38. package/dist/lib/neutral/Type.mjs +37 -0
  39. package/dist/lib/neutral/Type.mjs.map +7 -0
  40. package/dist/lib/neutral/chunk-44HT3MEC.mjs +73 -0
  41. package/dist/lib/neutral/chunk-44HT3MEC.mjs.map +7 -0
  42. package/dist/lib/neutral/chunk-5SL5LDLD.mjs +47 -0
  43. package/dist/lib/neutral/chunk-5SL5LDLD.mjs.map +7 -0
  44. package/dist/lib/neutral/chunk-6VIJV543.mjs +34 -0
  45. package/dist/lib/neutral/chunk-6VIJV543.mjs.map +7 -0
  46. package/dist/lib/neutral/chunk-7RVZT53K.mjs +21 -0
  47. package/dist/lib/neutral/chunk-7RVZT53K.mjs.map +7 -0
  48. package/dist/lib/neutral/chunk-BICZKPQG.mjs +7 -0
  49. package/dist/lib/neutral/chunk-BICZKPQG.mjs.map +7 -0
  50. package/dist/lib/neutral/chunk-FHYIM4RD.mjs +128 -0
  51. package/dist/lib/neutral/chunk-FHYIM4RD.mjs.map +7 -0
  52. package/dist/lib/neutral/chunk-FZHVQEHN.mjs +81 -0
  53. package/dist/lib/neutral/chunk-FZHVQEHN.mjs.map +7 -0
  54. package/dist/lib/neutral/chunk-GWFFC34K.mjs +50 -0
  55. package/dist/lib/neutral/chunk-GWFFC34K.mjs.map +7 -0
  56. package/dist/lib/neutral/chunk-HPNQTEEQ.mjs +56 -0
  57. package/dist/lib/neutral/chunk-HPNQTEEQ.mjs.map +7 -0
  58. package/dist/lib/neutral/chunk-J5LGTIGS.mjs +10 -0
  59. package/dist/lib/neutral/chunk-J5LGTIGS.mjs.map +7 -0
  60. package/dist/lib/neutral/chunk-LVGOVFDV.mjs +125 -0
  61. package/dist/lib/neutral/chunk-LVGOVFDV.mjs.map +7 -0
  62. package/dist/lib/neutral/chunk-MPAI2MHO.mjs +346 -0
  63. package/dist/lib/neutral/chunk-MPAI2MHO.mjs.map +7 -0
  64. package/dist/lib/neutral/chunk-N4B7FHQT.mjs +67 -0
  65. package/dist/lib/neutral/chunk-N4B7FHQT.mjs.map +7 -0
  66. package/dist/lib/neutral/chunk-O5LRY6CO.mjs +734 -0
  67. package/dist/lib/neutral/chunk-O5LRY6CO.mjs.map +7 -0
  68. package/dist/lib/neutral/chunk-QGMIH2SN.mjs +27 -0
  69. package/dist/lib/neutral/chunk-QGMIH2SN.mjs.map +7 -0
  70. package/dist/lib/neutral/chunk-QXIANHKU.mjs +206 -0
  71. package/dist/lib/neutral/chunk-QXIANHKU.mjs.map +7 -0
  72. package/dist/lib/neutral/chunk-RF7ZBZ4A.mjs +354 -0
  73. package/dist/lib/neutral/chunk-RF7ZBZ4A.mjs.map +7 -0
  74. package/dist/lib/neutral/chunk-S7IMFVTB.mjs +132 -0
  75. package/dist/lib/neutral/chunk-S7IMFVTB.mjs.map +7 -0
  76. package/dist/lib/neutral/chunk-SJKBWMJY.mjs +2436 -0
  77. package/dist/lib/neutral/chunk-SJKBWMJY.mjs.map +7 -0
  78. package/dist/lib/neutral/chunk-SUZMWP3Y.mjs +36 -0
  79. package/dist/lib/neutral/chunk-SUZMWP3Y.mjs.map +7 -0
  80. package/dist/lib/neutral/chunk-SW5CUSBY.mjs +420 -0
  81. package/dist/lib/neutral/chunk-SW5CUSBY.mjs.map +7 -0
  82. package/dist/lib/neutral/chunk-TNBK56IN.mjs +350 -0
  83. package/dist/lib/neutral/chunk-TNBK56IN.mjs.map +7 -0
  84. package/dist/lib/neutral/chunk-TRPZU2HV.mjs +402 -0
  85. package/dist/lib/neutral/chunk-TRPZU2HV.mjs.map +7 -0
  86. package/dist/lib/neutral/chunk-TTCSATUD.mjs +42 -0
  87. package/dist/lib/neutral/chunk-TTCSATUD.mjs.map +7 -0
  88. package/dist/lib/neutral/chunk-V72DY6LU.mjs +7 -0
  89. package/dist/lib/neutral/chunk-V72DY6LU.mjs.map +7 -0
  90. package/dist/lib/neutral/chunk-VGKLHHRT.mjs +318 -0
  91. package/dist/lib/neutral/chunk-VGKLHHRT.mjs.map +7 -0
  92. package/dist/lib/neutral/chunk-VYAGNFSJ.mjs +45 -0
  93. package/dist/lib/neutral/chunk-VYAGNFSJ.mjs.map +7 -0
  94. package/dist/lib/neutral/chunk-WRVRDZDA.mjs +270 -0
  95. package/dist/lib/neutral/chunk-WRVRDZDA.mjs.map +7 -0
  96. package/dist/lib/neutral/chunk-ZISMEVKD.mjs +51 -0
  97. package/dist/lib/neutral/chunk-ZISMEVKD.mjs.map +7 -0
  98. package/dist/lib/neutral/index.mjs +107 -0
  99. package/dist/lib/neutral/index.mjs.map +7 -0
  100. package/dist/lib/neutral/internal/index.mjs +476 -0
  101. package/dist/lib/neutral/internal/index.mjs.map +7 -0
  102. package/dist/lib/neutral/meta.json +1 -0
  103. package/dist/lib/neutral/testing/index.mjs +429 -0
  104. package/dist/lib/neutral/testing/index.mjs.map +7 -0
  105. package/dist/types/src/Annotation.d.ts +24 -0
  106. package/dist/types/src/Annotation.d.ts.map +1 -0
  107. package/dist/types/src/Collection.d.ts +16 -0
  108. package/dist/types/src/Collection.d.ts.map +1 -0
  109. package/dist/types/src/Database.d.ts +201 -0
  110. package/dist/types/src/Database.d.ts.map +1 -0
  111. package/dist/types/src/Dataset.d.ts +19 -0
  112. package/dist/types/src/Dataset.d.ts.map +1 -0
  113. package/dist/types/src/Entity.d.ts +174 -0
  114. package/dist/types/src/Entity.d.ts.map +1 -0
  115. package/dist/types/src/Entity.test.d.ts +2 -0
  116. package/dist/types/src/Entity.test.d.ts.map +1 -0
  117. package/dist/types/src/Err.d.ts +107 -0
  118. package/dist/types/src/Err.d.ts.map +1 -0
  119. package/dist/types/src/Extension.d.ts +80 -0
  120. package/dist/types/src/Extension.d.ts.map +1 -0
  121. package/dist/types/src/Extension.test.d.ts +2 -0
  122. package/dist/types/src/Extension.test.d.ts.map +1 -0
  123. package/dist/types/src/Feed.d.ts +182 -0
  124. package/dist/types/src/Feed.d.ts.map +1 -0
  125. package/dist/types/src/Filter.d.ts +149 -0
  126. package/dist/types/src/Filter.d.ts.map +1 -0
  127. package/dist/types/src/Filter.test.d.ts +2 -0
  128. package/dist/types/src/Filter.test.d.ts.map +1 -0
  129. package/dist/types/src/Format.d.ts +4 -0
  130. package/dist/types/src/Format.d.ts.map +1 -0
  131. package/dist/types/src/Hypergraph.d.ts +65 -0
  132. package/dist/types/src/Hypergraph.d.ts.map +1 -0
  133. package/dist/types/src/Json.d.ts +33 -0
  134. package/dist/types/src/Json.d.ts.map +1 -0
  135. package/dist/types/src/Json.test.d.ts +2 -0
  136. package/dist/types/src/Json.test.d.ts.map +1 -0
  137. package/dist/types/src/JsonSchema.d.ts +16 -0
  138. package/dist/types/src/JsonSchema.d.ts.map +1 -0
  139. package/dist/types/src/Key.d.ts +1 -0
  140. package/dist/types/src/Key.d.ts.map +1 -1
  141. package/dist/types/src/Migration.d.ts +57 -0
  142. package/dist/types/src/Migration.d.ts.map +1 -0
  143. package/dist/types/src/Obj.d.ts +474 -35
  144. package/dist/types/src/Obj.d.ts.map +1 -1
  145. package/dist/types/src/Obj.test.d.ts +2 -0
  146. package/dist/types/src/Obj.test.d.ts.map +1 -0
  147. package/dist/types/src/Order.d.ts +16 -0
  148. package/dist/types/src/Order.d.ts.map +1 -0
  149. package/dist/types/src/Query.d.ts +213 -0
  150. package/dist/types/src/Query.d.ts.map +1 -0
  151. package/dist/types/src/Query.test.d.ts +2 -0
  152. package/dist/types/src/Query.test.d.ts.map +1 -0
  153. package/dist/types/src/QueryResult.d.ts +80 -0
  154. package/dist/types/src/QueryResult.d.ts.map +1 -0
  155. package/dist/types/src/Ref.d.ts +61 -11
  156. package/dist/types/src/Ref.d.ts.map +1 -1
  157. package/dist/types/src/Relation.d.ts +290 -21
  158. package/dist/types/src/Relation.d.ts.map +1 -1
  159. package/dist/types/src/Relation.test.d.ts +2 -0
  160. package/dist/types/src/Relation.test.d.ts.map +1 -0
  161. package/dist/types/src/SchemaRegistry.d.ts +84 -0
  162. package/dist/types/src/SchemaRegistry.d.ts.map +1 -0
  163. package/dist/types/src/Tag.d.ts +18 -0
  164. package/dist/types/src/Tag.d.ts.map +1 -0
  165. package/dist/types/src/Type.d.ts +127 -103
  166. package/dist/types/src/Type.d.ts.map +1 -1
  167. package/dist/types/src/Type.test.d.ts +2 -0
  168. package/dist/types/src/Type.test.d.ts.map +1 -0
  169. package/dist/types/src/View.d.ts +68 -0
  170. package/dist/types/src/View.d.ts.map +1 -0
  171. package/dist/types/src/exemplars.test.d.ts +2 -0
  172. package/dist/types/src/exemplars.test.d.ts.map +1 -0
  173. package/dist/types/src/hierarchy.test.d.ts +2 -0
  174. package/dist/types/src/hierarchy.test.d.ts.map +1 -0
  175. package/dist/types/src/index.d.ts +22 -3
  176. package/dist/types/src/index.d.ts.map +1 -1
  177. package/dist/types/src/internal/Annotation/annotations.d.ts +240 -0
  178. package/dist/types/src/internal/Annotation/annotations.d.ts.map +1 -0
  179. package/dist/types/src/internal/Annotation/annotations.test.d.ts +2 -0
  180. package/dist/types/src/internal/Annotation/annotations.test.d.ts.map +1 -0
  181. package/dist/types/src/internal/Annotation/index.d.ts +4 -0
  182. package/dist/types/src/internal/Annotation/index.d.ts.map +1 -0
  183. package/dist/types/src/internal/Annotation/sorting.d.ts +24 -0
  184. package/dist/types/src/internal/Annotation/sorting.d.ts.map +1 -0
  185. package/dist/types/src/internal/Annotation/util.d.ts +39 -0
  186. package/dist/types/src/internal/Annotation/util.d.ts.map +1 -0
  187. package/dist/types/src/internal/Entity/api.d.ts +13 -0
  188. package/dist/types/src/internal/Entity/api.d.ts.map +1 -0
  189. package/dist/types/src/internal/Entity/entity.d.ts +20 -0
  190. package/dist/types/src/internal/Entity/entity.d.ts.map +1 -0
  191. package/dist/types/src/internal/Entity/index.d.ts +8 -0
  192. package/dist/types/src/internal/Entity/index.d.ts.map +1 -0
  193. package/dist/types/src/internal/Entity/model.d.ts +55 -0
  194. package/dist/types/src/internal/Entity/model.d.ts.map +1 -0
  195. package/dist/types/src/internal/Entity/object.d.ts +18 -0
  196. package/dist/types/src/internal/Entity/object.d.ts.map +1 -0
  197. package/dist/types/src/internal/Entity/relation.d.ts +35 -0
  198. package/dist/types/src/internal/Entity/relation.d.ts.map +1 -0
  199. package/dist/types/src/internal/Entity/util.d.ts +2 -0
  200. package/dist/types/src/internal/Entity/util.d.ts.map +1 -0
  201. package/dist/types/src/internal/Entity/version.d.ts +42 -0
  202. package/dist/types/src/internal/Entity/version.d.ts.map +1 -0
  203. package/dist/types/src/internal/Format/date.d.ts +63 -0
  204. package/dist/types/src/internal/Format/date.d.ts.map +1 -0
  205. package/dist/types/src/internal/Format/date.test.d.ts +2 -0
  206. package/dist/types/src/internal/Format/date.test.d.ts.map +1 -0
  207. package/dist/types/src/internal/Format/format.d.ts +32 -0
  208. package/dist/types/src/internal/Format/format.d.ts.map +1 -0
  209. package/dist/types/src/internal/Format/format.test.d.ts +2 -0
  210. package/dist/types/src/internal/Format/format.test.d.ts.map +1 -0
  211. package/dist/types/src/internal/Format/index.d.ts +8 -0
  212. package/dist/types/src/internal/Format/index.d.ts.map +1 -0
  213. package/dist/types/src/internal/Format/number.d.ts +31 -0
  214. package/dist/types/src/internal/Format/number.d.ts.map +1 -0
  215. package/dist/types/src/internal/Format/object.d.ts +35 -0
  216. package/dist/types/src/internal/Format/object.d.ts.map +1 -0
  217. package/dist/types/src/internal/Format/select.d.ts +13 -0
  218. package/dist/types/src/internal/Format/select.d.ts.map +1 -0
  219. package/dist/types/src/internal/Format/string.d.ts +42 -0
  220. package/dist/types/src/internal/Format/string.d.ts.map +1 -0
  221. package/dist/types/src/internal/Format/types.d.ts +72 -0
  222. package/dist/types/src/internal/Format/types.d.ts.map +1 -0
  223. package/dist/types/src/internal/JsonSchema/annotations.d.ts +19 -0
  224. package/dist/types/src/internal/JsonSchema/annotations.d.ts.map +1 -0
  225. package/dist/types/src/internal/JsonSchema/effect-schema.test.d.ts +2 -0
  226. package/dist/types/src/internal/JsonSchema/effect-schema.test.d.ts.map +1 -0
  227. package/dist/types/src/internal/JsonSchema/index.d.ts +5 -0
  228. package/dist/types/src/internal/JsonSchema/index.d.ts.map +1 -0
  229. package/dist/types/src/internal/JsonSchema/json-schema-normalize.d.ts +7 -0
  230. package/dist/types/src/internal/JsonSchema/json-schema-normalize.d.ts.map +1 -0
  231. package/dist/types/src/internal/JsonSchema/json-schema-type.d.ts +351 -0
  232. package/dist/types/src/internal/JsonSchema/json-schema-type.d.ts.map +1 -0
  233. package/dist/types/src/internal/JsonSchema/json-schema.d.ts +30 -0
  234. package/dist/types/src/internal/JsonSchema/json-schema.d.ts.map +1 -0
  235. package/dist/types/src/internal/JsonSchema/json-schema.test.d.ts +2 -0
  236. package/dist/types/src/internal/JsonSchema/json-schema.test.d.ts.map +1 -0
  237. package/dist/types/src/internal/Obj/clone.d.ts +8 -0
  238. package/dist/types/src/internal/Obj/clone.d.ts.map +1 -0
  239. package/dist/types/src/internal/Obj/common.d.ts +18 -0
  240. package/dist/types/src/internal/Obj/common.d.ts.map +1 -0
  241. package/dist/types/src/internal/Obj/create-object.d.ts +39 -0
  242. package/dist/types/src/internal/Obj/create-object.d.ts.map +1 -0
  243. package/dist/types/src/internal/Obj/create-object.test.d.ts +2 -0
  244. package/dist/types/src/internal/Obj/create-object.test.d.ts.map +1 -0
  245. package/dist/types/src/internal/Obj/deleted.d.ts +6 -0
  246. package/dist/types/src/internal/Obj/deleted.d.ts.map +1 -0
  247. package/dist/types/src/internal/Obj/ids.d.ts +6 -0
  248. package/dist/types/src/internal/Obj/ids.d.ts.map +1 -0
  249. package/dist/types/src/internal/Obj/index.d.ts +11 -0
  250. package/dist/types/src/internal/Obj/index.d.ts.map +1 -0
  251. package/dist/types/src/internal/Obj/inspect.d.ts +2 -0
  252. package/dist/types/src/internal/Obj/inspect.d.ts.map +1 -0
  253. package/dist/types/src/internal/Obj/json-serializer.d.ts +45 -0
  254. package/dist/types/src/internal/Obj/json-serializer.d.ts.map +1 -0
  255. package/dist/types/src/internal/Obj/json-serializer.test.d.ts +2 -0
  256. package/dist/types/src/internal/Obj/json-serializer.test.d.ts.map +1 -0
  257. package/dist/types/src/internal/Obj/schema-validator.d.ts +2 -0
  258. package/dist/types/src/internal/Obj/schema-validator.d.ts.map +1 -0
  259. package/dist/types/src/internal/Obj/schema-validator.test.d.ts +2 -0
  260. package/dist/types/src/internal/Obj/schema-validator.test.d.ts.map +1 -0
  261. package/dist/types/src/internal/Obj/set-value.d.ts +7 -0
  262. package/dist/types/src/internal/Obj/set-value.d.ts.map +1 -0
  263. package/dist/types/src/internal/Obj/set-value.test.d.ts +2 -0
  264. package/dist/types/src/internal/Obj/set-value.test.d.ts.map +1 -0
  265. package/dist/types/src/internal/Obj/snapshot.d.ts +6 -0
  266. package/dist/types/src/internal/Obj/snapshot.d.ts.map +1 -0
  267. package/dist/types/src/internal/Obj/typed-object.d.ts +25 -0
  268. package/dist/types/src/internal/Obj/typed-object.d.ts.map +1 -0
  269. package/dist/types/src/internal/Obj/typed-object.test.d.ts +2 -0
  270. package/dist/types/src/internal/Obj/typed-object.test.d.ts.map +1 -0
  271. package/dist/types/src/internal/Query.d.ts +10 -0
  272. package/dist/types/src/internal/Query.d.ts.map +1 -0
  273. package/dist/types/src/internal/Ref/index.d.ts +3 -0
  274. package/dist/types/src/internal/Ref/index.d.ts.map +1 -0
  275. package/dist/types/src/internal/Ref/ref-array.d.ts +21 -0
  276. package/dist/types/src/internal/Ref/ref-array.d.ts.map +1 -0
  277. package/dist/types/src/internal/Ref/ref.d.ts +244 -0
  278. package/dist/types/src/internal/Ref/ref.d.ts.map +1 -0
  279. package/dist/types/src/internal/Ref/ref.test.d.ts +2 -0
  280. package/dist/types/src/internal/Ref/ref.test.d.ts.map +1 -0
  281. package/dist/types/src/internal/Type/compose.d.ts +7 -0
  282. package/dist/types/src/internal/Type/compose.d.ts.map +1 -0
  283. package/dist/types/src/internal/Type/compose.test.d.ts +2 -0
  284. package/dist/types/src/internal/Type/compose.test.d.ts.map +1 -0
  285. package/dist/types/src/internal/Type/echo-schema.d.ts +181 -0
  286. package/dist/types/src/internal/Type/echo-schema.d.ts.map +1 -0
  287. package/dist/types/src/internal/Type/index.d.ts +4 -0
  288. package/dist/types/src/internal/Type/index.d.ts.map +1 -0
  289. package/dist/types/src/internal/Type/manipulation.d.ts +10 -0
  290. package/dist/types/src/internal/Type/manipulation.d.ts.map +1 -0
  291. package/dist/types/src/internal/Type/persistent-schema.d.ts +20 -0
  292. package/dist/types/src/internal/Type/persistent-schema.d.ts.map +1 -0
  293. package/dist/types/src/internal/common/api/index.d.ts +11 -0
  294. package/dist/types/src/internal/common/api/index.d.ts.map +1 -0
  295. package/dist/types/src/internal/common/api/meta.d.ts +42 -0
  296. package/dist/types/src/internal/common/api/meta.d.ts.map +1 -0
  297. package/dist/types/src/internal/common/index.d.ts +4 -0
  298. package/dist/types/src/internal/common/index.d.ts.map +1 -0
  299. package/dist/types/src/internal/common/proxy/change-context.d.ts +55 -0
  300. package/dist/types/src/internal/common/proxy/change-context.d.ts.map +1 -0
  301. package/dist/types/src/internal/common/proxy/change.test.d.ts +2 -0
  302. package/dist/types/src/internal/common/proxy/change.test.d.ts.map +1 -0
  303. package/dist/types/src/internal/common/proxy/define-hidden-property.d.ts +5 -0
  304. package/dist/types/src/internal/common/proxy/define-hidden-property.d.ts.map +1 -0
  305. package/dist/types/src/internal/common/proxy/errors.d.ts +19 -0
  306. package/dist/types/src/internal/common/proxy/errors.d.ts.map +1 -0
  307. package/dist/types/src/internal/common/proxy/event-batch.d.ts +10 -0
  308. package/dist/types/src/internal/common/proxy/event-batch.d.ts.map +1 -0
  309. package/dist/types/src/internal/common/proxy/handler.test.d.ts +2 -0
  310. package/dist/types/src/internal/common/proxy/handler.test.d.ts.map +1 -0
  311. package/dist/types/src/internal/common/proxy/index.d.ts +14 -0
  312. package/dist/types/src/internal/common/proxy/index.d.ts.map +1 -0
  313. package/dist/types/src/internal/common/proxy/json-serializer.d.ts +6 -0
  314. package/dist/types/src/internal/common/proxy/json-serializer.d.ts.map +1 -0
  315. package/dist/types/src/internal/common/proxy/make-object.d.ts +14 -0
  316. package/dist/types/src/internal/common/proxy/make-object.d.ts.map +1 -0
  317. package/dist/types/src/internal/common/proxy/ownership.d.ts +57 -0
  318. package/dist/types/src/internal/common/proxy/ownership.d.ts.map +1 -0
  319. package/dist/types/src/internal/common/proxy/proxy-types.d.ts +18 -0
  320. package/dist/types/src/internal/common/proxy/proxy-types.d.ts.map +1 -0
  321. package/dist/types/src/internal/common/proxy/proxy-utils.d.ts +47 -0
  322. package/dist/types/src/internal/common/proxy/proxy-utils.d.ts.map +1 -0
  323. package/dist/types/src/internal/common/proxy/reactive-array.d.ts +8 -0
  324. package/dist/types/src/internal/common/proxy/reactive-array.d.ts.map +1 -0
  325. package/dist/types/src/internal/common/proxy/reactive.d.ts +39 -0
  326. package/dist/types/src/internal/common/proxy/reactive.d.ts.map +1 -0
  327. package/dist/types/src/internal/common/proxy/reactive.test.d.ts +2 -0
  328. package/dist/types/src/internal/common/proxy/reactive.test.d.ts.map +1 -0
  329. package/dist/types/src/internal/common/proxy/schema-validator.d.ts +15 -0
  330. package/dist/types/src/internal/common/proxy/schema-validator.d.ts.map +1 -0
  331. package/dist/types/src/internal/common/proxy/schema.test.d.ts +2 -0
  332. package/dist/types/src/internal/common/proxy/schema.test.d.ts.map +1 -0
  333. package/dist/types/src/internal/common/proxy/symbols.d.ts +3 -0
  334. package/dist/types/src/internal/common/proxy/symbols.d.ts.map +1 -0
  335. package/dist/types/src/internal/common/proxy/typed-handler.d.ts +48 -0
  336. package/dist/types/src/internal/common/proxy/typed-handler.d.ts.map +1 -0
  337. package/dist/types/src/internal/common/proxy/typed-handler.test.d.ts +2 -0
  338. package/dist/types/src/internal/common/proxy/typed-handler.test.d.ts.map +1 -0
  339. package/dist/types/src/internal/common/proxy/typed-object.test.d.ts +2 -0
  340. package/dist/types/src/internal/common/proxy/typed-object.test.d.ts.map +1 -0
  341. package/dist/types/src/internal/common/types/base.d.ts +27 -0
  342. package/dist/types/src/internal/common/types/base.d.ts.map +1 -0
  343. package/dist/types/src/internal/common/types/entity.d.ts +37 -0
  344. package/dist/types/src/internal/common/types/entity.d.ts.map +1 -0
  345. package/dist/types/src/internal/common/types/index.d.ts +7 -0
  346. package/dist/types/src/internal/common/types/index.d.ts.map +1 -0
  347. package/dist/types/src/internal/common/types/meta.d.ts +33 -0
  348. package/dist/types/src/internal/common/types/meta.d.ts.map +1 -0
  349. package/dist/types/src/internal/common/types/model-symbols.d.ts +54 -0
  350. package/dist/types/src/internal/common/types/model-symbols.d.ts.map +1 -0
  351. package/dist/types/src/internal/common/types/typename.d.ts +21 -0
  352. package/dist/types/src/internal/common/types/typename.d.ts.map +1 -0
  353. package/dist/types/src/internal/common/types/version.d.ts +15 -0
  354. package/dist/types/src/internal/common/types/version.d.ts.map +1 -0
  355. package/dist/types/src/internal/index.d.ts +11 -0
  356. package/dist/types/src/internal/index.d.ts.map +1 -0
  357. package/dist/types/src/{test → testing}/api.test.d.ts.map +1 -1
  358. package/dist/types/src/testing/index.d.ts +3 -1
  359. package/dist/types/src/testing/index.d.ts.map +1 -1
  360. package/dist/types/src/testing/test-data.d.ts +18 -0
  361. package/dist/types/src/testing/test-data.d.ts.map +1 -0
  362. package/dist/types/src/testing/test-schema.d.ts +304 -0
  363. package/dist/types/src/testing/test-schema.d.ts.map +1 -0
  364. package/dist/types/src/testing/util.d.ts +21 -0
  365. package/dist/types/src/testing/util.d.ts.map +1 -0
  366. package/dist/types/tsconfig.tsbuildinfo +1 -1
  367. package/package.json +122 -53
  368. package/src/Annotation.ts +49 -0
  369. package/src/Collection.ts +37 -0
  370. package/src/Database.ts +352 -0
  371. package/src/Dataset.ts +26 -0
  372. package/src/Entity.test.ts +22 -0
  373. package/src/Entity.ts +243 -0
  374. package/src/Err.ts +40 -0
  375. package/src/Extension.test.ts +235 -0
  376. package/src/Extension.ts +122 -0
  377. package/src/Feed.ts +304 -0
  378. package/src/Filter.test.ts +90 -0
  379. package/src/Filter.ts +454 -0
  380. package/src/Format.ts +9 -0
  381. package/src/Hypergraph.ts +79 -0
  382. package/src/Json.test.ts +175 -0
  383. package/src/Json.ts +102 -0
  384. package/src/JsonSchema.ts +26 -0
  385. package/src/Key.ts +3 -0
  386. package/src/Migration.ts +94 -0
  387. package/src/Obj.test.ts +539 -0
  388. package/src/Obj.ts +768 -78
  389. package/src/Order.ts +46 -0
  390. package/src/Query.test.ts +822 -0
  391. package/src/Query.ts +567 -0
  392. package/src/QueryResult.ts +106 -0
  393. package/src/Ref.ts +78 -9
  394. package/src/Relation.test.ts +88 -0
  395. package/src/Relation.ts +455 -54
  396. package/src/SchemaRegistry.ts +106 -0
  397. package/src/Tag.ts +41 -0
  398. package/src/Type.test.ts +52 -0
  399. package/src/Type.ts +177 -149
  400. package/src/View.ts +107 -0
  401. package/src/exemplars.test.ts +21 -0
  402. package/src/hierarchy.test.ts +33 -0
  403. package/src/index.ts +25 -4
  404. package/src/internal/Annotation/annotations.test.ts +145 -0
  405. package/src/internal/Annotation/annotations.ts +590 -0
  406. package/src/internal/Annotation/index.ts +7 -0
  407. package/src/internal/Annotation/sorting.ts +51 -0
  408. package/src/internal/Annotation/util.ts +85 -0
  409. package/src/internal/Entity/api.ts +30 -0
  410. package/src/internal/Entity/entity.ts +128 -0
  411. package/src/internal/Entity/index.ts +11 -0
  412. package/src/internal/Entity/model.ts +109 -0
  413. package/src/internal/Entity/object.ts +57 -0
  414. package/src/internal/Entity/relation.ts +154 -0
  415. package/src/internal/Entity/util.ts +33 -0
  416. package/src/internal/Entity/version.ts +96 -0
  417. package/src/internal/Format/date.test.ts +55 -0
  418. package/src/internal/Format/date.ts +217 -0
  419. package/src/internal/Format/format.test.ts +76 -0
  420. package/src/internal/Format/format.ts +54 -0
  421. package/src/internal/Format/index.ts +12 -0
  422. package/src/internal/Format/number.ts +89 -0
  423. package/src/internal/Format/object.ts +80 -0
  424. package/src/internal/Format/select.ts +18 -0
  425. package/src/internal/Format/string.ts +81 -0
  426. package/src/internal/Format/types.ts +186 -0
  427. package/src/internal/JsonSchema/annotations.ts +50 -0
  428. package/src/internal/JsonSchema/effect-schema.test.ts +143 -0
  429. package/src/internal/JsonSchema/index.ts +8 -0
  430. package/src/internal/JsonSchema/json-schema-normalize.ts +111 -0
  431. package/src/internal/JsonSchema/json-schema-type.ts +403 -0
  432. package/src/internal/JsonSchema/json-schema.test.ts +860 -0
  433. package/src/internal/JsonSchema/json-schema.ts +533 -0
  434. package/src/internal/Obj/clone.ts +48 -0
  435. package/src/internal/Obj/common.ts +75 -0
  436. package/src/internal/Obj/create-object.test.ts +114 -0
  437. package/src/internal/Obj/create-object.ts +94 -0
  438. package/src/internal/Obj/deleted.ts +19 -0
  439. package/src/internal/Obj/ids.ts +12 -0
  440. package/src/internal/Obj/index.ts +14 -0
  441. package/src/internal/Obj/inspect.ts +46 -0
  442. package/src/internal/Obj/json-serializer.test.ts +120 -0
  443. package/src/internal/Obj/json-serializer.ts +222 -0
  444. package/src/internal/Obj/schema-validator.test.ts +182 -0
  445. package/src/internal/Obj/schema-validator.ts +6 -0
  446. package/src/internal/Obj/set-value.test.ts +281 -0
  447. package/src/internal/Obj/set-value.ts +165 -0
  448. package/src/internal/Obj/snapshot.ts +105 -0
  449. package/src/internal/Obj/typed-object.test.ts +34 -0
  450. package/src/internal/Obj/typed-object.ts +30 -0
  451. package/src/internal/Query.ts +137 -0
  452. package/src/internal/Ref/index.ts +6 -0
  453. package/src/internal/Ref/ref-array.ts +38 -0
  454. package/src/internal/Ref/ref.test.ts +100 -0
  455. package/src/internal/Ref/ref.ts +589 -0
  456. package/src/internal/Type/compose.test.ts +41 -0
  457. package/src/internal/Type/compose.ts +41 -0
  458. package/src/internal/Type/echo-schema.ts +423 -0
  459. package/src/internal/Type/index.ts +7 -0
  460. package/src/internal/Type/manipulation.ts +92 -0
  461. package/src/internal/Type/persistent-schema.ts +33 -0
  462. package/src/internal/common/README.md +102 -0
  463. package/src/internal/common/api/index.ts +15 -0
  464. package/src/internal/common/api/meta.ts +88 -0
  465. package/src/internal/common/index.ts +7 -0
  466. package/src/internal/common/proxy/change-context.ts +138 -0
  467. package/src/internal/common/proxy/change.test.ts +519 -0
  468. package/src/internal/common/proxy/define-hidden-property.ts +14 -0
  469. package/src/internal/common/proxy/errors.ts +42 -0
  470. package/src/internal/common/proxy/event-batch.ts +44 -0
  471. package/src/internal/common/proxy/handler.test.ts +121 -0
  472. package/src/internal/common/proxy/index.ts +17 -0
  473. package/src/internal/common/proxy/json-serializer.ts +90 -0
  474. package/src/internal/common/proxy/make-object.ts +105 -0
  475. package/src/internal/common/proxy/ownership.ts +252 -0
  476. package/src/internal/common/proxy/proxy-types.ts +23 -0
  477. package/src/internal/common/proxy/proxy-utils.ts +150 -0
  478. package/src/internal/common/proxy/reactive-array.ts +71 -0
  479. package/src/internal/common/proxy/reactive.test.ts +54 -0
  480. package/src/internal/common/proxy/reactive.ts +77 -0
  481. package/src/internal/common/proxy/schema-validator.ts +244 -0
  482. package/src/internal/common/proxy/schema.test.ts +145 -0
  483. package/src/internal/common/proxy/symbols.ts +7 -0
  484. package/src/internal/common/proxy/typed-handler.test.ts +313 -0
  485. package/src/internal/common/proxy/typed-handler.ts +447 -0
  486. package/src/internal/common/proxy/typed-object.test.ts +115 -0
  487. package/src/internal/common/types/base.ts +43 -0
  488. package/src/internal/common/types/entity.ts +54 -0
  489. package/src/internal/common/types/index.ts +10 -0
  490. package/src/internal/common/types/meta.ts +67 -0
  491. package/src/internal/common/types/model-symbols.ts +69 -0
  492. package/src/internal/common/types/typename.ts +55 -0
  493. package/src/internal/common/types/version.ts +19 -0
  494. package/src/internal/index.ts +17 -0
  495. package/src/testing/api.test.ts +125 -0
  496. package/src/testing/index.ts +3 -1
  497. package/src/testing/test-data.ts +189 -0
  498. package/src/testing/test-schema.ts +240 -0
  499. package/src/testing/util.ts +85 -0
  500. package/dist/lib/browser/chunk-UYPR62ZB.mjs +0 -624
  501. package/dist/lib/browser/chunk-UYPR62ZB.mjs.map +0 -7
  502. package/dist/lib/browser/index.mjs +0 -22
  503. package/dist/lib/browser/meta.json +0 -1
  504. package/dist/lib/browser/testing/index.mjs +0 -70
  505. package/dist/lib/browser/testing/index.mjs.map +0 -7
  506. package/dist/lib/node/chunk-4HQE2F3L.cjs +0 -644
  507. package/dist/lib/node/chunk-4HQE2F3L.cjs.map +0 -7
  508. package/dist/lib/node/index.cjs +0 -43
  509. package/dist/lib/node/index.cjs.map +0 -7
  510. package/dist/lib/node/meta.json +0 -1
  511. package/dist/lib/node/testing/index.cjs +0 -89
  512. package/dist/lib/node/testing/index.cjs.map +0 -7
  513. package/dist/lib/node-esm/chunk-BYBICDIO.mjs +0 -624
  514. package/dist/lib/node-esm/chunk-BYBICDIO.mjs.map +0 -7
  515. package/dist/lib/node-esm/index.mjs +0 -22
  516. package/dist/lib/node-esm/meta.json +0 -1
  517. package/dist/lib/node-esm/testing/index.mjs +0 -70
  518. package/dist/lib/node-esm/testing/index.mjs.map +0 -7
  519. package/dist/types/src/experimental/database.d.ts +0 -8
  520. package/dist/types/src/experimental/database.d.ts.map +0 -1
  521. package/dist/types/src/experimental/index.d.ts +0 -1
  522. package/dist/types/src/experimental/index.d.ts.map +0 -1
  523. package/dist/types/src/experimental/queue.d.ts +0 -8
  524. package/dist/types/src/experimental/queue.d.ts.map +0 -1
  525. package/dist/types/src/experimental/space.d.ts +0 -8
  526. package/dist/types/src/experimental/space.d.ts.map +0 -1
  527. package/dist/types/src/query/dsl.d.ts +0 -218
  528. package/dist/types/src/query/dsl.d.ts.map +0 -1
  529. package/dist/types/src/query/dsl.test.d.ts +0 -2
  530. package/dist/types/src/query/dsl.test.d.ts.map +0 -1
  531. package/dist/types/src/query/index.d.ts +0 -2
  532. package/dist/types/src/query/index.d.ts.map +0 -1
  533. package/dist/types/src/testing/types.d.ts +0 -113
  534. package/dist/types/src/testing/types.d.ts.map +0 -1
  535. package/src/experimental/database.ts +0 -11
  536. package/src/experimental/index.ts +0 -7
  537. package/src/experimental/queue.ts +0 -11
  538. package/src/experimental/space.ts +0 -11
  539. package/src/query/dsl.test.ts +0 -323
  540. package/src/query/dsl.ts +0 -646
  541. package/src/query/index.ts +0 -5
  542. package/src/test/api.test.ts +0 -173
  543. package/src/testing/types.ts +0 -91
  544. /package/dist/lib/{browser/index.mjs.map → neutral/Annotation.mjs.map} +0 -0
  545. /package/dist/lib/{node-esm/index.mjs.map → neutral/Database.mjs.map} +0 -0
  546. /package/dist/types/src/{test → testing}/api.test.d.ts +0 -0
package/src/Tag.ts ADDED
@@ -0,0 +1,41 @@
1
+ //
2
+ // Copyright 2025 DXOS.org
3
+ //
4
+
5
+ // @import-as-namespace
6
+
7
+ import * as Schema from 'effect/Schema';
8
+
9
+ import * as internal from './internal';
10
+ import * as Obj from './Obj';
11
+ import * as Type from './Type';
12
+
13
+ export const Tag = Schema.Struct({
14
+ label: Schema.String,
15
+ hue: Schema.optional(Schema.String), // TODO(burdon): Color name?
16
+ }).pipe(
17
+ Type.object({
18
+ typename: 'org.dxos.type.tag',
19
+ version: '0.1.0',
20
+ }),
21
+ internal.LabelAnnotation.set(['label']),
22
+ internal.SystemTypeAnnotation.set(true),
23
+ );
24
+
25
+ export type Tag = Schema.Schema.Type<typeof Tag>;
26
+
27
+ export const make = (props: Obj.MakeProps<typeof Tag>) => Obj.make(Tag, props);
28
+
29
+ export type Map = Record<string, Tag>;
30
+
31
+ export const sortTags = ({ label: a }: Tag, { label: b }: Tag) => a.localeCompare(b);
32
+
33
+ export const createTagList = (tags: Map): Tag[] =>
34
+ Object.entries(tags)
35
+ .map(([id, tag]) => ({ ...tag, id }))
36
+ .sort(sortTags);
37
+
38
+ export const findTagByLabel = (tags: Map | undefined, name: string): Tag | undefined => {
39
+ const entry = Object.entries(tags ?? {}).find(([_, tag]) => tag.label.toLowerCase() === name.toLowerCase());
40
+ return entry ? { ...entry[1], id: entry[0] } : undefined;
41
+ };
@@ -0,0 +1,52 @@
1
+ //
2
+ // Copyright 2026 DXOS.org
3
+ //
4
+
5
+ import * as Schema from 'effect/Schema';
6
+ import { describe, test } from 'vitest';
7
+
8
+ import * as Obj from './Obj';
9
+ import * as Relation from './Relation';
10
+ import { TestSchema } from './testing';
11
+ import * as Type from './Type';
12
+
13
+ describe('Type', () => {
14
+ describe('Obj.Unknown schema', () => {
15
+ test('has SchemaKindId for schema type checking', ({ expect }) => {
16
+ // Type.isObjectSchema uses SchemaKindId to check if a schema is an object schema.
17
+ expect(Type.isObjectSchema(Obj.Unknown)).toBe(true);
18
+ expect(Type.isObjectSchema(TestSchema.Person)).toBe(true);
19
+ expect(Type.isObjectSchema(Relation.Unknown)).toBe(false);
20
+ });
21
+
22
+ test('Schema.is validates structural compatibility only', ({ expect }) => {
23
+ // Schema.is does structural validation (has id field).
24
+ // It accepts both ECHO objects and plain objects with compatible structure.
25
+ expect(Schema.is(Obj.Unknown)({ id: 'plain-object' })).toBe(true);
26
+ const obj = Obj.make(TestSchema.Person, { name: 'Test' });
27
+ expect(Schema.is(Obj.Unknown)(obj)).toBe(true);
28
+ });
29
+ });
30
+
31
+ describe('Relation.Unknown schema', () => {
32
+ test('has SchemaKindId for schema type checking', ({ expect }) => {
33
+ // Type.isRelationSchema uses SchemaKindId to check if a schema is a relation schema.
34
+ expect(Type.isRelationSchema(Relation.Unknown)).toBe(true);
35
+ expect(Type.isRelationSchema(TestSchema.HasManager)).toBe(true);
36
+ expect(Type.isRelationSchema(Obj.Unknown)).toBe(false);
37
+ });
38
+
39
+ test('Schema.is validates structural compatibility only', ({ expect }) => {
40
+ // Schema.is does structural validation (has id field).
41
+ // It accepts both ECHO relations and plain objects with compatible structure.
42
+ expect(Schema.is(Relation.Unknown)({ id: 'plain-object' })).toBe(true);
43
+ const obj1 = Obj.make(TestSchema.Person, { name: 'Alice' });
44
+ const obj2 = Obj.make(TestSchema.Person, { name: 'Bob' });
45
+ const rel = Relation.make(TestSchema.HasManager, {
46
+ [Relation.Source]: obj1,
47
+ [Relation.Target]: obj2,
48
+ });
49
+ expect(Schema.is(Relation.Unknown)(rel)).toBe(true);
50
+ });
51
+ });
52
+ });
package/src/Type.ts CHANGED
@@ -2,183 +2,231 @@
2
2
  // Copyright 2025 DXOS.org
3
3
  //
4
4
 
5
- import { type Schema } from 'effect';
6
- import type { Simplify } from 'effect/Schema';
5
+ // @import-as-namespace
7
6
 
8
- import type { EncodedReference } from '@dxos/echo-protocol';
9
- import * as EchoSchema from '@dxos/echo-schema';
10
- import type { ToMutable } from '@dxos/echo-schema';
7
+ import type * as Schema from 'effect/Schema';
8
+
9
+ import { type EncodedReference } from '@dxos/echo-protocol';
11
10
  import { invariant } from '@dxos/invariant';
12
- import type * as Keys from '@dxos/keys';
11
+ import { type DXN } from '@dxos/keys';
12
+ import { type ToMutable } from '@dxos/util';
13
13
 
14
+ import type * as Entity from './Entity';
15
+ import * as internal from './internal';
16
+ import * as typeInternal from './internal/Type';
17
+ import type * as ObjModule from './Obj';
14
18
  import type * as RelationModule from './Relation';
15
19
 
16
- export const KindId: unique symbol = EchoSchema.EntityKindId as any;
17
- export type KindId = typeof KindId;
20
+ /**
21
+ * Dynamic type that can be constructed, mutated, and persisted in the ECHO database.
22
+ */
23
+ export const RuntimeType = typeInternal.EchoSchema;
24
+
25
+ /**
26
+ * Dynamic type that can be constructed, mutated, and persisted in the ECHO database.
27
+ */
28
+ export type RuntimeType = typeInternal.EchoSchema;
18
29
 
19
- export { EntityKind as Kind } from '@dxos/echo-schema';
30
+ //
31
+ // Internal types (not exported)
32
+ //
20
33
 
21
34
  /**
22
- * Assigns a kind to an Object or Relation instance.
35
+ * Type that marks a schema as an ECHO schema.
36
+ * The value indicates the entity kind (Object or Relation).
23
37
  */
24
- // NOTE: Needed to make `isRelation` and `isObject` checks work.
25
- export interface OfKind<Kind extends EchoSchema.EntityKind> {
26
- readonly id: Keys.ObjectId;
27
- readonly [KindId]: Kind;
28
- }
38
+ type EchoSchemaKind<K extends internal.EntityKind = internal.EntityKind> = {
39
+ readonly [internal.SchemaKindId]: K;
40
+ };
29
41
 
30
- interface ObjJsonProps {
31
- id: string;
32
- }
42
+ //
43
+ // Obj - Runtime schema for any ECHO object
44
+ //
33
45
 
34
- interface RelationJsonProps {
35
- id: string;
36
- [EchoSchema.ATTR_RELATION_SOURCE]: string;
37
- [EchoSchema.ATTR_RELATION_TARGET]: string;
46
+ /**
47
+ * TypeScript type for an ECHO object schema.
48
+ * `T` is the instance type produced by the schema.
49
+ * `Fields` is the optional struct fields type for introspection.
50
+ *
51
+ * @example
52
+ * ```ts
53
+ * const PersonSchema: Type.Obj<Person> = Schema.Struct({
54
+ * name: Schema.String,
55
+ * }).pipe(Type.object({ typename: 'Person', version: '0.1.0' }));
56
+ *
57
+ * // Access fields for introspection:
58
+ * Object.keys(PersonSchema.fields); // ['name']
59
+ * ```
60
+ */
61
+ export interface Obj<T, Fields extends Schema.Struct.Fields = Schema.Struct.Fields>
62
+ extends
63
+ internal.TypeMeta,
64
+ EchoSchemaKind<internal.EntityKind.Object>,
65
+ Schema.AnnotableClass<
66
+ Obj<T, Fields>,
67
+ Entity.OfKind<typeof Entity.Kind.Object> & T,
68
+ Schema.Simplify<ObjModule.BaseObjJson & ToMutable<T>>,
69
+ never
70
+ > {
71
+ /**
72
+ * The fields defined in the original struct schema.
73
+ * Allows accessing field definitions for introspection.
74
+ */
75
+ readonly fields: Fields;
38
76
  }
39
77
 
40
78
  /**
41
- * Returns all properties of an object or relation except for the id and kind.
79
+ * Structural base type for any ECHO object schema.
80
+ * Accepts both static schemas (created with Type.object()) and EchoSchema.
81
+ * NOTE: Does not include the brand symbol to avoid TS4053 declaration portability issues.
82
+ * Use Type.isObjectSchema() for runtime type guards.
42
83
  */
43
- export type Properties<T> = Omit<T, 'id' | KindId | RelationModule.Source | RelationModule.Target>;
84
+ type ObjectSchemaBase = Schema.Schema.AnyNoContext & {
85
+ readonly typename: string;
86
+ readonly version: string;
87
+ };
44
88
 
45
89
  /**
46
- * Base ECHO schema type.
90
+ * Type that represents any ECHO object schema.
91
+ * Accepts both static schemas (Type.object()) and mutable schemas (EchoSchema).
47
92
  */
48
- export type Schema = EchoSchema.EchoSchema;
93
+ export type AnyObj = ObjectSchemaBase;
49
94
 
50
95
  /**
51
- * Return type of the `Obj` schema constructor.
96
+ * Factory function to create an ECHO object schema.
97
+ * Adds object metadata annotations to an Effect schema.
52
98
  *
53
- * This typedef avoids `TS4023` error (name from external module cannot be used named).
54
- * See Effect's note on interface types.
99
+ * @example
100
+ * ```ts
101
+ * const Person = Schema.Struct({
102
+ * name: Schema.String,
103
+ * }).pipe(Type.object({ typename: 'com.example.type.person', version: '0.1.0' }));
104
+ * ```
55
105
  */
56
- export interface obj<Self extends Schema.Schema.Any>
57
- extends Schema.AnnotableClass<
58
- obj<Self>,
59
- OfKind<EchoSchema.EntityKind.Object> & ToMutable<Schema.Schema.Type<Self>>,
60
- Simplify<ObjJsonProps & ToMutable<Schema.Schema.Encoded<Self>>>,
61
- Schema.Schema.Context<Self>
62
- >,
63
- EchoSchema.TypeMeta {}
106
+ export const object: {
107
+ (opts: internal.TypeMeta): <Self extends Schema.Schema.Any>(self: Self) => Obj<Schema.Schema.Type<Self>>;
108
+ } = internal.EchoObjectSchema as any;
64
109
 
65
- /**
66
- * Object schema.
67
- */
68
- export const Obj: {
69
- (opts: EchoSchema.TypeMeta): <Self extends Schema.Schema.Any>(self: Self) => obj<Self>;
70
- } = EchoSchema.EchoObject as any;
110
+ //
111
+ // PersistentType (Schema stored in database)
112
+ //
113
+
114
+ export const PersistentType: Obj<typeInternal.PersistentSchema> = typeInternal.PersistentSchema as any;
115
+
116
+ export interface PersistentType extends Schema.Schema.Type<typeof PersistentType> {}
71
117
 
72
118
  /**
73
- * Object schema type definitions.
119
+ * TypeScript type for an ECHO relation schema.
120
+ * `T` is the instance type produced by the schema (excluding source/target).
121
+ * `Source` and `Target` are the endpoint types.
122
+ * `Fields` is the optional struct fields type for introspection.
74
123
  */
75
- export namespace Obj {
124
+ export interface Relation<T, Source, Target, Fields extends Schema.Struct.Fields = Schema.Struct.Fields>
125
+ extends
126
+ internal.TypeMeta,
127
+ EchoSchemaKind<internal.EntityKind.Relation>,
128
+ Schema.AnnotableClass<
129
+ Relation<T, Source, Target, Fields>,
130
+ Entity.OfKind<typeof Entity.Kind.Relation> & RelationModule.Endpoints<Source, Target> & T,
131
+ Schema.Simplify<RelationModule.BaseRelationJson & ToMutable<T>>,
132
+ never
133
+ > {
76
134
  /**
77
- * Type that represents an arbitrary schema type of an object.
78
- * NOTE: This is not an instance type.
135
+ * The fields defined in the original struct schema.
136
+ * Allows accessing field definitions for introspection.
79
137
  */
80
- // TODO(dmaretskyi): If schema was covariant, we could specify props in here, like `id: ObjectId`.
81
- export type Any = Schema.Schema.AnyNoContext;
138
+ readonly fields: Fields;
82
139
  }
83
140
 
84
141
  /**
85
- * Return type of the `Relation` schema constructor.
86
- *
87
- * This typedef avoids `TS4023` error (name from external module cannot be used named).
88
- * See Effect's note on interface types.
142
+ * Structural base type for any ECHO relation schema.
143
+ * Accepts static schemas (created with Type.relation()).
144
+ * NOTE: Does not include the brand symbol to avoid TS4053 declaration portability issues.
145
+ * Use Type.isRelationSchema() for runtime type guards.
89
146
  */
90
- export interface relation<
91
- Self extends Schema.Schema.Any,
92
- SourceSchema extends Schema.Schema.Any,
93
- TargetSchema extends Schema.Schema.Any,
94
- > extends Schema.AnnotableClass<
95
- relation<Self, SourceSchema, TargetSchema>,
96
- OfKind<EchoSchema.EntityKind.Relation> &
97
- Relation.Endpoints<Schema.Schema.Type<SourceSchema>, Schema.Schema.Type<TargetSchema>> &
98
- ToMutable<Schema.Schema.Type<Self>>,
99
- Simplify<RelationJsonProps & ToMutable<Schema.Schema.Encoded<Self>>>,
100
- Schema.Schema.Context<Self>
101
- >,
102
- EchoSchema.TypeMeta {}
147
+ type RelationSchemaBase = Schema.Schema.AnyNoContext & {
148
+ readonly typename: string;
149
+ readonly version: string;
150
+ };
103
151
 
104
152
  /**
105
- * Relation schema.
153
+ * Type that represents any ECHO relation schema.
154
+ * Accepts static schemas (Type.relation()).
106
155
  */
107
- // TODO(dmaretskyi): I have to redefine the type here so that the definition uses symbols from @dxos/echo/Relation.
108
- export const Relation: {
109
- <Source extends Schema.Schema.AnyNoContext, Target extends Schema.Schema.AnyNoContext>(
110
- opts: EchoSchema.EchoRelationOptions<Source, Target>,
111
- ): <Self extends Schema.Schema.Any>(self: Self) => relation<Self, Source, Target>;
112
- } = EchoSchema.EchoRelation as any;
156
+ export type AnyRelation = RelationSchemaBase;
113
157
 
114
158
  /**
115
- * Relation schema type definitions.
159
+ * Factory function to create an ECHO relation schema.
160
+ * Adds relation metadata annotations to an Effect schema.
161
+ *
162
+ * @example
163
+ * ```ts
164
+ * const WorksFor = Schema.Struct({
165
+ * role: Schema.String,
166
+ * }).pipe(Type.relation({
167
+ * typename: 'com.example.type.works-for',
168
+ * version: '0.1.0',
169
+ * source: Person,
170
+ * target: Company,
171
+ * }));
172
+ * ```
116
173
  */
117
- export namespace Relation {
118
- /**
119
- * Type that represents an arbitrary schema type of a relation.
120
- * NOTE: This is not an instance type.
121
- */
122
- // TODO(dmaretskyi): If schema was covariant, we could specify props in here, like `id: ObjectId`.
123
- export type Any = Schema.Schema.AnyNoContext;
174
+ export const relation: {
175
+ <SourceSchema extends Schema.Schema.AnyNoContext, TargetSchema extends Schema.Schema.AnyNoContext>(
176
+ opts: internal.EchoRelationSchemaOptions<SourceSchema, TargetSchema>,
177
+ ): <Self extends Schema.Schema.Any>(
178
+ self: Self,
179
+ ) => Relation<Schema.Schema.Type<Self>, Schema.Schema.Type<SourceSchema>, Schema.Schema.Type<TargetSchema>>;
180
+ } = internal.EchoRelationSchema as any;
124
181
 
125
- /**
126
- * Get relation target type.
127
- */
128
- export type Target<A> = A extends Relation.Endpoints<infer _S, infer T> ? T : never;
129
-
130
- /**
131
- * Get relation source type.
132
- */
133
- export type Source<A> = A extends Relation.Endpoints<infer S, infer _T> ? S : never;
134
-
135
- export type Endpoints<Source, Target> = {
136
- [RelationModule.Source]: Source;
137
- [RelationModule.Target]: Target;
138
- };
139
- }
182
+ /**
183
+ * Type alias for any ECHO entity schema (object or relation).
184
+ * Use this in type annotations for schema parameters.
185
+ */
186
+ export type AnyEntity = AnyObj | AnyRelation;
140
187
 
141
188
  /**
142
- * Return type of the `Ref` schema constructor.
143
- *
144
- * This typedef avoids `TS4023` error (name from external module cannot be used named).
145
- * See Effect's note on interface types.
189
+ * Type guard to check if a schema is an object schema.
190
+ * NOTE: This checks SCHEMAS, not instances. Use Obj.isObject for instances.
146
191
  */
147
- export interface ref<TargetSchema extends Schema.Schema.Any>
148
- extends EchoSchema.Ref$<Schema.Schema.Type<TargetSchema>> {}
192
+ export const isObjectSchema = (schema: AnyEntity): schema is AnyObj => {
193
+ return (schema as any)[internal.SchemaKindId] === internal.EntityKind.Object;
194
+ };
149
195
 
150
196
  /**
151
- * Ref schema.
197
+ * Type guard to check if a schema is a relation schema.
198
+ * NOTE: This checks SCHEMAS, not instances. Use Relation.isRelation for instances.
152
199
  */
153
- export const Ref: <S extends Obj.Any>(schema: S) => ref<S> = EchoSchema.Ref;
200
+ export const isRelationSchema = (schema: AnyEntity): schema is AnyRelation => {
201
+ return (schema as any)[internal.SchemaKindId] === internal.EntityKind.Relation;
202
+ };
154
203
 
155
- export interface Ref<T> extends Schema.SchemaClass<EchoSchema.Ref<T>, EncodedReference> {}
204
+ /**
205
+ * Type that represents any Ref schema (with unknown target type).
206
+ * This is a schema type, not an instance type.
207
+ */
208
+ export type AnyRef = Schema.Schema<internal.Ref<any>, EncodedReference>;
156
209
 
157
- // TODO(buurdon): Move to Ref?
158
- export namespace Ref {
159
- /**
160
- * Type that represents an arbitrary schema type of a reference.
161
- * NOTE: This is not an instance type.
162
- */
163
- export type Any = Schema.Schema<EchoSchema.Ref<any>, EncodedReference>;
164
- }
210
+ //
211
+ // Schema utility functions
212
+ //
165
213
 
166
214
  /**
167
215
  * Gets the full DXN of the schema.
168
216
  * Will include the version if it's a `type` DXN.
169
- * @example "dxn:example.com/type/Person:0.1.0"
217
+ * @example "dxn:com.example.type.person:0.1.0"
170
218
  * @example "dxn:echo:SSSSSSSSSS:XXXXXXXXXXXXX"
171
219
  */
172
- export const getDXN = (schema: Obj.Any | Relation.Any): Keys.DXN | undefined => {
173
- return EchoSchema.getSchemaDXN(schema);
220
+ export const getDXN = (schema: AnyEntity): DXN | undefined => {
221
+ return internal.getSchemaDXN(schema);
174
222
  };
175
223
 
176
224
  /**
177
225
  * @param schema - Schema to get the typename from.
178
- * @returns The typename of the schema. Example: `example.com/type/Person`.
226
+ * @returns The typename of the schema. Example: `com.example.type.person`.
179
227
  */
180
- export const getTypename = (schema: Obj.Any | Relation.Any): string => {
181
- const typename = EchoSchema.getSchemaTypename(schema);
228
+ export const getTypename = (schema: AnyEntity): string => {
229
+ const typename = internal.getSchemaTypename(schema);
182
230
  invariant(typeof typename === 'string' && !typename.startsWith('dxn:'), 'Invalid typename');
183
231
  return typename;
184
232
  };
@@ -187,45 +235,25 @@ export const getTypename = (schema: Obj.Any | Relation.Any): string => {
187
235
  * Gets the version of the schema.
188
236
  * @example 0.1.0
189
237
  */
190
- export const getVersion = (schema: Obj.Any | Relation.Any): string => {
191
- const version = EchoSchema.getSchemaVersion(schema);
238
+ export const getVersion = (schema: AnyEntity): string => {
239
+ const version = internal.getSchemaVersion(schema);
192
240
  invariant(typeof version === 'string' && version.match(/^\d+\.\d+\.\d+$/), 'Invalid version');
193
241
  return version;
194
242
  };
195
243
 
196
244
  /**
197
- * ECHO type metadata.
245
+ * @returns True if the schema is mutable.
198
246
  */
199
- export type Meta = EchoSchema.TypeAnnotation;
247
+ export const isMutable = typeInternal.isMutable;
200
248
 
201
249
  /**
202
- * Gets the meta data of the schema.
250
+ * ECHO type metadata.
203
251
  */
204
- export const getMeta = (schema: Obj.Any | Relation.Any): Meta | undefined => {
205
- return EchoSchema.getTypeAnnotation(schema);
206
- };
252
+ export type Meta = internal.TypeAnnotation;
207
253
 
208
254
  /**
209
- * @returns True if the schema is mutable.
255
+ * Gets the meta data of the schema.
210
256
  */
211
- export const isMutable = EchoSchema.isMutable;
212
-
213
- export { SpaceId, ObjectId, DXN } from '@dxos/keys';
214
-
215
- export interface Expando extends OfKind<EchoSchema.EntityKind.Object> {
216
- [key: string]: any;
217
- }
218
-
219
- export const Expando: Schema.Schema<
220
- Expando,
221
- Simplify<ObjJsonProps & { [key: string]: any }>,
222
- never
223
- > = EchoSchema.Expando as any;
224
-
225
- export {
226
- // TODO(burdon): Standardize.
227
- Format,
228
- JsonSchemaType as JsonSchema,
229
- toEffectSchema,
230
- toJsonSchema,
231
- } from '@dxos/echo-schema';
257
+ export const getMeta = (schema: AnyEntity): Meta | undefined => {
258
+ return internal.getTypeAnnotation(schema);
259
+ };
package/src/View.ts ADDED
@@ -0,0 +1,107 @@
1
+ //
2
+ // Copyright 2025 DXOS.org
3
+ //
4
+
5
+ // @import-as-namespace
6
+
7
+ import * as Schema from 'effect/Schema';
8
+
9
+ import { QueryAST } from '@dxos/echo-protocol';
10
+ import { JsonPath } from '@dxos/effect';
11
+ import { PublicKey } from '@dxos/keys';
12
+
13
+ import * as Annotation from './Annotation';
14
+ import * as Filter from './Filter';
15
+ import * as internal from './internal';
16
+ import * as Obj from './Obj';
17
+ import * as Query from './Query';
18
+ import * as Type from './Type';
19
+
20
+ /**
21
+ * Stored field metadata (e.g., for UX).
22
+ */
23
+ export const FieldSchema = Schema.Struct({
24
+ id: Schema.String,
25
+ path: JsonPath,
26
+ visible: Schema.optional(Schema.Boolean),
27
+
28
+ // TODO(wittjosiah): Presentation-specific?
29
+ referencePath: Schema.optional(JsonPath),
30
+ });
31
+
32
+ export type FieldType = Schema.Schema.Type<typeof FieldSchema>;
33
+
34
+ export const KeyValueProps = Schema.Record({ key: Schema.String, value: Schema.Any });
35
+
36
+ export const createFieldId = () => PublicKey.random().truncate();
37
+
38
+ export const Projection = Schema.Struct({
39
+ /**
40
+ * Optional schema override used to customize the underlying schema.
41
+ */
42
+ schema: internal.JsonSchemaType.pipe(Schema.optional),
43
+
44
+ /**
45
+ * UX metadata associated with displayed fields (in table, form, etc.)
46
+ */
47
+ // TODO(wittjosiah): Should this just be an array of JsonPath?
48
+ fields: Schema.Array(FieldSchema),
49
+
50
+ /**
51
+ * The id for the field used to pivot the view.
52
+ * E.g., the field to use for kanban columns or the field to use for map coordinates.
53
+ */
54
+ pivotFieldId: Schema.String.pipe(Schema.optional),
55
+ });
56
+
57
+ export type Projection = Schema.Schema.Type<typeof Projection>;
58
+
59
+ /**
60
+ * Views are generated or user-defined projections of a schema's properties.
61
+ * They are used to configure the visual representation of the data.
62
+ */
63
+ const ViewSchema = Schema.Struct({
64
+ /**
65
+ * Query used to retrieve data.
66
+ * Can be a user-provided query grammar string or a query AST.
67
+ */
68
+ query: Schema.Struct({
69
+ raw: Schema.optional(Schema.String),
70
+ ast: QueryAST.Query,
71
+ }),
72
+
73
+ /**
74
+ * Projection of the data returned from the query.
75
+ */
76
+ projection: Projection,
77
+ }).pipe(
78
+ Type.object({
79
+ typename: 'org.dxos.type.view',
80
+ version: '0.1.0',
81
+ }),
82
+ internal.SystemTypeAnnotation.set(true),
83
+ Annotation.IconAnnotation.set({
84
+ icon: 'ph--funnel--regular',
85
+ hue: 'green',
86
+ }),
87
+ );
88
+
89
+ export interface View extends Schema.Schema.Type<typeof ViewSchema> {}
90
+
91
+ /**
92
+ * View instance type.
93
+ */
94
+ // NOTE: This interface is explicitly defined rather than derived from the schema to avoid
95
+ // TypeScript "cannot be named" portability errors. The schema contains QueryAST.Query which
96
+ // references internal @dxos/echo-protocol module paths. Without this explicit interface,
97
+ // any schema using Ref.Ref(View) would inherit the non-portable type and fail to compile.
98
+ // TODO(wittjosiah): Find a better solution that doesn't require manually keeping the interface in sync.
99
+ export const View: Type.Obj<View> = ViewSchema as any;
100
+
101
+ export const make = (props: Partial<Obj.MakeProps<typeof View>>): View => {
102
+ return Obj.make(View, {
103
+ query: { ast: Query.select(Filter.nothing()).ast },
104
+ projection: { fields: [] },
105
+ ...props,
106
+ });
107
+ };
@@ -0,0 +1,21 @@
1
+ //
2
+ // Copyright 2026 DXOS.org
3
+ //
4
+
5
+ import { describe, test } from 'vitest';
6
+
7
+ import * as Obj from './Obj';
8
+ import { TestSchema } from './testing';
9
+ import type * as Type from './Type';
10
+
11
+ describe('Exemplars', () => {
12
+ test('factory', ({ expect }) => {
13
+ const factory = <S extends Type.AnyObj>(schema: S) => {
14
+ return (props: Obj.MakeProps<S>) => Obj.make(schema, props);
15
+ };
16
+
17
+ const makePerson = factory(TestSchema.Person);
18
+ const person = makePerson({ name: 'John Doe' });
19
+ expect(person.name).toBe('John Doe');
20
+ });
21
+ });
@@ -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
+ });