@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
@@ -9,33 +9,42 @@ import type * as Types from 'effect/Types';
9
9
  import { type ToMutable } from '@dxos/util';
10
10
 
11
11
  import { type TypeMeta } from '../annotations';
12
- import { type HasId } from '../types';
12
+ import { type AnyEntity, type EntityKind, SchemaKindId } from '../types';
13
13
 
14
14
  // TODO(burdon): Define Schema type for `typename` and use consistently for all DXN-like properties.
15
15
 
16
16
  // type RequiredKeys<T> = { [K in keyof T]-?: {} extends Pick<T, K> ? never : K }[keyof T];
17
- export type EchoTypeSchemaProps<T, ExtraFields = {}> = Types.Simplify<HasId & ToMutable<T> & ExtraFields>;
17
+ export type EchoTypeSchemaProps<T, ExtraFields = {}> = Types.Simplify<AnyEntity & ToMutable<T> & ExtraFields>;
18
18
 
19
19
  // TODO(burdon): Rename EchoEntitySchema.
20
- export interface EchoTypeSchema<Self extends Schema.Schema.Any, ExtraFields = {}>
21
- extends TypeMeta,
20
+ export interface EchoTypeSchema<
21
+ Self extends Schema.Schema.Any,
22
+ ExtraFields = {},
23
+ K extends EntityKind = EntityKind,
24
+ Fields extends Schema.Struct.Fields = Schema.Struct.Fields,
25
+ > extends TypeMeta,
22
26
  Schema.AnnotableClass<
23
- EchoTypeSchema<Self, ExtraFields>,
27
+ EchoTypeSchema<Self, ExtraFields, K, Fields>,
24
28
  EchoTypeSchemaProps<Schema.Schema.Type<Self>, ExtraFields>,
25
29
  EchoTypeSchemaProps<Schema.Schema.Encoded<Self>, ExtraFields>,
26
30
  Schema.Schema.Context<Self>
27
31
  > {
28
- // make(
29
- // props: RequiredKeys<Schema.TypeLiteral.Constructor<Fields, []>> extends never
30
- // ? void | Simplify<Schema.TypeLiteral.Constructor<Fields, []>>
31
- // : Simplify<Schema.TypeLiteral.Constructor<Fields, []>>,
32
- // options?: MakeOptions,
33
- // ): Simplify<Schema.TypeLiteral.Type<Fields, []>>;
32
+ /**
33
+ * Schema kind key that marks this as an ECHO schema and indicates its kind.
34
+ * Makes EchoTypeSchema satisfy the Type.Obj.Any or Type.Relation.Any type.
35
+ */
36
+ readonly [SchemaKindId]: K;
37
+
38
+ /**
39
+ * The fields defined in the original struct schema.
40
+ * Allows accessing field definitions for introspection.
41
+ */
42
+ readonly fields: Fields;
34
43
 
35
44
  instanceOf(value: unknown): boolean;
36
45
  }
37
46
 
38
- // type MakeOptions =
47
+ // type MakeProps =
39
48
  // | boolean
40
49
  // | {
41
50
  // readonly disableValidation?: boolean;
@@ -63,18 +72,24 @@ export interface EchoTypeSchema<Self extends Schema.Schema.Any, ExtraFields = {}
63
72
  // return out;
64
73
  // };
65
74
 
66
- // const _getDisableValidationMakeOption = (options: MakeOptions | undefined): boolean =>
75
+ // const _getDisableValidationMakeOption = (options: MakeProps | undefined): boolean =>
67
76
  // Predicate.isBoolean(options) ? options : options?.disableValidation ?? false;
68
77
 
69
78
  /**
70
79
  * @internal
71
80
  */
72
- export const makeEchoTypeSchema = <Self extends Schema.Schema.Any>(
73
- // fields: Fields,
81
+ export const makeEchoTypeSchema = <
82
+ Self extends Schema.Schema.Any,
83
+ K extends EntityKind = EntityKind,
84
+ // TODO(wittjosiah): Can this be inferred from the schema?
85
+ Fields extends Schema.Struct.Fields = Schema.Struct.Fields,
86
+ >(
87
+ fields: Fields,
74
88
  ast: SchemaAST.AST,
75
89
  typename: string,
76
90
  version: string,
77
- ): EchoTypeSchema<Self> => {
91
+ kind: K,
92
+ ): EchoTypeSchema<Self, {}, K, Fields> => {
78
93
  return class EchoObjectSchemaClass extends Schema.make<
79
94
  EchoTypeSchemaProps<Schema.Schema.Type<Self>>,
80
95
  EchoTypeSchemaProps<Schema.Schema.Encoded<Self>>,
@@ -82,19 +97,21 @@ export const makeEchoTypeSchema = <Self extends Schema.Schema.Any>(
82
97
  >(ast) {
83
98
  static readonly typename = typename;
84
99
  static readonly version = version;
100
+ static readonly [SchemaKindId] = kind;
101
+ static readonly fields = fields;
85
102
 
86
103
  static override annotations(
87
104
  annotations: Schema.Annotations.GenericSchema<EchoTypeSchemaProps<Schema.Schema.Type<Self>>>,
88
- ): EchoTypeSchema<Self> {
105
+ ): EchoTypeSchema<Self, {}, K, Fields> {
89
106
  const schema = Schema.make<EchoTypeSchemaProps<Schema.Schema.Type<Self>>>(ast).annotations(annotations);
90
- return makeEchoTypeSchema<Self>(/* fields, */ schema.ast, typename, version);
107
+ return makeEchoTypeSchema<Self, K, Fields>(fields, schema.ast, typename, version, kind);
91
108
  }
92
109
 
93
110
  // static make(
94
111
  // props: RequiredKeys<Schema.TypeLiteral.Constructor<Fields, []>> extends never
95
112
  // ? void | Simplify<Schema.TypeLiteral.Constructor<Fields, []>>
96
113
  // : Simplify<Schema.TypeLiteral.Constructor<Fields, []>>,
97
- // options?: MakeOptions,
114
+ // options?: MakeProps,
98
115
  // ): Simplify<Schema.TypeLiteral.Type<Fields, []>> {
99
116
  // const propsWithDefaults: any = _lazilyMergeDefaults(fields, { ...(props as any) });
100
117
  // return _getDisableValidationMakeOption(options)
@@ -2,7 +2,7 @@
2
2
  // Copyright 2024 DXOS.org
3
3
  //
4
4
 
5
- export * from './expando';
5
+ export * from './entity';
6
6
  export * from './model'; // TODO(burdon): Rename.
7
7
  export * from './object';
8
8
  export * from './relation';
@@ -9,6 +9,7 @@ import { invariant } from '@dxos/invariant';
9
9
  import { DXN, ObjectId } from '@dxos/keys';
10
10
  import { assumeType } from '@dxos/util';
11
11
 
12
+ import type * as Database from '../../Database';
12
13
  import {
13
14
  type ATTR_META,
14
15
  type ATTR_TYPE,
@@ -59,25 +60,24 @@ export const ObjectDeletedId = Symbol.for('@dxos/echo/Deleted');
59
60
  */
60
61
  export const ObjectVersionId: unique symbol = Symbol.for('@dxos/echo/Version');
61
62
 
63
+ /**
64
+ * Object database accessor symbol.
65
+ */
66
+ export const ObjectDatabaseId = Symbol.for('@dxos/echo/Database');
67
+
62
68
  /**
63
69
  * Internal runtime representation of an object.
64
70
  * The fields are accessed through getter functions.
65
71
  */
72
+ // NOTE: Each symbol has a jsdoc describing its purpose.
66
73
  export interface InternalObjectProps {
67
- id: ObjectId;
68
-
69
- // Echo supports untyped objects O_O.
70
- readonly [TypeId]?: DXN;
71
-
72
- //
73
- readonly [SelfDXNId]?: DXN;
74
-
75
- /**
76
- * Returns the schema for the object.
77
- */
78
- readonly [SchemaId]?: Schema.Schema.AnyNoContext;
74
+ readonly id: ObjectId;
75
+ readonly [SelfDXNId]: DXN;
79
76
  readonly [KindId]: EntityKind;
77
+ readonly [SchemaId]: Schema.Schema.AnyNoContext;
78
+ readonly [TypeId]: DXN;
80
79
  readonly [MetaId]?: ObjectMeta;
80
+ readonly [ObjectDatabaseId]?: Database.Database;
81
81
  readonly [ObjectDeletedId]?: boolean;
82
82
  readonly [ObjectVersionId]?: Version;
83
83
  readonly [RelationSourceDXNId]?: DXN;
@@ -105,6 +105,11 @@ export interface ObjectJSON {
105
105
  [ATTR_META]?: ObjectMetaJSON;
106
106
  [ATTR_RELATION_SOURCE]?: DXN.String;
107
107
  [ATTR_RELATION_TARGET]?: DXN.String;
108
+
109
+ /**
110
+ * Application-specific properties.
111
+ */
112
+ [key: string]: unknown;
108
113
  }
109
114
 
110
115
  /**
@@ -12,19 +12,34 @@ import { EntityKind } from '../types';
12
12
 
13
13
  import { type EchoTypeSchema, makeEchoTypeSchema } from './entity';
14
14
 
15
+ /**
16
+ * Object schema type with kind marker.
17
+ */
18
+ export type EchoObjectSchema<
19
+ Self extends Schema.Schema.Any,
20
+ Fields extends Schema.Struct.Fields = Schema.Struct.Fields,
21
+ > = EchoTypeSchema<Self, {}, EntityKind.Object, Fields>;
22
+
15
23
  /**
16
24
  * Schema for Obj entity types.
17
25
  * Pipeable function to add ECHO object annotations to a schema.
18
26
  */
19
27
  export const EchoObjectSchema: {
20
- // TODO(burdon): Tighten Self type to Schema.TypeLiteral or Schema.Struct to facilitate definition of `make` method.
21
- // (meta: TypeMeta): <Self extends Schema.Struct<Fields>, Fields extends Schema.Struct.Fields>(self: Self) => EchoObjectSchema<Self, Fields>;
22
- (meta: TypeMeta): <Self extends Schema.Schema.Any>(self: Self) => EchoTypeSchema<Self>;
28
+ (
29
+ meta: TypeMeta,
30
+ ): <Self extends Schema.Schema.Any, Fields extends Schema.Struct.Fields = Schema.Struct.Fields>(
31
+ self: Self & { fields?: Fields },
32
+ ) => EchoObjectSchema<Self, Fields>;
23
33
  } = ({ typename, version }) => {
24
- return <Self extends Schema.Schema.Any>(self: Self): EchoTypeSchema<Self> => {
34
+ return <Self extends Schema.Schema.Any, Fields extends Schema.Struct.Fields = Schema.Struct.Fields>(
35
+ self: Self & { fields?: Fields },
36
+ ): EchoObjectSchema<Self, Fields> => {
25
37
  invariant(typeof TypeAnnotationId === 'symbol', 'Sanity.');
26
38
  invariant(SchemaAST.isTypeLiteral(self.ast), 'Schema must be a TypeLiteral.');
27
39
 
40
+ // Extract fields from the schema if available (Struct schemas have .fields).
41
+ const fields = ((self as any).fields ?? {}) as Fields;
42
+
28
43
  // TODO(dmaretskyi): Does `Schema.mutable` work for deep mutability here?
29
44
  // TODO(dmaretskyi): Do not do mutable here.
30
45
  const schemaWithId = Schema.extend(Schema.mutable(self), Schema.Struct({ id: Schema.String }));
@@ -40,6 +55,6 @@ export const EchoObjectSchema: {
40
55
  }),
41
56
  });
42
57
 
43
- return makeEchoTypeSchema<Self>(/* self.fields, */ ast, typename, version);
58
+ return makeEchoTypeSchema<Self, EntityKind.Object, Fields>(fields, ast, typename, version, EntityKind.Object);
44
59
  };
45
60
  };
@@ -83,6 +83,21 @@ export type EchoRelationSchemaOptions<
83
83
  target: TTarget;
84
84
  };
85
85
 
86
+ /**
87
+ * Relation schema type with kind marker.
88
+ */
89
+ export type EchoRelationSchema<
90
+ Self extends Schema.Schema.Any,
91
+ Source extends Schema.Schema.AnyNoContext,
92
+ Target extends Schema.Schema.AnyNoContext,
93
+ Fields extends Schema.Struct.Fields = Schema.Struct.Fields,
94
+ > = EchoTypeSchema<
95
+ Self,
96
+ RelationSourceTargetRefs<Schema.Schema.Type<Source>, Schema.Schema.Type<Target>>,
97
+ EntityKind.Relation,
98
+ Fields
99
+ >;
100
+
86
101
  /**
87
102
  * Schema for Relation entity types.
88
103
  */
@@ -106,11 +121,14 @@ export const EchoRelationSchema = <
106
121
  raise(new Error('Target schema must be an echo object schema.'));
107
122
  }
108
123
 
109
- return <Self extends Schema.Schema.Any>(
110
- self: Self,
111
- ): EchoTypeSchema<Self, RelationSourceTargetRefs<Schema.Schema.Type<Source>, Schema.Schema.Type<Target>>> => {
124
+ return <Self extends Schema.Schema.Any, Fields extends Schema.Struct.Fields = Schema.Struct.Fields>(
125
+ self: Self & { fields?: Fields },
126
+ ): EchoRelationSchema<Self, Source, Target, Fields> => {
112
127
  invariant(SchemaAST.isTypeLiteral(self.ast), 'Schema must be a TypeLiteral.');
113
128
 
129
+ // Extract fields from the schema if available (Struct schemas have .fields).
130
+ const fields = ((self as any).fields ?? {}) as Fields;
131
+
114
132
  // TODO(dmaretskyi): Does `Schema.mutable` work for deep mutability here?
115
133
  // TODO(dmaretskyi): Do not do mutable here.
116
134
  const schemaWithId = Schema.extend(Schema.mutable(self), Schema.Struct({ id: Schema.String }));
@@ -135,7 +153,7 @@ export const EchoRelationSchema = <
135
153
  }),
136
154
  });
137
155
 
138
- return makeEchoTypeSchema<Self>(/* self.fields, */ ast, typename, version);
156
+ return makeEchoTypeSchema<Self, EntityKind.Relation, Fields>(fields, ast, typename, version, EntityKind.Relation);
139
157
  };
140
158
  };
141
159
 
@@ -10,11 +10,10 @@ import * as DateUtil from './date';
10
10
  import * as NumberUtil from './number';
11
11
  import * as ObjectUtil from './object';
12
12
  import * as StringUtil from './string';
13
- import { TypeFormat as TypeFormatEnum } from './types';
13
+ import { TypeFormat as TypeFormat$ } from './types';
14
14
 
15
- // TODO(burdon): Consider factoring out to separate `@dxos/json-schema`
16
15
  // TODO(burdon): Media encoding.
17
- // - https://json-schema.org/understanding-json-schema/reference/non_json_data
16
+ // - https://json-schema.org/understanding-json-schema/reference/non_json_data
18
17
 
19
18
  /**
20
19
  * Formats.
@@ -23,9 +22,9 @@ import { TypeFormat as TypeFormatEnum } from './types';
23
22
  */
24
23
  // TODO(burdon): Add fields for `examples`, `message`, etc.
25
24
  export namespace Format {
26
- export import TypeFormat = TypeFormatEnum;
25
+ export import TypeFormat = TypeFormat$;
27
26
 
28
- // Strings
27
+ // String
29
28
  export const DXN = Keys.DXN.Schema;
30
29
  export const Email = StringUtil.Email;
31
30
  export const Formula = StringUtil.Formula;
@@ -44,12 +43,12 @@ export namespace Format {
44
43
  export const Timestamp = NumberUtil.Timestamp;
45
44
 
46
45
  // Dates and times
47
- export const DateTime = DateUtil.DateTime;
48
46
  export const Date = DateUtil.DateOnly;
49
- export const Time = DateUtil.TimeOnly;
47
+ export const DateTime = DateUtil.DateTime;
50
48
  export const Duration = DateUtil.Duration;
49
+ export const Time = DateUtil.TimeOnly;
51
50
 
52
51
  // Objects
53
52
  export const GeoPoint = ObjectUtil.GeoPoint;
54
- export type GeoPoint = ObjectUtil.GeoPoint;
53
+ export type GeoPoint = ObjectUtil.GeoPoint; // TODO(burdon): Export types.
55
54
  }
@@ -21,8 +21,8 @@ import { FormatAnnotation, TypeFormat } from './types';
21
21
  * Note: optional third element for altitude.
22
22
  */
23
23
  export const GeoPoint = Schema.Tuple(
24
- Schema.Number.pipe(Schema.annotations({ title: 'Longitude' }), Schema.clamp(-180, 180), Schema.multipleOf(0.00001)),
25
- Schema.Number.pipe(Schema.annotations({ title: 'Latitude' }), Schema.clamp(-90, 90), Schema.multipleOf(0.00001)),
24
+ Schema.Number.pipe(Schema.annotations({ title: 'Longitude' }), Schema.clamp(-180, 180), Schema.multipleOf(0.000001)),
25
+ Schema.Number.pipe(Schema.annotations({ title: 'Latitude' }), Schema.clamp(-90, 90), Schema.multipleOf(0.000001)),
26
26
  Schema.optionalElement(Schema.Number).annotations({
27
27
  title: 'Height ASL (m)',
28
28
  }),
@@ -4,8 +4,10 @@
4
4
 
5
5
  import * as Schema from 'effect/Schema';
6
6
 
7
- /** Schema for a single select option. Used to define choices in a {single|multi}-select field. */
8
- export const SelectOptionSchema = Schema.Struct({
7
+ /**
8
+ * Schema for a single select option. Used to define choices in a {single|multi}-select field.
9
+ */
10
+ export const SelectOption = Schema.Struct({
9
11
  /** Stable identifier for the option. */
10
12
  id: Schema.NonEmptyString,
11
13
  title: Schema.String,
@@ -13,4 +15,4 @@ export const SelectOptionSchema = Schema.Struct({
13
15
  color: Schema.String,
14
16
  }).pipe(Schema.mutable);
15
17
 
16
- export type SelectOption = Schema.Schema.Type<typeof SelectOptionSchema>;
18
+ export type SelectOption = Schema.Schema.Type<typeof SelectOption>;
@@ -52,6 +52,11 @@ export const Markdown = Schema.String.pipe(FormatAnnotation.set(TypeFormat.Markd
52
52
  // TODO(burdon): Implement.
53
53
  export const Regex = Schema.String.pipe(FormatAnnotation.set(TypeFormat.Regex));
54
54
 
55
+ /**
56
+ * Multi-line text.
57
+ */
58
+ export const Text = Schema.String.pipe(FormatAnnotation.set(TypeFormat.Text));
59
+
55
60
  /**
56
61
  * https://datatracker.ietf.org/doc/html/rfc3986#section-1.1.3
57
62
  */
@@ -55,6 +55,7 @@ export const FormatAnnotationId = Symbol.for('@dxos/schema/annotation/Format');
55
55
 
56
56
  export const FormatAnnotation = createAnnotationHelper<TypeFormat>(FormatAnnotationId);
57
57
 
58
+ /** @deprecated */
58
59
  export const getFormatAnnotation = (node: SchemaAST.AST): TypeFormat | undefined =>
59
60
  Function.pipe(SchemaAST.getAnnotation<TypeFormat>(FormatAnnotationId)(node), Option.getOrUndefined);
60
61
 
@@ -84,6 +85,7 @@ export enum TypeFormat {
84
85
  Markdown = 'markdown',
85
86
  Regex = 'regex',
86
87
  SingleSelect = 'single-select',
88
+ Text = 'text',
87
89
  MultiSelect = 'multi-select',
88
90
  URL = 'url',
89
91
  UUID = 'uuid',
@@ -151,6 +153,7 @@ export const formatToType: Record<TypeFormat, TypeEnum> = {
151
153
  [TypeFormat.URL]: TypeEnum.String,
152
154
  [TypeFormat.UUID]: TypeEnum.String,
153
155
  [TypeFormat.SingleSelect]: TypeEnum.String,
156
+ [TypeFormat.Text]: TypeEnum.String,
154
157
  [TypeFormat.MultiSelect]: TypeEnum.Object,
155
158
 
156
159
  // Dates
@@ -174,7 +177,10 @@ export const formatToType: Record<TypeFormat, TypeEnum> = {
174
177
  */
175
178
  export const OptionsAnnotationId = Symbol.for('@dxos/schema/annotation/Options');
176
179
 
177
- export const getOptionsAnnotation = (node: SchemaAST.AST): OptionsAnnotationType[] | undefined =>
178
- Function.pipe(SchemaAST.getAnnotation<OptionsAnnotationType[]>(OptionsAnnotationId)(node), Option.getOrUndefined);
180
+ // TODO(wittjosiah): Reconcile with `SelectOption`.
181
+ export type Options = string | number;
182
+ export const OptionsAnnotation = createAnnotationHelper<Options[]>(OptionsAnnotationId);
179
183
 
180
- export type OptionsAnnotationType = string | number;
184
+ /** @deprecated */
185
+ export const getOptionsAnnotation = (node: SchemaAST.AST): Options[] | undefined =>
186
+ Function.pipe(SchemaAST.getAnnotation<Options[]>(OptionsAnnotationId)(node), Option.getOrUndefined);
@@ -3,9 +3,10 @@
3
3
  //
4
4
 
5
5
  // TODO(burdon): Import directly (not part of ECHO API).
6
- export { JsonPath, JsonProp, getValue, setValue, splitJsonPath } from '@dxos/effect';
6
+ export { JsonPath, JsonProp, getValue, splitJsonPath } from '@dxos/effect';
7
7
 
8
8
  export * from './annotations';
9
+ export * from './api';
9
10
  export * from './entities';
10
11
  export * from './formats';
11
12
  export * from './json-schema';
@@ -54,7 +54,7 @@ export const JsonSchemaEchoAnnotations = Schema.Struct({
54
54
  /**
55
55
  * @deprecated
56
56
  */
57
- // TODO(dmaretskyi): We risk old schema not passing validation due to the extra fields. Remove when we are sure this is safe
57
+ // TODO(dmaretskyi): We risk old schema not passing validation due to the extra fields. Remove when we are sure this is safe.
58
58
  type: Schema.optional(
59
59
  Schema.Struct({
60
60
  typename: Schema.String,
@@ -35,7 +35,7 @@ const EXAMPLE_NAMESPACE = '@example';
35
35
  describe('effect-to-json', () => {
36
36
  test('type annotation', () => {
37
37
  const Test = Schema.Struct({ name: Schema.String }).pipe(
38
- Type.Obj({
38
+ Type.object({
39
39
  typename: 'example.com/type/Test',
40
40
  version: '0.1.0',
41
41
  }),
@@ -50,7 +50,7 @@ describe('effect-to-json', () => {
50
50
  const Test = Schema.Struct({
51
51
  name: Schema.String.pipe(PropertyMeta(EXAMPLE_NAMESPACE, meta)),
52
52
  }).pipe(
53
- Type.Obj({
53
+ Type.object({
54
54
  typename: 'example.com/type/Test',
55
55
  version: '0.1.0',
56
56
  }),
@@ -63,7 +63,7 @@ describe('effect-to-json', () => {
63
63
  const Nested = Schema.Struct({
64
64
  name: Schema.String,
65
65
  }).pipe(
66
- Type.Obj({
66
+ Type.object({
67
67
  typename: 'example.com/type/TestNested',
68
68
  version: '0.1.0',
69
69
  }),
@@ -71,7 +71,7 @@ describe('effect-to-json', () => {
71
71
  const Test = Schema.Struct({
72
72
  name: Ref(Nested),
73
73
  }).pipe(
74
- Type.Obj({
74
+ Type.object({
75
75
  typename: 'example.com/type/Test',
76
76
  version: '0.1.0',
77
77
  }),
@@ -88,7 +88,7 @@ describe('effect-to-json', () => {
88
88
  const Nested = Schema.Struct({
89
89
  name: Schema.String,
90
90
  }).pipe(
91
- Type.Obj({
91
+ Type.object({
92
92
  typename: 'example.com/type/TestNested',
93
93
  version: '0.1.0',
94
94
  }),
@@ -96,7 +96,7 @@ describe('effect-to-json', () => {
96
96
  const Test = Schema.Struct({
97
97
  name: Ref(Nested).annotations({ [FieldLookupAnnotationId]: 'name' }),
98
98
  }).pipe(
99
- Type.Obj({
99
+ Type.object({
100
100
  typename: 'example.com/type/Test',
101
101
  version: '0.1.0',
102
102
  }),
@@ -112,7 +112,7 @@ describe('effect-to-json', () => {
112
112
  const Nested = Schema.Struct({
113
113
  name: Schema.String,
114
114
  }).pipe(
115
- Type.Obj({
115
+ Type.object({
116
116
  typename: 'example.com/type/TestNested',
117
117
  version: '0.1.0',
118
118
  }),
@@ -120,7 +120,7 @@ describe('effect-to-json', () => {
120
120
  const Test = Schema.Struct({
121
121
  name: Schema.Array(Ref(Nested)),
122
122
  }).pipe(
123
- Type.Obj({
123
+ Type.object({
124
124
  typename: 'example.com/type/Test',
125
125
  version: '0.1.0',
126
126
  }),
@@ -134,7 +134,7 @@ describe('effect-to-json', () => {
134
134
  const Nested = Schema.Struct({
135
135
  name: Schema.String,
136
136
  }).pipe(
137
- Type.Obj({
137
+ Type.object({
138
138
  typename: 'example.com/type/TestNested',
139
139
  version: '0.1.0',
140
140
  }),
@@ -142,7 +142,7 @@ describe('effect-to-json', () => {
142
142
  const Test = Schema.Struct({
143
143
  name: Schema.optional(Ref(Nested)),
144
144
  }).pipe(
145
- Type.Obj({
145
+ Type.object({
146
146
  typename: 'example.com/type/Test',
147
147
  version: '0.1.0',
148
148
  }),
@@ -165,7 +165,7 @@ describe('effect-to-json', () => {
165
165
  description: 'Email address',
166
166
  }),
167
167
  }).pipe(
168
- Type.Obj({
168
+ Type.object({
169
169
  typename: 'example.com/type/Person',
170
170
  version: '0.1.0',
171
171
  }),
@@ -204,9 +204,11 @@ describe('effect-to-json', () => {
204
204
  'name',
205
205
  'username',
206
206
  'email',
207
+ 'age',
207
208
  'tasks',
208
209
  'employer',
209
210
  'address',
211
+ 'fields',
210
212
  ]);
211
213
  });
212
214
 
@@ -214,7 +216,7 @@ describe('effect-to-json', () => {
214
216
  const Organization = Schema.Struct({
215
217
  field: Schema.String,
216
218
  }).pipe(
217
- Type.Obj({
219
+ Type.object({
218
220
  typename: 'example.com/type/Organization',
219
221
  version: '0.1.0',
220
222
  }),
@@ -224,7 +226,7 @@ describe('effect-to-json', () => {
224
226
  name: Schema.String,
225
227
  organization: Ref(Organization).annotations({ description: 'Contact organization' }),
226
228
  }).pipe(
227
- Type.Obj({
229
+ Type.object({
228
230
  typename: 'example.com/type/Person',
229
231
  version: '0.1.0',
230
232
  }),
@@ -276,7 +278,7 @@ describe('effect-to-json', () => {
276
278
  const Organization = Schema.Struct({
277
279
  field: Schema.String,
278
280
  }).pipe(
279
- Type.Obj({
281
+ Type.object({
280
282
  typename: 'example.com/type/Organization',
281
283
  version: '0.1.0',
282
284
  }),
@@ -286,7 +288,7 @@ describe('effect-to-json', () => {
286
288
  name: Schema.String,
287
289
  organization: Ref(Organization).annotations({ description: 'Contact organization' }),
288
290
  }).pipe(
289
- Type.Obj({
291
+ Type.object({
290
292
  typename: 'example.com/type/Person',
291
293
  version: '0.1.0',
292
294
  }),
@@ -494,7 +496,7 @@ describe('json-to-effect', () => {
494
496
  const Organization = Schema.Struct({
495
497
  field: Schema.String,
496
498
  }).pipe(
497
- Type.Obj({
499
+ Type.object({
498
500
  typename: 'example.com/type/Organization',
499
501
  version: '0.1.0',
500
502
  }),
@@ -515,7 +517,7 @@ describe('json-to-effect', () => {
515
517
  } as const;
516
518
 
517
519
  const Test = (partial ? Schema.partial(Schema.Struct(fields)) : Schema.Struct(fields)).pipe(
518
- Type.Obj({
520
+ Type.object({
519
521
  typename: 'example.com/type/Test',
520
522
  version: '0.1.0',
521
523
  }),
@@ -23,9 +23,8 @@ import {
23
23
  TypeIdentifierAnnotationId,
24
24
  makeTypeJsonSchemaAnnotation,
25
25
  } from '../annotations';
26
- import { Expando } from '../entities';
27
- import { type JsonSchemaReferenceInfo, Ref, createEchoReferenceSchema } from '../ref';
28
- import { EntityKind, EntityKindSchema } from '../types';
26
+ import { type JsonSchemaReferenceInfo, createEchoReferenceSchema } from '../ref';
27
+ import { ANY_OBJECT_TYPENAME, ANY_OBJECT_VERSION, EntityKind, EntityKindSchema } from '../types';
29
28
 
30
29
  import { CustomAnnotations, DecodedAnnotations, EchoAnnotations } from './annotations';
31
30
  import {
@@ -352,7 +351,8 @@ const anyToEffectSchema = (root: JSONSchema.JsonSchema7Any): Schema.Schema.AnyNo
352
351
  // TODO(dmaretskyi): Types.
353
352
  const refToEffectSchema = (root: any): Schema.Schema.AnyNoContext => {
354
353
  if (!('reference' in root)) {
355
- return Ref(Expando);
354
+ // Fallback to generic object ref when no reference info is provided.
355
+ return createEchoReferenceSchema(undefined, ANY_OBJECT_TYPENAME, ANY_OBJECT_VERSION);
356
356
  }
357
357
 
358
358
  const reference: JsonSchemaReferenceInfo = root.reference;
@@ -0,0 +1,48 @@
1
+ //
2
+ // Copyright 2026 DXOS.org
3
+ //
4
+
5
+ import { invariant } from '@dxos/invariant';
6
+ import { deepMapValues } from '@dxos/util';
7
+
8
+ import type * as Obj from '../../Obj';
9
+ import { makeObject } from '../proxy';
10
+ import { Ref } from '../ref';
11
+ import { getMeta, getSchema } from '../types';
12
+
13
+ /**
14
+ * Clones an object or relation.
15
+ * This does not clone referenced objects, only the properties in the object.
16
+ * @returns A new object with the same schema and properties.
17
+ */
18
+ export const clone = <T extends Obj.Any>(obj: T, opts?: Obj.CloneOptions): T => {
19
+ const { id, ...data } = obj;
20
+ const schema = getSchema(obj);
21
+ invariant(schema != null, 'Object should have a schema');
22
+ const props: any = deepMapValues(data, (value, recurse) => {
23
+ if (Ref.isRef(value)) {
24
+ if (opts?.deep) {
25
+ // TODO(dmaretskyi): Will break on circular references.
26
+ return Ref.make(clone(value.target!, opts));
27
+ }
28
+ return value;
29
+ }
30
+ return recurse(value);
31
+ });
32
+
33
+ if (opts?.retainId) {
34
+ props.id = id;
35
+ }
36
+ const meta = deepMapValues(getMeta(obj), (value, recurse) => {
37
+ if (Ref.isRef(value)) {
38
+ if (opts?.deep) {
39
+ // TODO(dmaretskyi): Will break on circular references.
40
+ return Ref.make(clone(value.target!, opts));
41
+ }
42
+ return value;
43
+ }
44
+ return recurse(value);
45
+ });
46
+
47
+ return makeObject(schema, props, meta);
48
+ };