@dxos/echo 0.8.4-main.dedc0f3 → 0.8.4-main.e00bdcdb52

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 (536) hide show
  1. package/README.md +3 -4
  2. package/dist/lib/neutral/Annotation.mjs +37 -0
  3. package/dist/lib/neutral/Database.mjs +49 -0
  4. package/dist/lib/neutral/Entity.mjs +61 -0
  5. package/dist/lib/neutral/Entity.mjs.map +7 -0
  6. package/dist/lib/neutral/Err.mjs +12 -0
  7. package/dist/lib/neutral/Err.mjs.map +7 -0
  8. package/dist/lib/neutral/Extension.mjs +18 -0
  9. package/dist/lib/neutral/Extension.mjs.map +7 -0
  10. package/dist/lib/neutral/Feed.mjs +50 -0
  11. package/dist/lib/neutral/Feed.mjs.map +7 -0
  12. package/dist/lib/neutral/Filter.mjs +72 -0
  13. package/dist/lib/neutral/Filter.mjs.map +7 -0
  14. package/dist/lib/neutral/Format.mjs +66 -0
  15. package/dist/lib/neutral/Format.mjs.map +7 -0
  16. package/dist/lib/neutral/JsonSchema.mjs +19 -0
  17. package/dist/lib/neutral/JsonSchema.mjs.map +7 -0
  18. package/dist/lib/neutral/Key.mjs +12 -0
  19. package/dist/lib/neutral/Key.mjs.map +7 -0
  20. package/dist/lib/neutral/Migration.mjs +17 -0
  21. package/dist/lib/neutral/Migration.mjs.map +7 -0
  22. package/dist/lib/neutral/Obj.mjs +113 -0
  23. package/dist/lib/neutral/Obj.mjs.map +7 -0
  24. package/dist/lib/neutral/Order.mjs +12 -0
  25. package/dist/lib/neutral/Order.mjs.map +7 -0
  26. package/dist/lib/neutral/Query.mjs +38 -0
  27. package/dist/lib/neutral/Query.mjs.map +7 -0
  28. package/dist/lib/neutral/QueryResult.mjs +2 -0
  29. package/dist/lib/neutral/QueryResult.mjs.map +7 -0
  30. package/dist/lib/neutral/Ref.mjs +24 -0
  31. package/dist/lib/neutral/Ref.mjs.map +7 -0
  32. package/dist/lib/neutral/Relation.mjs +94 -0
  33. package/dist/lib/neutral/Relation.mjs.map +7 -0
  34. package/dist/lib/neutral/SchemaRegistry.mjs +2 -0
  35. package/dist/lib/neutral/SchemaRegistry.mjs.map +7 -0
  36. package/dist/lib/neutral/Tag.mjs +29 -0
  37. package/dist/lib/neutral/Tag.mjs.map +7 -0
  38. package/dist/lib/neutral/Type.mjs +37 -0
  39. package/dist/lib/neutral/Type.mjs.map +7 -0
  40. package/dist/lib/neutral/chunk-2T22UGGN.mjs +206 -0
  41. package/dist/lib/neutral/chunk-2T22UGGN.mjs.map +7 -0
  42. package/dist/lib/neutral/chunk-44HT3MEC.mjs +73 -0
  43. package/dist/lib/neutral/chunk-44HT3MEC.mjs.map +7 -0
  44. package/dist/lib/neutral/chunk-6VC3FI5E.mjs +125 -0
  45. package/dist/lib/neutral/chunk-6VC3FI5E.mjs.map +7 -0
  46. package/dist/lib/neutral/chunk-7JFW72MX.mjs +132 -0
  47. package/dist/lib/neutral/chunk-7JFW72MX.mjs.map +7 -0
  48. package/dist/lib/neutral/chunk-7RVZT53K.mjs +21 -0
  49. package/dist/lib/neutral/chunk-7RVZT53K.mjs.map +7 -0
  50. package/dist/lib/neutral/chunk-BICZKPQG.mjs +7 -0
  51. package/dist/lib/neutral/chunk-BICZKPQG.mjs.map +7 -0
  52. package/dist/lib/neutral/chunk-CIWZ5MHQ.mjs +36 -0
  53. package/dist/lib/neutral/chunk-CIWZ5MHQ.mjs.map +7 -0
  54. package/dist/lib/neutral/chunk-DUNXPKAC.mjs +56 -0
  55. package/dist/lib/neutral/chunk-DUNXPKAC.mjs.map +7 -0
  56. package/dist/lib/neutral/chunk-FAW7PJRO.mjs +34 -0
  57. package/dist/lib/neutral/chunk-FAW7PJRO.mjs.map +7 -0
  58. package/dist/lib/neutral/chunk-FAYW32CW.mjs +27 -0
  59. package/dist/lib/neutral/chunk-FAYW32CW.mjs.map +7 -0
  60. package/dist/lib/neutral/chunk-GWFFC34K.mjs +50 -0
  61. package/dist/lib/neutral/chunk-GWFFC34K.mjs.map +7 -0
  62. package/dist/lib/neutral/chunk-I2MFJ76N.mjs +354 -0
  63. package/dist/lib/neutral/chunk-I2MFJ76N.mjs.map +7 -0
  64. package/dist/lib/neutral/chunk-J5LGTIGS.mjs +10 -0
  65. package/dist/lib/neutral/chunk-J5LGTIGS.mjs.map +7 -0
  66. package/dist/lib/neutral/chunk-JALF2CVV.mjs +345 -0
  67. package/dist/lib/neutral/chunk-JALF2CVV.mjs.map +7 -0
  68. package/dist/lib/neutral/chunk-KQUQZ3CB.mjs +128 -0
  69. package/dist/lib/neutral/chunk-KQUQZ3CB.mjs.map +7 -0
  70. package/dist/lib/neutral/chunk-LOTZLYHB.mjs +420 -0
  71. package/dist/lib/neutral/chunk-LOTZLYHB.mjs.map +7 -0
  72. package/dist/lib/neutral/chunk-N4B7FHQT.mjs +67 -0
  73. package/dist/lib/neutral/chunk-N4B7FHQT.mjs.map +7 -0
  74. package/dist/lib/neutral/chunk-NKXEKBP5.mjs +81 -0
  75. package/dist/lib/neutral/chunk-NKXEKBP5.mjs.map +7 -0
  76. package/dist/lib/neutral/chunk-NSMLBSFS.mjs +270 -0
  77. package/dist/lib/neutral/chunk-NSMLBSFS.mjs.map +7 -0
  78. package/dist/lib/neutral/chunk-QBIGOSRF.mjs +45 -0
  79. package/dist/lib/neutral/chunk-QBIGOSRF.mjs.map +7 -0
  80. package/dist/lib/neutral/chunk-QBLYZ4IV.mjs +734 -0
  81. package/dist/lib/neutral/chunk-QBLYZ4IV.mjs.map +7 -0
  82. package/dist/lib/neutral/chunk-QEVM3JUP.mjs +318 -0
  83. package/dist/lib/neutral/chunk-QEVM3JUP.mjs.map +7 -0
  84. package/dist/lib/neutral/chunk-REP7WWAQ.mjs +346 -0
  85. package/dist/lib/neutral/chunk-REP7WWAQ.mjs.map +7 -0
  86. package/dist/lib/neutral/chunk-TRPZU2HV.mjs +402 -0
  87. package/dist/lib/neutral/chunk-TRPZU2HV.mjs.map +7 -0
  88. package/dist/lib/neutral/chunk-TTCSATUD.mjs +42 -0
  89. package/dist/lib/neutral/chunk-TTCSATUD.mjs.map +7 -0
  90. package/dist/lib/neutral/chunk-TW76K7H5.mjs +45 -0
  91. package/dist/lib/neutral/chunk-TW76K7H5.mjs.map +7 -0
  92. package/dist/lib/neutral/chunk-UYJYDSD7.mjs +2436 -0
  93. package/dist/lib/neutral/chunk-UYJYDSD7.mjs.map +7 -0
  94. package/dist/lib/neutral/chunk-V72DY6LU.mjs +7 -0
  95. package/dist/lib/neutral/chunk-V72DY6LU.mjs.map +7 -0
  96. package/dist/lib/neutral/chunk-ZISMEVKD.mjs +51 -0
  97. package/dist/lib/neutral/chunk-ZISMEVKD.mjs.map +7 -0
  98. package/dist/lib/neutral/index.mjs +107 -0
  99. package/dist/lib/neutral/index.mjs.map +7 -0
  100. package/dist/lib/neutral/internal/index.mjs +474 -0
  101. package/dist/lib/neutral/internal/index.mjs.map +7 -0
  102. package/dist/lib/neutral/meta.json +1 -0
  103. package/dist/lib/neutral/testing/index.mjs +375 -0
  104. package/dist/lib/neutral/testing/index.mjs.map +7 -0
  105. package/dist/types/src/Annotation.d.ts +24 -0
  106. package/dist/types/src/Annotation.d.ts.map +1 -0
  107. package/dist/types/src/Collection.d.ts +16 -0
  108. package/dist/types/src/Collection.d.ts.map +1 -0
  109. package/dist/types/src/Database.d.ts +201 -0
  110. package/dist/types/src/Database.d.ts.map +1 -0
  111. package/dist/types/src/Dataset.d.ts +19 -0
  112. package/dist/types/src/Dataset.d.ts.map +1 -0
  113. package/dist/types/src/Entity.d.ts +174 -0
  114. package/dist/types/src/Entity.d.ts.map +1 -0
  115. package/dist/types/src/Entity.test.d.ts +2 -0
  116. package/dist/types/src/Entity.test.d.ts.map +1 -0
  117. package/dist/types/src/Err.d.ts +107 -0
  118. package/dist/types/src/Err.d.ts.map +1 -0
  119. package/dist/types/src/Extension.d.ts +80 -0
  120. package/dist/types/src/Extension.d.ts.map +1 -0
  121. package/dist/types/src/Extension.test.d.ts +2 -0
  122. package/dist/types/src/Extension.test.d.ts.map +1 -0
  123. package/dist/types/src/Feed.d.ts +182 -0
  124. package/dist/types/src/Feed.d.ts.map +1 -0
  125. package/dist/types/src/Filter.d.ts +149 -0
  126. package/dist/types/src/Filter.d.ts.map +1 -0
  127. package/dist/types/src/Filter.test.d.ts +2 -0
  128. package/dist/types/src/Filter.test.d.ts.map +1 -0
  129. package/dist/types/src/Format.d.ts +4 -0
  130. package/dist/types/src/Format.d.ts.map +1 -0
  131. package/dist/types/src/Hypergraph.d.ts +65 -0
  132. package/dist/types/src/Hypergraph.d.ts.map +1 -0
  133. package/dist/types/src/Json.d.ts +33 -0
  134. package/dist/types/src/Json.d.ts.map +1 -0
  135. package/dist/types/src/Json.test.d.ts +2 -0
  136. package/dist/types/src/Json.test.d.ts.map +1 -0
  137. package/dist/types/src/JsonSchema.d.ts +16 -0
  138. package/dist/types/src/JsonSchema.d.ts.map +1 -0
  139. package/dist/types/src/Key.d.ts +1 -0
  140. package/dist/types/src/Key.d.ts.map +1 -1
  141. package/dist/types/src/Migration.d.ts +57 -0
  142. package/dist/types/src/Migration.d.ts.map +1 -0
  143. package/dist/types/src/Obj.d.ts +440 -91
  144. package/dist/types/src/Obj.d.ts.map +1 -1
  145. package/dist/types/src/Obj.test.d.ts +2 -0
  146. package/dist/types/src/Obj.test.d.ts.map +1 -0
  147. package/dist/types/src/Order.d.ts +16 -0
  148. package/dist/types/src/Order.d.ts.map +1 -0
  149. package/dist/types/src/Query.d.ts +213 -0
  150. package/dist/types/src/Query.d.ts.map +1 -0
  151. package/dist/types/src/Query.test.d.ts +2 -0
  152. package/dist/types/src/Query.test.d.ts.map +1 -0
  153. package/dist/types/src/QueryResult.d.ts +80 -0
  154. package/dist/types/src/QueryResult.d.ts.map +1 -0
  155. package/dist/types/src/Ref.d.ts +61 -11
  156. package/dist/types/src/Ref.d.ts.map +1 -1
  157. package/dist/types/src/Relation.d.ts +288 -21
  158. package/dist/types/src/Relation.d.ts.map +1 -1
  159. package/dist/types/src/Relation.test.d.ts +2 -0
  160. package/dist/types/src/Relation.test.d.ts.map +1 -0
  161. package/dist/types/src/SchemaRegistry.d.ts +84 -0
  162. package/dist/types/src/SchemaRegistry.d.ts.map +1 -0
  163. package/dist/types/src/Tag.d.ts +18 -0
  164. package/dist/types/src/Tag.d.ts.map +1 -0
  165. package/dist/types/src/Type.d.ts +123 -100
  166. package/dist/types/src/Type.d.ts.map +1 -1
  167. package/dist/types/src/Type.test.d.ts +2 -0
  168. package/dist/types/src/Type.test.d.ts.map +1 -0
  169. package/dist/types/src/View.d.ts +68 -0
  170. package/dist/types/src/View.d.ts.map +1 -0
  171. package/dist/types/src/hierarchy.test.d.ts +2 -0
  172. package/dist/types/src/hierarchy.test.d.ts.map +1 -0
  173. package/dist/types/src/index.d.ts +22 -4
  174. package/dist/types/src/index.d.ts.map +1 -1
  175. package/dist/types/src/internal/Annotation/annotations.d.ts +231 -0
  176. package/dist/types/src/internal/Annotation/annotations.d.ts.map +1 -0
  177. package/dist/types/src/internal/Annotation/annotations.test.d.ts +2 -0
  178. package/dist/types/src/internal/Annotation/annotations.test.d.ts.map +1 -0
  179. package/dist/types/src/internal/Annotation/index.d.ts +4 -0
  180. package/dist/types/src/internal/Annotation/index.d.ts.map +1 -0
  181. package/dist/types/src/internal/Annotation/sorting.d.ts +24 -0
  182. package/dist/types/src/internal/Annotation/sorting.d.ts.map +1 -0
  183. package/dist/types/src/internal/Annotation/util.d.ts +39 -0
  184. package/dist/types/src/internal/Annotation/util.d.ts.map +1 -0
  185. package/dist/types/src/internal/Entity/api.d.ts +13 -0
  186. package/dist/types/src/internal/Entity/api.d.ts.map +1 -0
  187. package/dist/types/src/internal/Entity/entity.d.ts +20 -0
  188. package/dist/types/src/internal/Entity/entity.d.ts.map +1 -0
  189. package/dist/types/src/internal/Entity/index.d.ts +8 -0
  190. package/dist/types/src/internal/Entity/index.d.ts.map +1 -0
  191. package/dist/types/src/internal/Entity/model.d.ts +55 -0
  192. package/dist/types/src/internal/Entity/model.d.ts.map +1 -0
  193. package/dist/types/src/internal/Entity/object.d.ts +18 -0
  194. package/dist/types/src/internal/Entity/object.d.ts.map +1 -0
  195. package/dist/types/src/internal/Entity/relation.d.ts +35 -0
  196. package/dist/types/src/internal/Entity/relation.d.ts.map +1 -0
  197. package/dist/types/src/internal/Entity/util.d.ts +2 -0
  198. package/dist/types/src/internal/Entity/util.d.ts.map +1 -0
  199. package/dist/types/src/internal/Entity/version.d.ts +42 -0
  200. package/dist/types/src/internal/Entity/version.d.ts.map +1 -0
  201. package/dist/types/src/internal/Format/date.d.ts +63 -0
  202. package/dist/types/src/internal/Format/date.d.ts.map +1 -0
  203. package/dist/types/src/internal/Format/date.test.d.ts +2 -0
  204. package/dist/types/src/internal/Format/date.test.d.ts.map +1 -0
  205. package/dist/types/src/internal/Format/format.d.ts +32 -0
  206. package/dist/types/src/internal/Format/format.d.ts.map +1 -0
  207. package/dist/types/src/internal/Format/format.test.d.ts +2 -0
  208. package/dist/types/src/internal/Format/format.test.d.ts.map +1 -0
  209. package/dist/types/src/internal/Format/index.d.ts +8 -0
  210. package/dist/types/src/internal/Format/index.d.ts.map +1 -0
  211. package/dist/types/src/internal/Format/number.d.ts +31 -0
  212. package/dist/types/src/internal/Format/number.d.ts.map +1 -0
  213. package/dist/types/src/internal/Format/object.d.ts +35 -0
  214. package/dist/types/src/internal/Format/object.d.ts.map +1 -0
  215. package/dist/types/src/internal/Format/select.d.ts +13 -0
  216. package/dist/types/src/internal/Format/select.d.ts.map +1 -0
  217. package/dist/types/src/internal/Format/string.d.ts +42 -0
  218. package/dist/types/src/internal/Format/string.d.ts.map +1 -0
  219. package/dist/types/src/internal/Format/types.d.ts +72 -0
  220. package/dist/types/src/internal/Format/types.d.ts.map +1 -0
  221. package/dist/types/src/internal/JsonSchema/annotations.d.ts +19 -0
  222. package/dist/types/src/internal/JsonSchema/annotations.d.ts.map +1 -0
  223. package/dist/types/src/internal/JsonSchema/effect-schema.test.d.ts +2 -0
  224. package/dist/types/src/internal/JsonSchema/effect-schema.test.d.ts.map +1 -0
  225. package/dist/types/src/internal/JsonSchema/index.d.ts +5 -0
  226. package/dist/types/src/internal/JsonSchema/index.d.ts.map +1 -0
  227. package/dist/types/src/internal/JsonSchema/json-schema-normalize.d.ts +7 -0
  228. package/dist/types/src/internal/JsonSchema/json-schema-normalize.d.ts.map +1 -0
  229. package/dist/types/src/internal/JsonSchema/json-schema-type.d.ts +351 -0
  230. package/dist/types/src/internal/JsonSchema/json-schema-type.d.ts.map +1 -0
  231. package/dist/types/src/internal/JsonSchema/json-schema.d.ts +30 -0
  232. package/dist/types/src/internal/JsonSchema/json-schema.d.ts.map +1 -0
  233. package/dist/types/src/internal/JsonSchema/json-schema.test.d.ts +2 -0
  234. package/dist/types/src/internal/JsonSchema/json-schema.test.d.ts.map +1 -0
  235. package/dist/types/src/internal/Obj/clone.d.ts +8 -0
  236. package/dist/types/src/internal/Obj/clone.d.ts.map +1 -0
  237. package/dist/types/src/internal/Obj/common.d.ts +18 -0
  238. package/dist/types/src/internal/Obj/common.d.ts.map +1 -0
  239. package/dist/types/src/internal/Obj/create-object.d.ts +39 -0
  240. package/dist/types/src/internal/Obj/create-object.d.ts.map +1 -0
  241. package/dist/types/src/internal/Obj/create-object.test.d.ts +2 -0
  242. package/dist/types/src/internal/Obj/create-object.test.d.ts.map +1 -0
  243. package/dist/types/src/internal/Obj/deleted.d.ts +6 -0
  244. package/dist/types/src/internal/Obj/deleted.d.ts.map +1 -0
  245. package/dist/types/src/internal/Obj/ids.d.ts +6 -0
  246. package/dist/types/src/internal/Obj/ids.d.ts.map +1 -0
  247. package/dist/types/src/internal/Obj/index.d.ts +11 -0
  248. package/dist/types/src/internal/Obj/index.d.ts.map +1 -0
  249. package/dist/types/src/internal/Obj/inspect.d.ts +2 -0
  250. package/dist/types/src/internal/Obj/inspect.d.ts.map +1 -0
  251. package/dist/types/src/internal/Obj/json-serializer.d.ts +45 -0
  252. package/dist/types/src/internal/Obj/json-serializer.d.ts.map +1 -0
  253. package/dist/types/src/internal/Obj/json-serializer.test.d.ts +2 -0
  254. package/dist/types/src/internal/Obj/json-serializer.test.d.ts.map +1 -0
  255. package/dist/types/src/internal/Obj/schema-validator.d.ts +2 -0
  256. package/dist/types/src/internal/Obj/schema-validator.d.ts.map +1 -0
  257. package/dist/types/src/internal/Obj/schema-validator.test.d.ts +2 -0
  258. package/dist/types/src/internal/Obj/schema-validator.test.d.ts.map +1 -0
  259. package/dist/types/src/internal/Obj/set-value.d.ts +7 -0
  260. package/dist/types/src/internal/Obj/set-value.d.ts.map +1 -0
  261. package/dist/types/src/internal/Obj/set-value.test.d.ts +2 -0
  262. package/dist/types/src/internal/Obj/set-value.test.d.ts.map +1 -0
  263. package/dist/types/src/internal/Obj/snapshot.d.ts +6 -0
  264. package/dist/types/src/internal/Obj/snapshot.d.ts.map +1 -0
  265. package/dist/types/src/internal/Obj/typed-object.d.ts +25 -0
  266. package/dist/types/src/internal/Obj/typed-object.d.ts.map +1 -0
  267. package/dist/types/src/internal/Obj/typed-object.test.d.ts +2 -0
  268. package/dist/types/src/internal/Obj/typed-object.test.d.ts.map +1 -0
  269. package/dist/types/src/internal/Query.d.ts +10 -0
  270. package/dist/types/src/internal/Query.d.ts.map +1 -0
  271. package/dist/types/src/internal/Ref/index.d.ts +3 -0
  272. package/dist/types/src/internal/Ref/index.d.ts.map +1 -0
  273. package/dist/types/src/internal/Ref/ref-array.d.ts +21 -0
  274. package/dist/types/src/internal/Ref/ref-array.d.ts.map +1 -0
  275. package/dist/types/src/internal/Ref/ref.d.ts +244 -0
  276. package/dist/types/src/internal/Ref/ref.d.ts.map +1 -0
  277. package/dist/types/src/internal/Ref/ref.test.d.ts +2 -0
  278. package/dist/types/src/internal/Ref/ref.test.d.ts.map +1 -0
  279. package/dist/types/src/internal/Type/compose.d.ts +7 -0
  280. package/dist/types/src/internal/Type/compose.d.ts.map +1 -0
  281. package/dist/types/src/internal/Type/compose.test.d.ts +2 -0
  282. package/dist/types/src/internal/Type/compose.test.d.ts.map +1 -0
  283. package/dist/types/src/internal/Type/echo-schema.d.ts +181 -0
  284. package/dist/types/src/internal/Type/echo-schema.d.ts.map +1 -0
  285. package/dist/types/src/internal/Type/index.d.ts +4 -0
  286. package/dist/types/src/internal/Type/index.d.ts.map +1 -0
  287. package/dist/types/src/internal/Type/manipulation.d.ts +10 -0
  288. package/dist/types/src/internal/Type/manipulation.d.ts.map +1 -0
  289. package/dist/types/src/internal/Type/persistent-schema.d.ts +20 -0
  290. package/dist/types/src/internal/Type/persistent-schema.d.ts.map +1 -0
  291. package/dist/types/src/internal/common/api/index.d.ts +11 -0
  292. package/dist/types/src/internal/common/api/index.d.ts.map +1 -0
  293. package/dist/types/src/internal/common/api/meta.d.ts +42 -0
  294. package/dist/types/src/internal/common/api/meta.d.ts.map +1 -0
  295. package/dist/types/src/internal/common/index.d.ts +4 -0
  296. package/dist/types/src/internal/common/index.d.ts.map +1 -0
  297. package/dist/types/src/internal/common/proxy/change-context.d.ts +55 -0
  298. package/dist/types/src/internal/common/proxy/change-context.d.ts.map +1 -0
  299. package/dist/types/src/internal/common/proxy/change.test.d.ts +2 -0
  300. package/dist/types/src/internal/common/proxy/change.test.d.ts.map +1 -0
  301. package/dist/types/src/internal/common/proxy/define-hidden-property.d.ts +5 -0
  302. package/dist/types/src/internal/common/proxy/define-hidden-property.d.ts.map +1 -0
  303. package/dist/types/src/internal/common/proxy/errors.d.ts +19 -0
  304. package/dist/types/src/internal/common/proxy/errors.d.ts.map +1 -0
  305. package/dist/types/src/internal/common/proxy/event-batch.d.ts +10 -0
  306. package/dist/types/src/internal/common/proxy/event-batch.d.ts.map +1 -0
  307. package/dist/types/src/internal/common/proxy/handler.test.d.ts +2 -0
  308. package/dist/types/src/internal/common/proxy/handler.test.d.ts.map +1 -0
  309. package/dist/types/src/internal/common/proxy/index.d.ts +14 -0
  310. package/dist/types/src/internal/common/proxy/index.d.ts.map +1 -0
  311. package/dist/types/src/internal/common/proxy/json-serializer.d.ts +6 -0
  312. package/dist/types/src/internal/common/proxy/json-serializer.d.ts.map +1 -0
  313. package/dist/types/src/internal/common/proxy/make-object.d.ts +14 -0
  314. package/dist/types/src/internal/common/proxy/make-object.d.ts.map +1 -0
  315. package/dist/types/src/internal/common/proxy/ownership.d.ts +57 -0
  316. package/dist/types/src/internal/common/proxy/ownership.d.ts.map +1 -0
  317. package/dist/types/src/internal/common/proxy/proxy-types.d.ts +18 -0
  318. package/dist/types/src/internal/common/proxy/proxy-types.d.ts.map +1 -0
  319. package/dist/types/src/internal/common/proxy/proxy-utils.d.ts +47 -0
  320. package/dist/types/src/internal/common/proxy/proxy-utils.d.ts.map +1 -0
  321. package/dist/types/src/internal/common/proxy/reactive-array.d.ts +8 -0
  322. package/dist/types/src/internal/common/proxy/reactive-array.d.ts.map +1 -0
  323. package/dist/types/src/internal/common/proxy/reactive.d.ts +39 -0
  324. package/dist/types/src/internal/common/proxy/reactive.d.ts.map +1 -0
  325. package/dist/types/src/internal/common/proxy/reactive.test.d.ts +2 -0
  326. package/dist/types/src/internal/common/proxy/reactive.test.d.ts.map +1 -0
  327. package/dist/types/src/internal/common/proxy/schema-validator.d.ts +15 -0
  328. package/dist/types/src/internal/common/proxy/schema-validator.d.ts.map +1 -0
  329. package/dist/types/src/internal/common/proxy/schema.test.d.ts +2 -0
  330. package/dist/types/src/internal/common/proxy/schema.test.d.ts.map +1 -0
  331. package/dist/types/src/internal/common/proxy/symbols.d.ts +3 -0
  332. package/dist/types/src/internal/common/proxy/symbols.d.ts.map +1 -0
  333. package/dist/types/src/internal/common/proxy/typed-handler.d.ts +48 -0
  334. package/dist/types/src/internal/common/proxy/typed-handler.d.ts.map +1 -0
  335. package/dist/types/src/internal/common/proxy/typed-handler.test.d.ts +2 -0
  336. package/dist/types/src/internal/common/proxy/typed-handler.test.d.ts.map +1 -0
  337. package/dist/types/src/internal/common/proxy/typed-object.test.d.ts +2 -0
  338. package/dist/types/src/internal/common/proxy/typed-object.test.d.ts.map +1 -0
  339. package/dist/types/src/internal/common/types/base.d.ts +27 -0
  340. package/dist/types/src/internal/common/types/base.d.ts.map +1 -0
  341. package/dist/types/src/internal/common/types/entity.d.ts +37 -0
  342. package/dist/types/src/internal/common/types/entity.d.ts.map +1 -0
  343. package/dist/types/src/internal/common/types/index.d.ts +7 -0
  344. package/dist/types/src/internal/common/types/index.d.ts.map +1 -0
  345. package/dist/types/src/internal/common/types/meta.d.ts +33 -0
  346. package/dist/types/src/internal/common/types/meta.d.ts.map +1 -0
  347. package/dist/types/src/internal/common/types/model-symbols.d.ts +54 -0
  348. package/dist/types/src/internal/common/types/model-symbols.d.ts.map +1 -0
  349. package/dist/types/src/internal/common/types/typename.d.ts +21 -0
  350. package/dist/types/src/internal/common/types/typename.d.ts.map +1 -0
  351. package/dist/types/src/internal/common/types/version.d.ts +15 -0
  352. package/dist/types/src/internal/common/types/version.d.ts.map +1 -0
  353. package/dist/types/src/internal/index.d.ts +11 -0
  354. package/dist/types/src/internal/index.d.ts.map +1 -0
  355. package/dist/types/src/{test → testing}/api.test.d.ts.map +1 -1
  356. package/dist/types/src/testing/index.d.ts +3 -1
  357. package/dist/types/src/testing/index.d.ts.map +1 -1
  358. package/dist/types/src/testing/test-data.d.ts +18 -0
  359. package/dist/types/src/testing/test-data.d.ts.map +1 -0
  360. package/dist/types/src/testing/test-schema.d.ts +304 -0
  361. package/dist/types/src/testing/test-schema.d.ts.map +1 -0
  362. package/dist/types/src/testing/util.d.ts +21 -0
  363. package/dist/types/src/testing/util.d.ts.map +1 -0
  364. package/dist/types/tsconfig.tsbuildinfo +1 -1
  365. package/package.json +119 -56
  366. package/src/Annotation.ts +48 -0
  367. package/src/Collection.ts +37 -0
  368. package/src/Database.ts +352 -0
  369. package/src/Dataset.ts +26 -0
  370. package/src/Entity.test.ts +22 -0
  371. package/src/Entity.ts +243 -0
  372. package/src/Err.ts +40 -0
  373. package/src/Extension.test.ts +235 -0
  374. package/src/Extension.ts +122 -0
  375. package/src/Feed.ts +304 -0
  376. package/src/Filter.test.ts +90 -0
  377. package/src/Filter.ts +454 -0
  378. package/src/Format.ts +9 -0
  379. package/src/Hypergraph.ts +79 -0
  380. package/src/Json.test.ts +175 -0
  381. package/src/Json.ts +102 -0
  382. package/src/JsonSchema.ts +26 -0
  383. package/src/Key.ts +3 -0
  384. package/src/Migration.ts +94 -0
  385. package/src/Obj.test.ts +539 -0
  386. package/src/Obj.ts +716 -212
  387. package/src/Order.ts +46 -0
  388. package/src/Query.test.ts +822 -0
  389. package/src/Query.ts +567 -0
  390. package/src/QueryResult.ts +106 -0
  391. package/src/Ref.ts +78 -9
  392. package/src/Relation.test.ts +88 -0
  393. package/src/Relation.ts +452 -53
  394. package/src/SchemaRegistry.ts +106 -0
  395. package/src/Tag.ts +41 -0
  396. package/src/Type.test.ts +52 -0
  397. package/src/Type.ts +168 -155
  398. package/src/View.ts +107 -0
  399. package/src/hierarchy.test.ts +33 -0
  400. package/src/index.ts +25 -5
  401. package/src/internal/Annotation/annotations.test.ts +145 -0
  402. package/src/internal/Annotation/annotations.ts +577 -0
  403. package/src/internal/Annotation/index.ts +7 -0
  404. package/src/internal/Annotation/sorting.ts +51 -0
  405. package/src/internal/Annotation/util.ts +85 -0
  406. package/src/internal/Entity/api.ts +30 -0
  407. package/src/internal/Entity/entity.ts +128 -0
  408. package/src/internal/Entity/index.ts +11 -0
  409. package/src/internal/Entity/model.ts +109 -0
  410. package/src/internal/Entity/object.ts +57 -0
  411. package/src/internal/Entity/relation.ts +154 -0
  412. package/src/internal/Entity/util.ts +33 -0
  413. package/src/internal/Entity/version.ts +96 -0
  414. package/src/internal/Format/date.test.ts +55 -0
  415. package/src/internal/Format/date.ts +217 -0
  416. package/src/internal/Format/format.test.ts +76 -0
  417. package/src/internal/Format/format.ts +54 -0
  418. package/src/internal/Format/index.ts +12 -0
  419. package/src/internal/Format/number.ts +89 -0
  420. package/src/internal/Format/object.ts +80 -0
  421. package/src/internal/Format/select.ts +18 -0
  422. package/src/internal/Format/string.ts +81 -0
  423. package/src/internal/Format/types.ts +186 -0
  424. package/src/internal/JsonSchema/annotations.ts +50 -0
  425. package/src/internal/JsonSchema/effect-schema.test.ts +143 -0
  426. package/src/internal/JsonSchema/index.ts +8 -0
  427. package/src/internal/JsonSchema/json-schema-normalize.ts +111 -0
  428. package/src/internal/JsonSchema/json-schema-type.ts +403 -0
  429. package/src/internal/JsonSchema/json-schema.test.ts +860 -0
  430. package/src/internal/JsonSchema/json-schema.ts +533 -0
  431. package/src/internal/Obj/clone.ts +48 -0
  432. package/src/internal/Obj/common.ts +75 -0
  433. package/src/internal/Obj/create-object.test.ts +114 -0
  434. package/src/internal/Obj/create-object.ts +94 -0
  435. package/src/internal/Obj/deleted.ts +19 -0
  436. package/src/internal/Obj/ids.ts +12 -0
  437. package/src/internal/Obj/index.ts +14 -0
  438. package/src/internal/Obj/inspect.ts +46 -0
  439. package/src/internal/Obj/json-serializer.test.ts +120 -0
  440. package/src/internal/Obj/json-serializer.ts +222 -0
  441. package/src/internal/Obj/schema-validator.test.ts +182 -0
  442. package/src/internal/Obj/schema-validator.ts +6 -0
  443. package/src/internal/Obj/set-value.test.ts +281 -0
  444. package/src/internal/Obj/set-value.ts +165 -0
  445. package/src/internal/Obj/snapshot.ts +105 -0
  446. package/src/internal/Obj/typed-object.test.ts +34 -0
  447. package/src/internal/Obj/typed-object.ts +30 -0
  448. package/src/internal/Query.ts +137 -0
  449. package/src/internal/Ref/index.ts +6 -0
  450. package/src/internal/Ref/ref-array.ts +38 -0
  451. package/src/internal/Ref/ref.test.ts +100 -0
  452. package/src/internal/Ref/ref.ts +589 -0
  453. package/src/internal/Type/compose.test.ts +41 -0
  454. package/src/internal/Type/compose.ts +41 -0
  455. package/src/internal/Type/echo-schema.ts +423 -0
  456. package/src/internal/Type/index.ts +7 -0
  457. package/src/internal/Type/manipulation.ts +92 -0
  458. package/src/internal/Type/persistent-schema.ts +33 -0
  459. package/src/internal/common/README.md +102 -0
  460. package/src/internal/common/api/index.ts +15 -0
  461. package/src/internal/common/api/meta.ts +88 -0
  462. package/src/internal/common/index.ts +7 -0
  463. package/src/internal/common/proxy/change-context.ts +138 -0
  464. package/src/internal/common/proxy/change.test.ts +519 -0
  465. package/src/internal/common/proxy/define-hidden-property.ts +14 -0
  466. package/src/internal/common/proxy/errors.ts +42 -0
  467. package/src/internal/common/proxy/event-batch.ts +44 -0
  468. package/src/internal/common/proxy/handler.test.ts +121 -0
  469. package/src/internal/common/proxy/index.ts +17 -0
  470. package/src/internal/common/proxy/json-serializer.ts +90 -0
  471. package/src/internal/common/proxy/make-object.ts +105 -0
  472. package/src/internal/common/proxy/ownership.ts +252 -0
  473. package/src/internal/common/proxy/proxy-types.ts +23 -0
  474. package/src/internal/common/proxy/proxy-utils.ts +150 -0
  475. package/src/internal/common/proxy/reactive-array.ts +71 -0
  476. package/src/internal/common/proxy/reactive.test.ts +54 -0
  477. package/src/internal/common/proxy/reactive.ts +77 -0
  478. package/src/internal/common/proxy/schema-validator.ts +244 -0
  479. package/src/internal/common/proxy/schema.test.ts +145 -0
  480. package/src/internal/common/proxy/symbols.ts +7 -0
  481. package/src/internal/common/proxy/typed-handler.test.ts +313 -0
  482. package/src/internal/common/proxy/typed-handler.ts +447 -0
  483. package/src/internal/common/proxy/typed-object.test.ts +115 -0
  484. package/src/internal/common/types/base.ts +43 -0
  485. package/src/internal/common/types/entity.ts +54 -0
  486. package/src/internal/common/types/index.ts +10 -0
  487. package/src/internal/common/types/meta.ts +67 -0
  488. package/src/internal/common/types/model-symbols.ts +69 -0
  489. package/src/internal/common/types/typename.ts +55 -0
  490. package/src/internal/common/types/version.ts +19 -0
  491. package/src/internal/index.ts +17 -0
  492. package/src/testing/api.test.ts +125 -0
  493. package/src/testing/index.ts +3 -1
  494. package/src/testing/test-data.ts +129 -0
  495. package/src/testing/test-schema.ts +240 -0
  496. package/src/testing/util.ts +85 -0
  497. package/dist/lib/browser/chunk-MTR3E5S2.mjs +0 -786
  498. package/dist/lib/browser/chunk-MTR3E5S2.mjs.map +0 -7
  499. package/dist/lib/browser/index.mjs +0 -26
  500. package/dist/lib/browser/meta.json +0 -1
  501. package/dist/lib/browser/testing/index.mjs +0 -70
  502. package/dist/lib/browser/testing/index.mjs.map +0 -7
  503. package/dist/lib/node-esm/chunk-MYZLAJSR.mjs +0 -786
  504. package/dist/lib/node-esm/chunk-MYZLAJSR.mjs.map +0 -7
  505. package/dist/lib/node-esm/index.mjs +0 -26
  506. package/dist/lib/node-esm/meta.json +0 -1
  507. package/dist/lib/node-esm/testing/index.mjs +0 -70
  508. package/dist/lib/node-esm/testing/index.mjs.map +0 -7
  509. package/dist/types/src/experimental/database.d.ts +0 -8
  510. package/dist/types/src/experimental/database.d.ts.map +0 -1
  511. package/dist/types/src/experimental/index.d.ts +0 -1
  512. package/dist/types/src/experimental/index.d.ts.map +0 -1
  513. package/dist/types/src/experimental/queue.d.ts +0 -8
  514. package/dist/types/src/experimental/queue.d.ts.map +0 -1
  515. package/dist/types/src/experimental/space.d.ts +0 -8
  516. package/dist/types/src/experimental/space.d.ts.map +0 -1
  517. package/dist/types/src/query/dsl.d.ts +0 -238
  518. package/dist/types/src/query/dsl.d.ts.map +0 -1
  519. package/dist/types/src/query/dsl.test.d.ts +0 -2
  520. package/dist/types/src/query/dsl.test.d.ts.map +0 -1
  521. package/dist/types/src/query/index.d.ts +0 -2
  522. package/dist/types/src/query/index.d.ts.map +0 -1
  523. package/dist/types/src/testing/types.d.ts +0 -113
  524. package/dist/types/src/testing/types.d.ts.map +0 -1
  525. package/src/experimental/database.ts +0 -11
  526. package/src/experimental/index.ts +0 -7
  527. package/src/experimental/queue.ts +0 -11
  528. package/src/experimental/space.ts +0 -11
  529. package/src/query/dsl.test.ts +0 -332
  530. package/src/query/dsl.ts +0 -704
  531. package/src/query/index.ts +0 -5
  532. package/src/test/api.test.ts +0 -180
  533. package/src/testing/types.ts +0 -91
  534. /package/dist/lib/{browser/index.mjs.map → neutral/Annotation.mjs.map} +0 -0
  535. /package/dist/lib/{node-esm/index.mjs.map → neutral/Database.mjs.map} +0 -0
  536. /package/dist/types/src/{test → testing}/api.test.d.ts +0 -0
package/src/Query.ts ADDED
@@ -0,0 +1,567 @@
1
+ //
2
+ // Copyright 2025 DXOS.org
3
+ //
4
+
5
+ // @import-as-namespace
6
+
7
+ import type * as EffectArray from 'effect/Array';
8
+ import type * as Schema from 'effect/Schema';
9
+
10
+ import { type QueryAST } from '@dxos/echo-protocol';
11
+
12
+ import type * as Collection from './Collection';
13
+ import * as Database from './Database';
14
+ import type * as Dataset from './Dataset';
15
+ import * as Feed from './Feed';
16
+ import * as Filter from './Filter';
17
+ import * as internal from './internal';
18
+ import * as Obj from './Obj';
19
+ import type * as Order from './Order';
20
+ import type * as Ref from './Ref';
21
+ import type * as Relation from './Relation';
22
+ import type * as View from './View';
23
+
24
+ // TODO(dmaretskyi): Split up into interfaces for objects and relations so they can have separate verbs.
25
+ // TODO(dmaretskyi): Undirected relation traversals.
26
+ // TODO(wittjosiah): Make Filter & Query pipeable.
27
+
28
+ /**
29
+ * All property paths inside T that are references.
30
+ */
31
+ // TODO(dmaretskyi): Filter only properties that are references (or optional references, or unions that include references).
32
+ type RefPropKey<T> = keyof T & string;
33
+
34
+ // TODO(burdon): Narrow T to Entity.Unknown?
35
+ export interface Query<T> {
36
+ // TODO(dmaretskyi): See new effect-schema approach to variance.
37
+ '~Query': { value: T };
38
+
39
+ ast: QueryAST.Query;
40
+
41
+ /**
42
+ * Filter the current selection based on a filter.
43
+ * @param filter - Filter to select the objects.
44
+ * @returns Query for the selected objects.
45
+ */
46
+ 'select'(filter: Filter.Filter<T>): Query<T>;
47
+ 'select'(props: Filter.Props<T>): Query<T>;
48
+
49
+ /**
50
+ * Traverse an outgoing reference.
51
+ * @param key - Property path inside T that is a reference or optional reference.
52
+ * @returns Query for the target of the reference.
53
+ */
54
+ 'reference'<K extends RefPropKey<T>>(
55
+ key: K,
56
+ ): Query<
57
+ T[K] extends Ref.Unknown
58
+ ? Ref.Target<T[K]>
59
+ : T[K] extends Ref.Unknown | undefined
60
+ ? Ref.Target<Exclude<T[K], undefined>>
61
+ : never
62
+ >;
63
+
64
+ /**
65
+ * Find objects referencing this object.
66
+ * @param target - Schema of the referencing object. If not provided, matches any type.
67
+ * @param key - Property path inside the referencing object that is a reference. If not provided, matches any property.
68
+ * @returns Query for the referencing objects.
69
+ */
70
+ // TODO(dmaretskyi): any way to enforce `Ref.Target<Schema.Schema.Type<S>[key]> == T`?
71
+ // TODO(dmaretskyi): Ability to go through arrays of references.
72
+ 'referencedBy'<S extends Schema.Schema.All>(
73
+ target: S | string,
74
+ key: RefPropKey<Schema.Schema.Type<S>>,
75
+ ): Query<Schema.Schema.Type<S>>;
76
+ 'referencedBy'<S extends Schema.Schema.All>(target: S | string): Query<Schema.Schema.Type<S>>;
77
+ 'referencedBy'(): Query<any>;
78
+
79
+ /**
80
+ * Find relations where this object is the source.
81
+ * @returns Query for the relation objects.
82
+ * @param relation - Schema of the relation.
83
+ * @param predicates - Predicates to filter the relation objects.
84
+ */
85
+ 'sourceOf'<S extends Schema.Schema.All>(
86
+ relation?: S | string,
87
+ predicates?: Filter.Props<Schema.Schema.Type<S>>,
88
+ ): Query<Schema.Schema.Type<S>>;
89
+
90
+ /**
91
+ * Find relations where this object is the target.
92
+ * @returns Query for the relation objects.
93
+ * @param relation - Schema of the relation.
94
+ * @param predicates - Predicates to filter the relation objects.
95
+ */
96
+ 'targetOf'<S extends Schema.Schema.All>(
97
+ relation?: S | string,
98
+ predicates?: Filter.Props<Schema.Schema.Type<S>>,
99
+ ): Query<Schema.Schema.Type<S>>;
100
+
101
+ /**
102
+ * For a query for relations, get the source objects.
103
+ * @returns Query for the source objects.
104
+ */
105
+ 'source'(): Query<Relation.SourceOf<T>>;
106
+
107
+ /**
108
+ * For a query for relations, get the target objects.
109
+ * @returns Query for the target objects.
110
+ */
111
+ 'target'(): Query<Relation.TargetOf<T>>;
112
+
113
+ /**
114
+ * Get the parent object of the current selection.
115
+ * @returns Query for the parent objects.
116
+ */
117
+ 'parent'(): Query<any>;
118
+
119
+ /**
120
+ * Get all child objects of the current selection.
121
+ * @returns Query for the child objects.
122
+ */
123
+ 'children'(): Query<any>;
124
+
125
+ /**
126
+ * Order the query results.
127
+ * Orders are specified in priority order. The first order will be applied first, etc.
128
+ * @param order - Order to sort the results.
129
+ * @returns Query for the ordered results.
130
+ */
131
+ 'orderBy'(...order: EffectArray.NonEmptyArray<Order.Order<T>>): Query<T>;
132
+
133
+ /**
134
+ * Limit the number of results.
135
+ * @param limit - Maximum number of results to return.
136
+ * @returns Query for the limited results.
137
+ */
138
+ 'limit'(limit: number): Query<T>;
139
+
140
+ /**
141
+ * Query from selected databases only.
142
+ *
143
+ * Example:
144
+ *
145
+ * ```ts
146
+ * Query.select(Filter.type(Person)).from(db);
147
+ * ```
148
+ *
149
+ * @param options.includeFeeds [false] - Whether to include feeds in the query. Default is to query from automerge documents only.
150
+ */
151
+ 'from'(database: Database.Database | Database.Database[], options?: { includeFeeds?: boolean }): Query<T>;
152
+
153
+ /**
154
+ * Query from selected feeds only.
155
+ *
156
+ * Example:
157
+ *
158
+ * ```ts
159
+ * Query.select(Filter.type(Person)).from(feed);
160
+ * ```
161
+ *
162
+ */
163
+ 'from'(feeds: Feed.Feed | Feed.Feed[]): Query<T>;
164
+
165
+ /**
166
+ * Query from all accessible spaces.
167
+ *
168
+ * Example:
169
+ *
170
+ * ```ts
171
+ * Query.select(Filter.type(Person)).from('all-accessible-spaces');
172
+ * ```
173
+ *
174
+ * @param options.includeFeeds [false] - Whether to include feeds in the query. Default is to query from automerge documents only.
175
+ */
176
+ 'from'(allSpaces: 'all-accessible-spaces', options?: { includeFeeds?: boolean }): Query<T>;
177
+
178
+ /**
179
+ * Query from a dataset.
180
+ * Currently only feeds are supported.
181
+ *
182
+ * Example:
183
+ *
184
+ * ```ts
185
+ * Query.type(Person).from(feed);
186
+ * ```
187
+ */
188
+ 'from'(dataset: Dataset.Dataset): Query<T>;
189
+
190
+ /**
191
+ * Query from the results of another query.
192
+ *
193
+ * Example:
194
+ *
195
+ * ```ts
196
+ * Query.select(Filter.props({ foo: 'foo' })).from(Query.select(Filter.type(Contact)).reference('org'));
197
+ * ```
198
+ */
199
+ 'from'(query: Any): Query<T>;
200
+
201
+ /**
202
+ * Query from a raw scope specification.
203
+ */
204
+ 'from'(scope: QueryAST.Scope): Query<T>;
205
+
206
+ /**
207
+ * Add options to a query.
208
+ */
209
+ 'options'(options: QueryAST.QueryOptions): Query<T>;
210
+
211
+ /**
212
+ * Attach a diagnostic label for logs and tooling (execution semantics unchanged).
213
+ */
214
+ 'debugLabel'(label: string): Query<T>;
215
+ }
216
+
217
+ export type Any = Query<any>;
218
+
219
+ export type Type<Q extends Any> = Q extends Query<infer T> ? T : never;
220
+
221
+ class QueryClass implements Any {
222
+ private static 'variance': Any['~Query'] = {} as Any['~Query'];
223
+
224
+ constructor(public readonly ast: QueryAST.Query) {}
225
+
226
+ '~Query' = QueryClass.variance;
227
+
228
+ select(filter: Filter.Any | Filter.Props<any>): Any {
229
+ if (Filter.is(filter)) {
230
+ return new QueryClass({
231
+ type: 'filter',
232
+ selection: this.ast,
233
+ filter: filter.ast,
234
+ });
235
+ } else {
236
+ return new QueryClass({
237
+ type: 'filter',
238
+ selection: this.ast,
239
+ filter: Filter.props(filter).ast,
240
+ });
241
+ }
242
+ }
243
+
244
+ reference(key: string): Any {
245
+ return new QueryClass({
246
+ type: 'reference-traversal',
247
+ anchor: this.ast,
248
+ property: key,
249
+ });
250
+ }
251
+
252
+ referencedBy(target?: Schema.Schema.All | string, key?: string): Any {
253
+ const dxn = target !== undefined ? internal.getTypeDXNFromSpecifier(target) : null;
254
+ return new QueryClass({
255
+ type: 'incoming-references',
256
+ anchor: this.ast,
257
+ property: key ?? null,
258
+ typename: dxn?.toString() ?? null,
259
+ });
260
+ }
261
+
262
+ sourceOf(relation?: Schema.Schema.All | string, predicates?: Filter.Props<unknown> | undefined): Any {
263
+ return new QueryClass({
264
+ type: 'relation',
265
+ anchor: this.ast,
266
+ direction: 'outgoing',
267
+ filter: relation !== undefined ? Filter.type(relation, predicates).ast : undefined,
268
+ });
269
+ }
270
+
271
+ targetOf(relation?: Schema.Schema.All | string, predicates?: Filter.Props<unknown> | undefined): Any {
272
+ return new QueryClass({
273
+ type: 'relation',
274
+ anchor: this.ast,
275
+ direction: 'incoming',
276
+ filter: relation !== undefined ? Filter.type(relation, predicates).ast : undefined,
277
+ });
278
+ }
279
+
280
+ source(): Any {
281
+ return new QueryClass({
282
+ type: 'relation-traversal',
283
+ anchor: this.ast,
284
+ direction: 'source',
285
+ });
286
+ }
287
+
288
+ target(): Any {
289
+ return new QueryClass({
290
+ type: 'relation-traversal',
291
+ anchor: this.ast,
292
+ direction: 'target',
293
+ });
294
+ }
295
+
296
+ parent(): Any {
297
+ return new QueryClass({
298
+ type: 'hierarchy-traversal',
299
+ anchor: this.ast,
300
+ direction: 'to-parent',
301
+ });
302
+ }
303
+
304
+ children(): Any {
305
+ return new QueryClass({
306
+ type: 'hierarchy-traversal',
307
+ anchor: this.ast,
308
+ direction: 'to-children',
309
+ });
310
+ }
311
+
312
+ orderBy(...order: Order.Order<any>[]): Any {
313
+ return new QueryClass({
314
+ type: 'order',
315
+ query: this.ast,
316
+ order: order.map((o) => o.ast),
317
+ });
318
+ }
319
+
320
+ limit(limit: number): Any {
321
+ return new QueryClass({
322
+ type: 'limit',
323
+ query: this.ast,
324
+ limit,
325
+ });
326
+ }
327
+
328
+ from(
329
+ arg:
330
+ | Database.Database
331
+ | Database.Database[]
332
+ | Feed.Feed
333
+ | Feed.Feed[]
334
+ | Collection.Collection
335
+ | View.View
336
+ | Any
337
+ | QueryAST.Scope
338
+ | 'all-accessible-spaces',
339
+ options?: { includeFeeds?: boolean },
340
+ ): Any {
341
+ if (arg == null) {
342
+ throw new TypeError(
343
+ 'Query.from() requires a valid data source argument (database, feed, query, scope, or "all-accessible-spaces").',
344
+ );
345
+ }
346
+
347
+ if (is(arg)) {
348
+ return new QueryClass({
349
+ type: 'from',
350
+ query: this.ast,
351
+ from: { _tag: 'query', query: arg.ast },
352
+ });
353
+ }
354
+
355
+ if (arg === 'all-accessible-spaces') {
356
+ return new QueryClass({
357
+ type: 'from',
358
+ query: this.ast,
359
+ from: {
360
+ _tag: 'scope',
361
+ scope: {
362
+ ...(options?.includeFeeds ? { allQueuesFromSpaces: true } : {}),
363
+ },
364
+ },
365
+ });
366
+ }
367
+
368
+ if (_isScope(arg)) {
369
+ return new QueryClass({
370
+ type: 'from',
371
+ query: this.ast,
372
+ from: { _tag: 'scope', scope: arg },
373
+ });
374
+ }
375
+
376
+ const items = Array.isArray(arg) ? arg : [arg];
377
+
378
+ if (items.length > 0 && Database.isDatabase(items[0])) {
379
+ const databases = items as Database.Database[];
380
+ return new QueryClass({
381
+ type: 'from',
382
+ query: this.ast,
383
+ from: {
384
+ _tag: 'scope',
385
+ scope: {
386
+ spaceIds: databases.map((db) => db.spaceId),
387
+ ...(options?.includeFeeds ? { allQueuesFromSpaces: true } : {}),
388
+ },
389
+ },
390
+ });
391
+ }
392
+
393
+ if (items.length > 0) {
394
+ const typename = Obj.getTypename(items[0] as Obj.Unknown);
395
+ // TODO(dmaretskyi): Support querying from views.
396
+ if (typename === 'org.dxos.type.view') {
397
+ throw new Error('Query.from(view) is not yet supported.');
398
+ }
399
+ // TODO(dmaretskyi): Support querying from collections.
400
+ if (typename === 'org.dxos.type.collection') {
401
+ throw new Error('Query.from(collection) is not yet supported.');
402
+ }
403
+ // Validate that the items are Feed.Feed instances.
404
+ for (const item of items) {
405
+ if (!Obj.instanceOf(Feed.Feed, item)) {
406
+ throw new TypeError(
407
+ `Query.from() expects Feed objects (org.dxos.type.feed), but received an object with typename '${typename ?? 'unknown'}'.`,
408
+ );
409
+ }
410
+ }
411
+ }
412
+
413
+ const feeds = items as Feed.Feed[];
414
+ const queueDxns = feeds.flatMap((feed) => {
415
+ const dxn = Feed.getQueueDxn(feed);
416
+ return dxn ? [dxn.toString()] : [];
417
+ });
418
+ return new QueryClass({
419
+ type: 'from',
420
+ query: this.ast,
421
+ from: {
422
+ _tag: 'scope',
423
+ scope: {
424
+ queues: queueDxns,
425
+ },
426
+ },
427
+ });
428
+ }
429
+
430
+ options(options: QueryAST.QueryOptions): Any {
431
+ return new QueryClass({
432
+ type: 'options',
433
+ query: this.ast,
434
+ options,
435
+ });
436
+ }
437
+
438
+ debugLabel(label: string): Any {
439
+ if (this.ast.type === 'options') {
440
+ return new QueryClass({
441
+ type: 'options',
442
+ query: this.ast.query,
443
+ options: { ...this.ast.options, debugLabel: label },
444
+ });
445
+ }
446
+ return new QueryClass({
447
+ type: 'options',
448
+ query: this.ast,
449
+ options: { debugLabel: label },
450
+ });
451
+ }
452
+ }
453
+
454
+ export const is = (value: unknown): value is Any => {
455
+ return typeof value === 'object' && value !== null && '~Query' in value;
456
+ };
457
+
458
+ /** Construct a query from an ast. */
459
+ export const fromAst = (ast: QueryAST.Query): Any => {
460
+ return new QueryClass(ast);
461
+ };
462
+
463
+ /**
464
+ * Select objects based on a filter.
465
+ * @param filter - Filter to select the objects.
466
+ * @returns Query for the selected objects.
467
+ */
468
+ export const select = <F extends Filter.Any>(filter: F): Query<Filter.Type<F>> => {
469
+ return new QueryClass({
470
+ type: 'select',
471
+ filter: filter.ast,
472
+ });
473
+ };
474
+
475
+ /**
476
+ * Query for objects of a given schema.
477
+ * @param schema - Schema of the objects.
478
+ * @param predicates - Predicates to filter the objects.
479
+ * @returns Query for the objects.
480
+ *
481
+ * Shorthand for: `Query.select(Filter.type(schema, predicates))`.
482
+ */
483
+ export const type: {
484
+ <S extends Schema.Schema.All>(
485
+ schema: S,
486
+ predicates?: Filter.Props<Schema.Schema.Type<S>>,
487
+ ): Query<Schema.Schema.Type<S>>;
488
+ (schema: string, predicates?: Filter.Props<unknown>): Query<any>;
489
+ } = (schema: Schema.Schema.All | string, predicates?: Filter.Props<unknown>): Any => {
490
+ return new QueryClass({
491
+ type: 'select',
492
+ filter: Filter.type(schema, predicates).ast,
493
+ });
494
+ };
495
+
496
+ /**
497
+ * Combine results of multiple queries.
498
+ * @param queries - Queries to combine.
499
+ * @returns Query for the combined results.
500
+ */
501
+ // TODO(dmaretskyi): Rename to `combine` or `union`.
502
+ export const all = (...queries: Any[]): Any => {
503
+ if (queries.length === 0) {
504
+ throw new TypeError(
505
+ 'Query.all combines results of multiple queries, to query all objects use Query.select(Filter.everything())',
506
+ );
507
+ }
508
+ return new QueryClass({
509
+ type: 'union',
510
+ queries: queries.map((q) => q.ast),
511
+ });
512
+ };
513
+
514
+ /**
515
+ * Subtract one query from another.
516
+ * @param source - Query to subtract from.
517
+ * @param exclude - Query to subtract.
518
+ * @returns Query for the results of the source query minus the results of the exclude query.
519
+ */
520
+ export const without = <T>(source: Query<T>, exclude: Query<T>): Query<T> => {
521
+ return new QueryClass({
522
+ type: 'set-difference',
523
+ source: source.ast,
524
+ exclude: exclude.ast,
525
+ });
526
+ };
527
+
528
+ /**
529
+ * Create a query scoped to a data source.
530
+ * The returned query selects everything from the source; chain `.select()` to narrow results.
531
+ *
532
+ * @param source - Data source: database, feed, 'all-accessible-spaces', or another query.
533
+ * @returns Query scoped to the given source.
534
+ */
535
+ export const from = (
536
+ source:
537
+ | Database.Database
538
+ | Database.Database[]
539
+ | Feed.Feed
540
+ | Feed.Feed[]
541
+ | Any
542
+ | QueryAST.Scope
543
+ | 'all-accessible-spaces',
544
+ options?: { includeFeeds?: boolean },
545
+ ): Any => {
546
+ const baseQuery: QueryAST.Query = {
547
+ type: 'select',
548
+ filter: Filter.everything().ast,
549
+ };
550
+ const wrapper = new QueryClass(baseQuery);
551
+ return wrapper.from(source as any, options);
552
+ };
553
+
554
+ const SCOPE_KEYS = new Set(['spaceIds', 'queues', 'allQueuesFromSpaces']);
555
+
556
+ /** Detect a raw Scope object (plain object with only Scope-valid keys). */
557
+ const _isScope = (value: unknown): value is QueryAST.Scope => {
558
+ if (typeof value !== 'object' || value === null || Array.isArray(value)) {
559
+ return false;
560
+ }
561
+ return Object.keys(value).every((key) => SCOPE_KEYS.has(key));
562
+ };
563
+
564
+ /**
565
+ * Returns a human-readable string representation of a Query AST.
566
+ */
567
+ export const pretty = (query: Any): string => internal.prettyQuery(query.ast);
@@ -0,0 +1,106 @@
1
+ //
2
+ // Copyright 2025 DXOS.org
3
+ //
4
+
5
+ import { type CleanupFn } from '@dxos/async';
6
+
7
+ import type * as Entity from './Entity';
8
+
9
+ /**
10
+ * Individual query result entry.
11
+ */
12
+ export type Entry<T> = {
13
+ id: string;
14
+
15
+ /**
16
+ * May not be present for remote results.
17
+ */
18
+ result?: T;
19
+
20
+ match?: {
21
+ // TODO(dmaretskyi): text positional info.
22
+
23
+ /**
24
+ * Higher means better match.
25
+ */
26
+ rank: number;
27
+ };
28
+
29
+ /**
30
+ * Query resolution metadata.
31
+ */
32
+ // TODO(dmaretskyi): Rename to meta?
33
+ resolution?: {
34
+ // TODO(dmaretskyi): Make this more generic.
35
+ source: 'remote' | 'local' | 'index';
36
+
37
+ /**
38
+ * Query resolution time in milliseconds.
39
+ */
40
+ time: number;
41
+ };
42
+ };
43
+
44
+ /**
45
+ * Invidual query result entry for a database Entity.
46
+ */
47
+ export type EntityEntry<T extends Entity.Unknown = Entity.Unknown> = Entry<T>;
48
+
49
+ export type RunOptions = {
50
+ timeout?: number;
51
+ };
52
+
53
+ export type SubscriptionOptions = {
54
+ /**
55
+ * Fire the callback immediately.
56
+ */
57
+ fire?: boolean;
58
+ };
59
+
60
+ // TODO(burdon): Should T be constrained to Entity.Any?
61
+ export interface QueryResult<T> {
62
+ /**
63
+ * Currently available results along with their match metadata.
64
+ */
65
+ readonly entries: Entry<T>[];
66
+
67
+ /**
68
+ * Currently available results.
69
+ */
70
+ readonly results: T[];
71
+
72
+ /**
73
+ * Returns all known results.
74
+ */
75
+ run(opts?: RunOptions): Promise<T[]>;
76
+
77
+ /**
78
+ * Returns all known results along with their match metadata.
79
+ */
80
+ runEntries(opts?: RunOptions): Promise<Entry<T>[]>;
81
+
82
+ /**
83
+ * Returns currently available results synchronously.
84
+ */
85
+ runSync(): T[];
86
+
87
+ /**
88
+ * Returns currently available results synchronously along with their match metadata.
89
+ */
90
+ runSyncEntries(): Entry<T>[];
91
+
92
+ /**
93
+ * Returns first result.
94
+ */
95
+ first(opts?: RunOptions): Promise<T>;
96
+
97
+ /**
98
+ * Returns first result if there is one.
99
+ */
100
+ firstOrUndefined(opts?: RunOptions): Promise<T | undefined>;
101
+
102
+ /**
103
+ * Subscribes to changes in query results.
104
+ */
105
+ subscribe(callback?: (query: QueryResult<T>) => void, opts?: SubscriptionOptions): CleanupFn;
106
+ }