@dxos/echo 0.8.4-main.7ace549 → 0.8.4-main.937b3ca

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 (450) hide show
  1. package/README.md +1 -2
  2. package/dist/lib/browser/Annotation.mjs +33 -0
  3. package/dist/lib/browser/Annotation.mjs.map +7 -0
  4. package/dist/lib/browser/Database.mjs +18 -0
  5. package/dist/lib/browser/Database.mjs.map +7 -0
  6. package/dist/lib/browser/Entity.mjs +52 -0
  7. package/dist/lib/browser/Entity.mjs.map +7 -0
  8. package/dist/lib/browser/Err.mjs +11 -0
  9. package/dist/lib/browser/Err.mjs.map +7 -0
  10. package/dist/lib/browser/Filter.mjs +62 -0
  11. package/dist/lib/browser/Filter.mjs.map +7 -0
  12. package/dist/lib/browser/Format.mjs +67 -0
  13. package/dist/lib/browser/Format.mjs.map +7 -0
  14. package/dist/lib/browser/JsonSchema.mjs +20 -0
  15. package/dist/lib/browser/JsonSchema.mjs.map +7 -0
  16. package/dist/lib/browser/Key.mjs +13 -0
  17. package/dist/lib/browser/Key.mjs.map +7 -0
  18. package/dist/lib/browser/Obj.mjs +91 -0
  19. package/dist/lib/browser/Obj.mjs.map +7 -0
  20. package/dist/lib/browser/Order.mjs +13 -0
  21. package/dist/lib/browser/Order.mjs.map +7 -0
  22. package/dist/lib/browser/Query.mjs +27 -0
  23. package/dist/lib/browser/Query.mjs.map +7 -0
  24. package/dist/lib/browser/QueryResult.mjs +3 -0
  25. package/dist/lib/browser/QueryResult.mjs.map +7 -0
  26. package/dist/lib/browser/Ref.mjs +23 -0
  27. package/dist/lib/browser/Ref.mjs.map +7 -0
  28. package/dist/lib/browser/Relation.mjs +85 -0
  29. package/dist/lib/browser/Relation.mjs.map +7 -0
  30. package/dist/lib/browser/SchemaRegistry.mjs +3 -0
  31. package/dist/lib/browser/SchemaRegistry.mjs.map +7 -0
  32. package/dist/lib/browser/Tag.mjs +26 -0
  33. package/dist/lib/browser/Tag.mjs.map +7 -0
  34. package/dist/lib/browser/Type.mjs +48 -0
  35. package/dist/lib/browser/Type.mjs.map +7 -0
  36. package/dist/lib/browser/chunk-22JMFST2.mjs +24 -0
  37. package/dist/lib/browser/chunk-22JMFST2.mjs.map +7 -0
  38. package/dist/lib/browser/chunk-2SBB7OWV.mjs +250 -0
  39. package/dist/lib/browser/chunk-2SBB7OWV.mjs.map +7 -0
  40. package/dist/lib/browser/chunk-6L5HHUVU.mjs +158 -0
  41. package/dist/lib/browser/chunk-6L5HHUVU.mjs.map +7 -0
  42. package/dist/lib/browser/chunk-7STIBCP7.mjs +133 -0
  43. package/dist/lib/browser/chunk-7STIBCP7.mjs.map +7 -0
  44. package/dist/lib/browser/{chunk-7GH6RXJ3.mjs → chunk-BJPE6CIC.mjs} +1999 -1835
  45. package/dist/lib/browser/chunk-BJPE6CIC.mjs.map +7 -0
  46. package/dist/lib/browser/chunk-CGS2ULMK.mjs +11 -0
  47. package/dist/lib/browser/chunk-CGS2ULMK.mjs.map +7 -0
  48. package/dist/lib/browser/chunk-CJ5YELTO.mjs +39 -0
  49. package/dist/lib/browser/chunk-CJ5YELTO.mjs.map +7 -0
  50. package/dist/lib/browser/chunk-FPOISFQK.mjs +40 -0
  51. package/dist/lib/browser/chunk-FPOISFQK.mjs.map +7 -0
  52. package/dist/lib/browser/chunk-FRDT7RA4.mjs +403 -0
  53. package/dist/lib/browser/chunk-FRDT7RA4.mjs.map +7 -0
  54. package/dist/lib/browser/chunk-INHXFXY5.mjs +22 -0
  55. package/dist/lib/browser/chunk-INHXFXY5.mjs.map +7 -0
  56. package/dist/lib/browser/chunk-IXVWLTG7.mjs +9 -0
  57. package/dist/lib/browser/chunk-IXVWLTG7.mjs.map +7 -0
  58. package/dist/lib/browser/chunk-JMKVF2YQ.mjs +43 -0
  59. package/dist/lib/browser/chunk-JMKVF2YQ.mjs.map +7 -0
  60. package/dist/lib/browser/chunk-KQQGVHFN.mjs +143 -0
  61. package/dist/lib/browser/chunk-KQQGVHFN.mjs.map +7 -0
  62. package/dist/lib/browser/chunk-MYCCGG2T.mjs +15 -0
  63. package/dist/lib/browser/chunk-MYCCGG2T.mjs.map +7 -0
  64. package/dist/lib/browser/chunk-NOPVNWPT.mjs +204 -0
  65. package/dist/lib/browser/chunk-NOPVNWPT.mjs.map +7 -0
  66. package/dist/lib/browser/chunk-PQZW3S6L.mjs +74 -0
  67. package/dist/lib/browser/chunk-PQZW3S6L.mjs.map +7 -0
  68. package/dist/lib/browser/chunk-RK4Z4JUZ.mjs +283 -0
  69. package/dist/lib/browser/chunk-RK4Z4JUZ.mjs.map +7 -0
  70. package/dist/lib/browser/chunk-U2J7TA7K.mjs +57 -0
  71. package/dist/lib/browser/chunk-U2J7TA7K.mjs.map +7 -0
  72. package/dist/lib/browser/chunk-W5D2GWAW.mjs +98 -0
  73. package/dist/lib/browser/chunk-W5D2GWAW.mjs.map +7 -0
  74. package/dist/lib/browser/chunk-XDIUHAAX.mjs +41 -0
  75. package/dist/lib/browser/chunk-XDIUHAAX.mjs.map +7 -0
  76. package/dist/lib/browser/chunk-YKTSSMDS.mjs +69 -0
  77. package/dist/lib/browser/chunk-YKTSSMDS.mjs.map +7 -0
  78. package/dist/lib/browser/chunk-ZAGAOZVY.mjs +288 -0
  79. package/dist/lib/browser/chunk-ZAGAOZVY.mjs.map +7 -0
  80. package/dist/lib/browser/chunk-ZHXZGIXD.mjs +9 -0
  81. package/dist/lib/browser/chunk-ZHXZGIXD.mjs.map +7 -0
  82. package/dist/lib/browser/index.mjs +65 -25
  83. package/dist/lib/browser/internal/index.mjs +213 -92
  84. package/dist/lib/browser/meta.json +1 -1
  85. package/dist/lib/browser/testing/index.mjs +80 -41
  86. package/dist/lib/browser/testing/index.mjs.map +3 -3
  87. package/dist/lib/node-esm/Annotation.mjs +33 -0
  88. package/dist/lib/node-esm/Annotation.mjs.map +7 -0
  89. package/dist/lib/node-esm/Database.mjs +18 -0
  90. package/dist/lib/node-esm/Database.mjs.map +7 -0
  91. package/dist/lib/node-esm/Entity.mjs +52 -0
  92. package/dist/lib/node-esm/Entity.mjs.map +7 -0
  93. package/dist/lib/node-esm/Err.mjs +11 -0
  94. package/dist/lib/node-esm/Err.mjs.map +7 -0
  95. package/dist/lib/node-esm/Filter.mjs +62 -0
  96. package/dist/lib/node-esm/Filter.mjs.map +7 -0
  97. package/dist/lib/node-esm/Format.mjs +67 -0
  98. package/dist/lib/node-esm/Format.mjs.map +7 -0
  99. package/dist/lib/node-esm/JsonSchema.mjs +20 -0
  100. package/dist/lib/node-esm/JsonSchema.mjs.map +7 -0
  101. package/dist/lib/node-esm/Key.mjs +13 -0
  102. package/dist/lib/node-esm/Key.mjs.map +7 -0
  103. package/dist/lib/node-esm/Obj.mjs +91 -0
  104. package/dist/lib/node-esm/Obj.mjs.map +7 -0
  105. package/dist/lib/node-esm/Order.mjs +13 -0
  106. package/dist/lib/node-esm/Order.mjs.map +7 -0
  107. package/dist/lib/node-esm/Query.mjs +27 -0
  108. package/dist/lib/node-esm/Query.mjs.map +7 -0
  109. package/dist/lib/node-esm/QueryResult.mjs +3 -0
  110. package/dist/lib/node-esm/QueryResult.mjs.map +7 -0
  111. package/dist/lib/node-esm/Ref.mjs +23 -0
  112. package/dist/lib/node-esm/Ref.mjs.map +7 -0
  113. package/dist/lib/node-esm/Relation.mjs +85 -0
  114. package/dist/lib/node-esm/Relation.mjs.map +7 -0
  115. package/dist/lib/node-esm/SchemaRegistry.mjs +3 -0
  116. package/dist/lib/node-esm/SchemaRegistry.mjs.map +7 -0
  117. package/dist/lib/node-esm/Tag.mjs +26 -0
  118. package/dist/lib/node-esm/Tag.mjs.map +7 -0
  119. package/dist/lib/node-esm/Type.mjs +48 -0
  120. package/dist/lib/node-esm/Type.mjs.map +7 -0
  121. package/dist/lib/node-esm/chunk-4PNXQA64.mjs +250 -0
  122. package/dist/lib/node-esm/chunk-4PNXQA64.mjs.map +7 -0
  123. package/dist/lib/node-esm/chunk-5OBN7GZW.mjs +158 -0
  124. package/dist/lib/node-esm/chunk-5OBN7GZW.mjs.map +7 -0
  125. package/dist/lib/node-esm/chunk-AJEMYSIR.mjs +22 -0
  126. package/dist/lib/node-esm/chunk-AJEMYSIR.mjs.map +7 -0
  127. package/dist/lib/node-esm/chunk-ANLVLWME.mjs +98 -0
  128. package/dist/lib/node-esm/chunk-ANLVLWME.mjs.map +7 -0
  129. package/dist/lib/node-esm/chunk-DMR7OAFK.mjs +57 -0
  130. package/dist/lib/node-esm/chunk-DMR7OAFK.mjs.map +7 -0
  131. package/dist/lib/node-esm/chunk-FWTSPIFF.mjs +133 -0
  132. package/dist/lib/node-esm/chunk-FWTSPIFF.mjs.map +7 -0
  133. package/dist/lib/node-esm/chunk-HSLMI22Q.mjs +11 -0
  134. package/dist/lib/node-esm/chunk-HSLMI22Q.mjs.map +7 -0
  135. package/dist/lib/node-esm/chunk-ILMLLM4R.mjs +204 -0
  136. package/dist/lib/node-esm/chunk-ILMLLM4R.mjs.map +7 -0
  137. package/dist/lib/node-esm/chunk-K37NA7PO.mjs +43 -0
  138. package/dist/lib/node-esm/chunk-K37NA7PO.mjs.map +7 -0
  139. package/dist/lib/node-esm/{chunk-M4B6BMD2.mjs → chunk-LT3H4JOX.mjs} +1999 -1835
  140. package/dist/lib/node-esm/chunk-LT3H4JOX.mjs.map +7 -0
  141. package/dist/lib/node-esm/chunk-MOLNWFNL.mjs +9 -0
  142. package/dist/lib/node-esm/chunk-MOLNWFNL.mjs.map +7 -0
  143. package/dist/lib/node-esm/chunk-MOWUEW5P.mjs +15 -0
  144. package/dist/lib/node-esm/chunk-MOWUEW5P.mjs.map +7 -0
  145. package/dist/lib/node-esm/chunk-NBWL7UCZ.mjs +40 -0
  146. package/dist/lib/node-esm/chunk-NBWL7UCZ.mjs.map +7 -0
  147. package/dist/lib/node-esm/chunk-NRN3ZW2T.mjs +143 -0
  148. package/dist/lib/node-esm/chunk-NRN3ZW2T.mjs.map +7 -0
  149. package/dist/lib/node-esm/chunk-QLI2EIJ2.mjs +41 -0
  150. package/dist/lib/node-esm/chunk-QLI2EIJ2.mjs.map +7 -0
  151. package/dist/lib/node-esm/chunk-QYR67VBV.mjs +288 -0
  152. package/dist/lib/node-esm/chunk-QYR67VBV.mjs.map +7 -0
  153. package/dist/lib/node-esm/chunk-UKGVOINP.mjs +9 -0
  154. package/dist/lib/node-esm/chunk-UKGVOINP.mjs.map +7 -0
  155. package/dist/lib/node-esm/chunk-W6QIEBTQ.mjs +403 -0
  156. package/dist/lib/node-esm/chunk-W6QIEBTQ.mjs.map +7 -0
  157. package/dist/lib/node-esm/chunk-XHJRMQZD.mjs +69 -0
  158. package/dist/lib/node-esm/chunk-XHJRMQZD.mjs.map +7 -0
  159. package/dist/lib/node-esm/chunk-Y75VU7LB.mjs +74 -0
  160. package/dist/lib/node-esm/chunk-Y75VU7LB.mjs.map +7 -0
  161. package/dist/lib/node-esm/chunk-YOLH5KS4.mjs +283 -0
  162. package/dist/lib/node-esm/chunk-YOLH5KS4.mjs.map +7 -0
  163. package/dist/lib/node-esm/chunk-YQ2NWGL5.mjs +39 -0
  164. package/dist/lib/node-esm/chunk-YQ2NWGL5.mjs.map +7 -0
  165. package/dist/lib/node-esm/chunk-ZBB67AKD.mjs +24 -0
  166. package/dist/lib/node-esm/chunk-ZBB67AKD.mjs.map +7 -0
  167. package/dist/lib/node-esm/index.mjs +65 -25
  168. package/dist/lib/node-esm/internal/index.mjs +213 -92
  169. package/dist/lib/node-esm/meta.json +1 -1
  170. package/dist/lib/node-esm/testing/index.mjs +80 -41
  171. package/dist/lib/node-esm/testing/index.mjs.map +3 -3
  172. package/dist/types/src/Annotation.d.ts +1 -1
  173. package/dist/types/src/Annotation.d.ts.map +1 -1
  174. package/dist/types/src/Database.d.ts +117 -60
  175. package/dist/types/src/Database.d.ts.map +1 -1
  176. package/dist/types/src/Entity.d.ts +111 -5
  177. package/dist/types/src/Entity.d.ts.map +1 -1
  178. package/dist/types/src/Entity.test.d.ts +2 -0
  179. package/dist/types/src/Entity.test.d.ts.map +1 -0
  180. package/dist/types/src/{errors.d.ts → Err.d.ts} +13 -17
  181. package/dist/types/src/Err.d.ts.map +1 -0
  182. package/dist/types/src/Filter.d.ts +120 -0
  183. package/dist/types/src/Filter.d.ts.map +1 -0
  184. package/dist/types/src/Format.d.ts.map +1 -1
  185. package/dist/types/src/Hypergraph.d.ts +60 -0
  186. package/dist/types/src/Hypergraph.d.ts.map +1 -0
  187. package/dist/types/src/Obj.d.ts +268 -76
  188. package/dist/types/src/Obj.d.ts.map +1 -1
  189. package/dist/types/src/Obj.test.d.ts +2 -0
  190. package/dist/types/src/Obj.test.d.ts.map +1 -0
  191. package/dist/types/src/Order.d.ts +16 -0
  192. package/dist/types/src/Order.d.ts.map +1 -0
  193. package/dist/types/src/{query/query.d.ts → Query.d.ts} +53 -50
  194. package/dist/types/src/Query.d.ts.map +1 -0
  195. package/dist/types/src/Query.test.d.ts +2 -0
  196. package/dist/types/src/Query.test.d.ts.map +1 -0
  197. package/dist/types/src/QueryResult.d.ts +80 -0
  198. package/dist/types/src/QueryResult.d.ts.map +1 -0
  199. package/dist/types/src/Ref.d.ts +9 -7
  200. package/dist/types/src/Ref.d.ts.map +1 -1
  201. package/dist/types/src/Relation.d.ts +235 -18
  202. package/dist/types/src/Relation.d.ts.map +1 -1
  203. package/dist/types/src/Relation.test.d.ts +2 -0
  204. package/dist/types/src/Relation.test.d.ts.map +1 -0
  205. package/dist/types/src/SchemaRegistry.d.ts +84 -0
  206. package/dist/types/src/SchemaRegistry.d.ts.map +1 -0
  207. package/dist/types/src/Tag.d.ts +6 -6
  208. package/dist/types/src/Tag.d.ts.map +1 -1
  209. package/dist/types/src/Type.d.ts +213 -50
  210. package/dist/types/src/Type.d.ts.map +1 -1
  211. package/dist/types/src/Type.test.d.ts +2 -0
  212. package/dist/types/src/Type.test.d.ts.map +1 -0
  213. package/dist/types/src/index.d.ts +8 -2
  214. package/dist/types/src/index.d.ts.map +1 -1
  215. package/dist/types/src/internal/annotations/annotations.d.ts +23 -27
  216. package/dist/types/src/internal/annotations/annotations.d.ts.map +1 -1
  217. package/dist/types/src/internal/annotations/util.d.ts +1 -0
  218. package/dist/types/src/internal/annotations/util.d.ts.map +1 -1
  219. package/dist/types/src/internal/api/annotations.d.ts +23 -0
  220. package/dist/types/src/internal/api/annotations.d.ts.map +1 -0
  221. package/dist/types/src/internal/api/entity.d.ts +13 -0
  222. package/dist/types/src/internal/api/entity.d.ts.map +1 -0
  223. package/dist/types/src/internal/api/index.d.ts +15 -0
  224. package/dist/types/src/internal/api/index.d.ts.map +1 -0
  225. package/dist/types/src/internal/api/meta.d.ts +42 -0
  226. package/dist/types/src/internal/api/meta.d.ts.map +1 -0
  227. package/dist/types/src/internal/api/sorting.d.ts +24 -0
  228. package/dist/types/src/internal/api/sorting.d.ts.map +1 -0
  229. package/dist/types/src/internal/api/version.d.ts +42 -0
  230. package/dist/types/src/internal/api/version.d.ts.map +1 -0
  231. package/dist/types/src/internal/entities/entity.d.ts +13 -3
  232. package/dist/types/src/internal/entities/entity.d.ts.map +1 -1
  233. package/dist/types/src/internal/entities/index.d.ts +1 -1
  234. package/dist/types/src/internal/entities/index.d.ts.map +1 -1
  235. package/dist/types/src/internal/entities/model.d.ts +14 -7
  236. package/dist/types/src/internal/entities/model.d.ts.map +1 -1
  237. package/dist/types/src/internal/entities/object.d.ts +8 -1
  238. package/dist/types/src/internal/entities/object.d.ts.map +1 -1
  239. package/dist/types/src/internal/entities/relation.d.ts +8 -1
  240. package/dist/types/src/internal/entities/relation.d.ts.map +1 -1
  241. package/dist/types/src/internal/formats/format.d.ts +4 -4
  242. package/dist/types/src/internal/formats/format.d.ts.map +1 -1
  243. package/dist/types/src/internal/formats/select.d.ts +5 -3
  244. package/dist/types/src/internal/formats/select.d.ts.map +1 -1
  245. package/dist/types/src/internal/formats/string.d.ts +4 -0
  246. package/dist/types/src/internal/formats/string.d.ts.map +1 -1
  247. package/dist/types/src/internal/formats/types.d.ts +6 -2
  248. package/dist/types/src/internal/formats/types.d.ts.map +1 -1
  249. package/dist/types/src/internal/index.d.ts +2 -1
  250. package/dist/types/src/internal/index.d.ts.map +1 -1
  251. package/dist/types/src/internal/json-schema/json-schema.d.ts.map +1 -1
  252. package/dist/types/src/internal/object/clone.d.ts +8 -0
  253. package/dist/types/src/internal/object/clone.d.ts.map +1 -0
  254. package/dist/types/src/internal/object/create-object.d.ts +1 -1
  255. package/dist/types/src/internal/object/index.d.ts +3 -0
  256. package/dist/types/src/internal/object/index.d.ts.map +1 -1
  257. package/dist/types/src/internal/object/json-serializer.d.ts +13 -7
  258. package/dist/types/src/internal/object/json-serializer.d.ts.map +1 -1
  259. package/dist/types/src/internal/object/schema-validator.d.ts +1 -14
  260. package/dist/types/src/internal/object/schema-validator.d.ts.map +1 -1
  261. package/dist/types/src/internal/object/set-value.d.ts +7 -0
  262. package/dist/types/src/internal/object/set-value.d.ts.map +1 -0
  263. package/dist/types/src/internal/object/set-value.test.d.ts +2 -0
  264. package/dist/types/src/internal/object/set-value.test.d.ts.map +1 -0
  265. package/dist/types/src/internal/object/snapshot.d.ts +6 -0
  266. package/dist/types/src/internal/object/snapshot.d.ts.map +1 -0
  267. package/dist/types/src/internal/object/typed-object.d.ts +7 -13
  268. package/dist/types/src/internal/object/typed-object.d.ts.map +1 -1
  269. package/dist/types/src/internal/proxy/change-context.d.ts +55 -0
  270. package/dist/types/src/internal/proxy/change-context.d.ts.map +1 -0
  271. package/dist/types/src/internal/proxy/change.test.d.ts +2 -0
  272. package/dist/types/src/internal/proxy/change.test.d.ts.map +1 -0
  273. package/dist/types/src/internal/proxy/define-hidden-property.d.ts +5 -0
  274. package/dist/types/src/internal/proxy/define-hidden-property.d.ts.map +1 -0
  275. package/dist/types/src/internal/proxy/errors.d.ts +19 -0
  276. package/dist/types/src/internal/proxy/errors.d.ts.map +1 -0
  277. package/dist/types/src/internal/proxy/event-batch.d.ts +10 -0
  278. package/dist/types/src/internal/proxy/event-batch.d.ts.map +1 -0
  279. package/dist/types/src/internal/proxy/index.d.ts +11 -0
  280. package/dist/types/src/internal/proxy/index.d.ts.map +1 -1
  281. package/dist/types/src/internal/proxy/json-serializer.d.ts +6 -0
  282. package/dist/types/src/internal/proxy/json-serializer.d.ts.map +1 -0
  283. package/dist/types/src/internal/proxy/make-object.d.ts +2 -4
  284. package/dist/types/src/internal/proxy/make-object.d.ts.map +1 -1
  285. package/dist/types/src/internal/proxy/ownership.d.ts +57 -0
  286. package/dist/types/src/internal/proxy/ownership.d.ts.map +1 -0
  287. package/dist/types/src/internal/proxy/proxy-types.d.ts +18 -0
  288. package/dist/types/src/internal/proxy/proxy-types.d.ts.map +1 -0
  289. package/dist/types/src/internal/proxy/proxy-utils.d.ts +47 -0
  290. package/dist/types/src/internal/proxy/proxy-utils.d.ts.map +1 -0
  291. package/dist/types/src/internal/proxy/reactive-array.d.ts +8 -0
  292. package/dist/types/src/internal/proxy/reactive-array.d.ts.map +1 -0
  293. package/dist/types/src/internal/proxy/reactive.d.ts +39 -0
  294. package/dist/types/src/internal/proxy/reactive.d.ts.map +1 -0
  295. package/dist/types/src/internal/proxy/schema-validator.d.ts +15 -0
  296. package/dist/types/src/internal/proxy/schema-validator.d.ts.map +1 -0
  297. package/dist/types/src/internal/proxy/symbols.d.ts +3 -0
  298. package/dist/types/src/internal/proxy/symbols.d.ts.map +1 -0
  299. package/dist/types/src/internal/proxy/typed-handler.d.ts +14 -11
  300. package/dist/types/src/internal/proxy/typed-handler.d.ts.map +1 -1
  301. package/dist/types/src/internal/ref/ref-array.d.ts +4 -4
  302. package/dist/types/src/internal/ref/ref-array.d.ts.map +1 -1
  303. package/dist/types/src/internal/ref/ref.d.ts +14 -6
  304. package/dist/types/src/internal/ref/ref.d.ts.map +1 -1
  305. package/dist/types/src/internal/schema/compose.d.ts.map +1 -1
  306. package/dist/types/src/internal/schema/echo-schema.d.ts +15 -3
  307. package/dist/types/src/internal/schema/echo-schema.d.ts.map +1 -1
  308. package/dist/types/src/internal/schema/index.d.ts +0 -2
  309. package/dist/types/src/internal/schema/index.d.ts.map +1 -1
  310. package/dist/types/src/internal/schema/persistent-schema.d.ts +9 -7
  311. package/dist/types/src/internal/schema/persistent-schema.d.ts.map +1 -1
  312. package/dist/types/src/internal/types/base.d.ts +5 -16
  313. package/dist/types/src/internal/types/base.d.ts.map +1 -1
  314. package/dist/types/src/internal/types/entity.d.ts +27 -2
  315. package/dist/types/src/internal/types/entity.d.ts.map +1 -1
  316. package/dist/types/src/internal/types/meta.d.ts +1 -9
  317. package/dist/types/src/internal/types/meta.d.ts.map +1 -1
  318. package/dist/types/src/testing/test-schema.d.ts +141 -175
  319. package/dist/types/src/testing/test-schema.d.ts.map +1 -1
  320. package/dist/types/src/testing/util.d.ts +6 -1
  321. package/dist/types/src/testing/util.d.ts.map +1 -1
  322. package/dist/types/tsconfig.tsbuildinfo +1 -1
  323. package/package.json +130 -23
  324. package/src/Annotation.ts +5 -4
  325. package/src/Database.ts +229 -82
  326. package/src/Entity.test.ts +22 -0
  327. package/src/Entity.ts +173 -7
  328. package/src/{errors.ts → Err.ts} +2 -2
  329. package/src/Filter.ts +376 -0
  330. package/src/Format.ts +0 -2
  331. package/src/Hypergraph.ts +74 -0
  332. package/src/Obj.test.ts +386 -0
  333. package/src/Obj.ts +338 -250
  334. package/src/{query/order.ts → Order.ts} +19 -9
  335. package/src/{query/query.test.ts → Query.test.ts} +180 -49
  336. package/src/{query/query.ts → Query.ts} +115 -122
  337. package/src/QueryResult.ts +106 -0
  338. package/src/Ref.ts +20 -3
  339. package/src/Relation.test.ts +82 -0
  340. package/src/Relation.ts +364 -27
  341. package/src/SchemaRegistry.ts +105 -0
  342. package/src/Tag.ts +1 -1
  343. package/src/Type.test.ts +52 -0
  344. package/src/Type.ts +322 -88
  345. package/src/index.ts +9 -5
  346. package/src/internal/README.md +36 -17
  347. package/src/internal/annotations/annotations.test.ts +6 -6
  348. package/src/internal/annotations/annotations.ts +73 -76
  349. package/src/internal/annotations/util.ts +2 -0
  350. package/src/internal/api/annotations.ts +60 -0
  351. package/src/internal/api/entity.ts +29 -0
  352. package/src/internal/api/index.ts +19 -0
  353. package/src/internal/api/meta.ts +88 -0
  354. package/src/internal/api/sorting.ts +53 -0
  355. package/src/internal/api/version.ts +96 -0
  356. package/src/internal/entities/entity.ts +36 -19
  357. package/src/internal/entities/index.ts +1 -1
  358. package/src/internal/entities/model.ts +17 -12
  359. package/src/internal/entities/object.ts +20 -5
  360. package/src/internal/entities/relation.ts +22 -4
  361. package/src/internal/formats/format.ts +7 -8
  362. package/src/internal/formats/object.ts +2 -2
  363. package/src/internal/formats/select.ts +5 -3
  364. package/src/internal/formats/string.ts +5 -0
  365. package/src/internal/formats/types.ts +9 -3
  366. package/src/internal/index.ts +2 -1
  367. package/src/internal/json-schema/json-schema-type.ts +1 -1
  368. package/src/internal/json-schema/json-schema.test.ts +19 -17
  369. package/src/internal/json-schema/json-schema.ts +4 -4
  370. package/src/internal/object/clone.ts +48 -0
  371. package/src/internal/object/create-object.ts +2 -2
  372. package/src/internal/object/index.ts +3 -0
  373. package/src/internal/object/inspect.ts +3 -3
  374. package/src/internal/object/json-serializer.test.ts +4 -1
  375. package/src/internal/object/json-serializer.ts +28 -70
  376. package/src/internal/object/schema-validator.ts +2 -238
  377. package/src/internal/object/set-value.test.ts +281 -0
  378. package/src/internal/object/set-value.ts +165 -0
  379. package/src/internal/object/snapshot.ts +70 -0
  380. package/src/internal/object/typed-object.test.ts +11 -11
  381. package/src/internal/object/typed-object.ts +8 -72
  382. package/src/internal/proxy/change-context.ts +138 -0
  383. package/src/internal/proxy/change.test.ts +519 -0
  384. package/src/internal/proxy/define-hidden-property.ts +14 -0
  385. package/src/internal/proxy/errors.ts +42 -0
  386. package/src/internal/proxy/event-batch.ts +44 -0
  387. package/src/internal/proxy/handler.test.ts +30 -80
  388. package/src/internal/proxy/index.ts +11 -0
  389. package/src/internal/proxy/json-serializer.ts +87 -0
  390. package/src/internal/proxy/make-object.ts +33 -50
  391. package/src/internal/proxy/ownership.ts +253 -0
  392. package/src/internal/proxy/proxy-types.ts +23 -0
  393. package/src/internal/proxy/proxy-utils.ts +150 -0
  394. package/src/internal/proxy/reactive-array.ts +71 -0
  395. package/src/internal/proxy/reactive.ts +69 -0
  396. package/src/internal/proxy/schema-validator.ts +244 -0
  397. package/src/internal/proxy/schema.test.ts +23 -15
  398. package/src/internal/proxy/symbols.ts +7 -0
  399. package/src/internal/proxy/typed-handler.test.ts +251 -35
  400. package/src/internal/proxy/typed-handler.ts +265 -56
  401. package/src/internal/proxy/typed-object.test.ts +26 -15
  402. package/src/internal/ref/ref-array.ts +4 -4
  403. package/src/internal/ref/ref.ts +62 -39
  404. package/src/internal/schema/compose.test.ts +3 -3
  405. package/src/internal/schema/compose.ts +1 -2
  406. package/src/internal/schema/echo-schema.ts +49 -11
  407. package/src/internal/schema/index.ts +0 -2
  408. package/src/internal/schema/persistent-schema.ts +3 -4
  409. package/src/internal/types/base.ts +6 -21
  410. package/src/internal/types/entity.ts +35 -4
  411. package/src/internal/types/meta.ts +1 -11
  412. package/src/testing/api.test.ts +31 -5
  413. package/src/testing/test-schema.ts +55 -30
  414. package/src/testing/util.ts +22 -15
  415. package/dist/lib/browser/chunk-7GH6RXJ3.mjs.map +0 -7
  416. package/dist/lib/browser/chunk-E4UTVJNF.mjs +0 -1111
  417. package/dist/lib/browser/chunk-E4UTVJNF.mjs.map +0 -7
  418. package/dist/lib/node-esm/chunk-JE5RXM2I.mjs +0 -1111
  419. package/dist/lib/node-esm/chunk-JE5RXM2I.mjs.map +0 -7
  420. package/dist/lib/node-esm/chunk-M4B6BMD2.mjs.map +0 -7
  421. package/dist/types/src/errors.d.ts.map +0 -1
  422. package/dist/types/src/internal/entities/expando.d.ts +0 -16
  423. package/dist/types/src/internal/entities/expando.d.ts.map +0 -1
  424. package/dist/types/src/internal/schema/runtime-schema-registry.d.ts +0 -18
  425. package/dist/types/src/internal/schema/runtime-schema-registry.d.ts.map +0 -1
  426. package/dist/types/src/internal/schema/snapshot.d.ts +0 -6
  427. package/dist/types/src/internal/schema/snapshot.d.ts.map +0 -1
  428. package/dist/types/src/query/filter.d.ts +0 -167
  429. package/dist/types/src/query/filter.d.ts.map +0 -1
  430. package/dist/types/src/query/index.d.ts +0 -5
  431. package/dist/types/src/query/index.d.ts.map +0 -1
  432. package/dist/types/src/query/order.d.ts +0 -12
  433. package/dist/types/src/query/order.d.ts.map +0 -1
  434. package/dist/types/src/query/query.d.ts.map +0 -1
  435. package/dist/types/src/query/query.test.d.ts +0 -2
  436. package/dist/types/src/query/query.test.d.ts.map +0 -1
  437. package/dist/types/src/query/testing.d.ts +0 -51
  438. package/dist/types/src/query/testing.d.ts.map +0 -1
  439. package/dist/types/src/query/types.d.ts +0 -17
  440. package/dist/types/src/query/types.d.ts.map +0 -1
  441. package/dist/types/src/query/util.d.ts +0 -8
  442. package/dist/types/src/query/util.d.ts.map +0 -1
  443. package/src/internal/entities/expando.ts +0 -23
  444. package/src/internal/schema/runtime-schema-registry.ts +0 -78
  445. package/src/internal/schema/snapshot.ts +0 -25
  446. package/src/query/filter.ts +0 -455
  447. package/src/query/index.ts +0 -9
  448. package/src/query/testing.ts +0 -64
  449. package/src/query/types.ts +0 -23
  450. package/src/query/util.ts +0 -25
@@ -8,14 +8,16 @@ import * as ParseResult from 'effect/ParseResult';
8
8
  import * as Schema from 'effect/Schema';
9
9
  import * as SchemaAST from 'effect/SchemaAST';
10
10
 
11
- import { type EncodedReference, Reference } from '@dxos/echo-protocol';
12
- import { compositeRuntime } from '@dxos/echo-signals/runtime';
11
+ import { Event } from '@dxos/async';
12
+ import { type CustomInspectFunction, inspectCustom } from '@dxos/debug';
13
+ import { EncodedReference } from '@dxos/echo-protocol';
13
14
  import { assertArgument, invariant } from '@dxos/invariant';
14
15
  import { DXN, ObjectId } from '@dxos/keys';
15
16
 
17
+ import * as Database from '../../Database';
16
18
  import { ReferenceAnnotationId, getSchemaDXN, getTypeAnnotation, getTypeIdentifierAnnotation } from '../annotations';
17
19
  import { type JsonSchemaType } from '../json-schema';
18
- import type { AnyProperties, WithId } from '../types';
20
+ import type { AnyEntity, AnyProperties } from '../types';
19
21
 
20
22
  /**
21
23
  * The `$id` and `$ref` fields for an ECHO reference schema.
@@ -70,7 +72,7 @@ export const RefTypeId: unique symbol = Symbol('@dxos/echo/internal/Ref');
70
72
  /**
71
73
  * Reference Schema.
72
74
  */
73
- export interface RefSchema<T extends WithId> extends Schema.SchemaClass<Ref<T>, EncodedReference> {}
75
+ export interface RefSchema<T extends AnyEntity> extends Schema.SchemaClass<Ref<T>, EncodedReference> {}
74
76
 
75
77
  /**
76
78
  * Type of the `Ref` function and extra methods attached to it.
@@ -101,8 +103,8 @@ export interface RefFn {
101
103
  /**
102
104
  * Constructs a reference that points to the given object.
103
105
  */
104
- // TODO(burdon): Narrow to Obj.Any?
105
- make: <T extends WithId>(object: T) => Ref<T>;
106
+ // TODO(burdon): Narrow to Obj.Unknown?
107
+ make: <T extends AnyEntity>(object: T) => Ref<T>;
106
108
 
107
109
  /**
108
110
  * Constructs a reference that points to the object specified by the provided DXN.
@@ -115,18 +117,12 @@ export interface RefFn {
115
117
  */
116
118
  export const Ref: RefFn = <S extends Schema.Schema.Any>(schema: S): RefSchema<Schema.Schema.Type<S>> => {
117
119
  assertArgument(Schema.isSchema(schema), 'schema', 'Must call with an instance of effect-schema');
118
-
119
120
  const annotation = getTypeAnnotation(schema);
120
121
  if (annotation == null) {
121
122
  throw new Error('Reference target must be an ECHO schema.');
122
123
  }
123
124
 
124
- return createEchoReferenceSchema(
125
- getTypeIdentifierAnnotation(schema),
126
- annotation.typename,
127
- annotation.version,
128
- getSchemaExpectedName(schema.ast),
129
- );
125
+ return createEchoReferenceSchema(getTypeIdentifierAnnotation(schema), annotation.typename, annotation.version);
130
126
  };
131
127
 
132
128
  /**
@@ -139,12 +135,15 @@ export interface Ref<T> {
139
135
  */
140
136
  get dxn(): DXN;
141
137
 
138
+ /**
139
+ * Returns true if the reference has a target available (inlined or resolver set).
140
+ */
141
+ get isAvailable(): boolean;
142
+
142
143
  /**
143
144
  * @returns The reference target.
144
145
  * May return `undefined` if the object is not loaded in the working set.
145
146
  * Accessing this property, even if it returns `undefined` will trigger the object to be loaded to the working set.
146
- *
147
- * @reactive Supports signal subscriptions.
148
147
  */
149
148
  get target(): T | undefined;
150
149
 
@@ -158,6 +157,7 @@ export interface Ref<T> {
158
157
  /**
159
158
  * @returns Promise that will resolves with the target object or undefined if the object is not loaded locally.
160
159
  */
160
+
161
161
  tryLoad(): Promise<T | undefined>;
162
162
 
163
163
  /**
@@ -219,7 +219,7 @@ Ref.make = <T extends AnyProperties>(obj: T): Ref<T> => {
219
219
  // TODO(dmaretskyi): Extract to `getObjectDXN` function.
220
220
  const id = obj.id;
221
221
  invariant(ObjectId.isValid(id), 'Invalid object ID');
222
- const dxn = Reference.localObjectReference(id).toDXN();
222
+ const dxn = DXN.fromLocalObjectId(id);
223
223
  return new RefImpl(dxn, obj);
224
224
  };
225
225
 
@@ -244,7 +244,6 @@ export const createEchoReferenceSchema = (
244
244
  echoId: string | undefined,
245
245
  typename: string | undefined,
246
246
  version: string | undefined,
247
- schemaName?: string, // TODO(burdon): Not used.
248
247
  ): Schema.SchemaClass<Ref<any>, EncodedReference> => {
249
248
  if (!echoId && !typename) {
250
249
  throw new TypeError('Either echoId or typename must be provided.');
@@ -263,25 +262,39 @@ export const createEchoReferenceSchema = (
263
262
  [],
264
263
  {
265
264
  encode: () => {
266
- return (value) => {
267
- return Effect.succeed({
268
- '/': (value as Ref<any>).dxn.toString(),
265
+ return (value) =>
266
+ Effect.gen(function* () {
267
+ if (Ref.isRef(value)) {
268
+ return EncodedReference.fromDXN((value as Ref<any>).dxn);
269
+ } else if (EncodedReference.isEncodedReference(value)) {
270
+ return value;
271
+ }
272
+ throw new Error('Invalid reference');
269
273
  });
270
- };
271
274
  },
272
275
  decode: () => {
273
- return (value) => {
274
- // TODO(dmaretskyi): This branch seems to be taken by Schema.is
275
- if (Ref.isRef(value)) {
276
- return Effect.succeed(value);
277
- }
278
-
279
- if (typeof value !== 'object' || value == null || typeof (value as any)['/'] !== 'string') {
280
- return Effect.fail(new ParseResult.Unexpected(value, 'reference'));
281
- }
282
-
283
- return Effect.succeed(Ref.fromDXN(DXN.parse((value as any)['/'])));
284
- };
276
+ return (value) =>
277
+ Effect.gen(function* () {
278
+ const dbService = yield* Effect.serviceOption(Database.Service);
279
+
280
+ // TODO(dmaretskyi): This branch seems to be taken by Schema.is
281
+ if (Ref.isRef(value)) {
282
+ if (Option.isSome(dbService)) {
283
+ return dbService.value.db.makeRef(value.dxn);
284
+ } else {
285
+ return value;
286
+ }
287
+ }
288
+
289
+ if (!EncodedReference.isEncodedReference(value)) {
290
+ return yield* Effect.fail(new ParseResult.Unexpected(value, 'reference'));
291
+ }
292
+ if (Option.isSome(dbService)) {
293
+ return dbService.value.db.makeRef(EncodedReference.toDXN(value));
294
+ } else {
295
+ return Ref.fromDXN(EncodedReference.toDXN(value));
296
+ }
297
+ });
285
298
  },
286
299
  },
287
300
  {
@@ -331,7 +344,7 @@ export interface RefResolver {
331
344
  export class RefImpl<T> implements Ref<T> {
332
345
  #dxn: DXN;
333
346
  #resolver?: RefResolver = undefined;
334
- #signal = compositeRuntime.createSignal();
347
+ #resolved = new Event<void>();
335
348
 
336
349
  /**
337
350
  * Target is set when the reference is created from a specific object.
@@ -343,7 +356,7 @@ export class RefImpl<T> implements Ref<T> {
343
356
  * Callback to issue a reactive notification when object is resolved.
344
357
  */
345
358
  #resolverCallback = () => {
346
- this.#signal.notifyWrite();
359
+ this.#resolved.emit();
347
360
  };
348
361
 
349
362
  constructor(dxn: DXN, target?: T) {
@@ -358,11 +371,17 @@ export class RefImpl<T> implements Ref<T> {
358
371
  return this.#dxn;
359
372
  }
360
373
 
374
+ /**
375
+ * @inheritdoc
376
+ */
377
+ get isAvailable(): boolean {
378
+ return this.#target !== undefined || this.#resolver !== undefined;
379
+ }
380
+
361
381
  /**
362
382
  * @inheritdoc
363
383
  */
364
384
  get target(): T | undefined {
365
- this.#signal.notifyRead();
366
385
  if (this.#target) {
367
386
  return this.#target;
368
387
  }
@@ -390,6 +409,9 @@ export class RefImpl<T> implements Ref<T> {
390
409
  * @inheritdoc
391
410
  */
392
411
  async tryLoad(): Promise<T | undefined> {
412
+ if (this.#target) {
413
+ return this.#target;
414
+ }
393
415
  invariant(this.#resolver, 'Resolver is not set');
394
416
  return (await this.#resolver.resolve(this.#dxn)) as T | undefined;
395
417
  }
@@ -430,6 +452,10 @@ export class RefImpl<T> implements Ref<T> {
430
452
  return `Ref(${this.#dxn.toString()})`;
431
453
  }
432
454
 
455
+ [inspectCustom]: CustomInspectFunction = (depth, options, inspect) => {
456
+ return this.toString();
457
+ };
458
+
433
459
  [RefTypeId] = refVariance;
434
460
 
435
461
  /**
@@ -442,9 +468,6 @@ export class RefImpl<T> implements Ref<T> {
442
468
  }
443
469
 
444
470
  /**
445
- * Internal method to get the saved target.
446
- * Not the same as `target` which is resolved from the resolver.
447
- *
448
471
  * @internal
449
472
  */
450
473
  _getSavedTarget(): T | undefined {
@@ -6,18 +6,18 @@ import * as Schema from 'effect/Schema';
6
6
  import { describe, test } from 'vitest';
7
7
 
8
8
  import { FieldPath } from '../annotations';
9
+ import { EchoObjectSchema } from '../entities';
9
10
  import { FormatAnnotation, TypeFormat } from '../formats';
10
11
  import { ECHO_ANNOTATIONS_NS_KEY, toJsonSchema } from '../json-schema';
11
- import { TypedObject } from '../object';
12
12
 
13
13
  import { composeSchema } from './compose';
14
14
 
15
15
  describe('schema composition', () => {
16
16
  test('schema composition', ({ expect }) => {
17
- class BaseType extends TypedObject({ typename: 'example.com/Person', version: '0.1.0' })({
17
+ const BaseType = Schema.Struct({
18
18
  name: Schema.String,
19
19
  email: Schema.String,
20
- }) {}
20
+ }).pipe(EchoObjectSchema({ typename: 'example.com/Person', version: '0.1.0' }));
21
21
 
22
22
  const OverlaySchema = Schema.Struct({
23
23
  email: Schema.String.pipe(FieldPath('$.email'), FormatAnnotation.set(TypeFormat.Email)),
@@ -5,8 +5,7 @@
5
5
  import { invariant } from '@dxos/invariant';
6
6
 
7
7
  import { type JsonSchemaType } from '../json-schema';
8
-
9
- import { getSnapshot } from './snapshot';
8
+ import { getSnapshot } from '../object';
10
9
 
11
10
  /**
12
11
  * Creates a composite schema from the source and projection schemas.
@@ -10,7 +10,9 @@ import { type ObjectId } from '@dxos/keys';
10
10
 
11
11
  import { type SchemaMeta, SchemaMetaSymbol, type TypeAnnotation, getTypeAnnotation } from '../annotations';
12
12
  import { type JsonSchemaType, toEffectSchema, toJsonSchema } from '../json-schema';
13
- import { type TypedObject, type TypedObjectPrototype } from '../object';
13
+ import { type TypedObject, type TypedObjectPrototype, getSnapshot } from '../object';
14
+ import { ChangeId } from '../proxy';
15
+ import { EntityKind, SchemaKindId } from '../types';
14
16
 
15
17
  import {
16
18
  addFieldsToSchema,
@@ -20,7 +22,6 @@ import {
20
22
  updateFieldsInSchema,
21
23
  } from './manipulation';
22
24
  import { PersistentSchema } from './persistent-schema';
23
- import { getSnapshot } from './snapshot';
24
25
 
25
26
  /**
26
27
  * Base schema type.
@@ -83,6 +84,10 @@ export class ImmutableSchema<A = any, I = any> implements BaseSchema<A, I> {
83
84
  // TypedObject
84
85
  //
85
86
 
87
+ get kind(): EntityKind {
88
+ return this._objectAnnotation.kind;
89
+ }
90
+
86
91
  get typename(): string {
87
92
  return this._objectAnnotation.typename;
88
93
  }
@@ -172,7 +177,7 @@ const schemaVariance = {
172
177
  *
173
178
  * @example
174
179
  * ```ts
175
- * export class TableType extends Schema.Struct({...}).pipe(Type.Obj({ typename: 'example.org/type/Table', version: '0.1.0' })){
180
+ * export class TableType extends Schema.Struct({...}).pipe(Type.object({ typename: 'example.org/type/Table', version: '0.1.0' })){
176
181
  * title: Schema.String,
177
182
  * schema: Schema.optional(ref(EchoSchema)),
178
183
  * props: Schema.mutable(S.Array(TablePropSchema)),
@@ -185,6 +190,12 @@ export class EchoSchema<A = any, I = any> extends EchoSchemaConstructor() implem
185
190
  private _schema: Schema.Schema.AnyNoContext | undefined;
186
191
  private _isDirty = true;
187
192
 
193
+ /**
194
+ * Schema kind key that marks this as an ECHO schema.
195
+ * Makes EchoSchema satisfy the Type.Obj.Any type.
196
+ */
197
+ readonly [SchemaKindId]: EntityKind.Object = EntityKind.Object;
198
+
188
199
  constructor(private readonly _persistentSchema: PersistentSchema) {
189
200
  super();
190
201
  }
@@ -229,6 +240,11 @@ export class EchoSchema<A = any, I = any> extends EchoSchemaConstructor() implem
229
240
  // BaseSchema
230
241
  //
231
242
 
243
+ public get kind(): EntityKind.Object {
244
+ // Dynamic schemas are always object schemas.
245
+ return EntityKind.Object;
246
+ }
247
+
232
248
  public get typename(): string {
233
249
  return this._persistentSchema.typename;
234
250
  }
@@ -249,7 +265,7 @@ export class EchoSchema<A = any, I = any> extends EchoSchemaConstructor() implem
249
265
  }
250
266
 
251
267
  /**
252
- * @reactive
268
+ * Returns the JSON schema for the schema.
253
269
  */
254
270
  public get jsonSchema(): JsonSchemaType {
255
271
  return this._persistentSchema.jsonSchema;
@@ -309,8 +325,10 @@ export class EchoSchema<A = any, I = any> extends EchoSchemaConstructor() implem
309
325
  */
310
326
  public updateTypename(typename: string): void {
311
327
  const updated = setTypenameInSchema(this._getSchema(), typename);
312
- this._persistentSchema.typename = typename;
313
- this._persistentSchema.jsonSchema = toJsonSchema(updated);
328
+ this._change((schema) => {
329
+ schema.typename = typename;
330
+ schema.jsonSchema = toJsonSchema(updated);
331
+ });
314
332
  }
315
333
 
316
334
  /**
@@ -318,7 +336,9 @@ export class EchoSchema<A = any, I = any> extends EchoSchemaConstructor() implem
318
336
  */
319
337
  public addFields(fields: Schema.Struct.Fields): void {
320
338
  const extended = addFieldsToSchema(this._getSchema(), fields);
321
- this._persistentSchema.jsonSchema = toJsonSchema(extended);
339
+ this._change((schema) => {
340
+ schema.jsonSchema = toJsonSchema(extended);
341
+ });
322
342
  }
323
343
 
324
344
  /**
@@ -326,7 +346,9 @@ export class EchoSchema<A = any, I = any> extends EchoSchemaConstructor() implem
326
346
  */
327
347
  public updateFields(fields: Schema.Struct.Fields): void {
328
348
  const updated = updateFieldsInSchema(this._getSchema(), fields);
329
- this._persistentSchema.jsonSchema = toJsonSchema(updated);
349
+ this._change((schema) => {
350
+ schema.jsonSchema = toJsonSchema(updated);
351
+ });
330
352
  }
331
353
 
332
354
  /**
@@ -334,7 +356,9 @@ export class EchoSchema<A = any, I = any> extends EchoSchemaConstructor() implem
334
356
  */
335
357
  public updateFieldPropertyName({ before, after }: { before: PropertyKey; after: PropertyKey }): void {
336
358
  const renamed = updateFieldNameInSchema(this._getSchema(), { before, after });
337
- this._persistentSchema.jsonSchema = toJsonSchema(renamed);
359
+ this._change((schema) => {
360
+ schema.jsonSchema = toJsonSchema(renamed);
361
+ });
338
362
  }
339
363
 
340
364
  /**
@@ -342,7 +366,21 @@ export class EchoSchema<A = any, I = any> extends EchoSchemaConstructor() implem
342
366
  */
343
367
  public removeFields(fieldNames: string[]): void {
344
368
  const removed = removeFieldsFromSchema(this._getSchema(), fieldNames);
345
- this._persistentSchema.jsonSchema = toJsonSchema(removed);
369
+ this._change((schema) => {
370
+ schema.jsonSchema = toJsonSchema(removed);
371
+ });
372
+ }
373
+
374
+ /**
375
+ * Wrapper for Obj.change that handles the change context for the persistent schema.
376
+ */
377
+ private _change(callback: (schema: PersistentSchema) => void): void {
378
+ const changeFn = (this._persistentSchema as any)[ChangeId];
379
+ if (changeFn) {
380
+ changeFn(callback);
381
+ } else {
382
+ callback(this._persistentSchema);
383
+ }
346
384
  }
347
385
 
348
386
  //
@@ -350,7 +388,7 @@ export class EchoSchema<A = any, I = any> extends EchoSchemaConstructor() implem
350
388
  //
351
389
 
352
390
  /**
353
- * Called by EchoSchemaRegistry on update.
391
+ * Called by DatabaseSchemaRegistry on update.
354
392
  */
355
393
  _invalidate(): void {
356
394
  this._isDirty = true;
@@ -5,5 +5,3 @@
5
5
  export * from './echo-schema';
6
6
  export * from './manipulation';
7
7
  export * from './persistent-schema';
8
- export * from './runtime-schema-registry';
9
- export * from './snapshot';
@@ -12,7 +12,7 @@ import { JsonSchemaType } from '../json-schema';
12
12
  * Persistent representation of a schema.
13
13
  */
14
14
  // TODO(burdon): Move.
15
- const PersistentEchoSchema = Schema.Struct({
15
+ export const PersistentSchema = Schema.Struct({
16
16
  name: Schema.optional(Schema.String),
17
17
  typename: TypenameSchema,
18
18
  version: VersionSchema,
@@ -23,6 +23,5 @@ const PersistentEchoSchema = Schema.Struct({
23
23
  version: '0.1.0',
24
24
  }),
25
25
  );
26
- export interface PersistentSchema extends Schema.Schema.Type<typeof PersistentEchoSchema> {}
27
- export interface PersistentSchemaEncoded extends Schema.Schema.Encoded<typeof PersistentEchoSchema> {}
28
- export const PersistentSchema: Schema.Schema<PersistentSchema, PersistentSchemaEncoded> = PersistentEchoSchema;
26
+
27
+ export interface PersistentSchema extends Schema.Schema.Type<typeof PersistentSchema> {}
@@ -9,20 +9,6 @@ import { type ObjectId } from '@dxos/keys';
9
9
 
10
10
  import { type ATTR_META, type ObjectMeta } from './meta';
11
11
 
12
- /**
13
- * Marker interface for object with an `id`.
14
- */
15
- export interface HasId {
16
- readonly id: ObjectId;
17
- }
18
-
19
- /**
20
- * Object that has an associated typename.
21
- * The typename is retrievable using {@link getTypename}.
22
- * The object can be used with {@link isInstanceOf} to check if it is an instance of a schema.
23
- */
24
- export type HasTypename = {};
25
-
26
12
  /**
27
13
  * Base type for all data objects (reactive, ECHO, and other raw objects).
28
14
  * NOTE: This describes the base type for all database objects.
@@ -30,23 +16,22 @@ export type HasTypename = {};
30
16
  */
31
17
  // TODO(burdon): Make internal.
32
18
  // TODO(burdon): Prefer Record<string, unknown>.
33
- // TODO(burdon): Exclude "id", etc. from keys.
34
19
  export type AnyProperties = Record<string, any>;
35
20
 
36
21
  /**
37
- * Canonical type for all ECHO objects.
22
+ * Canonical type for all ECHO entities (objects and relations).
38
23
  */
39
- export interface AnyEchoObject extends HasId, HasTypename {}
40
-
41
- // TODO(dmaretskyi): Remove; this type effectively disables type safety due to `any`.
42
- export type WithId<T extends AnyProperties = AnyProperties> = T & HasId;
24
+ // TODO(wittjosiah): Remove. Prefer higher level types (e.g. Entity.Unknown).
25
+ export interface AnyEntity {
26
+ readonly id: ObjectId;
27
+ }
43
28
 
44
29
  export type ExcludeId<T extends AnyProperties> = Omit<T, 'id'>;
45
30
 
46
31
  export type PropertyKey<T extends AnyProperties> = Extract<keyof ExcludeId<T>, string>;
47
32
 
48
33
  // TODO(dmaretskyi): Remove. This should be using the symbol type.
49
- export type WithMeta = { [ATTR_META]?: ObjectMeta };
34
+ type WithMeta = { [ATTR_META]?: ObjectMeta };
50
35
 
51
36
  /**
52
37
  * The raw object should not include the ECHO id, but may include metadata.
@@ -4,10 +4,33 @@
4
4
 
5
5
  import * as Schema from 'effect/Schema';
6
6
 
7
+ // NOTE: String literals are used instead of unique symbols for both KindId and SchemaKindId.
8
+ // Unique symbols cause TS4023 "cannot be named" errors when external packages
9
+ // try to export types that reference this key (e.g., `export const Graph = ...`).
10
+ // TypeScript cannot emit declaration files that reference unique symbols from
11
+ // external modules. Using a string literal allows the type to be inlined in
12
+ // declaration files, making the API portable across package boundaries.
13
+
14
+ /**
15
+ * String key used to identify the kind of an entity instance (object or relation).
16
+ */
17
+ export const KindId = '~@dxos/echo/Kind' as const;
18
+ export type KindId = typeof KindId;
19
+
20
+ /**
21
+ * String key used to identify the kind of a schema (object schema or relation schema).
22
+ * Parallels KindId which identifies instance kinds.
23
+ */
24
+ export const SchemaKindId = '~@dxos/echo/SchemaKind' as const;
25
+ export type SchemaKindId = typeof SchemaKindId;
26
+
7
27
  /**
8
- * Entity kind.
28
+ * String key used to brand snapshot types.
29
+ * Snapshots have SnapshotKindId instead of KindId, making them
30
+ * distinguishable from reactive objects at the type level.
9
31
  */
10
- const EntityKindId = Symbol.for('@dxos/echo/EntityKind');
32
+ export const SnapshotKindId = '~@dxos/echo/SnapshotKind' as const;
33
+ export type SnapshotKindId = typeof SnapshotKindId;
11
34
 
12
35
  /**
13
36
  * Kinds of entities stored in ECHO: objects and relations.
@@ -19,5 +42,13 @@ export enum EntityKind {
19
42
 
20
43
  export const EntityKindSchema = Schema.Enums(EntityKind);
21
44
 
22
- export const KindId: unique symbol = EntityKindId as any;
23
- export type KindId = typeof KindId;
45
+ /**
46
+ * Typename for generic object references (Type.Obj / Type.Ref(Type.Obj)).
47
+ * Used when referencing any object without a specific schema.
48
+ */
49
+ export const ANY_OBJECT_TYPENAME = 'dxos.org/schema/AnyObject';
50
+
51
+ /**
52
+ * Version for generic object references.
53
+ */
54
+ export const ANY_OBJECT_VERSION = '0.0.0';
@@ -8,7 +8,7 @@ import { ForeignKey } from '@dxos/echo-protocol';
8
8
  import { invariant } from '@dxos/invariant';
9
9
  import { type Comparator, intersection } from '@dxos/util';
10
10
 
11
- import { type AnyProperties, type WithMeta } from './base';
11
+ import { type AnyProperties } from './base';
12
12
 
13
13
  /**
14
14
  * Property name for meta when object is serialized to JSON.
@@ -54,16 +54,6 @@ export const getMeta = (obj: AnyProperties): ObjectMeta => {
54
54
  return metadata;
55
55
  };
56
56
 
57
- /**
58
- * Utility to split meta property from raw object.
59
- * @deprecated Bad API.
60
- */
61
- export const splitMeta = <T>(object: T & WithMeta): { object: T; meta?: ObjectMeta } => {
62
- const meta = object[ATTR_META];
63
- delete object[ATTR_META];
64
- return { meta, object };
65
- };
66
-
67
57
  //
68
58
  // Foreign keys
69
59
  //
@@ -14,12 +14,12 @@ import { TestSchema } from './test-schema';
14
14
  describe('Experimental API review', () => {
15
15
  test('type checks', ({ expect }) => {
16
16
  const contact = Obj.make(TestSchema.Person, { name: 'Test' });
17
- const type: Schema.Schema<TestSchema.Person> = Obj.getSchema(contact) ?? raise(new Error('No schema found'));
17
+ const schema = Obj.getSchema(contact) ?? raise(new Error('No schema found'));
18
18
 
19
- expect(Type.getDXN(type)?.typename).to.eq(TestSchema.Person.typename);
20
- expect(Type.getTypename(type)).to.eq('example.com/type/Person');
21
- expect(Type.getVersion(type)).to.eq('0.1.0');
22
- expect(Type.getMeta(type)).to.deep.eq({
19
+ expect(Type.getDXN(schema)?.typename).to.eq(TestSchema.Person.typename);
20
+ expect(Type.getTypename(schema)).to.eq('example.com/type/Person');
21
+ expect(Type.getVersion(schema)).to.eq('0.1.0');
22
+ expect(Type.getMeta(schema)).to.deep.eq({
23
23
  kind: Entity.Kind.Object,
24
24
  typename: 'example.com/type/Person',
25
25
  version: '0.1.0',
@@ -97,4 +97,30 @@ describe('Experimental API review', () => {
97
97
  }
98
98
  }
99
99
  });
100
+
101
+ /**
102
+ * Test that Obj.make return types are clean and don't expose internal markers like OfKind.
103
+ * The return type of Obj.make(Schema, props) should be assignable to Obj.Obj<InstanceType>.
104
+ */
105
+ describe('Obj.make return type', () => {
106
+ test('Obj.make with custom schema should be assignable to Obj.Obj<Person>', ({ expect }) => {
107
+ {
108
+ const expando = Obj.make(TestSchema.Expando, { content: 'Test' });
109
+ expect(Obj.isObject(expando)).to.be.true;
110
+ expect(expando.content).to.eq('Test');
111
+
112
+ // This should work: assign to Obj.Obj of the schema's instance type
113
+ const _typed: Obj.Obj<TestSchema.Expando> = expando;
114
+ }
115
+
116
+ {
117
+ const person = Obj.make(TestSchema.Person, { name: 'Test' });
118
+ expect(Obj.isObject(person)).to.be.true;
119
+ expect(person.name).to.eq('Test');
120
+
121
+ // This should work: assign to Obj.Obj of the schema's instance type
122
+ const _typed: Obj.Obj<TestSchema.Person> = person;
123
+ }
124
+ });
125
+ });
100
126
  });