@dxos/echo 0.8.4-main.fd6878d → 0.8.4-staging.60fe92afc8

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 (567) hide show
  1. package/LICENSE +102 -5
  2. package/README.md +10 -11
  3. package/dist/lib/neutral/Annotation.mjs +68 -0
  4. package/dist/lib/neutral/Database.mjs +38 -0
  5. package/dist/lib/neutral/Entity.mjs +72 -0
  6. package/dist/lib/neutral/Entity.mjs.map +7 -0
  7. package/dist/lib/neutral/Err.mjs +12 -0
  8. package/dist/lib/neutral/Err.mjs.map +7 -0
  9. package/dist/lib/neutral/Feed.mjs +54 -0
  10. package/dist/lib/neutral/Feed.mjs.map +7 -0
  11. package/dist/lib/neutral/Filter.mjs +70 -0
  12. package/dist/lib/neutral/Filter.mjs.map +7 -0
  13. package/dist/lib/neutral/Format.mjs +86 -0
  14. package/dist/lib/neutral/Format.mjs.map +7 -0
  15. package/dist/lib/neutral/JsonSchema.mjs +18 -0
  16. package/dist/lib/neutral/JsonSchema.mjs.map +7 -0
  17. package/dist/lib/neutral/Key.mjs +16 -0
  18. package/dist/lib/neutral/Key.mjs.map +7 -0
  19. package/dist/lib/neutral/Migration.mjs +18 -0
  20. package/dist/lib/neutral/Migration.mjs.map +7 -0
  21. package/dist/lib/neutral/Obj.mjs +122 -0
  22. package/dist/lib/neutral/Obj.mjs.map +7 -0
  23. package/dist/lib/neutral/Order.mjs +16 -0
  24. package/dist/lib/neutral/Order.mjs.map +7 -0
  25. package/dist/lib/neutral/Query.mjs +38 -0
  26. package/dist/lib/neutral/Query.mjs.map +7 -0
  27. package/dist/lib/neutral/QueryResult.mjs +2 -0
  28. package/dist/lib/neutral/QueryResult.mjs.map +7 -0
  29. package/dist/lib/neutral/Ref.mjs +25 -0
  30. package/dist/lib/neutral/Ref.mjs.map +7 -0
  31. package/dist/lib/neutral/Registry.mjs +14 -0
  32. package/dist/lib/neutral/Registry.mjs.map +7 -0
  33. package/dist/lib/neutral/Relation.mjs +97 -0
  34. package/dist/lib/neutral/Relation.mjs.map +7 -0
  35. package/dist/lib/neutral/Scope.mjs +12 -0
  36. package/dist/lib/neutral/Scope.mjs.map +7 -0
  37. package/dist/lib/neutral/Tag.mjs +32 -0
  38. package/dist/lib/neutral/Tag.mjs.map +7 -0
  39. package/dist/lib/neutral/Type.mjs +65 -0
  40. package/dist/lib/neutral/Type.mjs.map +7 -0
  41. package/dist/lib/neutral/chunk-35INCYOE.mjs +7 -0
  42. package/dist/lib/neutral/chunk-35INCYOE.mjs.map +7 -0
  43. package/dist/lib/neutral/chunk-3PBP4V4O.mjs +101 -0
  44. package/dist/lib/neutral/chunk-3PBP4V4O.mjs.map +7 -0
  45. package/dist/lib/neutral/chunk-4ZUHOTCG.mjs +184 -0
  46. package/dist/lib/neutral/chunk-4ZUHOTCG.mjs.map +7 -0
  47. package/dist/lib/neutral/chunk-5SMDBFVB.mjs +108 -0
  48. package/dist/lib/neutral/chunk-5SMDBFVB.mjs.map +7 -0
  49. package/dist/lib/neutral/chunk-5SUJPHAE.mjs +34 -0
  50. package/dist/lib/neutral/chunk-5SUJPHAE.mjs.map +7 -0
  51. package/dist/lib/neutral/chunk-6M2Z6WBH.mjs +93 -0
  52. package/dist/lib/neutral/chunk-6M2Z6WBH.mjs.map +7 -0
  53. package/dist/lib/neutral/chunk-6YDI3J37.mjs +346 -0
  54. package/dist/lib/neutral/chunk-6YDI3J37.mjs.map +7 -0
  55. package/dist/lib/neutral/chunk-7FPIAJIV.mjs +2279 -0
  56. package/dist/lib/neutral/chunk-7FPIAJIV.mjs.map +7 -0
  57. package/dist/lib/neutral/chunk-7LOUAPYZ.mjs +25 -0
  58. package/dist/lib/neutral/chunk-7LOUAPYZ.mjs.map +7 -0
  59. package/dist/lib/neutral/chunk-7PI7C4EF.mjs +747 -0
  60. package/dist/lib/neutral/chunk-7PI7C4EF.mjs.map +7 -0
  61. package/dist/lib/neutral/chunk-BBFJWWAV.mjs +51 -0
  62. package/dist/lib/neutral/chunk-BBFJWWAV.mjs.map +7 -0
  63. package/dist/lib/neutral/chunk-EVK6XBXO.mjs +56 -0
  64. package/dist/lib/neutral/chunk-EVK6XBXO.mjs.map +7 -0
  65. package/dist/lib/neutral/chunk-IGK6FN65.mjs +27 -0
  66. package/dist/lib/neutral/chunk-IGK6FN65.mjs.map +7 -0
  67. package/dist/lib/neutral/chunk-J5LGTIGS.mjs +10 -0
  68. package/dist/lib/neutral/chunk-J5LGTIGS.mjs.map +7 -0
  69. package/dist/lib/neutral/chunk-LWXVKPPW.mjs +281 -0
  70. package/dist/lib/neutral/chunk-LWXVKPPW.mjs.map +7 -0
  71. package/dist/lib/neutral/chunk-MZ7K3MLL.mjs +48 -0
  72. package/dist/lib/neutral/chunk-MZ7K3MLL.mjs.map +7 -0
  73. package/dist/lib/neutral/chunk-O6BH7EPN.mjs +94 -0
  74. package/dist/lib/neutral/chunk-O6BH7EPN.mjs.map +7 -0
  75. package/dist/lib/neutral/chunk-QQIYS74I.mjs +336 -0
  76. package/dist/lib/neutral/chunk-QQIYS74I.mjs.map +7 -0
  77. package/dist/lib/neutral/chunk-R5W6DXR4.mjs +678 -0
  78. package/dist/lib/neutral/chunk-R5W6DXR4.mjs.map +7 -0
  79. package/dist/lib/neutral/chunk-RIVWNMSF.mjs +41 -0
  80. package/dist/lib/neutral/chunk-RIVWNMSF.mjs.map +7 -0
  81. package/dist/lib/neutral/chunk-SBVFRTST.mjs +160 -0
  82. package/dist/lib/neutral/chunk-SBVFRTST.mjs.map +7 -0
  83. package/dist/lib/neutral/chunk-T6E37YIP.mjs +251 -0
  84. package/dist/lib/neutral/chunk-T6E37YIP.mjs.map +7 -0
  85. package/dist/lib/neutral/chunk-TFEWTY5A.mjs +428 -0
  86. package/dist/lib/neutral/chunk-TFEWTY5A.mjs.map +7 -0
  87. package/dist/lib/neutral/chunk-TYGKCRMK.mjs +437 -0
  88. package/dist/lib/neutral/chunk-TYGKCRMK.mjs.map +7 -0
  89. package/dist/lib/neutral/chunk-UUP46KUQ.mjs +205 -0
  90. package/dist/lib/neutral/chunk-UUP46KUQ.mjs.map +7 -0
  91. package/dist/lib/neutral/chunk-WISOH2XH.mjs +36 -0
  92. package/dist/lib/neutral/chunk-WISOH2XH.mjs.map +7 -0
  93. package/dist/lib/neutral/chunk-WTQJHC75.mjs +395 -0
  94. package/dist/lib/neutral/chunk-WTQJHC75.mjs.map +7 -0
  95. package/dist/lib/neutral/chunk-WU3GIANS.mjs +31 -0
  96. package/dist/lib/neutral/chunk-WU3GIANS.mjs.map +7 -0
  97. package/dist/lib/neutral/chunk-ZGNNFYHS.mjs +132 -0
  98. package/dist/lib/neutral/chunk-ZGNNFYHS.mjs.map +7 -0
  99. package/dist/lib/neutral/index.mjs +111 -0
  100. package/dist/lib/neutral/index.mjs.map +7 -0
  101. package/dist/lib/neutral/internal/index.mjs +539 -0
  102. package/dist/lib/neutral/internal/index.mjs.map +7 -0
  103. package/dist/lib/neutral/meta.json +1 -0
  104. package/dist/lib/neutral/testing/index.mjs +458 -0
  105. package/dist/lib/neutral/testing/index.mjs.map +7 -0
  106. package/dist/types/src/Annotation.d.ts +128 -0
  107. package/dist/types/src/Annotation.d.ts.map +1 -0
  108. package/dist/types/src/Annotation.test.d.ts +2 -0
  109. package/dist/types/src/Annotation.test.d.ts.map +1 -0
  110. package/dist/types/src/Collection.d.ts +15 -0
  111. package/dist/types/src/Collection.d.ts.map +1 -0
  112. package/dist/types/src/Database.d.ts +208 -0
  113. package/dist/types/src/Database.d.ts.map +1 -0
  114. package/dist/types/src/Dataset.d.ts +29 -0
  115. package/dist/types/src/Dataset.d.ts.map +1 -0
  116. package/dist/types/src/Entity.d.ts +247 -0
  117. package/dist/types/src/Entity.d.ts.map +1 -0
  118. package/dist/types/src/Entity.test.d.ts +2 -0
  119. package/dist/types/src/Entity.test.d.ts.map +1 -0
  120. package/dist/types/src/Err.d.ts +107 -0
  121. package/dist/types/src/Err.d.ts.map +1 -0
  122. package/dist/types/src/Feed.d.ts +229 -0
  123. package/dist/types/src/Feed.d.ts.map +1 -0
  124. package/dist/types/src/Filter.d.ts +175 -0
  125. package/dist/types/src/Filter.d.ts.map +1 -0
  126. package/dist/types/src/Filter.test.d.ts +2 -0
  127. package/dist/types/src/Filter.test.d.ts.map +1 -0
  128. package/dist/types/src/Format.d.ts +2 -0
  129. package/dist/types/src/Format.d.ts.map +1 -0
  130. package/dist/types/src/Hypergraph.d.ts +70 -0
  131. package/dist/types/src/Hypergraph.d.ts.map +1 -0
  132. package/dist/types/src/Json.d.ts +33 -0
  133. package/dist/types/src/Json.d.ts.map +1 -0
  134. package/dist/types/src/Json.test.d.ts +2 -0
  135. package/dist/types/src/Json.test.d.ts.map +1 -0
  136. package/dist/types/src/JsonSchema.d.ts +16 -0
  137. package/dist/types/src/JsonSchema.d.ts.map +1 -0
  138. package/dist/types/src/Key.d.ts +2 -1
  139. package/dist/types/src/Key.d.ts.map +1 -1
  140. package/dist/types/src/Migration.d.ts +72 -0
  141. package/dist/types/src/Migration.d.ts.map +1 -0
  142. package/dist/types/src/Obj.d.ts +514 -53
  143. package/dist/types/src/Obj.d.ts.map +1 -1
  144. package/dist/types/src/Obj.test.d.ts +2 -0
  145. package/dist/types/src/Obj.test.d.ts.map +1 -0
  146. package/dist/types/src/Order.d.ts +26 -0
  147. package/dist/types/src/Order.d.ts.map +1 -0
  148. package/dist/types/src/Query.d.ts +231 -0
  149. package/dist/types/src/Query.d.ts.map +1 -0
  150. package/dist/types/src/Query.test.d.ts +2 -0
  151. package/dist/types/src/Query.test.d.ts.map +1 -0
  152. package/dist/types/src/QueryResult.d.ts +101 -0
  153. package/dist/types/src/QueryResult.d.ts.map +1 -0
  154. package/dist/types/src/Ref.d.ts +69 -11
  155. package/dist/types/src/Ref.d.ts.map +1 -1
  156. package/dist/types/src/Registry.d.ts +131 -0
  157. package/dist/types/src/Registry.d.ts.map +1 -0
  158. package/dist/types/src/Relation.d.ts +323 -24
  159. package/dist/types/src/Relation.d.ts.map +1 -1
  160. package/dist/types/src/Relation.test.d.ts +2 -0
  161. package/dist/types/src/Relation.test.d.ts.map +1 -0
  162. package/dist/types/src/Scope.d.ts +35 -0
  163. package/dist/types/src/Scope.d.ts.map +1 -0
  164. package/dist/types/src/Tag.d.ts +34 -0
  165. package/dist/types/src/Tag.d.ts.map +1 -0
  166. package/dist/types/src/Type.d.ts +397 -107
  167. package/dist/types/src/Type.d.ts.map +1 -1
  168. package/dist/types/src/Type.test.d.ts +2 -0
  169. package/dist/types/src/Type.test.d.ts.map +1 -0
  170. package/dist/types/src/View.d.ts +65 -0
  171. package/dist/types/src/View.d.ts.map +1 -0
  172. package/dist/types/src/exemplars.test.d.ts +2 -0
  173. package/dist/types/src/exemplars.test.d.ts.map +1 -0
  174. package/dist/types/src/hierarchy.test.d.ts +2 -0
  175. package/dist/types/src/hierarchy.test.d.ts.map +1 -0
  176. package/dist/types/src/index.d.ts +22 -3
  177. package/dist/types/src/index.d.ts.map +1 -1
  178. package/dist/types/src/internal/Annotation/annotations.d.ts +272 -0
  179. package/dist/types/src/internal/Annotation/annotations.d.ts.map +1 -0
  180. package/dist/types/src/internal/Annotation/annotations.test.d.ts +2 -0
  181. package/dist/types/src/internal/Annotation/annotations.test.d.ts.map +1 -0
  182. package/dist/types/src/internal/Annotation/dictionary.d.ts +24 -0
  183. package/dist/types/src/internal/Annotation/dictionary.d.ts.map +1 -0
  184. package/dist/types/src/internal/Annotation/entity-dictionary.d.ts +14 -0
  185. package/dist/types/src/internal/Annotation/entity-dictionary.d.ts.map +1 -0
  186. package/dist/types/src/internal/Annotation/index.d.ts +6 -0
  187. package/dist/types/src/internal/Annotation/index.d.ts.map +1 -0
  188. package/dist/types/src/internal/Annotation/sorting.d.ts +24 -0
  189. package/dist/types/src/internal/Annotation/sorting.d.ts.map +1 -0
  190. package/dist/types/src/internal/Annotation/util.d.ts +48 -0
  191. package/dist/types/src/internal/Annotation/util.d.ts.map +1 -0
  192. package/dist/types/src/internal/Entity/api.d.ts +27 -0
  193. package/dist/types/src/internal/Entity/api.d.ts.map +1 -0
  194. package/dist/types/src/internal/Entity/entity.d.ts +84 -0
  195. package/dist/types/src/internal/Entity/entity.d.ts.map +1 -0
  196. package/dist/types/src/internal/Entity/guard.d.ts +10 -0
  197. package/dist/types/src/internal/Entity/guard.d.ts.map +1 -0
  198. package/dist/types/src/internal/Entity/index.d.ts +10 -0
  199. package/dist/types/src/internal/Entity/index.d.ts.map +1 -0
  200. package/dist/types/src/internal/Entity/model.d.ts +59 -0
  201. package/dist/types/src/internal/Entity/model.d.ts.map +1 -0
  202. package/dist/types/src/internal/Entity/object.d.ts +18 -0
  203. package/dist/types/src/internal/Entity/object.d.ts.map +1 -0
  204. package/dist/types/src/internal/Entity/relation.d.ts +58 -0
  205. package/dist/types/src/internal/Entity/relation.d.ts.map +1 -0
  206. package/dist/types/src/internal/Entity/type-kind.d.ts +24 -0
  207. package/dist/types/src/internal/Entity/type-kind.d.ts.map +1 -0
  208. package/dist/types/src/internal/Entity/type-uri.d.ts +24 -0
  209. package/dist/types/src/internal/Entity/type-uri.d.ts.map +1 -0
  210. package/dist/types/src/internal/Entity/util.d.ts +2 -0
  211. package/dist/types/src/internal/Entity/util.d.ts.map +1 -0
  212. package/dist/types/src/internal/Entity/version.d.ts +42 -0
  213. package/dist/types/src/internal/Entity/version.d.ts.map +1 -0
  214. package/dist/types/src/internal/Format/date.d.ts +63 -0
  215. package/dist/types/src/internal/Format/date.d.ts.map +1 -0
  216. package/dist/types/src/internal/Format/date.test.d.ts +2 -0
  217. package/dist/types/src/internal/Format/date.test.d.ts.map +1 -0
  218. package/dist/types/src/internal/Format/format.d.ts +33 -0
  219. package/dist/types/src/internal/Format/format.d.ts.map +1 -0
  220. package/dist/types/src/internal/Format/format.test.d.ts +2 -0
  221. package/dist/types/src/internal/Format/format.test.d.ts.map +1 -0
  222. package/dist/types/src/internal/Format/index.d.ts +8 -0
  223. package/dist/types/src/internal/Format/index.d.ts.map +1 -0
  224. package/dist/types/src/internal/Format/number.d.ts +31 -0
  225. package/dist/types/src/internal/Format/number.d.ts.map +1 -0
  226. package/dist/types/src/internal/Format/object.d.ts +37 -0
  227. package/dist/types/src/internal/Format/object.d.ts.map +1 -0
  228. package/dist/types/src/internal/Format/select.d.ts +13 -0
  229. package/dist/types/src/internal/Format/select.d.ts.map +1 -0
  230. package/dist/types/src/internal/Format/string.d.ts +42 -0
  231. package/dist/types/src/internal/Format/string.d.ts.map +1 -0
  232. package/dist/types/src/internal/Format/types.d.ts +72 -0
  233. package/dist/types/src/internal/Format/types.d.ts.map +1 -0
  234. package/dist/types/src/internal/JsonSchema/annotations.d.ts +19 -0
  235. package/dist/types/src/internal/JsonSchema/annotations.d.ts.map +1 -0
  236. package/dist/types/src/internal/JsonSchema/effect-schema.test.d.ts +2 -0
  237. package/dist/types/src/internal/JsonSchema/effect-schema.test.d.ts.map +1 -0
  238. package/dist/types/src/internal/JsonSchema/index.d.ts +5 -0
  239. package/dist/types/src/internal/JsonSchema/index.d.ts.map +1 -0
  240. package/dist/types/src/internal/JsonSchema/json-schema-normalize.d.ts +7 -0
  241. package/dist/types/src/internal/JsonSchema/json-schema-normalize.d.ts.map +1 -0
  242. package/dist/types/src/internal/JsonSchema/json-schema-type.d.ts +351 -0
  243. package/dist/types/src/internal/JsonSchema/json-schema-type.d.ts.map +1 -0
  244. package/dist/types/src/internal/JsonSchema/json-schema.d.ts +31 -0
  245. package/dist/types/src/internal/JsonSchema/json-schema.d.ts.map +1 -0
  246. package/dist/types/src/internal/JsonSchema/json-schema.test.d.ts +2 -0
  247. package/dist/types/src/internal/JsonSchema/json-schema.test.d.ts.map +1 -0
  248. package/dist/types/src/internal/Obj/atoms.d.ts +38 -0
  249. package/dist/types/src/internal/Obj/atoms.d.ts.map +1 -0
  250. package/dist/types/src/internal/Obj/clone.d.ts +8 -0
  251. package/dist/types/src/internal/Obj/clone.d.ts.map +1 -0
  252. package/dist/types/src/internal/Obj/common.d.ts +18 -0
  253. package/dist/types/src/internal/Obj/common.d.ts.map +1 -0
  254. package/dist/types/src/internal/Obj/create-object.d.ts +39 -0
  255. package/dist/types/src/internal/Obj/create-object.d.ts.map +1 -0
  256. package/dist/types/src/internal/Obj/create-object.test.d.ts +2 -0
  257. package/dist/types/src/internal/Obj/create-object.test.d.ts.map +1 -0
  258. package/dist/types/src/internal/Obj/deleted.d.ts +6 -0
  259. package/dist/types/src/internal/Obj/deleted.d.ts.map +1 -0
  260. package/dist/types/src/internal/Obj/index.d.ts +11 -0
  261. package/dist/types/src/internal/Obj/index.d.ts.map +1 -0
  262. package/dist/types/src/internal/Obj/inspect.d.ts +2 -0
  263. package/dist/types/src/internal/Obj/inspect.d.ts.map +1 -0
  264. package/dist/types/src/internal/Obj/json-serializer.d.ts +45 -0
  265. package/dist/types/src/internal/Obj/json-serializer.d.ts.map +1 -0
  266. package/dist/types/src/internal/Obj/json-serializer.test.d.ts +2 -0
  267. package/dist/types/src/internal/Obj/json-serializer.test.d.ts.map +1 -0
  268. package/dist/types/src/internal/Obj/schema-validator.d.ts +2 -0
  269. package/dist/types/src/internal/Obj/schema-validator.d.ts.map +1 -0
  270. package/dist/types/src/internal/Obj/schema-validator.test.d.ts +2 -0
  271. package/dist/types/src/internal/Obj/schema-validator.test.d.ts.map +1 -0
  272. package/dist/types/src/internal/Obj/set-value.d.ts +7 -0
  273. package/dist/types/src/internal/Obj/set-value.d.ts.map +1 -0
  274. package/dist/types/src/internal/Obj/set-value.test.d.ts +2 -0
  275. package/dist/types/src/internal/Obj/set-value.test.d.ts.map +1 -0
  276. package/dist/types/src/internal/Obj/snapshot.d.ts +6 -0
  277. package/dist/types/src/internal/Obj/snapshot.d.ts.map +1 -0
  278. package/dist/types/src/internal/Obj/typed-object.d.ts +25 -0
  279. package/dist/types/src/internal/Obj/typed-object.d.ts.map +1 -0
  280. package/dist/types/src/internal/Obj/typed-object.test.d.ts +2 -0
  281. package/dist/types/src/internal/Obj/typed-object.test.d.ts.map +1 -0
  282. package/dist/types/src/internal/Query/index.d.ts +2 -0
  283. package/dist/types/src/internal/Query/index.d.ts.map +1 -0
  284. package/dist/types/src/internal/Query/pretty.d.ts +10 -0
  285. package/dist/types/src/internal/Query/pretty.d.ts.map +1 -0
  286. package/dist/types/src/internal/Ref/atoms.d.ts +10 -0
  287. package/dist/types/src/internal/Ref/atoms.d.ts.map +1 -0
  288. package/dist/types/src/internal/Ref/index.d.ts +3 -0
  289. package/dist/types/src/internal/Ref/index.d.ts.map +1 -0
  290. package/dist/types/src/internal/Ref/ref-array.d.ts +21 -0
  291. package/dist/types/src/internal/Ref/ref-array.d.ts.map +1 -0
  292. package/dist/types/src/internal/Ref/ref.d.ts +262 -0
  293. package/dist/types/src/internal/Ref/ref.d.ts.map +1 -0
  294. package/dist/types/src/internal/Ref/ref.test.d.ts +2 -0
  295. package/dist/types/src/internal/Ref/ref.test.d.ts.map +1 -0
  296. package/dist/types/src/internal/Ref/utils.d.ts +8 -0
  297. package/dist/types/src/internal/Ref/utils.d.ts.map +1 -0
  298. package/dist/types/src/internal/Type/compose.d.ts +7 -0
  299. package/dist/types/src/internal/Type/compose.d.ts.map +1 -0
  300. package/dist/types/src/internal/Type/compose.test.d.ts +2 -0
  301. package/dist/types/src/internal/Type/compose.test.d.ts.map +1 -0
  302. package/dist/types/src/internal/Type/index.d.ts +3 -0
  303. package/dist/types/src/internal/Type/index.d.ts.map +1 -0
  304. package/dist/types/src/internal/Type/manipulation.d.ts +9 -0
  305. package/dist/types/src/internal/Type/manipulation.d.ts.map +1 -0
  306. package/dist/types/src/internal/Type/type-schema.d.ts +52 -0
  307. package/dist/types/src/internal/Type/type-schema.d.ts.map +1 -0
  308. package/dist/types/src/internal/common/api/index.d.ts +11 -0
  309. package/dist/types/src/internal/common/api/index.d.ts.map +1 -0
  310. package/dist/types/src/internal/common/api/meta.d.ts +45 -0
  311. package/dist/types/src/internal/common/api/meta.d.ts.map +1 -0
  312. package/dist/types/src/internal/common/index.d.ts +4 -0
  313. package/dist/types/src/internal/common/index.d.ts.map +1 -0
  314. package/dist/types/src/internal/common/proxy/change-context.d.ts +55 -0
  315. package/dist/types/src/internal/common/proxy/change-context.d.ts.map +1 -0
  316. package/dist/types/src/internal/common/proxy/change.test.d.ts +2 -0
  317. package/dist/types/src/internal/common/proxy/change.test.d.ts.map +1 -0
  318. package/dist/types/src/internal/common/proxy/define-hidden-property.d.ts +5 -0
  319. package/dist/types/src/internal/common/proxy/define-hidden-property.d.ts.map +1 -0
  320. package/dist/types/src/internal/common/proxy/errors.d.ts +19 -0
  321. package/dist/types/src/internal/common/proxy/errors.d.ts.map +1 -0
  322. package/dist/types/src/internal/common/proxy/event-batch.d.ts +10 -0
  323. package/dist/types/src/internal/common/proxy/event-batch.d.ts.map +1 -0
  324. package/dist/types/src/internal/common/proxy/handler.test.d.ts +2 -0
  325. package/dist/types/src/internal/common/proxy/handler.test.d.ts.map +1 -0
  326. package/dist/types/src/internal/common/proxy/index.d.ts +14 -0
  327. package/dist/types/src/internal/common/proxy/index.d.ts.map +1 -0
  328. package/dist/types/src/internal/common/proxy/json-serializer.d.ts +6 -0
  329. package/dist/types/src/internal/common/proxy/json-serializer.d.ts.map +1 -0
  330. package/dist/types/src/internal/common/proxy/make-object.d.ts +20 -0
  331. package/dist/types/src/internal/common/proxy/make-object.d.ts.map +1 -0
  332. package/dist/types/src/internal/common/proxy/ownership.d.ts +57 -0
  333. package/dist/types/src/internal/common/proxy/ownership.d.ts.map +1 -0
  334. package/dist/types/src/internal/common/proxy/proxy-types.d.ts +18 -0
  335. package/dist/types/src/internal/common/proxy/proxy-types.d.ts.map +1 -0
  336. package/dist/types/src/internal/common/proxy/proxy-utils.d.ts +47 -0
  337. package/dist/types/src/internal/common/proxy/proxy-utils.d.ts.map +1 -0
  338. package/dist/types/src/internal/common/proxy/reactive-array.d.ts +8 -0
  339. package/dist/types/src/internal/common/proxy/reactive-array.d.ts.map +1 -0
  340. package/dist/types/src/internal/common/proxy/reactive.d.ts +39 -0
  341. package/dist/types/src/internal/common/proxy/reactive.d.ts.map +1 -0
  342. package/dist/types/src/internal/common/proxy/reactive.test.d.ts +2 -0
  343. package/dist/types/src/internal/common/proxy/reactive.test.d.ts.map +1 -0
  344. package/dist/types/src/internal/common/proxy/schema-validator.d.ts +15 -0
  345. package/dist/types/src/internal/common/proxy/schema-validator.d.ts.map +1 -0
  346. package/dist/types/src/internal/common/proxy/schema.test.d.ts +2 -0
  347. package/dist/types/src/internal/common/proxy/schema.test.d.ts.map +1 -0
  348. package/dist/types/src/internal/common/proxy/symbols.d.ts +3 -0
  349. package/dist/types/src/internal/common/proxy/symbols.d.ts.map +1 -0
  350. package/dist/types/src/internal/common/proxy/typed-handler.d.ts +64 -0
  351. package/dist/types/src/internal/common/proxy/typed-handler.d.ts.map +1 -0
  352. package/dist/types/src/internal/common/proxy/typed-handler.test.d.ts +2 -0
  353. package/dist/types/src/internal/common/proxy/typed-handler.test.d.ts.map +1 -0
  354. package/dist/types/src/internal/common/proxy/typed-object.test.d.ts +2 -0
  355. package/dist/types/src/internal/common/proxy/typed-object.test.d.ts.map +1 -0
  356. package/dist/types/src/internal/common/types/base.d.ts +27 -0
  357. package/dist/types/src/internal/common/types/base.d.ts.map +1 -0
  358. package/dist/types/src/internal/common/types/entity.d.ts +94 -0
  359. package/dist/types/src/internal/common/types/entity.d.ts.map +1 -0
  360. package/dist/types/src/internal/common/types/index.d.ts +7 -0
  361. package/dist/types/src/internal/common/types/index.d.ts.map +1 -0
  362. package/dist/types/src/internal/common/types/meta.d.ts +54 -0
  363. package/dist/types/src/internal/common/types/meta.d.ts.map +1 -0
  364. package/dist/types/src/internal/common/types/model-symbols.d.ts +65 -0
  365. package/dist/types/src/internal/common/types/model-symbols.d.ts.map +1 -0
  366. package/dist/types/src/internal/common/types/typename.d.ts +28 -0
  367. package/dist/types/src/internal/common/types/typename.d.ts.map +1 -0
  368. package/dist/types/src/internal/common/types/version.d.ts +15 -0
  369. package/dist/types/src/internal/common/types/version.d.ts.map +1 -0
  370. package/dist/types/src/internal/common/types/well-known-types.d.ts +11 -0
  371. package/dist/types/src/internal/common/types/well-known-types.d.ts.map +1 -0
  372. package/dist/types/src/internal/index.d.ts +11 -0
  373. package/dist/types/src/internal/index.d.ts.map +1 -0
  374. package/dist/types/src/{test → testing}/api.test.d.ts.map +1 -1
  375. package/dist/types/src/testing/index.d.ts +4 -1
  376. package/dist/types/src/testing/index.d.ts.map +1 -1
  377. package/dist/types/src/testing/registry.d.ts +9 -0
  378. package/dist/types/src/testing/registry.d.ts.map +1 -0
  379. package/dist/types/src/testing/test-data.d.ts +18 -0
  380. package/dist/types/src/testing/test-data.d.ts.map +1 -0
  381. package/dist/types/src/testing/test-schema.d.ts +298 -0
  382. package/dist/types/src/testing/test-schema.d.ts.map +1 -0
  383. package/dist/types/src/testing/util.d.ts +23 -0
  384. package/dist/types/src/testing/util.d.ts.map +1 -0
  385. package/dist/types/tsconfig.tsbuildinfo +1 -1
  386. package/package.json +122 -57
  387. package/src/Annotation.test.ts +439 -0
  388. package/src/Annotation.ts +202 -0
  389. package/src/Collection.ts +33 -0
  390. package/src/Database.ts +345 -0
  391. package/src/Dataset.ts +34 -0
  392. package/src/Entity.test.ts +132 -0
  393. package/src/Entity.ts +345 -0
  394. package/src/Err.ts +40 -0
  395. package/src/Feed.ts +352 -0
  396. package/src/Filter.test.ts +90 -0
  397. package/src/Filter.ts +484 -0
  398. package/src/Format.ts +5 -0
  399. package/src/Hypergraph.ts +84 -0
  400. package/src/Json.test.ts +175 -0
  401. package/src/Json.ts +103 -0
  402. package/src/JsonSchema.ts +26 -0
  403. package/src/Key.ts +4 -1
  404. package/src/Migration.ts +114 -0
  405. package/src/Obj.test.ts +641 -0
  406. package/src/Obj.ts +836 -105
  407. package/src/Order.ts +68 -0
  408. package/src/Query.test.ts +835 -0
  409. package/src/Query.ts +634 -0
  410. package/src/QueryResult.ts +132 -0
  411. package/src/Ref.ts +97 -10
  412. package/src/Registry.ts +155 -0
  413. package/src/Relation.test.ts +88 -0
  414. package/src/Relation.ts +508 -61
  415. package/src/Scope.ts +50 -0
  416. package/src/Tag.md +88 -0
  417. package/src/Tag.ts +84 -0
  418. package/src/Type.test.ts +257 -0
  419. package/src/Type.ts +643 -152
  420. package/src/View.ts +98 -0
  421. package/src/exemplars.test.ts +21 -0
  422. package/src/hierarchy.test.ts +33 -0
  423. package/src/index.ts +24 -4
  424. package/src/internal/Annotation/annotations.test.ts +165 -0
  425. package/src/internal/Annotation/annotations.ts +609 -0
  426. package/src/internal/Annotation/dictionary.ts +47 -0
  427. package/src/internal/Annotation/entity-dictionary.ts +74 -0
  428. package/src/internal/Annotation/index.ts +9 -0
  429. package/src/internal/Annotation/sorting.ts +51 -0
  430. package/src/internal/Annotation/util.ts +94 -0
  431. package/src/internal/Entity/api.ts +77 -0
  432. package/src/internal/Entity/entity.ts +277 -0
  433. package/src/internal/Entity/guard.ts +26 -0
  434. package/src/internal/Entity/index.ts +13 -0
  435. package/src/internal/Entity/model.ts +119 -0
  436. package/src/internal/Entity/object.ts +73 -0
  437. package/src/internal/Entity/relation.ts +188 -0
  438. package/src/internal/Entity/type-kind.ts +75 -0
  439. package/src/internal/Entity/type-uri.ts +92 -0
  440. package/src/internal/Entity/util.ts +33 -0
  441. package/src/internal/Entity/version.ts +96 -0
  442. package/src/internal/Format/date.test.ts +55 -0
  443. package/src/internal/Format/date.ts +213 -0
  444. package/src/internal/Format/format.test.ts +97 -0
  445. package/src/internal/Format/format.ts +54 -0
  446. package/src/internal/Format/index.ts +11 -0
  447. package/src/internal/Format/number.ts +89 -0
  448. package/src/internal/Format/object.ts +97 -0
  449. package/src/internal/Format/select.ts +18 -0
  450. package/src/internal/Format/string.ts +81 -0
  451. package/src/internal/Format/types.ts +186 -0
  452. package/src/internal/JsonSchema/annotations.ts +50 -0
  453. package/src/internal/JsonSchema/effect-schema.test.ts +143 -0
  454. package/src/internal/JsonSchema/index.ts +8 -0
  455. package/src/internal/JsonSchema/json-schema-normalize.ts +111 -0
  456. package/src/internal/JsonSchema/json-schema-type.ts +403 -0
  457. package/src/internal/JsonSchema/json-schema.test.ts +786 -0
  458. package/src/internal/JsonSchema/json-schema.ts +547 -0
  459. package/src/internal/Obj/atoms.ts +244 -0
  460. package/src/internal/Obj/clone.ts +53 -0
  461. package/src/internal/Obj/common.ts +75 -0
  462. package/src/internal/Obj/create-object.test.ts +116 -0
  463. package/src/internal/Obj/create-object.ts +140 -0
  464. package/src/internal/Obj/deleted.ts +19 -0
  465. package/src/internal/Obj/index.ts +14 -0
  466. package/src/internal/Obj/inspect.ts +48 -0
  467. package/src/internal/Obj/json-serializer.test.ts +199 -0
  468. package/src/internal/Obj/json-serializer.ts +278 -0
  469. package/src/internal/Obj/schema-validator.test.ts +182 -0
  470. package/src/internal/Obj/schema-validator.ts +6 -0
  471. package/src/internal/Obj/set-value.test.ts +258 -0
  472. package/src/internal/Obj/set-value.ts +158 -0
  473. package/src/internal/Obj/snapshot.ts +114 -0
  474. package/src/internal/Obj/typed-object.test.ts +32 -0
  475. package/src/internal/Obj/typed-object.ts +30 -0
  476. package/src/{query → internal/Query}/index.ts +1 -1
  477. package/src/internal/Query/pretty.ts +162 -0
  478. package/src/internal/Ref/atoms.ts +20 -0
  479. package/src/internal/Ref/index.ts +6 -0
  480. package/src/internal/Ref/ref-array.ts +38 -0
  481. package/src/internal/Ref/ref.test.ts +91 -0
  482. package/src/internal/Ref/ref.ts +650 -0
  483. package/src/internal/Ref/utils.ts +45 -0
  484. package/src/internal/Type/compose.test.ts +43 -0
  485. package/src/internal/Type/compose.ts +41 -0
  486. package/src/internal/Type/index.ts +6 -0
  487. package/src/internal/Type/manipulation.ts +67 -0
  488. package/src/internal/Type/type-schema.ts +60 -0
  489. package/src/internal/common/README.md +102 -0
  490. package/src/internal/common/api/index.ts +15 -0
  491. package/src/internal/common/api/meta.ts +90 -0
  492. package/src/internal/common/index.ts +7 -0
  493. package/src/internal/common/proxy/change-context.ts +138 -0
  494. package/src/internal/common/proxy/change.test.ts +527 -0
  495. package/src/internal/common/proxy/define-hidden-property.ts +14 -0
  496. package/src/internal/common/proxy/errors.ts +42 -0
  497. package/src/internal/common/proxy/event-batch.ts +44 -0
  498. package/src/internal/common/proxy/handler.test.ts +121 -0
  499. package/src/internal/common/proxy/index.ts +17 -0
  500. package/src/internal/common/proxy/json-serializer.ts +101 -0
  501. package/src/internal/common/proxy/make-object.ts +129 -0
  502. package/src/internal/common/proxy/ownership.ts +252 -0
  503. package/src/internal/common/proxy/proxy-types.ts +23 -0
  504. package/src/internal/common/proxy/proxy-utils.ts +150 -0
  505. package/src/internal/common/proxy/reactive-array.ts +71 -0
  506. package/src/internal/common/proxy/reactive.test.ts +54 -0
  507. package/src/internal/common/proxy/reactive.ts +77 -0
  508. package/src/internal/common/proxy/schema-validator.ts +244 -0
  509. package/src/internal/common/proxy/schema.test.ts +107 -0
  510. package/src/internal/common/proxy/symbols.ts +7 -0
  511. package/src/internal/common/proxy/typed-handler.test.ts +314 -0
  512. package/src/internal/common/proxy/typed-handler.ts +509 -0
  513. package/src/internal/common/proxy/typed-object.test.ts +103 -0
  514. package/src/internal/common/types/base.ts +43 -0
  515. package/src/internal/common/types/entity.ts +133 -0
  516. package/src/internal/common/types/index.ts +15 -0
  517. package/src/internal/common/types/meta.ts +109 -0
  518. package/src/internal/common/types/model-symbols.ts +89 -0
  519. package/src/internal/common/types/typename.ts +91 -0
  520. package/src/internal/common/types/version.ts +19 -0
  521. package/src/internal/common/types/well-known-types.ts +15 -0
  522. package/src/internal/index.ts +19 -0
  523. package/src/testing/api.test.ts +131 -0
  524. package/src/testing/index.ts +4 -1
  525. package/src/testing/registry.ts +44 -0
  526. package/src/testing/test-data.ts +189 -0
  527. package/src/testing/test-schema.ts +204 -0
  528. package/src/testing/util.ts +88 -0
  529. package/dist/lib/browser/chunk-NLPBTYZV.mjs +0 -647
  530. package/dist/lib/browser/chunk-NLPBTYZV.mjs.map +0 -7
  531. package/dist/lib/browser/index.mjs +0 -22
  532. package/dist/lib/browser/meta.json +0 -1
  533. package/dist/lib/browser/testing/index.mjs +0 -70
  534. package/dist/lib/browser/testing/index.mjs.map +0 -7
  535. package/dist/lib/node-esm/chunk-BQZZRMFX.mjs +0 -647
  536. package/dist/lib/node-esm/chunk-BQZZRMFX.mjs.map +0 -7
  537. package/dist/lib/node-esm/index.mjs +0 -22
  538. package/dist/lib/node-esm/meta.json +0 -1
  539. package/dist/lib/node-esm/testing/index.mjs +0 -70
  540. package/dist/lib/node-esm/testing/index.mjs.map +0 -7
  541. package/dist/types/src/experimental/database.d.ts +0 -8
  542. package/dist/types/src/experimental/database.d.ts.map +0 -1
  543. package/dist/types/src/experimental/index.d.ts +0 -1
  544. package/dist/types/src/experimental/index.d.ts.map +0 -1
  545. package/dist/types/src/experimental/queue.d.ts +0 -8
  546. package/dist/types/src/experimental/queue.d.ts.map +0 -1
  547. package/dist/types/src/experimental/space.d.ts +0 -8
  548. package/dist/types/src/experimental/space.d.ts.map +0 -1
  549. package/dist/types/src/query/dsl.d.ts +0 -218
  550. package/dist/types/src/query/dsl.d.ts.map +0 -1
  551. package/dist/types/src/query/dsl.test.d.ts +0 -2
  552. package/dist/types/src/query/dsl.test.d.ts.map +0 -1
  553. package/dist/types/src/query/index.d.ts +0 -2
  554. package/dist/types/src/query/index.d.ts.map +0 -1
  555. package/dist/types/src/testing/types.d.ts +0 -113
  556. package/dist/types/src/testing/types.d.ts.map +0 -1
  557. package/src/experimental/database.ts +0 -11
  558. package/src/experimental/index.ts +0 -7
  559. package/src/experimental/queue.ts +0 -11
  560. package/src/experimental/space.ts +0 -11
  561. package/src/query/dsl.test.ts +0 -324
  562. package/src/query/dsl.ts +0 -646
  563. package/src/test/api.test.ts +0 -173
  564. package/src/testing/types.ts +0 -91
  565. /package/dist/lib/{browser/index.mjs.map → neutral/Annotation.mjs.map} +0 -0
  566. /package/dist/lib/{node-esm/index.mjs.map → neutral/Database.mjs.map} +0 -0
  567. /package/dist/types/src/{test → testing}/api.test.d.ts +0 -0
package/src/Filter.ts ADDED
@@ -0,0 +1,484 @@
1
+ //
2
+ // Copyright 2025 DXOS.org
3
+ //
4
+
5
+ // @import-as-namespace
6
+
7
+ import * as Match from 'effect/Match';
8
+ import * as Schema from 'effect/Schema';
9
+ import * as SchemaAST from 'effect/SchemaAST';
10
+ import type * as Types from 'effect/Types';
11
+
12
+ import { type ForeignKey, type QueryAST } from '@dxos/echo-protocol';
13
+ import { assertArgument } from '@dxos/invariant';
14
+ import { EID, EntityId, type URI } from '@dxos/keys';
15
+
16
+ import * as internal from './internal';
17
+ import type * as Obj from './Obj';
18
+ import * as Ref from './Ref';
19
+ // eslint-disable-next-line @dxos/rules/import-as-namespace
20
+ import type * as Type$ from './Type';
21
+
22
+ export interface Filter<T> {
23
+ // TODO(dmaretskyi): See new effect-schema approach to variance.
24
+ '~Filter': { value: Types.Covariant<T> };
25
+
26
+ ast: QueryAST.Filter;
27
+ }
28
+
29
+ export type Props<T> = {
30
+ // Predicate or a value as a shorthand for `eq`.
31
+ [K in keyof T & string]?: Filter<T[K]> | T[K];
32
+ };
33
+
34
+ export type Any = Filter<any>;
35
+
36
+ export type Type<F extends Any> = F extends Filter<infer T> ? T : never;
37
+
38
+ class FilterClass implements Any {
39
+ private static 'variance': Any['~Filter'] = {} as Any['~Filter'];
40
+
41
+ constructor(public readonly ast: QueryAST.Filter) {}
42
+
43
+ '~Filter' = FilterClass.variance;
44
+ }
45
+
46
+ export const is = (value: unknown): value is Any => {
47
+ return typeof value === 'object' && value !== null && '~Filter' in value;
48
+ };
49
+
50
+ /** Construct a filter from an ast. */
51
+ export const fromAst = (ast: QueryAST.Filter): Any => {
52
+ return new FilterClass(ast);
53
+ };
54
+
55
+ /**
56
+ * Filter that matches all objects.
57
+ */
58
+ // TODO(dmaretskyi): `Entity.Any` would be more type-safe, but causes annoying errors in existing code
59
+ export const everything = (): FilterClass => {
60
+ return new FilterClass({
61
+ type: 'object',
62
+ typename: null,
63
+ props: {},
64
+ });
65
+ };
66
+
67
+ /**
68
+ * Filter that matches no objects.
69
+ */
70
+ export const nothing = (): FilterClass => {
71
+ return new FilterClass({
72
+ type: 'not',
73
+ filter: {
74
+ type: 'object',
75
+ typename: null,
76
+ props: {},
77
+ },
78
+ });
79
+ };
80
+
81
+ /*
82
+ * Filter by EntityId.
83
+ */
84
+ export const id = (...ids: EntityId[]): Any => {
85
+ assertArgument(
86
+ ids.every((id) => EntityId.isValid(id)),
87
+ 'ids',
88
+ 'ids must be valid',
89
+ );
90
+
91
+ if (ids.length === 0) {
92
+ return nothing();
93
+ }
94
+
95
+ return new FilterClass({
96
+ type: 'object',
97
+ typename: null,
98
+ id: ids,
99
+ props: {},
100
+ });
101
+ };
102
+
103
+ /**
104
+ * Filter by type.
105
+ *
106
+ * Accepts a `Type.Type` entity (the value produced by `Type.makeObject` /
107
+ * `Type.makeRelation`), a `Schema.Union` of such entities (for filtering across a
108
+ * union of ECHO types), or a fully-qualified type URI — an `echo:` EID (stored schema)
109
+ * or a `dxn:` DXN (static schema). To filter by a bare typename, wrap it: `DXN.make(typename)`.
110
+ */
111
+ export const type: {
112
+ <T extends Type$.AnyEntity>(type: T, props?: Props<Type$.InstanceType<T>>): Filter<Type$.InstanceType<T>>;
113
+ // Schema-side overload restricted to the well-known unknown schemas and to
114
+ // `Schema.Union(...)` of `Type.Type` entities (for filtering across a union
115
+ // of ECHO types). Other raw schemas are rejected.
116
+ <S extends internal.UnknownTypeSchema<any, any>>(
117
+ schema: S,
118
+ props?: Props<Schema.Schema.Type<S>>,
119
+ ): Filter<Schema.Schema.Type<S>>;
120
+ <S extends Schema.Union<readonly Schema.Schema.AnyNoContext[]>>(
121
+ union: S,
122
+ props?: Props<Schema.Schema.Type<S>>,
123
+ ): Filter<Schema.Schema.Type<S>>;
124
+ (uri: URI.URI, props?: Props<unknown>): Filter<any>;
125
+ // Passthrough overload for callers that hold a `Type.AnyEntity | URI.URI` union
126
+ // (e.g. Query.type / Query.sourceOf / Query.targetOf impls). Listed last so the
127
+ // typed overloads above still win for monomorphic inputs.
128
+ (input: Type$.AnyEntity | URI.URI, props?: Props<unknown>): Filter<unknown>;
129
+ } = (input: Type$.AnyEntity | Schema.Schema.AnyNoContext | URI.URI, props?: Props<unknown>): any => {
130
+ if (Schema.isSchema(input) && SchemaAST.isUnion(input.ast)) {
131
+ const typenames = input.ast.types.map((t) => internal.getTypeURIFromSpecifier(Schema.make(t)));
132
+ return new FilterClass({
133
+ type: 'or',
134
+ filters: typenames.map((typename) => ({
135
+ type: 'object',
136
+ typename,
137
+ props: {},
138
+ })),
139
+ });
140
+ }
141
+
142
+ const uri = internal.getTypeURIFromSpecifier(input);
143
+ return new FilterClass({
144
+ type: 'object',
145
+ typename: uri,
146
+ ...propsFilterToAst(props ?? {}),
147
+ });
148
+ };
149
+
150
+ /**
151
+ * Filter by tag.
152
+ */
153
+ export const tag = (tag: string): Any => {
154
+ return new FilterClass({
155
+ type: 'tag',
156
+ tag,
157
+ });
158
+ };
159
+
160
+ /**
161
+ * Options for {@link key} filter.
162
+ */
163
+ export type KeyFilterOptions = {
164
+ /**
165
+ * Optional semver range expression (e.g. `^1.2.3`, `~2.0.0`, `>=1.0.0 <2.0.0`).
166
+ * Matches the object's meta `version` field against the range.
167
+ * If omitted, matches any version (including objects with no version).
168
+ */
169
+ version?: string;
170
+ };
171
+
172
+ /**
173
+ * Filter by registry key stored in object meta.
174
+ *
175
+ * @example
176
+ * ```ts
177
+ * Filter.key('org.example.type.foo');
178
+ * Filter.key('org.example.type.foo', { version: '^1.2.3' });
179
+ * ```
180
+ */
181
+ export const key = (key: string, options?: KeyFilterOptions): Any => {
182
+ return new FilterClass({
183
+ type: 'object',
184
+ typename: null,
185
+ props: {},
186
+ metaKey: key,
187
+ metaVersion: options?.version,
188
+ });
189
+ };
190
+
191
+ /**
192
+ * Filter by properties.
193
+ */
194
+ export const props = <T>(props: Props<T>): Filter<T> => {
195
+ return new FilterClass({
196
+ type: 'object',
197
+ typename: null,
198
+ ...propsFilterToAst(props),
199
+ });
200
+ };
201
+
202
+ export type TextSearchOptions = {
203
+ // TODO(dmaretskyi): Hybrid search.
204
+ type?: 'full-text' | 'vector';
205
+ };
206
+
207
+ /**
208
+ * Full-text or vector search.
209
+ */
210
+ export const text = (
211
+ // TODO(dmaretskyi): Consider passing a vector here, but really the embedding should be done on the query-executor side.
212
+ text: string,
213
+ options?: TextSearchOptions,
214
+ ): Any => {
215
+ return new FilterClass({
216
+ type: 'text-search',
217
+ text,
218
+ searchKind: options?.type,
219
+ });
220
+ };
221
+
222
+ /**
223
+ * Filter by foreign keys.
224
+ */
225
+ export const foreignKeys = <S extends Type$.AnyEntity | URI.URI>(
226
+ schema: S,
227
+ keys: ForeignKey[],
228
+ ): Filter<S extends Type$.AnyEntity ? Type$.InstanceType<S> : unknown> => {
229
+ const uri = internal.getTypeURIFromSpecifier(schema);
230
+ return new FilterClass({
231
+ type: 'object',
232
+ typename: uri,
233
+ props: {},
234
+ foreignKeys: keys,
235
+ });
236
+ };
237
+
238
+ /**
239
+ * Predicate for property to be equal to the provided value.
240
+ */
241
+ export const eq = <T>(value: T): Filter<T | undefined> => {
242
+ if (!Ref.isRef(value) && typeof value === 'object' && value !== null) {
243
+ throw new TypeError('Cannot use object as a value for eq filter');
244
+ }
245
+
246
+ return new FilterClass({
247
+ type: 'compare',
248
+ operator: 'eq',
249
+ value: Ref.isRef(value) ? value.noInline().encode() : value,
250
+ });
251
+ };
252
+
253
+ /**
254
+ * Predicate for property to be not equal to the provided value.
255
+ */
256
+ export const neq = <T>(value: T): Filter<T | undefined> => {
257
+ return new FilterClass({
258
+ type: 'compare',
259
+ operator: 'neq',
260
+ value,
261
+ });
262
+ };
263
+
264
+ /**
265
+ * Predicate for property to be greater than the provided value.
266
+ */
267
+ export const gt = <T>(value: T): Filter<T | undefined> => {
268
+ return new FilterClass({
269
+ type: 'compare',
270
+ operator: 'gt',
271
+ value,
272
+ });
273
+ };
274
+
275
+ /**
276
+ * Predicate for property to be greater than or equal to the provided value.
277
+ */
278
+ export const gte = <T>(value: T): Filter<T | undefined> => {
279
+ return new FilterClass({
280
+ type: 'compare',
281
+ operator: 'gte',
282
+ value,
283
+ });
284
+ };
285
+
286
+ /**
287
+ * Predicate for property to be less than the provided value.
288
+ */
289
+ export const lt = <T>(value: T): Filter<T | undefined> => {
290
+ return new FilterClass({
291
+ type: 'compare',
292
+ operator: 'lt',
293
+ value,
294
+ });
295
+ };
296
+
297
+ /**
298
+ * Predicate for property to be less than or equal to the provided value.
299
+ */
300
+ export const lte = <T>(value: T): Filter<T | undefined> => {
301
+ return new FilterClass({
302
+ type: 'compare',
303
+ operator: 'lte',
304
+ value,
305
+ });
306
+ };
307
+
308
+ /**
309
+ * Predicate for property to be in the provided array.
310
+ * @param values - Values to check against.
311
+ */
312
+ const in$ = <T>(...values: T[]): Filter<T> => {
313
+ return new FilterClass({
314
+ type: 'in',
315
+ values,
316
+ });
317
+ };
318
+ export { in$ as in };
319
+
320
+ /**
321
+ * Predicate for an array property to contain the provided value.
322
+ * @param value - Value to check against.
323
+ */
324
+ export const contains = <T>(value: T): Filter<readonly T[] | undefined> => {
325
+ return new FilterClass({
326
+ type: 'contains',
327
+ value,
328
+ });
329
+ };
330
+
331
+ /**
332
+ * Predicate for property to be in the provided range.
333
+ * @param from - Start of the range (inclusive).
334
+ * @param to - End of the range (exclusive).
335
+ */
336
+ export const between = <T>(from: T, to: T): Filter<T> => {
337
+ return new FilterClass({
338
+ type: 'range',
339
+ from,
340
+ to,
341
+ });
342
+ };
343
+
344
+ type TimeRange = { after?: Date | number; before?: Date | number };
345
+
346
+ const _toUnixMs = (date: Date | number): number => (typeof date === 'number' ? date : date.getTime());
347
+
348
+ const _timeRangeFilter = (field: 'updatedAt' | 'createdAt', range: TimeRange): Any => {
349
+ const filters: Any[] = [];
350
+ if (range.after != null) {
351
+ filters.push(new FilterClass({ type: 'timestamp', field, operator: 'gte', value: _toUnixMs(range.after) }));
352
+ }
353
+ if (range.before != null) {
354
+ filters.push(new FilterClass({ type: 'timestamp', field, operator: 'lte', value: _toUnixMs(range.before) }));
355
+ }
356
+ if (filters.length === 0) {
357
+ return everything();
358
+ }
359
+ return filters.length === 1 ? filters[0] : and(...filters);
360
+ };
361
+
362
+ /**
363
+ * Filter objects by updatedAt timestamp.
364
+ */
365
+ export const updated = (range: TimeRange): Any => _timeRangeFilter('updatedAt', range);
366
+
367
+ /**
368
+ * Filter objects by createdAt timestamp.
369
+ */
370
+ export const created = (range: TimeRange): Any => _timeRangeFilter('createdAt', range);
371
+
372
+ export type ChildOfOptions = {
373
+ /** Whether to match transitively (grandchildren, etc.). Defaults to true. */
374
+ transitive?: boolean;
375
+ };
376
+
377
+ /**
378
+ * Filter objects that are children of the specified parent(s).
379
+ * Accepts ECHO objects, Refs, or arrays of either.
380
+ * Refs are resolved to DXNs without loading; objects use {@link Obj.getURI}.
381
+ * With transitive=true (default), also matches grandchildren and beyond.
382
+ */
383
+ export const childOf = (
384
+ parents: Obj.Unknown | Ref.Unknown | readonly (Obj.Unknown | Ref.Unknown)[],
385
+ options?: ChildOfOptions,
386
+ ): Any => {
387
+ const items = Array.isArray(parents) ? parents : [parents];
388
+ const dxns = items.map((item) => {
389
+ if (Ref.isRef(item)) {
390
+ return EID.parse(item.uri);
391
+ }
392
+ return EID.parse(internal.getUri(item));
393
+ });
394
+ return new FilterClass({
395
+ type: 'child-of',
396
+ parents: dxns,
397
+ transitive: options?.transitive ?? true,
398
+ });
399
+ };
400
+
401
+ /**
402
+ * Negate the filter.
403
+ */
404
+ export const not = <F extends Any>(filter: F): Filter<Type<F>> => {
405
+ return new FilterClass({
406
+ type: 'not',
407
+ filter: filter.ast,
408
+ });
409
+ };
410
+
411
+ /**
412
+ * Combine filters with a logical AND.
413
+ */
414
+ export const and = <Filters extends readonly Any[]>(...filters: Filters): Filter<Type<Filters[number]>> => {
415
+ return new FilterClass({
416
+ type: 'and',
417
+ filters: filters.map((f) => f.ast),
418
+ });
419
+ };
420
+
421
+ /**
422
+ * Combine filters with a logical OR.
423
+ */
424
+ export const or = <Filters extends readonly Any[]>(...filters: Filters): Filter<Type<Filters[number]>> => {
425
+ return new FilterClass({
426
+ type: 'or',
427
+ filters: filters.map((f) => f.ast),
428
+ });
429
+ };
430
+
431
+ // TODO(dmaretskyi): Add `Filter.match` to support pattern matching on string props.
432
+
433
+ const propsFilterToAst = (predicates: Props<any>): Pick<QueryAST.FilterObject, 'id' | 'props'> => {
434
+ let idFilter: readonly EntityId[] | undefined;
435
+ if ('id' in predicates) {
436
+ assertArgument(
437
+ typeof predicates.id === 'string' || Array.isArray(predicates.id),
438
+ 'predicates.id',
439
+ 'invalid id filter',
440
+ );
441
+ idFilter = typeof predicates.id === 'string' ? [predicates.id] : predicates.id;
442
+ Schema.Array(EntityId).pipe(Schema.validateSync)(idFilter);
443
+ }
444
+
445
+ return {
446
+ id: idFilter,
447
+ props: Object.fromEntries(
448
+ Object.entries(predicates)
449
+ .filter(([prop, _value]) => prop !== 'id')
450
+ .map(([prop, predicate]) => [prop, processPredicate(predicate)]),
451
+ ) as Record<string, QueryAST.Filter>,
452
+ };
453
+ };
454
+
455
+ const processPredicate = (predicate: any): QueryAST.Filter => {
456
+ return Match.value(predicate).pipe(
457
+ Match.withReturnType<QueryAST.Filter>(),
458
+ Match.when(is, (predicate) => predicate.ast),
459
+ // TODO(wittjosiah): Add support for array predicates.
460
+ Match.when(Array.isArray, (_predicate) => {
461
+ throw new Error('Array predicates are not yet supported.');
462
+ }),
463
+ Match.when(
464
+ (predicate: any) => !Ref.isRef(predicate) && typeof predicate === 'object' && predicate !== null,
465
+ (predicate) => {
466
+ const nestedProps = Object.fromEntries(
467
+ Object.entries(predicate).map(([key, value]) => [key, processPredicate(value)]),
468
+ );
469
+
470
+ return {
471
+ type: 'object',
472
+ typename: null,
473
+ props: nestedProps,
474
+ };
475
+ },
476
+ ),
477
+ Match.orElse((value) => eq(value).ast),
478
+ );
479
+ };
480
+
481
+ /**
482
+ * Returns a human-readable string representation of a Filter AST.
483
+ */
484
+ export const pretty = (filter: Any): string => internal.prettyFilter(filter.ast);
package/src/Format.ts ADDED
@@ -0,0 +1,5 @@
1
+ //
2
+ // Copyright 2025 DXOS.org
3
+ //
4
+
5
+ export * from './internal/Format';
@@ -0,0 +1,84 @@
1
+ //
2
+ // Copyright 2025 DXOS.org
3
+ //
4
+
5
+ import { type URI } from '@dxos/keys';
6
+
7
+ import type * as Database from './Database';
8
+ import type * as Entity from './Entity';
9
+ import type * as internal from './internal';
10
+ import type * as Key from './Key';
11
+ import type * as Ref from './Ref';
12
+ import type * as Registry from './Registry';
13
+
14
+ /**
15
+ * Resolution context.
16
+ * Affects how non-absolute DXNs are resolved.
17
+ */
18
+ export interface RefResolutionContext {
19
+ /**
20
+ * Space that the resolution is happening from.
21
+ */
22
+ space?: Key.SpaceId;
23
+
24
+ /**
25
+ * Feed that the resolution is happening from.
26
+ * This feed will be searched first, and then the space it belongs to.
27
+ */
28
+ feed?: URI.URI;
29
+ }
30
+
31
+ export interface RefResolverOptions {
32
+ /**
33
+ * Resolution context.
34
+ * Affects how non-absolute DXNs are resolved.
35
+ */
36
+ context?: RefResolutionContext;
37
+
38
+ /**
39
+ * Middleware to change the resolved object before returning it.
40
+ * @deprecated On track to be removed.
41
+ */
42
+ middleware?: (obj: internal.AnyProperties) => internal.AnyProperties;
43
+ }
44
+
45
+ /**
46
+ * Manages cross-space database interactions.
47
+ */
48
+ export interface Hypergraph extends Database.Queryable {
49
+ /**
50
+ * In-process registry of keyed objects and static schema types.
51
+ * Populated at startup via `registry.add(objects)` / `registry.add(schemas)`.
52
+ * Queries that include no explicit from() clause will fan out to this registry automatically.
53
+ */
54
+ get registry(): Registry.Registry;
55
+
56
+ /**
57
+ * Query objects.
58
+ */
59
+ query: Database.QueryFn;
60
+
61
+ /**
62
+ * Creates a reference to an existing object in the database.
63
+ *
64
+ * NOTE: The reference may be dangling if the object is not present in the database.
65
+ * NOTE: Difference from `Ref.fromURI`
66
+ * `Ref.fromURI(dxn)` returns an unhydrated reference. The `.load` and `.target` APIs will not work.
67
+ * `db.makeRef(dxn)` is preferable in cases with access to the database.
68
+ */
69
+ makeRef<T extends Entity.Unknown = Entity.Unknown>(uri: URI.URI): Ref.Ref<T>;
70
+
71
+ /**
72
+ * @param hostDb Host database for reference resolution.
73
+ * @param middleware Called with the loaded object. The caller may change the object.
74
+ * @returns Result of `onLoad`.
75
+ */
76
+ // TODO(dmaretskyi): Restructure API: Remove middleware.
77
+ createRefResolver(options: RefResolverOptions): Ref.Resolver;
78
+
79
+ /**
80
+ * Get a database by space ID.
81
+ * @returns The database for the given space ID, or undefined if not found.
82
+ */
83
+ getDatabase(spaceId: Key.SpaceId): Database.Database | undefined;
84
+ }