@dxos/echo 0.8.4-main.548089c → 0.8.4-main.59c2e9b

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 (598) hide show
  1. package/README.md +1 -2
  2. package/dist/lib/browser/Annotation.mjs +33 -0
  3. package/dist/lib/browser/Database.mjs +18 -0
  4. package/dist/lib/browser/Entity.mjs +52 -0
  5. package/dist/lib/browser/Entity.mjs.map +7 -0
  6. package/dist/lib/browser/Err.mjs +11 -0
  7. package/dist/lib/browser/Err.mjs.map +7 -0
  8. package/dist/lib/browser/Filter.mjs +62 -0
  9. package/dist/lib/browser/Filter.mjs.map +7 -0
  10. package/dist/lib/browser/Format.mjs +67 -0
  11. package/dist/lib/browser/Format.mjs.map +7 -0
  12. package/dist/lib/browser/JsonSchema.mjs +20 -0
  13. package/dist/lib/browser/JsonSchema.mjs.map +7 -0
  14. package/dist/lib/browser/Key.mjs +13 -0
  15. package/dist/lib/browser/Key.mjs.map +7 -0
  16. package/dist/lib/browser/Obj.mjs +91 -0
  17. package/dist/lib/browser/Obj.mjs.map +7 -0
  18. package/dist/lib/browser/Order.mjs +13 -0
  19. package/dist/lib/browser/Order.mjs.map +7 -0
  20. package/dist/lib/browser/Query.mjs +27 -0
  21. package/dist/lib/browser/Query.mjs.map +7 -0
  22. package/dist/lib/browser/QueryResult.mjs +3 -0
  23. package/dist/lib/browser/QueryResult.mjs.map +7 -0
  24. package/dist/lib/browser/Ref.mjs +23 -0
  25. package/dist/lib/browser/Ref.mjs.map +7 -0
  26. package/dist/lib/browser/Relation.mjs +85 -0
  27. package/dist/lib/browser/Relation.mjs.map +7 -0
  28. package/dist/lib/browser/SchemaRegistry.mjs +3 -0
  29. package/dist/lib/browser/SchemaRegistry.mjs.map +7 -0
  30. package/dist/lib/browser/Tag.mjs +26 -0
  31. package/dist/lib/browser/Tag.mjs.map +7 -0
  32. package/dist/lib/browser/Type.mjs +48 -0
  33. package/dist/lib/browser/Type.mjs.map +7 -0
  34. package/dist/lib/browser/chunk-22JMFST2.mjs +24 -0
  35. package/dist/lib/browser/chunk-22JMFST2.mjs.map +7 -0
  36. package/dist/lib/browser/chunk-2SBB7OWV.mjs +250 -0
  37. package/dist/lib/browser/chunk-2SBB7OWV.mjs.map +7 -0
  38. package/dist/lib/browser/chunk-6L5HHUVU.mjs +158 -0
  39. package/dist/lib/browser/chunk-6L5HHUVU.mjs.map +7 -0
  40. package/dist/lib/browser/chunk-7STIBCP7.mjs +133 -0
  41. package/dist/lib/browser/chunk-7STIBCP7.mjs.map +7 -0
  42. package/dist/lib/browser/chunk-BJPE6CIC.mjs +3847 -0
  43. package/dist/lib/browser/chunk-BJPE6CIC.mjs.map +7 -0
  44. package/dist/lib/browser/chunk-CGS2ULMK.mjs +11 -0
  45. package/dist/lib/browser/chunk-CGS2ULMK.mjs.map +7 -0
  46. package/dist/lib/browser/chunk-CJ5YELTO.mjs +39 -0
  47. package/dist/lib/browser/chunk-CJ5YELTO.mjs.map +7 -0
  48. package/dist/lib/browser/chunk-FPOISFQK.mjs +40 -0
  49. package/dist/lib/browser/chunk-FPOISFQK.mjs.map +7 -0
  50. package/dist/lib/browser/chunk-FRDT7RA4.mjs +403 -0
  51. package/dist/lib/browser/chunk-FRDT7RA4.mjs.map +7 -0
  52. package/dist/lib/browser/chunk-INHXFXY5.mjs +22 -0
  53. package/dist/lib/browser/chunk-INHXFXY5.mjs.map +7 -0
  54. package/dist/lib/browser/chunk-IXVWLTG7.mjs +9 -0
  55. package/dist/lib/browser/chunk-IXVWLTG7.mjs.map +7 -0
  56. package/dist/lib/browser/chunk-JMKVF2YQ.mjs +43 -0
  57. package/dist/lib/browser/chunk-JMKVF2YQ.mjs.map +7 -0
  58. package/dist/lib/browser/chunk-KQQGVHFN.mjs +143 -0
  59. package/dist/lib/browser/chunk-KQQGVHFN.mjs.map +7 -0
  60. package/dist/lib/browser/chunk-MYCCGG2T.mjs +15 -0
  61. package/dist/lib/browser/chunk-MYCCGG2T.mjs.map +7 -0
  62. package/dist/lib/browser/chunk-NOPVNWPT.mjs +204 -0
  63. package/dist/lib/browser/chunk-NOPVNWPT.mjs.map +7 -0
  64. package/dist/lib/browser/chunk-PQZW3S6L.mjs +74 -0
  65. package/dist/lib/browser/chunk-PQZW3S6L.mjs.map +7 -0
  66. package/dist/lib/browser/chunk-RK4Z4JUZ.mjs +283 -0
  67. package/dist/lib/browser/chunk-RK4Z4JUZ.mjs.map +7 -0
  68. package/dist/lib/browser/chunk-U2J7TA7K.mjs +57 -0
  69. package/dist/lib/browser/chunk-U2J7TA7K.mjs.map +7 -0
  70. package/dist/lib/browser/chunk-W5D2GWAW.mjs +98 -0
  71. package/dist/lib/browser/chunk-W5D2GWAW.mjs.map +7 -0
  72. package/dist/lib/browser/chunk-XDIUHAAX.mjs +41 -0
  73. package/dist/lib/browser/chunk-XDIUHAAX.mjs.map +7 -0
  74. package/dist/lib/browser/chunk-YKTSSMDS.mjs +69 -0
  75. package/dist/lib/browser/chunk-YKTSSMDS.mjs.map +7 -0
  76. package/dist/lib/browser/chunk-ZAGAOZVY.mjs +288 -0
  77. package/dist/lib/browser/chunk-ZAGAOZVY.mjs.map +7 -0
  78. package/dist/lib/browser/chunk-ZHXZGIXD.mjs +9 -0
  79. package/dist/lib/browser/chunk-ZHXZGIXD.mjs.map +7 -0
  80. package/dist/lib/browser/index.mjs +68 -18
  81. package/dist/lib/browser/internal/index.mjs +245 -124
  82. package/dist/lib/browser/meta.json +1 -1
  83. package/dist/lib/browser/testing/index.mjs +298 -198
  84. package/dist/lib/browser/testing/index.mjs.map +4 -4
  85. package/dist/lib/node-esm/Annotation.mjs +33 -0
  86. package/dist/lib/node-esm/Annotation.mjs.map +7 -0
  87. package/dist/lib/node-esm/Database.mjs +18 -0
  88. package/dist/lib/node-esm/Database.mjs.map +7 -0
  89. package/dist/lib/node-esm/Entity.mjs +52 -0
  90. package/dist/lib/node-esm/Entity.mjs.map +7 -0
  91. package/dist/lib/node-esm/Err.mjs +11 -0
  92. package/dist/lib/node-esm/Err.mjs.map +7 -0
  93. package/dist/lib/node-esm/Filter.mjs +62 -0
  94. package/dist/lib/node-esm/Filter.mjs.map +7 -0
  95. package/dist/lib/node-esm/Format.mjs +67 -0
  96. package/dist/lib/node-esm/Format.mjs.map +7 -0
  97. package/dist/lib/node-esm/JsonSchema.mjs +20 -0
  98. package/dist/lib/node-esm/JsonSchema.mjs.map +7 -0
  99. package/dist/lib/node-esm/Key.mjs +13 -0
  100. package/dist/lib/node-esm/Key.mjs.map +7 -0
  101. package/dist/lib/node-esm/Obj.mjs +91 -0
  102. package/dist/lib/node-esm/Obj.mjs.map +7 -0
  103. package/dist/lib/node-esm/Order.mjs +13 -0
  104. package/dist/lib/node-esm/Order.mjs.map +7 -0
  105. package/dist/lib/node-esm/Query.mjs +27 -0
  106. package/dist/lib/node-esm/Query.mjs.map +7 -0
  107. package/dist/lib/node-esm/QueryResult.mjs +3 -0
  108. package/dist/lib/node-esm/QueryResult.mjs.map +7 -0
  109. package/dist/lib/node-esm/Ref.mjs +23 -0
  110. package/dist/lib/node-esm/Ref.mjs.map +7 -0
  111. package/dist/lib/node-esm/Relation.mjs +85 -0
  112. package/dist/lib/node-esm/Relation.mjs.map +7 -0
  113. package/dist/lib/node-esm/SchemaRegistry.mjs +3 -0
  114. package/dist/lib/node-esm/SchemaRegistry.mjs.map +7 -0
  115. package/dist/lib/node-esm/Tag.mjs +26 -0
  116. package/dist/lib/node-esm/Tag.mjs.map +7 -0
  117. package/dist/lib/node-esm/Type.mjs +48 -0
  118. package/dist/lib/node-esm/Type.mjs.map +7 -0
  119. package/dist/lib/node-esm/chunk-4PNXQA64.mjs +250 -0
  120. package/dist/lib/node-esm/chunk-4PNXQA64.mjs.map +7 -0
  121. package/dist/lib/node-esm/chunk-5OBN7GZW.mjs +158 -0
  122. package/dist/lib/node-esm/chunk-5OBN7GZW.mjs.map +7 -0
  123. package/dist/lib/node-esm/chunk-AJEMYSIR.mjs +22 -0
  124. package/dist/lib/node-esm/chunk-AJEMYSIR.mjs.map +7 -0
  125. package/dist/lib/node-esm/chunk-ANLVLWME.mjs +98 -0
  126. package/dist/lib/node-esm/chunk-ANLVLWME.mjs.map +7 -0
  127. package/dist/lib/node-esm/chunk-DMR7OAFK.mjs +57 -0
  128. package/dist/lib/node-esm/chunk-DMR7OAFK.mjs.map +7 -0
  129. package/dist/lib/node-esm/chunk-FWTSPIFF.mjs +133 -0
  130. package/dist/lib/node-esm/chunk-FWTSPIFF.mjs.map +7 -0
  131. package/dist/lib/node-esm/chunk-HSLMI22Q.mjs +11 -0
  132. package/dist/lib/node-esm/chunk-HSLMI22Q.mjs.map +7 -0
  133. package/dist/lib/node-esm/chunk-ILMLLM4R.mjs +204 -0
  134. package/dist/lib/node-esm/chunk-ILMLLM4R.mjs.map +7 -0
  135. package/dist/lib/node-esm/chunk-K37NA7PO.mjs +43 -0
  136. package/dist/lib/node-esm/chunk-K37NA7PO.mjs.map +7 -0
  137. package/dist/lib/node-esm/chunk-LT3H4JOX.mjs +3847 -0
  138. package/dist/lib/node-esm/chunk-LT3H4JOX.mjs.map +7 -0
  139. package/dist/lib/node-esm/chunk-MOLNWFNL.mjs +9 -0
  140. package/dist/lib/node-esm/chunk-MOLNWFNL.mjs.map +7 -0
  141. package/dist/lib/node-esm/chunk-MOWUEW5P.mjs +15 -0
  142. package/dist/lib/node-esm/chunk-MOWUEW5P.mjs.map +7 -0
  143. package/dist/lib/node-esm/chunk-NBWL7UCZ.mjs +40 -0
  144. package/dist/lib/node-esm/chunk-NBWL7UCZ.mjs.map +7 -0
  145. package/dist/lib/node-esm/chunk-NRN3ZW2T.mjs +143 -0
  146. package/dist/lib/node-esm/chunk-NRN3ZW2T.mjs.map +7 -0
  147. package/dist/lib/node-esm/chunk-QLI2EIJ2.mjs +41 -0
  148. package/dist/lib/node-esm/chunk-QLI2EIJ2.mjs.map +7 -0
  149. package/dist/lib/node-esm/chunk-QYR67VBV.mjs +288 -0
  150. package/dist/lib/node-esm/chunk-QYR67VBV.mjs.map +7 -0
  151. package/dist/lib/node-esm/chunk-UKGVOINP.mjs +9 -0
  152. package/dist/lib/node-esm/chunk-UKGVOINP.mjs.map +7 -0
  153. package/dist/lib/node-esm/chunk-W6QIEBTQ.mjs +403 -0
  154. package/dist/lib/node-esm/chunk-W6QIEBTQ.mjs.map +7 -0
  155. package/dist/lib/node-esm/chunk-XHJRMQZD.mjs +69 -0
  156. package/dist/lib/node-esm/chunk-XHJRMQZD.mjs.map +7 -0
  157. package/dist/lib/node-esm/chunk-Y75VU7LB.mjs +74 -0
  158. package/dist/lib/node-esm/chunk-Y75VU7LB.mjs.map +7 -0
  159. package/dist/lib/node-esm/chunk-YOLH5KS4.mjs +283 -0
  160. package/dist/lib/node-esm/chunk-YOLH5KS4.mjs.map +7 -0
  161. package/dist/lib/node-esm/chunk-YQ2NWGL5.mjs +39 -0
  162. package/dist/lib/node-esm/chunk-YQ2NWGL5.mjs.map +7 -0
  163. package/dist/lib/node-esm/chunk-ZBB67AKD.mjs +24 -0
  164. package/dist/lib/node-esm/chunk-ZBB67AKD.mjs.map +7 -0
  165. package/dist/lib/node-esm/index.mjs +68 -18
  166. package/dist/lib/node-esm/internal/index.mjs +245 -124
  167. package/dist/lib/node-esm/meta.json +1 -1
  168. package/dist/lib/node-esm/testing/index.mjs +298 -198
  169. package/dist/lib/node-esm/testing/index.mjs.map +4 -4
  170. package/dist/types/src/Annotation.d.ts +2 -0
  171. package/dist/types/src/Annotation.d.ts.map +1 -0
  172. package/dist/types/src/Database.d.ts +194 -0
  173. package/dist/types/src/Database.d.ts.map +1 -0
  174. package/dist/types/src/Entity.d.ts +142 -0
  175. package/dist/types/src/Entity.d.ts.map +1 -0
  176. package/dist/types/src/Entity.test.d.ts +2 -0
  177. package/dist/types/src/Entity.test.d.ts.map +1 -0
  178. package/dist/types/src/{errors.d.ts → Err.d.ts} +19 -19
  179. package/dist/types/src/Err.d.ts.map +1 -0
  180. package/dist/types/src/Filter.d.ts +120 -0
  181. package/dist/types/src/Filter.d.ts.map +1 -0
  182. package/dist/types/src/Format.d.ts +4 -0
  183. package/dist/types/src/Format.d.ts.map +1 -0
  184. package/dist/types/src/Hypergraph.d.ts +60 -0
  185. package/dist/types/src/Hypergraph.d.ts.map +1 -0
  186. package/dist/types/src/JsonSchema.d.ts +9 -0
  187. package/dist/types/src/JsonSchema.d.ts.map +1 -0
  188. package/dist/types/src/Key.d.ts +1 -0
  189. package/dist/types/src/Key.d.ts.map +1 -1
  190. package/dist/types/src/Obj.d.ts +300 -99
  191. package/dist/types/src/Obj.d.ts.map +1 -1
  192. package/dist/types/src/Obj.test.d.ts +2 -0
  193. package/dist/types/src/Obj.test.d.ts.map +1 -0
  194. package/dist/types/src/Order.d.ts +16 -0
  195. package/dist/types/src/Order.d.ts.map +1 -0
  196. package/dist/types/src/Query.d.ts +115 -0
  197. package/dist/types/src/Query.d.ts.map +1 -0
  198. package/dist/types/src/Query.test.d.ts +2 -0
  199. package/dist/types/src/Query.test.d.ts.map +1 -0
  200. package/dist/types/src/QueryResult.d.ts +80 -0
  201. package/dist/types/src/QueryResult.d.ts.map +1 -0
  202. package/dist/types/src/Ref.d.ts +13 -11
  203. package/dist/types/src/Ref.d.ts.map +1 -1
  204. package/dist/types/src/Relation.d.ts +242 -22
  205. package/dist/types/src/Relation.d.ts.map +1 -1
  206. package/dist/types/src/Relation.test.d.ts +2 -0
  207. package/dist/types/src/Relation.test.d.ts.map +1 -0
  208. package/dist/types/src/SchemaRegistry.d.ts +84 -0
  209. package/dist/types/src/SchemaRegistry.d.ts.map +1 -0
  210. package/dist/types/src/Tag.d.ts +7 -7
  211. package/dist/types/src/Tag.d.ts.map +1 -1
  212. package/dist/types/src/Type.d.ts +225 -72
  213. package/dist/types/src/Type.d.ts.map +1 -1
  214. package/dist/types/src/Type.test.d.ts +2 -0
  215. package/dist/types/src/Type.test.d.ts.map +1 -0
  216. package/dist/types/src/index.d.ts +14 -5
  217. package/dist/types/src/index.d.ts.map +1 -1
  218. package/dist/types/src/internal/annotations/annotations.d.ts +170 -0
  219. package/dist/types/src/internal/annotations/annotations.d.ts.map +1 -0
  220. package/dist/types/src/internal/annotations/annotations.test.d.ts.map +1 -0
  221. package/dist/types/src/internal/annotations/index.d.ts +3 -0
  222. package/dist/types/src/internal/annotations/index.d.ts.map +1 -0
  223. package/dist/types/src/internal/annotations/util.d.ts +27 -0
  224. package/dist/types/src/internal/annotations/util.d.ts.map +1 -0
  225. package/dist/types/src/internal/api/annotations.d.ts +23 -0
  226. package/dist/types/src/internal/api/annotations.d.ts.map +1 -0
  227. package/dist/types/src/internal/api/entity.d.ts +13 -0
  228. package/dist/types/src/internal/api/entity.d.ts.map +1 -0
  229. package/dist/types/src/internal/api/index.d.ts +15 -0
  230. package/dist/types/src/internal/api/index.d.ts.map +1 -0
  231. package/dist/types/src/internal/api/meta.d.ts +42 -0
  232. package/dist/types/src/internal/api/meta.d.ts.map +1 -0
  233. package/dist/types/src/internal/api/sorting.d.ts +24 -0
  234. package/dist/types/src/internal/api/sorting.d.ts.map +1 -0
  235. package/dist/types/src/internal/api/version.d.ts +42 -0
  236. package/dist/types/src/internal/api/version.d.ts.map +1 -0
  237. package/dist/types/src/internal/entities/entity.d.ts +20 -0
  238. package/dist/types/src/internal/entities/entity.d.ts.map +1 -0
  239. package/dist/types/src/internal/entities/index.d.ts +6 -0
  240. package/dist/types/src/internal/entities/index.d.ts.map +1 -0
  241. package/dist/types/src/internal/entities/model.d.ts +77 -0
  242. package/dist/types/src/internal/entities/model.d.ts.map +1 -0
  243. package/dist/types/src/internal/entities/object.d.ts +18 -0
  244. package/dist/types/src/internal/entities/object.d.ts.map +1 -0
  245. package/dist/types/src/internal/entities/relation.d.ts +62 -0
  246. package/dist/types/src/internal/entities/relation.d.ts.map +1 -0
  247. package/dist/types/src/internal/entities/util.d.ts +2 -0
  248. package/dist/types/src/internal/entities/util.d.ts.map +1 -0
  249. package/dist/types/src/internal/formats/format.d.ts +4 -2
  250. package/dist/types/src/internal/formats/format.d.ts.map +1 -1
  251. package/dist/types/src/internal/formats/select.d.ts +5 -3
  252. package/dist/types/src/internal/formats/select.d.ts.map +1 -1
  253. package/dist/types/src/internal/formats/string.d.ts +4 -0
  254. package/dist/types/src/internal/formats/string.d.ts.map +1 -1
  255. package/dist/types/src/internal/formats/types.d.ts +13 -9
  256. package/dist/types/src/internal/formats/types.d.ts.map +1 -1
  257. package/dist/types/src/internal/index.d.ts +7 -10
  258. package/dist/types/src/internal/index.d.ts.map +1 -1
  259. package/dist/types/src/internal/json-schema/annotations.d.ts.map +1 -0
  260. package/dist/types/src/internal/json-schema/effect-schema.test.d.ts.map +1 -0
  261. package/dist/types/src/internal/json-schema/index.d.ts +2 -0
  262. package/dist/types/src/internal/json-schema/index.d.ts.map +1 -1
  263. package/dist/types/src/internal/json-schema/json-schema-type.d.ts.map +1 -1
  264. package/dist/types/src/internal/{json → json-schema}/json-schema.d.ts +2 -1
  265. package/dist/types/src/internal/json-schema/json-schema.d.ts.map +1 -0
  266. package/dist/types/src/internal/json-schema/json-schema.test.d.ts.map +1 -0
  267. package/dist/types/src/internal/object/clone.d.ts +8 -0
  268. package/dist/types/src/internal/object/clone.d.ts.map +1 -0
  269. package/dist/types/src/internal/object/common.d.ts.map +1 -1
  270. package/dist/types/src/internal/object/{create.d.ts → create-object.d.ts} +9 -10
  271. package/dist/types/src/internal/object/create-object.d.ts.map +1 -0
  272. package/dist/types/src/internal/object/create-object.test.d.ts +2 -0
  273. package/dist/types/src/internal/object/create-object.test.d.ts.map +1 -0
  274. package/dist/types/src/internal/object/deleted.d.ts +2 -2
  275. package/dist/types/src/internal/object/deleted.d.ts.map +1 -1
  276. package/dist/types/src/internal/object/ids.d.ts.map +1 -1
  277. package/dist/types/src/internal/object/index.d.ts +6 -11
  278. package/dist/types/src/internal/object/index.d.ts.map +1 -1
  279. package/dist/types/src/internal/object/json-serializer.d.ts +14 -9
  280. package/dist/types/src/internal/object/json-serializer.d.ts.map +1 -1
  281. package/dist/types/src/internal/object/schema-validator.d.ts +1 -14
  282. package/dist/types/src/internal/object/schema-validator.d.ts.map +1 -1
  283. package/dist/types/src/internal/object/set-value.d.ts +7 -0
  284. package/dist/types/src/internal/object/set-value.d.ts.map +1 -0
  285. package/dist/types/src/internal/object/set-value.test.d.ts +2 -0
  286. package/dist/types/src/internal/object/set-value.test.d.ts.map +1 -0
  287. package/dist/types/src/internal/object/snapshot.d.ts +6 -0
  288. package/dist/types/src/internal/object/snapshot.d.ts.map +1 -0
  289. package/dist/types/src/internal/object/typed-object.d.ts +8 -14
  290. package/dist/types/src/internal/object/typed-object.d.ts.map +1 -1
  291. package/dist/types/src/internal/proxy/change-context.d.ts +55 -0
  292. package/dist/types/src/internal/proxy/change-context.d.ts.map +1 -0
  293. package/dist/types/src/internal/proxy/change.test.d.ts +2 -0
  294. package/dist/types/src/internal/proxy/change.test.d.ts.map +1 -0
  295. package/dist/types/src/internal/proxy/define-hidden-property.d.ts +5 -0
  296. package/dist/types/src/internal/proxy/define-hidden-property.d.ts.map +1 -0
  297. package/dist/types/src/internal/proxy/errors.d.ts +19 -0
  298. package/dist/types/src/internal/proxy/errors.d.ts.map +1 -0
  299. package/dist/types/src/internal/proxy/event-batch.d.ts +10 -0
  300. package/dist/types/src/internal/proxy/event-batch.d.ts.map +1 -0
  301. package/dist/types/src/internal/proxy/index.d.ts +14 -0
  302. package/dist/types/src/internal/proxy/index.d.ts.map +1 -0
  303. package/dist/types/src/internal/proxy/json-serializer.d.ts +6 -0
  304. package/dist/types/src/internal/proxy/json-serializer.d.ts.map +1 -0
  305. package/dist/types/src/internal/proxy/make-object.d.ts +14 -0
  306. package/dist/types/src/internal/proxy/make-object.d.ts.map +1 -0
  307. package/dist/types/src/internal/proxy/ownership.d.ts +57 -0
  308. package/dist/types/src/internal/proxy/ownership.d.ts.map +1 -0
  309. package/dist/types/src/internal/proxy/proxy-types.d.ts +18 -0
  310. package/dist/types/src/internal/proxy/proxy-types.d.ts.map +1 -0
  311. package/dist/types/src/internal/proxy/proxy-utils.d.ts +47 -0
  312. package/dist/types/src/internal/proxy/proxy-utils.d.ts.map +1 -0
  313. package/dist/types/src/internal/proxy/reactive-array.d.ts +8 -0
  314. package/dist/types/src/internal/proxy/reactive-array.d.ts.map +1 -0
  315. package/dist/types/src/internal/proxy/reactive.d.ts +39 -0
  316. package/dist/types/src/internal/proxy/reactive.d.ts.map +1 -0
  317. package/dist/types/src/internal/proxy/schema-validator.d.ts +15 -0
  318. package/dist/types/src/internal/proxy/schema-validator.d.ts.map +1 -0
  319. package/dist/types/src/internal/proxy/symbols.d.ts +3 -0
  320. package/dist/types/src/internal/proxy/symbols.d.ts.map +1 -0
  321. package/dist/types/src/internal/proxy/typed-handler.d.ts +15 -12
  322. package/dist/types/src/internal/proxy/typed-handler.d.ts.map +1 -1
  323. package/dist/types/src/internal/ref/ref-array.d.ts +4 -4
  324. package/dist/types/src/internal/ref/ref-array.d.ts.map +1 -1
  325. package/dist/types/src/internal/ref/ref.d.ts +27 -16
  326. package/dist/types/src/internal/ref/ref.d.ts.map +1 -1
  327. package/dist/types/src/internal/schema/compose.d.ts.map +1 -0
  328. package/dist/types/src/internal/schema/compose.test.d.ts.map +1 -0
  329. package/dist/types/src/internal/schema/echo-schema.d.ts +24 -12
  330. package/dist/types/src/internal/schema/echo-schema.d.ts.map +1 -1
  331. package/dist/types/src/internal/schema/index.d.ts +1 -4
  332. package/dist/types/src/internal/schema/index.d.ts.map +1 -1
  333. package/dist/types/src/internal/schema/persistent-schema.d.ts +20 -0
  334. package/dist/types/src/internal/schema/persistent-schema.d.ts.map +1 -0
  335. package/dist/types/src/internal/types/base.d.ts +26 -0
  336. package/dist/types/src/internal/types/base.d.ts.map +1 -0
  337. package/dist/types/src/internal/types/entity.d.ts +37 -0
  338. package/dist/types/src/internal/types/entity.d.ts.map +1 -0
  339. package/dist/types/src/internal/types/index.d.ts +5 -2
  340. package/dist/types/src/internal/types/index.d.ts.map +1 -1
  341. package/dist/types/src/internal/{object → types}/meta.d.ts +12 -11
  342. package/dist/types/src/internal/types/meta.d.ts.map +1 -0
  343. package/dist/types/src/internal/types/typename.d.ts +13 -0
  344. package/dist/types/src/internal/types/typename.d.ts.map +1 -0
  345. package/dist/types/src/internal/{object → types}/version.d.ts +3 -2
  346. package/dist/types/src/internal/types/version.d.ts.map +1 -0
  347. package/dist/types/src/{test → testing}/api.test.d.ts.map +1 -1
  348. package/dist/types/src/testing/index.d.ts +3 -3
  349. package/dist/types/src/testing/index.d.ts.map +1 -1
  350. package/dist/types/src/testing/test-data.d.ts +18 -0
  351. package/dist/types/src/testing/test-data.d.ts.map +1 -0
  352. package/dist/types/src/testing/test-schema.d.ts +303 -0
  353. package/dist/types/src/testing/test-schema.d.ts.map +1 -0
  354. package/dist/types/src/testing/util.d.ts +21 -0
  355. package/dist/types/src/testing/util.d.ts.map +1 -0
  356. package/dist/types/tsconfig.tsbuildinfo +1 -1
  357. package/package.json +160 -45
  358. package/src/Annotation.ts +18 -0
  359. package/src/Database.ts +336 -0
  360. package/src/Entity.test.ts +22 -0
  361. package/src/Entity.ts +217 -0
  362. package/src/{errors.ts → Err.ts} +2 -2
  363. package/src/Filter.ts +376 -0
  364. package/src/Format.ts +9 -0
  365. package/src/Hypergraph.ts +74 -0
  366. package/src/JsonSchema.ts +16 -0
  367. package/src/Key.ts +3 -0
  368. package/src/Obj.test.ts +386 -0
  369. package/src/Obj.ts +447 -292
  370. package/src/Order.ts +44 -0
  371. package/src/Query.test.ts +465 -0
  372. package/src/Query.ts +296 -0
  373. package/src/QueryResult.ts +106 -0
  374. package/src/Ref.ts +26 -9
  375. package/src/Relation.test.ts +82 -0
  376. package/src/Relation.ts +411 -60
  377. package/src/SchemaRegistry.ts +105 -0
  378. package/src/Tag.ts +3 -2
  379. package/src/Type.test.ts +52 -0
  380. package/src/Type.ts +361 -114
  381. package/src/index.ts +15 -6
  382. package/src/internal/README.md +100 -0
  383. package/src/internal/{ast → annotations}/annotations.test.ts +18 -20
  384. package/src/internal/annotations/annotations.ts +460 -0
  385. package/src/internal/annotations/index.ts +6 -0
  386. package/src/internal/annotations/util.ts +72 -0
  387. package/src/internal/api/annotations.ts +60 -0
  388. package/src/internal/api/entity.ts +29 -0
  389. package/src/internal/api/index.ts +19 -0
  390. package/src/internal/api/meta.ts +88 -0
  391. package/src/internal/api/sorting.ts +53 -0
  392. package/src/internal/api/version.ts +96 -0
  393. package/src/internal/entities/entity.ts +126 -0
  394. package/src/internal/entities/index.ts +9 -0
  395. package/src/internal/entities/model.ts +134 -0
  396. package/src/internal/entities/object.ts +60 -0
  397. package/src/internal/entities/relation.ts +173 -0
  398. package/src/internal/entities/util.ts +33 -0
  399. package/src/internal/formats/date.test.ts +1 -1
  400. package/src/internal/formats/date.ts +5 -5
  401. package/src/internal/formats/format.test.ts +5 -5
  402. package/src/internal/formats/format.ts +8 -6
  403. package/src/internal/formats/number.ts +5 -5
  404. package/src/internal/formats/object.ts +4 -4
  405. package/src/internal/formats/select.ts +5 -3
  406. package/src/internal/formats/string.ts +14 -9
  407. package/src/internal/formats/types.ts +53 -42
  408. package/src/internal/index.ts +30 -13
  409. package/src/internal/{json → json-schema}/annotations.ts +1 -1
  410. package/src/internal/json-schema/index.ts +2 -0
  411. package/src/internal/json-schema/json-schema-type.ts +5 -4
  412. package/src/internal/{json → json-schema}/json-schema.test.ts +67 -55
  413. package/src/internal/{json → json-schema}/json-schema.ts +17 -8
  414. package/src/internal/object/clone.ts +48 -0
  415. package/src/internal/object/common.ts +3 -4
  416. package/src/internal/object/{create.test.ts → create-object.test.ts} +30 -32
  417. package/src/internal/object/{create.ts → create-object.ts} +35 -36
  418. package/src/internal/object/deleted.ts +6 -6
  419. package/src/internal/object/ids.ts +1 -1
  420. package/src/internal/object/index.ts +6 -11
  421. package/src/internal/object/inspect.ts +5 -7
  422. package/src/internal/object/json-serializer.test.ts +35 -37
  423. package/src/internal/object/json-serializer.ts +65 -102
  424. package/src/internal/object/schema-validator.ts +2 -237
  425. package/src/internal/object/set-value.test.ts +281 -0
  426. package/src/internal/object/set-value.ts +165 -0
  427. package/src/internal/object/snapshot.ts +70 -0
  428. package/src/internal/object/typed-object.test.ts +11 -11
  429. package/src/internal/object/typed-object.ts +8 -66
  430. package/src/internal/proxy/change-context.ts +138 -0
  431. package/src/internal/proxy/change.test.ts +519 -0
  432. package/src/internal/proxy/define-hidden-property.ts +14 -0
  433. package/src/internal/proxy/errors.ts +42 -0
  434. package/src/internal/proxy/event-batch.ts +44 -0
  435. package/src/internal/proxy/handler.test.ts +51 -91
  436. package/src/internal/proxy/index.ts +17 -0
  437. package/src/internal/proxy/json-serializer.ts +87 -0
  438. package/src/internal/proxy/make-object.ts +96 -0
  439. package/src/internal/proxy/ownership.ts +253 -0
  440. package/src/internal/proxy/proxy-types.ts +23 -0
  441. package/src/internal/proxy/proxy-utils.ts +150 -0
  442. package/src/internal/proxy/reactive-array.ts +71 -0
  443. package/src/internal/proxy/reactive.ts +69 -0
  444. package/src/internal/proxy/schema-validator.ts +244 -0
  445. package/src/internal/proxy/schema.test.ts +27 -18
  446. package/src/internal/proxy/symbols.ts +7 -0
  447. package/src/internal/proxy/typed-handler.test.ts +264 -48
  448. package/src/internal/proxy/typed-handler.ts +275 -61
  449. package/src/internal/proxy/typed-object.test.ts +42 -26
  450. package/src/internal/ref/ref-array.ts +4 -4
  451. package/src/internal/ref/ref.test.ts +8 -7
  452. package/src/internal/ref/ref.ts +81 -54
  453. package/src/internal/{projection → schema}/compose.test.ts +8 -9
  454. package/src/internal/{projection → schema}/compose.ts +1 -1
  455. package/src/internal/schema/echo-schema.ts +73 -33
  456. package/src/internal/schema/index.ts +1 -4
  457. package/src/internal/schema/manipulation.ts +1 -1
  458. package/src/internal/schema/persistent-schema.ts +27 -0
  459. package/src/internal/types/base.ts +43 -0
  460. package/src/internal/types/entity.ts +54 -0
  461. package/src/internal/types/index.ts +5 -2
  462. package/src/internal/{object → types}/meta.ts +22 -17
  463. package/src/internal/types/typename.ts +45 -0
  464. package/src/internal/types/version.ts +20 -0
  465. package/src/testing/api.test.ts +126 -0
  466. package/src/testing/index.ts +3 -3
  467. package/src/testing/test-data.ts +130 -0
  468. package/src/testing/test-schema.ts +238 -0
  469. package/src/testing/util.ts +85 -0
  470. package/dist/lib/browser/chunk-3FCPYTWA.mjs +0 -585
  471. package/dist/lib/browser/chunk-3FCPYTWA.mjs.map +0 -7
  472. package/dist/lib/browser/chunk-5BNXQE6S.mjs +0 -3727
  473. package/dist/lib/browser/chunk-5BNXQE6S.mjs.map +0 -7
  474. package/dist/lib/browser/chunk-U43CXUCL.mjs +0 -410
  475. package/dist/lib/browser/chunk-U43CXUCL.mjs.map +0 -7
  476. package/dist/lib/browser/query/index.mjs +0 -13
  477. package/dist/lib/node-esm/chunk-3FGSPSYN.mjs +0 -3727
  478. package/dist/lib/node-esm/chunk-3FGSPSYN.mjs.map +0 -7
  479. package/dist/lib/node-esm/chunk-C7LTTWRL.mjs +0 -585
  480. package/dist/lib/node-esm/chunk-C7LTTWRL.mjs.map +0 -7
  481. package/dist/lib/node-esm/chunk-OHJ5WBB6.mjs +0 -410
  482. package/dist/lib/node-esm/chunk-OHJ5WBB6.mjs.map +0 -7
  483. package/dist/lib/node-esm/query/index.mjs +0 -13
  484. package/dist/types/src/errors.d.ts.map +0 -1
  485. package/dist/types/src/internal/ast/annotation-helper.d.ts +0 -8
  486. package/dist/types/src/internal/ast/annotation-helper.d.ts.map +0 -1
  487. package/dist/types/src/internal/ast/annotations.d.ts +0 -131
  488. package/dist/types/src/internal/ast/annotations.d.ts.map +0 -1
  489. package/dist/types/src/internal/ast/annotations.test.d.ts.map +0 -1
  490. package/dist/types/src/internal/ast/entity-kind.d.ts +0 -10
  491. package/dist/types/src/internal/ast/entity-kind.d.ts.map +0 -1
  492. package/dist/types/src/internal/ast/index.d.ts +0 -5
  493. package/dist/types/src/internal/ast/index.d.ts.map +0 -1
  494. package/dist/types/src/internal/ast/types.d.ts +0 -6
  495. package/dist/types/src/internal/ast/types.d.ts.map +0 -1
  496. package/dist/types/src/internal/json/annotations.d.ts.map +0 -1
  497. package/dist/types/src/internal/json/effect-schema.test.d.ts.map +0 -1
  498. package/dist/types/src/internal/json/index.d.ts +0 -2
  499. package/dist/types/src/internal/json/index.d.ts.map +0 -1
  500. package/dist/types/src/internal/json/json-schema.d.ts.map +0 -1
  501. package/dist/types/src/internal/json/json-schema.test.d.ts.map +0 -1
  502. package/dist/types/src/internal/object/accessors.d.ts +0 -37
  503. package/dist/types/src/internal/object/accessors.d.ts.map +0 -1
  504. package/dist/types/src/internal/object/create.d.ts.map +0 -1
  505. package/dist/types/src/internal/object/create.test.d.ts +0 -2
  506. package/dist/types/src/internal/object/create.test.d.ts.map +0 -1
  507. package/dist/types/src/internal/object/entity.d.ts +0 -33
  508. package/dist/types/src/internal/object/entity.d.ts.map +0 -1
  509. package/dist/types/src/internal/object/expando.d.ts +0 -14
  510. package/dist/types/src/internal/object/expando.d.ts.map +0 -1
  511. package/dist/types/src/internal/object/meta.d.ts.map +0 -1
  512. package/dist/types/src/internal/object/model.d.ts +0 -117
  513. package/dist/types/src/internal/object/model.d.ts.map +0 -1
  514. package/dist/types/src/internal/object/relation.d.ts +0 -17
  515. package/dist/types/src/internal/object/relation.d.ts.map +0 -1
  516. package/dist/types/src/internal/object/typename.d.ts +0 -15
  517. package/dist/types/src/internal/object/typename.d.ts.map +0 -1
  518. package/dist/types/src/internal/object/version.d.ts.map +0 -1
  519. package/dist/types/src/internal/projection/compose.d.ts.map +0 -1
  520. package/dist/types/src/internal/projection/compose.test.d.ts.map +0 -1
  521. package/dist/types/src/internal/projection/index.d.ts +0 -2
  522. package/dist/types/src/internal/projection/index.d.ts.map +0 -1
  523. package/dist/types/src/internal/proxy/reactive-object.d.ts +0 -15
  524. package/dist/types/src/internal/proxy/reactive-object.d.ts.map +0 -1
  525. package/dist/types/src/internal/query/index.d.ts +0 -2
  526. package/dist/types/src/internal/query/index.d.ts.map +0 -1
  527. package/dist/types/src/internal/query/query.d.ts +0 -17
  528. package/dist/types/src/internal/query/query.d.ts.map +0 -1
  529. package/dist/types/src/internal/schema/runtime-schema-registry.d.ts +0 -18
  530. package/dist/types/src/internal/schema/runtime-schema-registry.d.ts.map +0 -1
  531. package/dist/types/src/internal/schema/snapshot.d.ts +0 -6
  532. package/dist/types/src/internal/schema/snapshot.d.ts.map +0 -1
  533. package/dist/types/src/internal/schema/stored-schema.d.ts +0 -13
  534. package/dist/types/src/internal/schema/stored-schema.d.ts.map +0 -1
  535. package/dist/types/src/internal/testing/index.d.ts +0 -3
  536. package/dist/types/src/internal/testing/index.d.ts.map +0 -1
  537. package/dist/types/src/internal/testing/types.d.ts +0 -381
  538. package/dist/types/src/internal/testing/types.d.ts.map +0 -1
  539. package/dist/types/src/internal/testing/utils.d.ts +0 -10
  540. package/dist/types/src/internal/testing/utils.d.ts.map +0 -1
  541. package/dist/types/src/internal/types/types.d.ts +0 -79
  542. package/dist/types/src/internal/types/types.d.ts.map +0 -1
  543. package/dist/types/src/internal/types/types.test.d.ts +0 -2
  544. package/dist/types/src/internal/types/types.test.d.ts.map +0 -1
  545. package/dist/types/src/internal/types/util.d.ts +0 -5
  546. package/dist/types/src/internal/types/util.d.ts.map +0 -1
  547. package/dist/types/src/query/index.d.ts +0 -2
  548. package/dist/types/src/query/index.d.ts.map +0 -1
  549. package/dist/types/src/query/query.d.ts +0 -248
  550. package/dist/types/src/query/query.d.ts.map +0 -1
  551. package/dist/types/src/query/query.test.d.ts +0 -2
  552. package/dist/types/src/query/query.test.d.ts.map +0 -1
  553. package/dist/types/src/testing/echo-schema.d.ts +0 -7
  554. package/dist/types/src/testing/echo-schema.d.ts.map +0 -1
  555. package/dist/types/src/testing/types.d.ts +0 -228
  556. package/dist/types/src/testing/types.d.ts.map +0 -1
  557. package/src/internal/ast/annotation-helper.ts +0 -22
  558. package/src/internal/ast/annotations.ts +0 -226
  559. package/src/internal/ast/entity-kind.ts +0 -15
  560. package/src/internal/ast/index.ts +0 -8
  561. package/src/internal/ast/types.ts +0 -17
  562. package/src/internal/json/index.ts +0 -5
  563. package/src/internal/object/accessors.ts +0 -153
  564. package/src/internal/object/entity.ts +0 -248
  565. package/src/internal/object/expando.ts +0 -21
  566. package/src/internal/object/model.ts +0 -170
  567. package/src/internal/object/relation.ts +0 -24
  568. package/src/internal/object/typename.ts +0 -61
  569. package/src/internal/object/version.ts +0 -22
  570. package/src/internal/projection/index.ts +0 -5
  571. package/src/internal/proxy/reactive-object.ts +0 -108
  572. package/src/internal/query/index.ts +0 -5
  573. package/src/internal/query/query.ts +0 -23
  574. package/src/internal/schema/runtime-schema-registry.ts +0 -78
  575. package/src/internal/schema/snapshot.ts +0 -25
  576. package/src/internal/schema/stored-schema.ts +0 -26
  577. package/src/internal/testing/index.ts +0 -6
  578. package/src/internal/testing/types.ts +0 -144
  579. package/src/internal/testing/utils.ts +0 -54
  580. package/src/internal/types/types.test.ts +0 -48
  581. package/src/internal/types/types.ts +0 -176
  582. package/src/internal/types/util.ts +0 -9
  583. package/src/query/index.ts +0 -6
  584. package/src/query/query.test.ts +0 -401
  585. package/src/query/query.ts +0 -789
  586. package/src/test/api.test.ts +0 -180
  587. package/src/testing/echo-schema.ts +0 -39
  588. package/src/testing/types.ts +0 -108
  589. /package/dist/lib/browser/{query/index.mjs.map → Annotation.mjs.map} +0 -0
  590. /package/dist/lib/{node-esm/query/index.mjs.map → browser/Database.mjs.map} +0 -0
  591. /package/dist/types/src/internal/{ast → annotations}/annotations.test.d.ts +0 -0
  592. /package/dist/types/src/internal/{json → json-schema}/annotations.d.ts +0 -0
  593. /package/dist/types/src/internal/{json → json-schema}/effect-schema.test.d.ts +0 -0
  594. /package/dist/types/src/internal/{json → json-schema}/json-schema.test.d.ts +0 -0
  595. /package/dist/types/src/internal/{projection → schema}/compose.d.ts +0 -0
  596. /package/dist/types/src/internal/{projection → schema}/compose.test.d.ts +0 -0
  597. /package/dist/types/src/{test → testing}/api.test.d.ts +0 -0
  598. /package/src/internal/{json → json-schema}/effect-schema.test.ts +0 -0
@@ -5,48 +5,60 @@
5
5
  import * as Schema from 'effect/Schema';
6
6
 
7
7
  import { raise } from '@dxos/debug';
8
- import { type EncodedReference, type ObjectMeta, isEncodedReference } from '@dxos/echo-protocol';
8
+ import { type EncodedReference, ObjectStructure, isEncodedReference } from '@dxos/echo-protocol';
9
9
  import { assertArgument, invariant } from '@dxos/invariant';
10
10
  import { DXN, ObjectId } from '@dxos/keys';
11
- import { defineHiddenProperty } from '@dxos/live-object';
12
11
  import { assumeType, deepMapValues, visitValues } from '@dxos/util';
13
12
 
14
- import { EntityKind } from '../ast';
15
- import { Ref, type RefResolver, refFromEncodedReference, setRefResolver } from '../ref';
16
- import { type AnyEchoObject } from '../types';
17
-
18
- import { setSchema } from './accessors';
19
- import { ObjectMetaSchema } from './meta';
13
+ import type * as Obj from '../../Obj';
14
+ import { getTypeDXN, setTypename } from '../annotations';
20
15
  import {
21
16
  ATTR_DELETED,
22
- ATTR_META,
23
17
  ATTR_RELATION_SOURCE,
24
18
  ATTR_RELATION_TARGET,
25
19
  ATTR_SELF_DXN,
26
- ATTR_TYPE,
27
- EntityKindId,
28
- MetaId,
29
20
  type ObjectJSON,
30
21
  RelationSourceDXNId,
31
22
  RelationSourceId,
32
23
  RelationTargetDXNId,
33
24
  RelationTargetId,
34
25
  SelfDXNId,
35
- TypeId,
36
- assertObjectModelShape,
37
- } from './model';
38
- import { getType, setTypename } from './typename';
26
+ assertObjectModel,
27
+ } from '../entities';
28
+ import { attachTypedJsonSerializer, defineHiddenProperty, typedJsonSerializer } from '../proxy';
29
+ import { Ref, type RefResolver, refFromEncodedReference, setRefResolver } from '../ref';
30
+ import {
31
+ ATTR_META,
32
+ ATTR_TYPE,
33
+ type AnyEntity,
34
+ EntityKind,
35
+ KindId,
36
+ MetaId,
37
+ ObjectMetaSchema,
38
+ setSchema,
39
+ } from '../types';
39
40
 
40
- type DeepReplaceRef<T> =
41
- T extends Ref<any> ? EncodedReference : T extends object ? { [K in keyof T]: DeepReplaceRef<T[K]> } : T;
41
+ // Re-export for backward compatibility.
42
+ export { attachTypedJsonSerializer };
42
43
 
43
- type SerializedObject<T extends { id: string }> = { [K in keyof T]: DeepReplaceRef<T[K]> } & ObjectJSON;
44
+ type DeepReplaceRef<T> =
45
+ T extends Ref<any>
46
+ ? EncodedReference
47
+ : T extends object
48
+ ? {
49
+ [K in keyof T]: DeepReplaceRef<T[K]>;
50
+ }
51
+ : T;
52
+
53
+ type SerializedObject<T extends { id: string }> = {
54
+ [K in keyof T]: DeepReplaceRef<T[K]>;
55
+ } & ObjectJSON;
44
56
 
45
57
  /**
46
58
  * Converts object to it's JSON representation.
47
59
  */
48
- export const objectToJSON = <T extends AnyEchoObject>(obj: T): SerializedObject<T> => {
49
- const typename = getType(obj)?.toString();
60
+ export const objectToJSON = <T extends AnyEntity>(obj: T): SerializedObject<T> => {
61
+ const typename = getTypeDXN(obj)?.toString();
50
62
  invariant(typename && typeof typename === 'string');
51
63
  return typedJsonSerializer.call(obj);
52
64
  };
@@ -55,13 +67,12 @@ export const objectToJSON = <T extends AnyEchoObject>(obj: T): SerializedObject<
55
67
  * Creates an object from it's json representation.
56
68
  * Performs schema validation.
57
69
  * References and schema will be resolvable if the `refResolver` is provided.
58
- *
59
70
  * The function need to be async to support resolving the schema as well as the relation endpoints.
60
71
  */
61
72
  export const objectFromJSON = async (
62
73
  jsonData: unknown,
63
74
  { refResolver, dxn }: { refResolver?: RefResolver; dxn?: DXN } = {},
64
- ): Promise<AnyEchoObject> => {
75
+ ): Promise<AnyEntity> => {
65
76
  assumeType<ObjectJSON>(jsonData);
66
77
  assertArgument(typeof jsonData === 'object' && jsonData !== null, 'jsonData', 'expect object');
67
78
  assertArgument(typeof jsonData[ATTR_TYPE] === 'string', 'jsonData[ATTR_TYPE]', 'expected object to have a type');
@@ -82,7 +93,6 @@ export const objectFromJSON = async (
82
93
  }
83
94
 
84
95
  invariant(ObjectId.isValid(obj.id), 'Invalid object id');
85
-
86
96
  setTypename(obj, type);
87
97
  if (schema) {
88
98
  setSchema(obj, schema);
@@ -94,39 +104,39 @@ export const objectFromJSON = async (
94
104
  const sourceDxn: DXN = DXN.parse(jsonData[ATTR_RELATION_SOURCE] ?? raise(new TypeError('Missing relation source')));
95
105
  const targetDxn: DXN = DXN.parse(jsonData[ATTR_RELATION_TARGET] ?? raise(new TypeError('Missing relation target')));
96
106
 
97
- // TODO(dmaretskyi): Async!
98
- const source = (await refResolver?.resolve(sourceDxn)) as AnyEchoObject | undefined;
99
- const target = (await refResolver?.resolve(targetDxn)) as AnyEchoObject | undefined;
107
+ const source = (await refResolver?.resolve(sourceDxn)) as AnyEntity | undefined;
108
+ const target = (await refResolver?.resolve(targetDxn)) as AnyEntity | undefined;
100
109
 
101
- defineHiddenProperty(obj, EntityKindId, EntityKind.Relation);
110
+ defineHiddenProperty(obj, KindId, EntityKind.Relation);
102
111
  defineHiddenProperty(obj, RelationSourceDXNId, sourceDxn);
103
112
  defineHiddenProperty(obj, RelationTargetDXNId, targetDxn);
104
113
  defineHiddenProperty(obj, RelationSourceId, source);
105
114
  defineHiddenProperty(obj, RelationTargetId, target);
106
115
  } else {
107
- defineHiddenProperty(obj, EntityKindId, EntityKind.Object);
116
+ defineHiddenProperty(obj, KindId, EntityKind.Object);
108
117
  }
109
118
 
110
119
  if (typeof jsonData[ATTR_META] === 'object') {
111
120
  const meta = await ObjectMetaSchema.pipe(Schema.decodeUnknownPromise)(jsonData[ATTR_META]);
112
-
113
- // Defensive programming.
114
121
  invariant(Array.isArray(meta.keys));
115
-
116
122
  defineHiddenProperty(obj, MetaId, meta);
123
+ } else {
124
+ defineHiddenProperty(obj, MetaId, {
125
+ keys: [],
126
+ });
117
127
  }
118
128
 
119
129
  if (dxn) {
120
130
  defineHiddenProperty(obj, SelfDXNId, dxn);
121
131
  }
122
132
 
123
- assertObjectModelShape(obj);
133
+ assertObjectModel(obj);
124
134
  invariant((obj as any)[ATTR_TYPE] === undefined, 'Invalid object model');
125
- invariant((obj as any)[ATTR_SELF_DXN] === undefined, 'Invalid object model');
135
+ invariant((obj as any)[ATTR_META] === undefined, 'Invalid object model');
126
136
  invariant((obj as any)[ATTR_DELETED] === undefined, 'Invalid object model');
137
+ invariant((obj as any)[ATTR_SELF_DXN] === undefined, 'Invalid object model');
127
138
  invariant((obj as any)[ATTR_RELATION_SOURCE] === undefined, 'Invalid object model');
128
139
  invariant((obj as any)[ATTR_RELATION_TARGET] === undefined, 'Invalid object model');
129
- invariant((obj as any)[ATTR_META] === undefined, 'Invalid object model');
130
140
  return obj;
131
141
  };
132
142
 
@@ -135,91 +145,44 @@ const decodeGeneric = (jsonData: unknown, options: { refResolver?: RefResolver }
135
145
  [ATTR_TYPE]: _type,
136
146
  [ATTR_META]: _meta,
137
147
  [ATTR_DELETED]: _deleted,
148
+ [ATTR_SELF_DXN]: _selfDxn,
138
149
  [ATTR_RELATION_SOURCE]: _relationSource,
139
150
  [ATTR_RELATION_TARGET]: _relationTarget,
140
- [ATTR_SELF_DXN]: _selfDxn,
141
151
  ...props
142
152
  } = jsonData as any;
143
153
 
144
- return deepMapValues(props, (value, recurse) => {
154
+ return deepMapValues(props, (value, visitor) => {
145
155
  if (isEncodedReference(value)) {
146
156
  return refFromEncodedReference(value, options.refResolver);
147
157
  }
148
- return recurse(value);
158
+
159
+ return visitor(value);
149
160
  });
150
161
  };
151
162
 
152
- export const setRefResolverOnData = (obj: AnyEchoObject, refResolver: RefResolver) => {
153
- const go = (value: unknown) => {
163
+ export const setRefResolverOnData = (obj: AnyEntity, refResolver: RefResolver) => {
164
+ const visitor = (value: unknown) => {
154
165
  if (Ref.isRef(value)) {
155
166
  setRefResolver(value, refResolver);
156
167
  } else {
157
- visitValues(value, go);
168
+ visitValues(value, visitor);
158
169
  }
159
170
  };
160
171
 
161
- go(obj);
172
+ visitor(obj);
162
173
  };
163
174
 
164
- export const attachTypedJsonSerializer = (obj: any) => {
165
- const descriptor = Object.getOwnPropertyDescriptor(obj, 'toJSON');
166
- if (descriptor) {
167
- return;
168
- }
169
-
170
- Object.defineProperty(obj, 'toJSON', {
171
- value: typedJsonSerializer,
172
- writable: false,
173
- enumerable: false,
174
- // Setting `configurable` to false breaks proxy invariants, should be fixable.
175
- configurable: true,
176
- });
177
- };
178
-
179
- // NOTE: KEEP as function.
180
- const typedJsonSerializer = function (this: any) {
181
- const { id, ...rest } = this;
182
- const result: any = {
183
- id,
175
+ /**
176
+ * Convert ObjectStructure to JSON data for indexing.
177
+ * Different from {@link objectToJSON} as it takes the internal {@link ObjectStructure} representation directly
178
+ */
179
+ export const objectStructureToJson = (objectId: string, structure: ObjectStructure): Obj.JSON => {
180
+ return {
181
+ ...structure.data,
182
+ id: objectId,
183
+ [ATTR_TYPE]: (ObjectStructure.getTypeReference(structure)?.['/'] ?? '') as DXN.String,
184
+ [ATTR_DELETED]: ObjectStructure.isDeleted(structure),
185
+ [ATTR_RELATION_SOURCE]: ObjectStructure.getRelationSource(structure)?.['/'] as DXN.String | undefined,
186
+ [ATTR_RELATION_TARGET]: ObjectStructure.getRelationTarget(structure)?.['/'] as DXN.String | undefined,
184
187
  };
185
-
186
- if (this[TypeId]) {
187
- result[ATTR_TYPE] = this[TypeId].toString();
188
- }
189
-
190
- if (this[SelfDXNId]) {
191
- result[ATTR_SELF_DXN] = this[SelfDXNId].toString();
192
- }
193
-
194
- if (this[RelationSourceDXNId]) {
195
- const sourceDXN = this[RelationSourceDXNId];
196
- invariant(sourceDXN instanceof DXN);
197
- result[ATTR_RELATION_SOURCE] = sourceDXN.toString();
198
- }
199
- if (this[RelationTargetDXNId]) {
200
- const targetDXN = this[RelationTargetDXNId];
201
- invariant(targetDXN instanceof DXN);
202
- result[ATTR_RELATION_TARGET] = targetDXN.toString();
203
- }
204
-
205
- if (this[MetaId]) {
206
- result[ATTR_META] = serializeMeta(this[MetaId]);
207
- }
208
-
209
- Object.assign(result, serializeData(rest));
210
- return result;
211
- };
212
-
213
- const serializeData = (data: unknown) => {
214
- return deepMapValues(data, (value, recurse) => {
215
- if (Ref.isRef(value)) {
216
- // TODO(dmaretskyi): Should this be configurable?
217
- return value.noInline().encode();
218
- }
219
- return recurse(value);
220
- });
221
- };
222
-
223
- const serializeMeta = (meta: ObjectMeta) => {
224
- return deepMapValues(meta, (value, recurse) => recurse(value));
225
188
  };
@@ -2,240 +2,5 @@
2
2
  // Copyright 2024 DXOS.org
3
3
  //
4
4
 
5
- import * as Schema from 'effect/Schema';
6
- import * as SchemaAST from 'effect/SchemaAST';
7
-
8
- import { invariant } from '@dxos/invariant';
9
-
10
- import { SchemaId } from './model';
11
-
12
- // TODO(burdon): Reconcile with @dxos/effect visit().
13
-
14
- export class SchemaValidator {
15
- /**
16
- * Recursively check that schema specifies constructions we can handle.
17
- * Validates there are no ambiguous discriminated union types.
18
- */
19
- public static validateSchema(schema: Schema.Schema.AnyNoContext): void {
20
- const visitAll = (nodes: SchemaAST.AST[]) => nodes.forEach((node) => this.validateSchema(Schema.make(node)));
21
- if (SchemaAST.isUnion(schema.ast)) {
22
- const typeAstList = schema.ast.types.filter((type) => SchemaAST.isTypeLiteral(type)) as SchemaAST.TypeLiteral[];
23
- // Check we can handle a discriminated union.
24
- if (typeAstList.length > 1) {
25
- getTypeDiscriminators(typeAstList);
26
- }
27
- visitAll(typeAstList);
28
- } else if (SchemaAST.isTupleType(schema.ast)) {
29
- const positionalTypes = schema.ast.elements.map((t) => t.type);
30
- const allTypes = positionalTypes.concat(schema.ast.rest.map((t) => t.type));
31
- visitAll(allTypes);
32
- } else if (SchemaAST.isTypeLiteral(schema.ast)) {
33
- visitAll(SchemaAST.getPropertySignatures(schema.ast).map((p) => p.type));
34
- }
35
- }
36
-
37
- public static hasTypeAnnotation(
38
- rootObjectSchema: Schema.Schema.AnyNoContext,
39
- property: string,
40
- annotation: symbol,
41
- ): boolean {
42
- try {
43
- let type = this.getPropertySchema(rootObjectSchema, [property]);
44
- if (SchemaAST.isTupleType(type.ast)) {
45
- type = this.getPropertySchema(rootObjectSchema, [property, '0']);
46
- }
47
-
48
- return type.ast.annotations[annotation] != null;
49
- } catch (err) {
50
- return false;
51
- }
52
- }
53
-
54
- public static getPropertySchema(
55
- rootObjectSchema: Schema.Schema.AnyNoContext,
56
- propertyPath: KeyPath,
57
- getProperty: (path: KeyPath) => any = () => null,
58
- ): Schema.Schema.AnyNoContext {
59
- let schema: Schema.Schema.AnyNoContext = rootObjectSchema;
60
- for (let i = 0; i < propertyPath.length; i++) {
61
- const propertyName = propertyPath[i];
62
- const tupleAst = unwrapArray(schema.ast);
63
- if (tupleAst != null) {
64
- schema = getArrayElementSchema(tupleAst, propertyName);
65
- } else {
66
- const propertyType = getPropertyType(schema.ast, propertyName.toString(), (propertyName) =>
67
- getProperty([...propertyPath.slice(0, i), propertyName]),
68
- );
69
- if (propertyType == null) {
70
- throw new TypeError(`unknown property: ${String(propertyName)} on object. Path: ${propertyPath}`);
71
- }
72
-
73
- schema = Schema.make(propertyType).annotations(propertyType.annotations);
74
- }
75
- }
76
-
77
- return schema;
78
- }
79
-
80
- public static getTargetPropertySchema(target: any, prop: string | symbol): Schema.Schema.AnyNoContext {
81
- const schema: Schema.Schema.AnyNoContext | undefined = (target as any)[SchemaId];
82
- invariant(schema, 'target has no schema');
83
- const arrayAst = unwrapArray(schema.ast);
84
- if (arrayAst != null) {
85
- return getArrayElementSchema(arrayAst, prop);
86
- }
87
-
88
- const propertyType = getPropertyType(schema.ast, prop.toString(), (prop) => target[prop]);
89
- if (propertyType == null) {
90
- return Schema.Any; // TODO(burdon): HACK.
91
- }
92
-
93
- invariant(propertyType, `invalid property: ${prop.toString()}`);
94
- return Schema.make(propertyType);
95
- }
96
- }
97
-
98
- /**
99
- * Tuple AST is used both for:
100
- * fixed-length tuples ([string, number]) in which case AST will be { elements: [Schema.String, Schema.Number] }
101
- * variable-length arrays (Array<string | number>) in which case AST will be { rest: [Schema.Union(Schema.String, Schema.Number)] }
102
- */
103
- const getArrayElementSchema = (
104
- tupleAst: SchemaAST.TupleType,
105
- property: string | symbol | number,
106
- ): Schema.Schema.AnyNoContext => {
107
- const elementIndex = typeof property === 'string' ? parseInt(property, 10) : Number.NaN;
108
- if (Number.isNaN(elementIndex)) {
109
- invariant(property === 'length', `invalid array property: ${String(property)}`);
110
- return Schema.Number;
111
- }
112
- if (elementIndex < tupleAst.elements.length) {
113
- const elementType = tupleAst.elements[elementIndex].type;
114
- return Schema.make(elementType).annotations(elementType.annotations);
115
- }
116
-
117
- const restType = tupleAst.rest;
118
- return Schema.make(restType[0].type).annotations(restType[0].annotations);
119
- };
120
-
121
- const flattenUnion = (typeAst: SchemaAST.AST): SchemaAST.AST[] =>
122
- SchemaAST.isUnion(typeAst) ? typeAst.types.flatMap(flattenUnion) : [typeAst];
123
-
124
- const getProperties = (
125
- typeAst: SchemaAST.AST,
126
- getTargetPropertyFn: (propertyName: string) => any,
127
- ): SchemaAST.PropertySignature[] => {
128
- const astCandidates = flattenUnion(typeAst);
129
- const typeAstList = astCandidates.filter((type) => SchemaAST.isTypeLiteral(type)) as SchemaAST.TypeLiteral[];
130
- if (typeAstList.length === 0) {
131
- return [];
132
- }
133
- if (typeAstList.length === 1) {
134
- return SchemaAST.getPropertySignatures(typeAstList[0]);
135
- }
136
-
137
- const typeDiscriminators = getTypeDiscriminators(typeAstList);
138
- const targetPropertyValue = getTargetPropertyFn(String(typeDiscriminators[0].name));
139
- const typeIndex = typeDiscriminators.findIndex((p) => targetPropertyValue === (p.type as SchemaAST.Literal).literal);
140
- invariant(typeIndex !== -1, 'discriminator field not set on target');
141
- return SchemaAST.getPropertySignatures(typeAstList[typeIndex]);
142
- };
143
-
144
- const getPropertyType = (
145
- ast: SchemaAST.AST,
146
- propertyName: string,
147
- getTargetPropertyFn: (propertyName: string) => any,
148
- ): SchemaAST.AST | null => {
149
- const anyOrObject = unwrapAst(
150
- ast,
151
- (candidate) => SchemaAST.isAnyKeyword(candidate) || SchemaAST.isObjectKeyword(candidate),
152
- );
153
- if (anyOrObject != null) {
154
- return ast;
155
- }
156
-
157
- const typeOrDiscriminatedUnion = unwrapAst(ast, (t) => {
158
- return SchemaAST.isTypeLiteral(t) || (SchemaAST.isUnion(t) && t.types.some((t) => SchemaAST.isTypeLiteral(t)));
159
- });
160
- if (typeOrDiscriminatedUnion == null) {
161
- return null;
162
- }
163
-
164
- const targetProperty = getProperties(typeOrDiscriminatedUnion, getTargetPropertyFn).find(
165
- (p) => p.name === propertyName,
166
- );
167
- if (targetProperty != null) {
168
- return unwrapAst(targetProperty.type);
169
- }
170
-
171
- const indexSignatureType = unwrapAst(ast, SchemaAST.isTypeLiteral);
172
- if (
173
- indexSignatureType &&
174
- SchemaAST.isTypeLiteral(indexSignatureType) &&
175
- indexSignatureType.indexSignatures.length > 0
176
- ) {
177
- return unwrapAst(indexSignatureType.indexSignatures[0].type);
178
- }
179
-
180
- return null;
181
- };
182
-
183
- const getTypeDiscriminators = (typeAstList: SchemaAST.TypeLiteral[]): SchemaAST.PropertySignature[] => {
184
- const discriminatorPropCandidates = typeAstList
185
- .flatMap(SchemaAST.getPropertySignatures)
186
- .filter((p) => SchemaAST.isLiteral(p.type));
187
- const propertyName = discriminatorPropCandidates[0].name;
188
- const isValidDiscriminator = discriminatorPropCandidates.every((p) => p.name === propertyName && !p.isOptional);
189
- const everyTypeHasDiscriminator = discriminatorPropCandidates.length === typeAstList.length;
190
- const isDiscriminatedUnion = isValidDiscriminator && everyTypeHasDiscriminator;
191
- invariant(isDiscriminatedUnion, 'type ambiguity: every type in a union must have a single unique-literal field');
192
- return discriminatorPropCandidates;
193
- };
194
-
195
- /**
196
- * Used to check that rootAst is for a type matching the provided predicate.
197
- * That's not always straightforward because types of optionality and recursive types.
198
- * const Task = Schema.Struct({
199
- * ...,
200
- * previous?: Schema.optional(Schema.suspend(() => Task)),
201
- * });
202
- * Here the AST for `previous` field is going to be Union(Suspend(Type), Undefined).
203
- * SchemaAST.isTypeLiteral(field) will return false, but unwrapAst(field, (ast) => SchemaAST.isTypeLiteral(ast))
204
- * will return true.
205
- */
206
- const unwrapAst = (rootAst: SchemaAST.AST, predicate?: (ast: SchemaAST.AST) => boolean): SchemaAST.AST | null => {
207
- let ast: SchemaAST.AST | undefined = rootAst;
208
- while (ast != null) {
209
- if (predicate?.(ast)) {
210
- return ast;
211
- }
212
-
213
- if (SchemaAST.isUnion(ast)) {
214
- const next: any = ast.types.find((t) => (predicate != null && predicate(t)) || SchemaAST.isSuspend(t));
215
- if (next != null) {
216
- ast = next;
217
- continue;
218
- }
219
- }
220
-
221
- if (SchemaAST.isSuspend(ast)) {
222
- ast = ast.f();
223
- } else {
224
- return predicate == null ? ast : null;
225
- }
226
- }
227
-
228
- return null;
229
- };
230
-
231
- const unwrapArray = (ast: SchemaAST.AST) => unwrapAst(ast, SchemaAST.isTupleType) as SchemaAST.TupleType | null;
232
-
233
- export const checkIdNotPresentOnSchema = (schema: Schema.Schema<any, any, any>) => {
234
- invariant(SchemaAST.isTypeLiteral(schema.ast));
235
- const idProperty = SchemaAST.getPropertySignatures(schema.ast).find((prop) => prop.name === 'id');
236
- if (idProperty != null) {
237
- throw new Error('"id" property name is reserved');
238
- }
239
- };
240
-
241
- type KeyPath = readonly (string | number)[];
5
+ // Re-export from proxy for backward compatibility.
6
+ export { SchemaValidator, checkIdNotPresentOnSchema } from '../proxy';