@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
@@ -0,0 +1,250 @@
1
+ import { createRequire } from 'node:module';const require = createRequire(import.meta.url);
2
+ import {
3
+ ATTR_RELATION_SOURCE,
4
+ ATTR_RELATION_TARGET,
5
+ MetaId,
6
+ RelationSourceDXNId,
7
+ RelationSourceId,
8
+ RelationTargetDXNId,
9
+ RelationTargetId,
10
+ VersionTypeId,
11
+ addTag,
12
+ change,
13
+ deleteKeys,
14
+ getDXN,
15
+ getDatabase,
16
+ getDescription,
17
+ getKeys,
18
+ getLabel,
19
+ getMetaChecked,
20
+ getObjectDXN,
21
+ getSnapshot,
22
+ isDeleted,
23
+ isVersion,
24
+ makeObject,
25
+ objectToJSON,
26
+ removeTag,
27
+ setDescription,
28
+ setLabel,
29
+ setValue,
30
+ sort,
31
+ sortByLabel,
32
+ sortByTypename,
33
+ subscribe,
34
+ version
35
+ } from "./chunk-LT3H4JOX.mjs";
36
+ import {
37
+ getSchema,
38
+ getTypeAnnotation,
39
+ getTypeDXN,
40
+ getTypename
41
+ } from "./chunk-YOLH5KS4.mjs";
42
+ import {
43
+ EntityKind,
44
+ KindId,
45
+ SnapshotKindId
46
+ } from "./chunk-XHJRMQZD.mjs";
47
+ import {
48
+ __export
49
+ } from "./chunk-HSLMI22Q.mjs";
50
+
51
+ // src/Relation.ts
52
+ var Relation_exports = {};
53
+ __export(Relation_exports, {
54
+ Source: () => Source,
55
+ Target: () => Target,
56
+ VersionTypeId: () => VersionTypeId,
57
+ addTag: () => addTag2,
58
+ change: () => change2,
59
+ deleteKeys: () => deleteKeys2,
60
+ getDXN: () => getDXN2,
61
+ getDatabase: () => getDatabase2,
62
+ getDescription: () => getDescription2,
63
+ getKeys: () => getKeys2,
64
+ getLabel: () => getLabel2,
65
+ getMeta: () => getMeta,
66
+ getSchema: () => getSchema2,
67
+ getSnapshot: () => getSnapshot2,
68
+ getSource: () => getSource,
69
+ getSourceDXN: () => getSourceDXN,
70
+ getTarget: () => getTarget,
71
+ getTargetDXN: () => getTargetDXN,
72
+ getTypeDXN: () => getTypeDXN2,
73
+ getTypename: () => getTypename2,
74
+ getValue: () => getValue,
75
+ isDeleted: () => isDeleted2,
76
+ isRelation: () => isRelation,
77
+ isVersion: () => isVersion,
78
+ make: () => make,
79
+ removeTag: () => removeTag2,
80
+ setDescription: () => setDescription2,
81
+ setLabel: () => setLabel2,
82
+ setValue: () => setValue2,
83
+ sort: () => sort2,
84
+ sortByLabel: () => sortByLabel2,
85
+ sortByTypename: () => sortByTypename2,
86
+ subscribe: () => subscribe2,
87
+ toJSON: () => toJSON,
88
+ version: () => version2
89
+ });
90
+ import { raise } from "@dxos/debug";
91
+ import { createJsonPath, getValue as getValue$ } from "@dxos/effect";
92
+ import { assertArgument, invariant } from "@dxos/invariant";
93
+ import { DXN } from "@dxos/keys";
94
+ import { assumeType } from "@dxos/util";
95
+ var __dxlog_file = "/__w/dxos/dxos/packages/core/echo/echo/src/Relation.ts";
96
+ var Source = RelationSourceId;
97
+ var Target = RelationTargetId;
98
+ var make = (schema, props, meta) => {
99
+ assertArgument(getTypeAnnotation(schema)?.kind === EntityKind.Relation, "schema", "Expected a relation schema");
100
+ if (props[MetaId] != null) {
101
+ meta = props[MetaId];
102
+ delete props[MetaId];
103
+ }
104
+ const sourceDXN = getObjectDXN(props[Source]) ?? raise(new Error("Unresolved relation source"));
105
+ const targetDXN = getObjectDXN(props[Target]) ?? raise(new Error("Unresolved relation target"));
106
+ props[RelationSourceDXNId] = sourceDXN;
107
+ props[RelationTargetDXNId] = targetDXN;
108
+ return makeObject(schema, props, meta);
109
+ };
110
+ var isRelation = (value) => {
111
+ if (typeof value !== "object" || value === null) {
112
+ return false;
113
+ }
114
+ if (ATTR_RELATION_SOURCE in value || ATTR_RELATION_TARGET in value) {
115
+ return true;
116
+ }
117
+ const kind = value[KindId] ?? value[SnapshotKindId];
118
+ return kind === EntityKind.Relation;
119
+ };
120
+ var getSourceDXN = (value) => {
121
+ assertArgument(isRelation(value), "Expected a relation");
122
+ assumeType(value);
123
+ const dxn = value[RelationSourceDXNId];
124
+ invariant(dxn instanceof DXN, void 0, {
125
+ F: __dxlog_file,
126
+ L: 188,
127
+ S: void 0,
128
+ A: [
129
+ "dxn instanceof DXN",
130
+ ""
131
+ ]
132
+ });
133
+ return dxn;
134
+ };
135
+ var getTargetDXN = (value) => {
136
+ assertArgument(isRelation(value), "Expected a relation");
137
+ assumeType(value);
138
+ const dxn = value[RelationTargetDXNId];
139
+ invariant(dxn instanceof DXN, void 0, {
140
+ F: __dxlog_file,
141
+ L: 201,
142
+ S: void 0,
143
+ A: [
144
+ "dxn instanceof DXN",
145
+ ""
146
+ ]
147
+ });
148
+ return dxn;
149
+ };
150
+ var getSource = (relation) => {
151
+ assertArgument(isRelation(relation), "Expected a relation");
152
+ assumeType(relation);
153
+ const obj = relation[RelationSourceId];
154
+ invariant(obj !== void 0, `Invalid source: ${relation.id}`, {
155
+ F: __dxlog_file,
156
+ L: 214,
157
+ S: void 0,
158
+ A: [
159
+ "obj !== undefined",
160
+ "`Invalid source: ${relation.id}`"
161
+ ]
162
+ });
163
+ return obj;
164
+ };
165
+ var getTarget = (relation) => {
166
+ assertArgument(isRelation(relation), "Expected a relation");
167
+ assumeType(relation);
168
+ const obj = relation[RelationTargetId];
169
+ invariant(obj !== void 0, `Invalid target: ${relation.id}`, {
170
+ F: __dxlog_file,
171
+ L: 227,
172
+ S: void 0,
173
+ A: [
174
+ "obj !== undefined",
175
+ "`Invalid target: ${relation.id}`"
176
+ ]
177
+ });
178
+ return obj;
179
+ };
180
+ var change2 = (relation, callback) => {
181
+ change(relation, callback);
182
+ };
183
+ var getSnapshot2 = getSnapshot;
184
+ var subscribe2 = (rel, callback) => {
185
+ return subscribe(rel, callback);
186
+ };
187
+ var getValue = (rel, path) => {
188
+ return getValue$(rel, createJsonPath(path));
189
+ };
190
+ var setValue2 = setValue;
191
+ var getDXN2 = (entity) => getDXN(entity);
192
+ var getTypeDXN2 = getTypeDXN;
193
+ var getSchema2 = getSchema;
194
+ var getTypename2 = (entity) => getTypename(entity);
195
+ var getDatabase2 = (entity) => getDatabase(entity);
196
+ function getMeta(entity) {
197
+ return getMetaChecked(entity);
198
+ }
199
+ var getKeys2 = (entity, source) => getKeys(entity, source);
200
+ var deleteKeys2 = (entity, source) => deleteKeys(entity, source);
201
+ var addTag2 = (entity, tag) => addTag(entity, tag);
202
+ var removeTag2 = (entity, tag) => removeTag(entity, tag);
203
+ var isDeleted2 = (entity) => isDeleted(entity);
204
+ var getLabel2 = (entity) => getLabel(entity);
205
+ var setLabel2 = (entity, label) => setLabel(entity, label);
206
+ var getDescription2 = (entity) => getDescription(entity);
207
+ var setDescription2 = (entity, description) => setDescription(entity, description);
208
+ var toJSON = (entity) => objectToJSON(entity);
209
+ var sortByLabel2 = sortByLabel;
210
+ var sortByTypename2 = sortByTypename;
211
+ var sort2 = (...comparators) => sort(...comparators);
212
+ var version2 = (entity) => version(entity);
213
+
214
+ export {
215
+ Source,
216
+ Target,
217
+ make,
218
+ isRelation,
219
+ getSourceDXN,
220
+ getTargetDXN,
221
+ getSource,
222
+ getTarget,
223
+ change2 as change,
224
+ getSnapshot2 as getSnapshot,
225
+ subscribe2 as subscribe,
226
+ getValue,
227
+ setValue2 as setValue,
228
+ getDXN2 as getDXN,
229
+ getTypeDXN2 as getTypeDXN,
230
+ getSchema2 as getSchema,
231
+ getTypename2 as getTypename,
232
+ getDatabase2 as getDatabase,
233
+ getMeta,
234
+ getKeys2 as getKeys,
235
+ deleteKeys2 as deleteKeys,
236
+ addTag2 as addTag,
237
+ removeTag2 as removeTag,
238
+ isDeleted2 as isDeleted,
239
+ getLabel2 as getLabel,
240
+ setLabel2 as setLabel,
241
+ getDescription2 as getDescription,
242
+ setDescription2 as setDescription,
243
+ toJSON,
244
+ sortByLabel2 as sortByLabel,
245
+ sortByTypename2 as sortByTypename,
246
+ sort2 as sort,
247
+ version2 as version,
248
+ Relation_exports
249
+ };
250
+ //# sourceMappingURL=chunk-4PNXQA64.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/Relation.ts"],
4
+ "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport type * as Schema from 'effect/Schema';\n\nimport { raise } from '@dxos/debug';\nimport type { ForeignKey } from '@dxos/echo-protocol';\nimport { createJsonPath, getValue as getValue$ } from '@dxos/effect';\nimport { assertArgument, invariant } from '@dxos/invariant';\nimport { DXN, type ObjectId } from '@dxos/keys';\nimport { assumeType } from '@dxos/util';\n\nimport type * as Database from './Database';\nimport * as Entity from './Entity';\nimport {\n type ObjectJSON as APIJSON,\n ATTR_RELATION_SOURCE,\n ATTR_RELATION_TARGET,\n type AnyEntity,\n type Comparator as ApiComparator,\n type Meta as ApiMeta,\n type ReadonlyMeta as ApiReadonlyMeta,\n type EntityVersion as ApiVersion,\n type ChangeCallback,\n EntityKind,\n type InternalObjectProps,\n type KindId,\n MetaId,\n type Mutable,\n type ObjectMeta,\n RelationSourceDXNId,\n RelationSourceId,\n RelationTargetDXNId,\n RelationTargetId,\n SnapshotKindId,\n VersionTypeId,\n addTag as addTag$,\n change as change$,\n deleteKeys as deleteKeys$,\n getDXN as getDXN$,\n getDatabase as getDatabase$,\n getDescription as getDescription$,\n getKeys as getKeys$,\n getLabel as getLabel$,\n getMetaChecked as getMeta$,\n getObjectDXN,\n getSchema as getSchema$,\n getSnapshot as getSnapshot$,\n getTypeAnnotation,\n getTypeDXN as getTypeDXN$,\n getTypename as getTypename$,\n isDeleted as isDeleted$,\n isVersion,\n makeObject,\n removeTag as removeTag$,\n setDescription as setDescription$,\n setLabel as setLabel$,\n setValue as setValue$,\n sort as sort$,\n sortByLabel as sortByLabel$,\n sortByTypename as sortByTypename$,\n subscribe as subscribe$,\n objectToJSON as toJSON$,\n version as version$,\n} from './internal';\nimport type * as Obj from './Obj';\nimport type * as Type from './Type';\n\n/**\n * Base type for all ECHO relations.\n * @private\n */\ninterface BaseRelation<Source, Target>\n extends AnyEntity,\n Type.Relation.Endpoints<Source, Target>,\n Entity.OfKind<EntityKind.Relation> {}\n\n/**\n * Relation with no known properties beyond id, kind, source, and target.\n * Use this when the relation's schema/properties are not known.\n *\n * NOTE: This is a TypeScript type only, not a schema.\n * To validate that a value is an ECHO relation, use `Relation.isRelation`.\n */\nexport interface Unknown extends BaseRelation<Obj.Unknown, Obj.Unknown> {}\n\n/**\n * Relation type with specific source and target types.\n */\nexport type Relation<Source extends Obj.Unknown, Target extends Obj.Unknown, Props> = BaseRelation<Source, Target> &\n Props;\n\n/**\n * Base type for snapshot relations (has SnapshotKindId instead of KindId).\n */\ninterface BaseRelationSnapshot<Source, Target> extends AnyEntity, Type.Relation.Endpoints<Source, Target> {\n readonly [SnapshotKindId]: EntityKind.Relation;\n readonly id: ObjectId;\n}\n\n/**\n * Immutable snapshot of an ECHO relation.\n * Branded with SnapshotKindId (not KindId).\n * Property values are frozen at the time the snapshot was created.\n * Returned by getSnapshot() and hooks.\n */\nexport type Snapshot<T extends Unknown = Unknown> = Omit<T, KindId> & BaseRelationSnapshot<Obj.Unknown, Obj.Unknown>;\n\nexport const Source: unique symbol = RelationSourceId as any;\nexport type Source = typeof Source;\n\nexport const Target: unique symbol = RelationTargetId as any;\nexport type Target = typeof Target;\n\n/**\n * Internal props type for relation instance creation.\n */\ntype RelationMakeProps<T extends Unknown> = {\n id?: ObjectId;\n [MetaId]?: ObjectMeta;\n [Source]: T[Source];\n [Target]: T[Target];\n} & Type.Properties<T>;\n\n/**\n * Props type for relation creation with a given schema.\n * Takes a schema type (created with Type.Relation) and extracts the props type.\n */\nexport type MakeProps<S extends Type.Relation.Any> = RelationMakeProps<Schema.Schema.Type<S>>;\n\n/**\n * Creates new relation.\n * @param schema - Relation schema.\n * @param props - Relation properties. Endpoints are passed as [Relation.Source] and [Relation.Target] keys.\n * @param meta - Relation metadata.\n * @returns\n */\n// NOTE: Writing the definition this way (with generic over schema) makes typescript perfer to infer the type from the first param (this schema) rather than the second param (the props).\n// TODO(dmaretskyi): Move meta into props.\nexport const make = <S extends Type.Relation.Any>(\n schema: S,\n props: NoInfer<RelationMakeProps<Schema.Schema.Type<S>>>,\n meta?: ObjectMeta,\n): Schema.Schema.Type<S> & Entity.OfKind<typeof Entity.Kind.Relation> => {\n assertArgument(getTypeAnnotation(schema)?.kind === EntityKind.Relation, 'schema', 'Expected a relation schema');\n\n if (props[MetaId] != null) {\n meta = props[MetaId] as any;\n delete props[MetaId];\n }\n\n const sourceDXN = getObjectDXN(props[Source]) ?? raise(new Error('Unresolved relation source'));\n const targetDXN = getObjectDXN(props[Target]) ?? raise(new Error('Unresolved relation target'));\n\n (props as any)[RelationSourceDXNId] = sourceDXN;\n (props as any)[RelationTargetDXNId] = targetDXN;\n\n return makeObject<Schema.Schema.Type<S>>(schema, props as any, meta);\n};\n\n/**\n * Type guard for relations.\n * Returns true for both reactive relations and relation snapshots.\n */\nexport const isRelation = (value: unknown): value is Unknown => {\n if (typeof value !== 'object' || value === null) {\n return false;\n }\n if (ATTR_RELATION_SOURCE in value || ATTR_RELATION_TARGET in value) {\n return true;\n }\n\n // Check for reactive relation (KindId) or snapshot (SnapshotKindId).\n const kind = (value as any)[Entity.KindId] ?? (value as any)[SnapshotKindId];\n return kind === EntityKind.Relation;\n};\n\n/**\n * @returns Relation source DXN.\n * Accepts both reactive relations and snapshots.\n * @throws If the object is not a relation.\n */\nexport const getSourceDXN = (value: Unknown | Snapshot): DXN => {\n assertArgument(isRelation(value), 'Expected a relation');\n assumeType<InternalObjectProps>(value);\n const dxn = (value as InternalObjectProps)[RelationSourceDXNId];\n invariant(dxn instanceof DXN);\n return dxn;\n};\n\n/**\n * @returns Relation target DXN.\n * Accepts both reactive relations and snapshots.\n * @throws If the object is not a relation.\n */\nexport const getTargetDXN = (value: Unknown | Snapshot): DXN => {\n assertArgument(isRelation(value), 'Expected a relation');\n assumeType<InternalObjectProps>(value);\n const dxn = (value as InternalObjectProps)[RelationTargetDXNId];\n invariant(dxn instanceof DXN);\n return dxn;\n};\n\n/**\n * @returns Relation source.\n * Accepts both reactive relations and snapshots.\n * @throws If the object is not a relation.\n */\nexport const getSource = <T extends Unknown | Snapshot>(relation: T): Type.Relation.Source<T> => {\n assertArgument(isRelation(relation), 'Expected a relation');\n assumeType<InternalObjectProps>(relation);\n const obj = (relation as InternalObjectProps)[RelationSourceId];\n invariant(obj !== undefined, `Invalid source: ${relation.id}`);\n return obj as Type.Relation.Source<T>;\n};\n\n/**\n * @returns Relation target.\n * Accepts both reactive relations and snapshots.\n * @throws If the object is not a relation.\n */\nexport const getTarget = <T extends Unknown | Snapshot>(relation: T): Type.Relation.Target<T> => {\n assertArgument(isRelation(relation), 'Expected a relation');\n assumeType<InternalObjectProps>(relation);\n const obj = (relation as InternalObjectProps)[RelationTargetId];\n invariant(obj !== undefined, `Invalid target: ${relation.id}`);\n return obj as Type.Relation.Target<T>;\n};\n\n//\n// Change\n//\n\n/**\n * Makes all properties mutable recursively.\n * Used to provide a mutable view of a relation within `Relation.change`.\n */\nexport type { Mutable };\n\n/**\n * Perform mutations on an echo relation within a controlled context.\n *\n * All mutations within the callback are batched and trigger a single notification\n * when the callback completes. Direct mutations outside of `Relation.change` will throw\n * an error for echo relations.\n *\n * @param relation - The echo relation to mutate. Use `Obj.change` for objects.\n * @param callback - The callback that performs mutations on the relation.\n *\n * @example\n * ```ts\n * const worksFor = Relation.make(EmployedBy, {\n * [Relation.Source]: person,\n * [Relation.Target]: company,\n * role: 'Engineer',\n * });\n *\n * // Mutate within Relation.change\n * Relation.change(worksFor, (r) => {\n * r.role = 'Senior Engineer';\n * });\n * ```\n *\n * Note: Only accepts relations. Use `Obj.change` for objects.\n */\nexport const change = <T extends Unknown>(relation: T, callback: ChangeCallback<T>): void => {\n change$(relation, callback);\n};\n\n//\n// Snapshot\n//\n\n/**\n * Returns an immutable snapshot of a relation.\n * The snapshot is branded with SnapshotKindId instead of KindId,\n * making it distinguishable from the reactive relation at the type level.\n */\nexport const getSnapshot: <T extends Unknown>(rel: T) => Snapshot<T> = getSnapshot$ as any;\n\n//\n// Subscribe\n//\n\n/**\n * Subscribe to relation updates.\n * The callback is called synchronously when the relation is modified.\n * Only accepts reactive relations (not snapshots).\n * @returns Unsubscribe function.\n */\nexport const subscribe = (rel: Unknown, callback: () => void): (() => void) => {\n return subscribe$(rel, callback);\n};\n\n//\n// Property Access\n//\n\n/**\n * Get a deeply nested property from a relation.\n * Accepts both reactive relations and snapshots.\n */\nexport const getValue = (rel: Unknown | Snapshot, path: readonly (string | number)[]): any => {\n return getValue$(rel, createJsonPath(path));\n};\n\n/**\n * Set a deeply nested property on a relation.\n * Must be called within a `Relation.change` callback.\n *\n * NOTE: TypeScript's structural typing allows readonly objects to be passed to `Mutable<T>`\n * parameters, so there is no compile-time error. Enforcement is runtime-only.\n */\nexport const setValue: (rel: Mutable<Unknown>, path: readonly (string | number)[], value: any) => void =\n setValue$ as any;\n\n//\n// Type\n//\n\n/**\n * Get the DXN of the relation.\n * Accepts both reactive relations and snapshots.\n */\nexport const getDXN = (entity: Unknown | Snapshot): DXN => getDXN$(entity);\n\n/**\n * @returns The DXN of the relation's type.\n */\nexport const getTypeDXN = getTypeDXN$;\n\n/**\n * Get the schema of the relation.\n * Returns the branded ECHO schema used to create the relation.\n */\nexport const getSchema: (rel: unknown | undefined) => Type.Entity.Any | undefined = getSchema$ as any;\n\n/**\n * @returns The typename of the relation's type.\n * Accepts both reactive relations and snapshots.\n */\nexport const getTypename = (entity: Unknown | Snapshot): string | undefined => getTypename$(entity);\n\n//\n// Database\n//\n\n/**\n * Get the database the relation belongs to.\n * Accepts both reactive relations and snapshots.\n */\nexport const getDatabase = (entity: Unknown | Snapshot): Database.Database | undefined => getDatabase$(entity);\n\n//\n// Meta\n//\n\n/**\n * Deeply read-only version of ObjectMeta.\n */\nexport type ReadonlyMeta = ApiReadonlyMeta;\n\n/**\n * Mutable meta type returned by `Relation.getMeta` inside a `Relation.change` callback.\n */\nexport type Meta = ApiMeta;\n\n/**\n * Get the metadata for a relation.\n * Returns mutable meta when passed a mutable relation (inside `Relation.change` callback).\n * Returns read-only meta when passed a regular relation or snapshot.\n */\n// TODO(wittjosiah): When passed a Snapshot, should return a snapshot of meta, not the live meta proxy.\nexport function getMeta(entity: Mutable<Unknown>): ObjectMeta;\nexport function getMeta(entity: Unknown | Snapshot): ReadonlyMeta;\nexport function getMeta(entity: Unknown | Snapshot | Mutable<Unknown>): ObjectMeta | ReadonlyMeta {\n return getMeta$(entity);\n}\n\n/**\n * @returns Foreign keys for the relation from the specified source.\n * Accepts both reactive relations and snapshots.\n */\nexport const getKeys = (entity: Unknown | Snapshot, source: string): ForeignKey[] => getKeys$(entity, source);\n\n/**\n * Delete all keys from the relation for the specified source.\n * Must be called within a `Relation.change` callback.\n *\n * NOTE: TypeScript's structural typing allows readonly objects to be passed to `Mutable<T>`\n * parameters, so there is no compile-time error. Enforcement is runtime-only.\n */\nexport const deleteKeys = (entity: Mutable<Unknown>, source: string): void => deleteKeys$(entity, source);\n\n/**\n * Add a tag to the relation.\n * Must be called within a `Relation.change` callback.\n *\n * NOTE: TypeScript's structural typing allows readonly objects to be passed to `Mutable<T>`\n * parameters, so there is no compile-time error. Enforcement is runtime-only.\n */\nexport const addTag = (entity: Mutable<Unknown>, tag: string): void => addTag$(entity, tag);\n\n/**\n * Remove a tag from the relation.\n * Must be called within a `Relation.change` callback.\n *\n * NOTE: TypeScript's structural typing allows readonly objects to be passed to `Mutable<T>`\n * parameters, so there is no compile-time error. Enforcement is runtime-only.\n */\nexport const removeTag = (entity: Mutable<Unknown>, tag: string): void => removeTag$(entity, tag);\n\n/**\n * Check if the relation is deleted.\n * Accepts both reactive relations and snapshots.\n */\nexport const isDeleted = (entity: Unknown | Snapshot): boolean => isDeleted$(entity);\n\n//\n// Annotations\n//\n\n/**\n * Get the label of the relation.\n * Accepts both reactive relations and snapshots.\n */\nexport const getLabel = (entity: Unknown | Snapshot): string | undefined => getLabel$(entity);\n\n/**\n * Set the label of the relation.\n * Must be called within a `Relation.change` callback.\n *\n * NOTE: TypeScript's structural typing allows readonly objects to be passed to `Mutable<T>`\n * parameters, so there is no compile-time error. Enforcement is runtime-only.\n */\nexport const setLabel = (entity: Mutable<Unknown>, label: string): void => setLabel$(entity, label);\n\n/**\n * Get the description of the relation.\n * Accepts both reactive relations and snapshots.\n */\nexport const getDescription = (entity: Unknown | Snapshot): string | undefined => getDescription$(entity);\n\n/**\n * Set the description of the relation.\n * Must be called within a `Relation.change` callback.\n *\n * NOTE: TypeScript's structural typing allows readonly objects to be passed to `Mutable<T>`\n * parameters, so there is no compile-time error. Enforcement is runtime-only.\n */\nexport const setDescription = (entity: Mutable<Unknown>, description: string): void =>\n setDescription$(entity, description);\n\n//\n// JSON\n//\n\n/**\n * JSON representation of a relation.\n */\nexport type JSON = APIJSON;\n\n/**\n * Converts relation to its JSON representation.\n * Accepts both reactive relations and snapshots.\n */\nexport const toJSON = (entity: Unknown | Snapshot): JSON => toJSON$(entity);\n\n//\n// Sorting\n//\n\n/**\n * Comparator function type for sorting relations.\n * Accepts both reactive relations and snapshots.\n */\nexport type Comparator = ApiComparator<Unknown | Snapshot>;\n\nexport const sortByLabel: Comparator = sortByLabel$ as Comparator;\nexport const sortByTypename: Comparator = sortByTypename$ as Comparator;\nexport const sort = (...comparators: Comparator[]): Comparator => sort$(...comparators) as Comparator;\n\n//\n// Version\n//\n\nexport { VersionTypeId, isVersion };\n\n/**\n * Represent relation version.\n */\nexport type Version = ApiVersion;\n\n/**\n * Returns the version of the relation.\n * Accepts both reactive relations and snapshots.\n */\nexport const version = (entity: Unknown | Snapshot): Version => version$(entity);\n"],
5
+ "mappings": "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",
6
+ "names": ["addTag", "change", "deleteKeys", "getDXN", "getDatabase", "getDescription", "getKeys", "getLabel", "getSchema", "getSnapshot", "getTypeDXN", "getTypename", "isDeleted", "removeTag", "setDescription", "setLabel", "setValue", "sort", "sortByLabel", "sortByTypename", "subscribe", "version", "raise", "createJsonPath", "getValue", "getValue$", "assertArgument", "invariant", "DXN", "assumeType", "Source", "RelationSourceId", "Target", "RelationTargetId", "make", "schema", "props", "meta", "assertArgument", "getTypeAnnotation", "kind", "EntityKind", "Relation", "MetaId", "sourceDXN", "getObjectDXN", "raise", "Error", "targetDXN", "RelationSourceDXNId", "RelationTargetDXNId", "makeObject", "isRelation", "value", "ATTR_RELATION_SOURCE", "ATTR_RELATION_TARGET", "KindId", "SnapshotKindId", "getSourceDXN", "assumeType", "dxn", "invariant", "DXN", "getTargetDXN", "getSource", "relation", "obj", "undefined", "id", "getTarget", "change", "callback", "change$", "getSnapshot", "getSnapshot$", "subscribe", "rel", "subscribe$", "getValue", "path", "getValue$", "createJsonPath", "setValue", "setValue$", "getDXN", "entity", "getDXN$", "getTypeDXN", "getTypeDXN$", "getSchema", "getSchema$", "getTypename", "getTypename$", "getDatabase", "getDatabase$", "getMeta", "getMeta$", "getKeys", "source", "getKeys$", "deleteKeys", "deleteKeys$", "addTag", "tag", "addTag$", "removeTag", "removeTag$", "isDeleted", "isDeleted$", "getLabel", "getLabel$", "setLabel", "label", "setLabel$", "getDescription", "getDescription$", "setDescription", "description", "setDescription$", "toJSON", "toJSON$", "sortByLabel", "sortByLabel$", "sortByTypename", "sortByTypename$", "sort", "comparators", "sort$", "version", "entity", "version$"]
7
+ }
@@ -0,0 +1,158 @@
1
+ import { createRequire } from 'node:module';const require = createRequire(import.meta.url);
2
+ import {
3
+ is,
4
+ props,
5
+ type
6
+ } from "./chunk-QYR67VBV.mjs";
7
+ import {
8
+ getTypeDXNFromSpecifier
9
+ } from "./chunk-YOLH5KS4.mjs";
10
+ import {
11
+ __export
12
+ } from "./chunk-HSLMI22Q.mjs";
13
+
14
+ // src/Query.ts
15
+ var Query_exports = {};
16
+ __export(Query_exports, {
17
+ all: () => all,
18
+ fromAst: () => fromAst,
19
+ is: () => is2,
20
+ select: () => select,
21
+ type: () => type2,
22
+ without: () => without
23
+ });
24
+ var QueryClass = class _QueryClass {
25
+ ast;
26
+ static variance = {};
27
+ constructor(ast) {
28
+ this.ast = ast;
29
+ }
30
+ "~Query" = _QueryClass.variance;
31
+ select(filter) {
32
+ if (is(filter)) {
33
+ return new _QueryClass({
34
+ type: "filter",
35
+ selection: this.ast,
36
+ filter: filter.ast
37
+ });
38
+ } else {
39
+ return new _QueryClass({
40
+ type: "filter",
41
+ selection: this.ast,
42
+ filter: props(filter).ast
43
+ });
44
+ }
45
+ }
46
+ reference(key) {
47
+ return new _QueryClass({
48
+ type: "reference-traversal",
49
+ anchor: this.ast,
50
+ property: key
51
+ });
52
+ }
53
+ referencedBy(target, key) {
54
+ const dxn = target !== void 0 ? getTypeDXNFromSpecifier(target) : null;
55
+ return new _QueryClass({
56
+ type: "incoming-references",
57
+ anchor: this.ast,
58
+ property: key ?? null,
59
+ typename: dxn?.toString() ?? null
60
+ });
61
+ }
62
+ sourceOf(relation, predicates) {
63
+ return new _QueryClass({
64
+ type: "relation",
65
+ anchor: this.ast,
66
+ direction: "outgoing",
67
+ filter: type(relation, predicates).ast
68
+ });
69
+ }
70
+ targetOf(relation, predicates) {
71
+ return new _QueryClass({
72
+ type: "relation",
73
+ anchor: this.ast,
74
+ direction: "incoming",
75
+ filter: type(relation, predicates).ast
76
+ });
77
+ }
78
+ source() {
79
+ return new _QueryClass({
80
+ type: "relation-traversal",
81
+ anchor: this.ast,
82
+ direction: "source"
83
+ });
84
+ }
85
+ target() {
86
+ return new _QueryClass({
87
+ type: "relation-traversal",
88
+ anchor: this.ast,
89
+ direction: "target"
90
+ });
91
+ }
92
+ orderBy(...order) {
93
+ return new _QueryClass({
94
+ type: "order",
95
+ query: this.ast,
96
+ order: order.map((o) => o.ast)
97
+ });
98
+ }
99
+ limit(limit) {
100
+ return new _QueryClass({
101
+ type: "limit",
102
+ query: this.ast,
103
+ limit
104
+ });
105
+ }
106
+ options(options) {
107
+ return new _QueryClass({
108
+ type: "options",
109
+ query: this.ast,
110
+ options
111
+ });
112
+ }
113
+ };
114
+ var is2 = (value) => {
115
+ return typeof value === "object" && value !== null && "~Query" in value;
116
+ };
117
+ var fromAst = (ast) => {
118
+ return new QueryClass(ast);
119
+ };
120
+ var select = (filter) => {
121
+ return new QueryClass({
122
+ type: "select",
123
+ filter: filter.ast
124
+ });
125
+ };
126
+ var type2 = (schema, predicates) => {
127
+ return new QueryClass({
128
+ type: "select",
129
+ filter: type(schema, predicates).ast
130
+ });
131
+ };
132
+ var all = (...queries) => {
133
+ if (queries.length === 0) {
134
+ throw new TypeError("Query.all combines results of multiple queries, to query all objects use Query.select(Filter.everything())");
135
+ }
136
+ return new QueryClass({
137
+ type: "union",
138
+ queries: queries.map((q) => q.ast)
139
+ });
140
+ };
141
+ var without = (source, exclude) => {
142
+ return new QueryClass({
143
+ type: "set-difference",
144
+ source: source.ast,
145
+ exclude: exclude.ast
146
+ });
147
+ };
148
+
149
+ export {
150
+ is2 as is,
151
+ fromAst,
152
+ select,
153
+ type2 as type,
154
+ all,
155
+ without,
156
+ Query_exports
157
+ };
158
+ //# sourceMappingURL=chunk-5OBN7GZW.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/Query.ts"],
4
+ "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport type * as EffectArray from 'effect/Array';\nimport type * as Schema from 'effect/Schema';\n\nimport { type QueryAST } from '@dxos/echo-protocol';\n\nimport * as Filter from './Filter';\nimport { getTypeDXNFromSpecifier } from './internal';\nimport type * as Order from './Order';\nimport type * as Ref from './Ref';\nimport type * as Type$ from './Type';\n\n// TODO(dmaretskyi): Split up into interfaces for objects and relations so they can have separate verbs.\n// TODO(dmaretskyi): Undirected relation traversals.\n// TODO(wittjosiah): Make Filter & Query pipeable.\n\n/**\n * All property paths inside T that are references.\n */\n// TODO(dmaretskyi): Filter only properties that are references (or optional references, or unions that include references).\ntype RefPropKey<T> = keyof T & string;\n\n// TODO(burdon): Narrow T to Entity.Unknown?\nexport interface Query<T> {\n // TODO(dmaretskyi): See new effect-schema approach to variance.\n '~Query': { value: T };\n\n ast: QueryAST.Query;\n\n /**\n * Filter the current selection based on a filter.\n * @param filter - Filter to select the objects.\n * @returns Query for the selected objects.\n */\n select(filter: Filter.Filter<T>): Query<T>;\n select(props: Filter.Props<T>): Query<T>;\n\n /**\n * Traverse an outgoing reference.\n * @param key - Property path inside T that is a reference or optional reference.\n * @returns Query for the target of the reference.\n */\n reference<K extends RefPropKey<T>>(\n key: K,\n ): Query<\n T[K] extends Ref.Unknown\n ? Ref.Target<T[K]>\n : T[K] extends Ref.Unknown | undefined\n ? Ref.Target<Exclude<T[K], undefined>>\n : never\n >;\n\n /**\n * Find objects referencing this object.\n * @param target - Schema of the referencing object. If not provided, matches any type.\n * @param key - Property path inside the referencing object that is a reference. If not provided, matches any property.\n * @returns Query for the referencing objects.\n */\n // TODO(dmaretskyi): any way to enforce `Ref.Target<Schema.Schema.Type<S>[key]> == T`?\n // TODO(dmaretskyi): Ability to go through arrays of references.\n referencedBy<S extends Schema.Schema.All>(\n target: S | string,\n key: RefPropKey<Schema.Schema.Type<S>>,\n ): Query<Schema.Schema.Type<S>>;\n referencedBy<S extends Schema.Schema.All>(target: S | string): Query<Schema.Schema.Type<S>>;\n referencedBy(): Query<any>;\n\n /**\n * Find relations where this object is the source.\n * @returns Query for the relation objects.\n * @param relation - Schema of the relation.\n * @param predicates - Predicates to filter the relation objects.\n */\n sourceOf<S extends Schema.Schema.All>(\n relation: S | string,\n predicates?: Filter.Props<Schema.Schema.Type<S>>,\n ): Query<Schema.Schema.Type<S>>;\n\n /**\n * Find relations where this object is the target.\n * @returns Query for the relation objects.\n * @param relation - Schema of the relation.\n * @param predicates - Predicates to filter the relation objects.\n */\n targetOf<S extends Schema.Schema.All>(\n relation: S | string,\n predicates?: Filter.Props<Schema.Schema.Type<S>>,\n ): Query<Schema.Schema.Type<S>>;\n\n /**\n * For a query for relations, get the source objects.\n * @returns Query for the source objects.\n */\n source(): Query<Type$.Relation.Source<T>>;\n\n /**\n * For a query for relations, get the target objects.\n * @returns Query for the target objects.\n */\n target(): Query<Type$.Relation.Target<T>>;\n\n /**\n * Order the query results.\n * Orders are specified in priority order. The first order will be applied first, etc.\n * @param order - Order to sort the results.\n * @returns Query for the ordered results.\n */\n orderBy(...order: EffectArray.NonEmptyArray<Order.Order<T>>): Query<T>;\n\n /**\n * Limit the number of results.\n * @param limit - Maximum number of results to return.\n * @returns Query for the limited results.\n */\n limit(limit: number): Query<T>;\n\n /**\n * Add options to a query.\n */\n options(options: QueryAST.QueryOptions): Query<T>;\n}\n\nexport type Any = Query<any>;\n\nexport type Type<Q extends Any> = Q extends Query<infer T> ? T : never;\n\nclass QueryClass implements Any {\n private static variance: Any['~Query'] = {} as Any['~Query'];\n\n constructor(public readonly ast: QueryAST.Query) {}\n\n '~Query' = QueryClass.variance;\n\n select(filter: Filter.Any | Filter.Props<any>): Any {\n if (Filter.is(filter)) {\n return new QueryClass({\n type: 'filter',\n selection: this.ast,\n filter: filter.ast,\n });\n } else {\n return new QueryClass({\n type: 'filter',\n selection: this.ast,\n filter: Filter.props(filter).ast,\n });\n }\n }\n\n reference(key: string): Any {\n return new QueryClass({\n type: 'reference-traversal',\n anchor: this.ast,\n property: key,\n });\n }\n\n referencedBy(target?: Schema.Schema.All | string, key?: string): Any {\n const dxn = target !== undefined ? getTypeDXNFromSpecifier(target) : null;\n return new QueryClass({\n type: 'incoming-references',\n anchor: this.ast,\n property: key ?? null,\n typename: dxn?.toString() ?? null,\n });\n }\n\n sourceOf(relation: Schema.Schema.All | string, predicates?: Filter.Props<unknown> | undefined): Any {\n return new QueryClass({\n type: 'relation',\n anchor: this.ast,\n direction: 'outgoing',\n filter: Filter.type(relation, predicates).ast,\n });\n }\n\n targetOf(relation: Schema.Schema.All | string, predicates?: Filter.Props<unknown> | undefined): Any {\n return new QueryClass({\n type: 'relation',\n anchor: this.ast,\n direction: 'incoming',\n filter: Filter.type(relation, predicates).ast,\n });\n }\n\n source(): Any {\n return new QueryClass({\n type: 'relation-traversal',\n anchor: this.ast,\n direction: 'source',\n });\n }\n\n target(): Any {\n return new QueryClass({\n type: 'relation-traversal',\n anchor: this.ast,\n direction: 'target',\n });\n }\n\n orderBy(...order: Order.Order<any>[]): Any {\n return new QueryClass({\n type: 'order',\n query: this.ast,\n order: order.map((o) => o.ast),\n });\n }\n\n limit(limit: number): Any {\n return new QueryClass({\n type: 'limit',\n query: this.ast,\n limit,\n });\n }\n\n options(options: QueryAST.QueryOptions): Any {\n return new QueryClass({\n type: 'options',\n query: this.ast,\n options,\n });\n }\n}\n\nexport const is = (value: unknown): value is Any => {\n return typeof value === 'object' && value !== null && '~Query' in value;\n};\n\n/** Construct a query from an ast. */\nexport const fromAst = (ast: QueryAST.Query): Any => {\n return new QueryClass(ast);\n};\n\n/**\n * Select objects based on a filter.\n * @param filter - Filter to select the objects.\n * @returns Query for the selected objects.\n */\nexport const select = <F extends Filter.Any>(filter: F): Query<Filter.Type<F>> => {\n return new QueryClass({\n type: 'select',\n filter: filter.ast,\n });\n};\n\n/**\n * Query for objects of a given schema.\n * @param schema - Schema of the objects.\n * @param predicates - Predicates to filter the objects.\n * @returns Query for the objects.\n *\n * Shorthand for: `Query.select(Filter.type(schema, predicates))`.\n */\nexport const type = (schema: Schema.Schema.All | string, predicates?: Filter.Props<unknown>): Any => {\n return new QueryClass({\n type: 'select',\n filter: Filter.type(schema, predicates).ast,\n });\n};\n\n/**\n * Combine results of multiple queries.\n * @param queries - Queries to combine.\n * @returns Query for the combined results.\n */\n// TODO(dmaretskyi): Rename to `combine` or `union`.\nexport const all = (...queries: Any[]): Any => {\n if (queries.length === 0) {\n throw new TypeError(\n 'Query.all combines results of multiple queries, to query all objects use Query.select(Filter.everything())',\n );\n }\n return new QueryClass({\n type: 'union',\n queries: queries.map((q) => q.ast),\n });\n};\n\n/**\n * Subtract one query from another.\n * @param source - Query to subtract from.\n * @param exclude - Query to subtract.\n * @returns Query for the results of the source query minus the results of the exclude query.\n */\nexport const without = <T>(source: Query<T>, exclude: Query<T>): Query<T> => {\n return new QueryClass({\n type: 'set-difference',\n source: source.ast,\n exclude: exclude.ast,\n });\n};\n"],
5
+ "mappings": "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",
6
+ "names": ["is", "type", "QueryClass", "variance", "ast", "select", "filter", "is", "type", "selection", "props", "reference", "key", "anchor", "property", "referencedBy", "target", "dxn", "undefined", "getTypeDXNFromSpecifier", "typename", "toString", "sourceOf", "relation", "predicates", "direction", "targetOf", "source", "orderBy", "order", "query", "map", "o", "limit", "options", "value", "fromAst", "schema", "all", "queries", "length", "TypeError", "q", "without", "exclude"]
7
+ }
@@ -0,0 +1,22 @@
1
+ import { createRequire } from 'node:module';const require = createRequire(import.meta.url);
2
+ import {
3
+ __export
4
+ } from "./chunk-HSLMI22Q.mjs";
5
+
6
+ // src/Key.ts
7
+ var Key_exports = {};
8
+ __export(Key_exports, {
9
+ ForeignKey: () => ForeignKey,
10
+ ObjectId: () => ObjectId,
11
+ SpaceId: () => SpaceId
12
+ });
13
+ import { ForeignKey } from "@dxos/echo-protocol";
14
+ import { SpaceId, ObjectId } from "@dxos/keys";
15
+
16
+ export {
17
+ Key_exports,
18
+ ForeignKey,
19
+ SpaceId,
20
+ ObjectId
21
+ };
22
+ //# sourceMappingURL=chunk-AJEMYSIR.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/Key.ts"],
4
+ "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\n// TODO(wittjosiah): Should this be a subset of Type?\n\nexport { ForeignKey } from '@dxos/echo-protocol';\nexport { SpaceId, ObjectId } from '@dxos/keys';\n"],
5
+ "mappings": ";;;;;;AAAA;;;;;;AAMA,SAASA,kBAAkB;AAC3B,SAASC,SAASC,gBAAgB;",
6
+ "names": ["ForeignKey", "SpaceId", "ObjectId"]
7
+ }
@@ -0,0 +1,98 @@
1
+ import { createRequire } from 'node:module';const require = createRequire(import.meta.url);
2
+ import {
3
+ addTag,
4
+ change,
5
+ getDXN,
6
+ getDatabase,
7
+ getDescription,
8
+ getKeys,
9
+ getLabel,
10
+ getMetaChecked,
11
+ isDeleted,
12
+ objectToJSON,
13
+ removeTag,
14
+ subscribe
15
+ } from "./chunk-LT3H4JOX.mjs";
16
+ import {
17
+ getEntityKind,
18
+ getTypeDXN,
19
+ getTypename
20
+ } from "./chunk-YOLH5KS4.mjs";
21
+ import {
22
+ EntityKind,
23
+ EntityKindSchema,
24
+ KindId,
25
+ SnapshotKindId
26
+ } from "./chunk-XHJRMQZD.mjs";
27
+ import {
28
+ __export
29
+ } from "./chunk-HSLMI22Q.mjs";
30
+
31
+ // src/Entity.ts
32
+ var Entity_exports = {};
33
+ __export(Entity_exports, {
34
+ Kind: () => Kind,
35
+ KindId: () => KindId,
36
+ KindSchema: () => KindSchema,
37
+ SnapshotKindId: () => SnapshotKindId,
38
+ addTag: () => addTag2,
39
+ change: () => change2,
40
+ getDXN: () => getDXN2,
41
+ getDatabase: () => getDatabase2,
42
+ getDescription: () => getDescription2,
43
+ getKeys: () => getKeys2,
44
+ getKind: () => getKind,
45
+ getLabel: () => getLabel2,
46
+ getMeta: () => getMeta,
47
+ getTypeDXN: () => getTypeDXN2,
48
+ getTypename: () => getTypename2,
49
+ isDeleted: () => isDeleted2,
50
+ removeTag: () => removeTag2,
51
+ subscribe: () => subscribe2,
52
+ toJSON: () => toJSON
53
+ });
54
+ var Kind = EntityKind;
55
+ var KindSchema = EntityKindSchema;
56
+ var getKind = getEntityKind;
57
+ var getDXN2 = (entity) => getDXN(entity);
58
+ var getTypeDXN2 = getTypeDXN;
59
+ var getTypename2 = (entity) => getTypename(entity);
60
+ var getDatabase2 = (entity) => getDatabase(entity);
61
+ function getMeta(entity) {
62
+ return getMetaChecked(entity);
63
+ }
64
+ var getKeys2 = (entity, source) => getKeys(entity, source);
65
+ var isDeleted2 = (entity) => isDeleted(entity);
66
+ var getLabel2 = (entity) => getLabel(entity);
67
+ var getDescription2 = (entity) => getDescription(entity);
68
+ var toJSON = (entity) => objectToJSON(entity);
69
+ var subscribe2 = (entity, callback) => {
70
+ return subscribe(entity, callback);
71
+ };
72
+ var change2 = (entity, callback) => {
73
+ change(entity, callback);
74
+ };
75
+ var addTag2 = (entity, tag) => addTag(entity, tag);
76
+ var removeTag2 = (entity, tag) => removeTag(entity, tag);
77
+
78
+ export {
79
+ Kind,
80
+ KindSchema,
81
+ getKind,
82
+ getDXN2 as getDXN,
83
+ getTypeDXN2 as getTypeDXN,
84
+ getTypename2 as getTypename,
85
+ getDatabase2 as getDatabase,
86
+ getMeta,
87
+ getKeys2 as getKeys,
88
+ isDeleted2 as isDeleted,
89
+ getLabel2 as getLabel,
90
+ getDescription2 as getDescription,
91
+ toJSON,
92
+ subscribe2 as subscribe,
93
+ change2 as change,
94
+ addTag2 as addTag,
95
+ removeTag2 as removeTag,
96
+ Entity_exports
97
+ };
98
+ //# sourceMappingURL=chunk-ANLVLWME.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/Entity.ts"],
4
+ "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport type { ForeignKey } from '@dxos/echo-protocol';\nimport type { DXN, ObjectId } from '@dxos/keys';\n\nimport {\n type ChangeCallback,\n EntityKind,\n EntityKindSchema,\n KindId,\n type Mutable,\n type ObjectJSON,\n type ObjectMeta,\n type ReadonlyMeta,\n SnapshotKindId,\n addTag as addTag$,\n change as change$,\n getDXN as getDXN$,\n getDatabase as getDatabase$,\n getDescription as getDescription$,\n getEntityKind,\n getKeys as getKeys$,\n getLabel as getLabel$,\n getMetaChecked as getMeta$,\n getTypeDXN as getTypeDXN$,\n getTypename as getTypename$,\n isDeleted as isDeleted$,\n removeTag as removeTag$,\n subscribe as subscribe$,\n objectToJSON as toJSON$,\n} from './internal';\n\n// Re-export KindId and SnapshotKindId from internal.\nexport { KindId, SnapshotKindId };\n\n// NOTE: Relation does not extend Obj so that, for example, we can prevent Relations from being used as source and target objects.\n// However, we generally refer to Obj and Relation instances as \"objects\",\n// and many API methods accept both Obj.Unknown and Relation.Unknown (i.e., Entity.Unknown) instances.\n\nexport const Kind = EntityKind;\nexport type Kind = EntityKind;\nexport const KindSchema = EntityKindSchema;\n\n/**\n * Assigns a kind to an Object or Relation instance.\n * NOTE: Needed to make `isRelation` and `isObject` checks work.\n */\nexport interface OfKind<K extends Kind> {\n readonly [KindId]: K;\n readonly id: ObjectId;\n}\n\n/**\n * Assigns a snapshot kind to an Object or Relation snapshot.\n */\nexport interface SnapshotOfKind<K extends Kind> {\n readonly [SnapshotKindId]: K;\n readonly id: ObjectId;\n}\n\n/**\n * Obj or Relation with a specific set of properties.\n */\nexport type Entity<Props> = OfKind<Kind> & Props;\n\n/**\n * Unknown Obj or Relation (reactive).\n */\nexport interface Unknown extends OfKind<Kind> {}\n\n/**\n * Snapshot of an Obj or Relation.\n * Branded with SnapshotKindId instead of KindId.\n */\nexport interface Snapshot extends SnapshotOfKind<Kind> {}\n\n/**\n * Object with arbitrary properties.\n *\n * NOTE: Due to how typescript works, this type is not assignable to a specific schema type.\n * In that case, use `Obj.instanceOf` to check if an object is of a specific type.\n *\n * This type is very permissive and allows accessing any property on the object.\n * We should move to Obj.Unknown that is not permissive and requires explicit instanceof checks..\n */\nexport interface Any extends OfKind<Kind> {\n [key: string]: unknown;\n}\n\nexport const getKind = getEntityKind;\n\n//\n// Entity-level functions that work on any entity (object or relation).\n// Use these when you don't know or care about the specific entity kind.\n// For kind-specific functions, use Obj.* or Relation.*.\n//\n\n/**\n * JSON representation of an entity.\n */\nexport type JSON = ObjectJSON;\n\n/**\n * Get the DXN of an entity (object or relation).\n */\nexport const getDXN = (entity: Unknown | Snapshot): DXN => getDXN$(entity);\n\n/**\n * Get the DXN of an entity's type.\n */\nexport const getTypeDXN = getTypeDXN$;\n\n/**\n * Get the typename of an entity's type.\n */\nexport const getTypename = (entity: Unknown | Snapshot): string | undefined => getTypename$(entity);\n\n/**\n * Get the database an entity belongs to.\n */\nexport const getDatabase = (entity: Unknown | Snapshot): any | undefined => getDatabase$(entity);\n\n/**\n * Get the metadata for an entity.\n * Returns mutable meta when passed a mutable entity (inside change callback).\n * Returns read-only meta when passed a regular entity or snapshot.\n */\n// TODO(wittjosiah): When passed a Snapshot, should return a snapshot of meta, not the live meta proxy.\nexport function getMeta(entity: Mutable<Unknown>): ObjectMeta;\nexport function getMeta(entity: Unknown | Snapshot): ReadonlyMeta;\nexport function getMeta(entity: Unknown | Snapshot | Mutable<Unknown>): ObjectMeta | ReadonlyMeta {\n return getMeta$(entity);\n}\n\n/**\n * Get foreign keys for an entity from the specified source.\n */\nexport const getKeys = (entity: Unknown | Snapshot, source: string): ForeignKey[] => getKeys$(entity, source);\n\n/**\n * Check if an entity is deleted.\n */\nexport const isDeleted = (entity: Unknown | Snapshot): boolean => isDeleted$(entity);\n\n/**\n * Get the label of an entity.\n */\nexport const getLabel = (entity: Unknown | Snapshot): string | undefined => getLabel$(entity);\n\n/**\n * Get the description of an entity.\n */\nexport const getDescription = (entity: Unknown | Snapshot): string | undefined => getDescription$(entity);\n\n/**\n * Convert an entity to its JSON representation.\n */\nexport const toJSON = (entity: Unknown | Snapshot): JSON => toJSON$(entity);\n\n/**\n * Subscribe to changes on an entity (object or relation).\n * @returns Unsubscribe function.\n */\nexport const subscribe = (entity: Unknown, callback: () => void): (() => void) => {\n return subscribe$(entity, callback);\n};\n\n//\n// Change\n//\n\n/**\n * Used to provide a mutable view of an entity within `Entity.change`.\n */\nexport type { Mutable };\n\n/**\n * Perform mutations on an entity (object or relation) within a change context.\n *\n * Entities are read-only by default. Mutations are batched and notifications fire\n * when the callback completes. Direct mutations outside of `Entity.change` will throw\n * at runtime.\n *\n * @param entity - The echo entity (object or relation) to mutate.\n * @param callback - Receives a mutable view of the entity. All mutations must occur here.\n *\n * @example\n * ```typescript\n * // Mutate within Entity.change\n * Entity.change(entity, (e) => {\n * e.name = 'Updated';\n * e.count = 42;\n * });\n *\n * // Direct mutation throws\n * entity.name = 'Bob'; // Error: Cannot modify outside Entity.change()\n * ```\n *\n * Note: For type-specific operations, prefer `Obj.change` or `Relation.change`.\n */\nexport const change = <T extends Unknown>(entity: T, callback: ChangeCallback<T>): void => {\n change$(entity, callback);\n};\n\n/**\n * Add a tag to an entity.\n * Must be called within an `Entity.change`, `Obj.change`, or `Relation.change` callback.\n */\nexport const addTag = (entity: Mutable<Unknown>, tag: string): void => addTag$(entity, tag);\n\n/**\n * Remove a tag from an entity.\n * Must be called within an `Entity.change`, `Obj.change`, or `Relation.change` callback.\n */\nexport const removeTag = (entity: Mutable<Unknown>, tag: string): void => removeTag$(entity, tag);\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;;;;;;gBAAAA;EAAA,cAAAC;EAAA,cAAAC;EAAA,mBAAAC;EAAA,sBAAAC;EAAA,eAAAC;EAAA;kBAAAC;EAAA;oBAAAC;EAAA,mBAAAC;EAAA,iBAAAC;EAAA,iBAAAC;EAAA,iBAAAC;EAAA;;AAyCO,IAAMC,OAAOC;AAEb,IAAMC,aAAaC;AAgDnB,IAAMC,UAAUC;AAgBhB,IAAMC,UAAS,CAACC,WAAoCC,OAAQD,MAAAA;AAK5D,IAAME,cAAaC;AAKnB,IAAMC,eAAc,CAACJ,WAAmDK,YAAaL,MAAAA;AAKrF,IAAMM,eAAc,CAACN,WAAgDO,YAAaP,MAAAA;AAUlF,SAASQ,QAAQR,QAA6C;AACnE,SAAOS,eAAST,MAAAA;AAClB;AAKO,IAAMU,WAAU,CAACV,QAA4BW,WAAiCC,QAASZ,QAAQW,MAAAA;AAK/F,IAAME,aAAY,CAACb,WAAwCc,UAAWd,MAAAA;AAKtE,IAAMe,YAAW,CAACf,WAAmDgB,SAAUhB,MAAAA;AAK/E,IAAMiB,kBAAiB,CAACjB,WAAmDkB,eAAgBlB,MAAAA;AAK3F,IAAMmB,SAAS,CAACnB,WAAqCoB,aAAQpB,MAAAA;AAM7D,IAAMqB,aAAY,CAACrB,QAAiBsB,aAAAA;AACzC,SAAOC,UAAWvB,QAAQsB,QAAAA;AAC5B;AAmCO,IAAME,UAAS,CAAoBxB,QAAWsB,aAAAA;AACnDG,SAAQzB,QAAQsB,QAAAA;AAClB;AAMO,IAAMI,UAAS,CAAC1B,QAA0B2B,QAAsBC,OAAQ5B,QAAQ2B,GAAAA;AAMhF,IAAME,aAAY,CAAC7B,QAA0B2B,QAAsBG,UAAW9B,QAAQ2B,GAAAA;",
6
+ "names": ["addTag", "change", "getDXN", "getDatabase", "getDescription", "getKeys", "getLabel", "getTypeDXN", "getTypename", "isDeleted", "removeTag", "subscribe", "Kind", "EntityKind", "KindSchema", "EntityKindSchema", "getKind", "getEntityKind", "getDXN", "entity", "getDXN$", "getTypeDXN", "getTypeDXN$", "getTypename", "getTypename$", "getDatabase", "getDatabase$", "getMeta", "getMeta$", "getKeys", "source", "getKeys$", "isDeleted", "isDeleted$", "getLabel", "getLabel$", "getDescription", "getDescription$", "toJSON", "toJSON$", "subscribe", "callback", "subscribe$", "change", "change$", "addTag", "tag", "addTag$", "removeTag", "removeTag$"]
7
+ }