@dxos/echo 0.8.4-main.d05673bc65 → 0.8.4-main.dfabb4ec29

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 (280) hide show
  1. package/README.md +2 -2
  2. package/dist/lib/neutral/Annotation.mjs +5 -3
  3. package/dist/lib/neutral/Database.mjs +8 -4
  4. package/dist/lib/neutral/Entity.mjs +16 -14
  5. package/dist/lib/neutral/Err.mjs +1 -1
  6. package/dist/lib/neutral/Extension.mjs +18 -0
  7. package/dist/lib/neutral/Extension.mjs.map +7 -0
  8. package/dist/lib/neutral/Feed.mjs +21 -17
  9. package/dist/lib/neutral/Filter.mjs +21 -13
  10. package/dist/lib/neutral/Format.mjs +3 -3
  11. package/dist/lib/neutral/JsonSchema.mjs +8 -8
  12. package/dist/lib/neutral/Key.mjs +1 -1
  13. package/dist/lib/neutral/Migration.mjs +17 -0
  14. package/dist/lib/neutral/Migration.mjs.map +7 -0
  15. package/dist/lib/neutral/Obj.mjs +16 -13
  16. package/dist/lib/neutral/Order.mjs +1 -1
  17. package/dist/lib/neutral/Query.mjs +19 -16
  18. package/dist/lib/neutral/QueryResult.mjs +1 -1
  19. package/dist/lib/neutral/Ref.mjs +7 -7
  20. package/dist/lib/neutral/Relation.mjs +15 -14
  21. package/dist/lib/neutral/SchemaRegistry.mjs +1 -1
  22. package/dist/lib/neutral/Tag.mjs +14 -13
  23. package/dist/lib/neutral/Type.mjs +10 -10
  24. package/dist/lib/neutral/{chunk-FZO7LQO7.mjs → chunk-44HT3MEC.mjs} +2 -2
  25. package/dist/lib/neutral/{chunk-OENWMTE6.mjs → chunk-5SL5LDLD.mjs} +4 -2
  26. package/dist/lib/neutral/chunk-5SL5LDLD.mjs.map +7 -0
  27. package/dist/lib/neutral/{chunk-YWXWXIE5.mjs → chunk-6VIJV543.mjs} +2 -2
  28. package/dist/lib/neutral/{chunk-YWXWXIE5.mjs.map → chunk-6VIJV543.mjs.map} +2 -2
  29. package/dist/lib/neutral/{chunk-ANHVGJI4.mjs → chunk-7RVZT53K.mjs} +1 -1
  30. package/dist/lib/neutral/{chunk-BNCCGLJN.mjs → chunk-BICZKPQG.mjs} +1 -1
  31. package/dist/lib/neutral/{chunk-NEGC54NE.mjs → chunk-FHYIM4RD.mjs} +17 -19
  32. package/dist/lib/neutral/chunk-FHYIM4RD.mjs.map +7 -0
  33. package/dist/lib/neutral/{chunk-RMLF7JOZ.mjs → chunk-FZHVQEHN.mjs} +6 -22
  34. package/dist/lib/neutral/{chunk-RMLF7JOZ.mjs.map → chunk-FZHVQEHN.mjs.map} +3 -3
  35. package/dist/lib/neutral/chunk-GWFFC34K.mjs +50 -0
  36. package/dist/lib/neutral/chunk-GWFFC34K.mjs.map +7 -0
  37. package/dist/lib/neutral/{chunk-724GQYEN.mjs → chunk-HPNQTEEQ.mjs} +4 -4
  38. package/dist/lib/neutral/{chunk-UFDK26FO.mjs → chunk-LVGOVFDV.mjs} +12 -8
  39. package/dist/lib/neutral/chunk-LVGOVFDV.mjs.map +7 -0
  40. package/dist/lib/neutral/{chunk-43Y5DOS6.mjs → chunk-MPAI2MHO.mjs} +16 -66
  41. package/dist/lib/neutral/chunk-MPAI2MHO.mjs.map +7 -0
  42. package/dist/lib/neutral/{chunk-WYOKA6AE.mjs → chunk-N4B7FHQT.mjs} +2 -2
  43. package/dist/lib/neutral/{chunk-WYOKA6AE.mjs.map → chunk-N4B7FHQT.mjs.map} +1 -1
  44. package/dist/lib/neutral/{chunk-BOZZPUXE.mjs → chunk-O5LRY6CO.mjs} +12 -65
  45. package/dist/lib/neutral/chunk-O5LRY6CO.mjs.map +7 -0
  46. package/dist/lib/neutral/{chunk-UTBRYVQC.mjs → chunk-QGMIH2SN.mjs} +2 -2
  47. package/dist/lib/neutral/{chunk-VA2F47ZC.mjs → chunk-QXIANHKU.mjs} +68 -14
  48. package/dist/lib/neutral/chunk-QXIANHKU.mjs.map +7 -0
  49. package/dist/lib/neutral/{chunk-NXMFBIT5.mjs → chunk-RF7ZBZ4A.mjs} +59 -4
  50. package/dist/lib/neutral/chunk-RF7ZBZ4A.mjs.map +7 -0
  51. package/dist/lib/neutral/{chunk-DYDJBZEG.mjs → chunk-S7IMFVTB.mjs} +51 -21
  52. package/dist/lib/neutral/chunk-S7IMFVTB.mjs.map +7 -0
  53. package/dist/lib/neutral/{chunk-TQQZLKB7.mjs → chunk-SJKBWMJY.mjs} +193 -469
  54. package/dist/lib/neutral/chunk-SJKBWMJY.mjs.map +7 -0
  55. package/dist/lib/neutral/chunk-SUZMWP3Y.mjs +36 -0
  56. package/dist/lib/neutral/chunk-SUZMWP3Y.mjs.map +7 -0
  57. package/dist/lib/neutral/{chunk-NQRLRYJM.mjs → chunk-SW5CUSBY.mjs} +119 -12
  58. package/dist/lib/neutral/chunk-SW5CUSBY.mjs.map +7 -0
  59. package/dist/lib/neutral/{chunk-SEMVAGBM.mjs → chunk-TNBK56IN.mjs} +19 -24
  60. package/dist/lib/neutral/chunk-TNBK56IN.mjs.map +7 -0
  61. package/dist/lib/neutral/{chunk-B5OXLWZL.mjs → chunk-TRPZU2HV.mjs} +2 -2
  62. package/dist/lib/neutral/{chunk-UI6MWK5W.mjs → chunk-TTCSATUD.mjs} +1 -1
  63. package/dist/lib/neutral/{chunk-OMUPQMLR.mjs → chunk-V72DY6LU.mjs} +1 -1
  64. package/dist/lib/neutral/{chunk-KTAWP7GI.mjs → chunk-VGKLHHRT.mjs} +42 -7
  65. package/dist/lib/neutral/chunk-VGKLHHRT.mjs.map +7 -0
  66. package/dist/lib/neutral/{chunk-FXEG7EOK.mjs → chunk-VYAGNFSJ.mjs} +3 -3
  67. package/dist/lib/neutral/{chunk-CIRHIEMW.mjs → chunk-WRVRDZDA.mjs} +18 -46
  68. package/dist/lib/neutral/chunk-WRVRDZDA.mjs.map +7 -0
  69. package/dist/lib/neutral/{chunk-UBEZSGXY.mjs → chunk-ZISMEVKD.mjs} +1 -1
  70. package/dist/lib/neutral/{chunk-UBEZSGXY.mjs.map → chunk-ZISMEVKD.mjs.map} +2 -2
  71. package/dist/lib/neutral/index.mjs +38 -28
  72. package/dist/lib/neutral/internal/index.mjs +15 -9
  73. package/dist/lib/neutral/meta.json +1 -1
  74. package/dist/lib/neutral/testing/index.mjs +185 -129
  75. package/dist/lib/neutral/testing/index.mjs.map +3 -3
  76. package/dist/types/src/Annotation.d.ts +1 -1
  77. package/dist/types/src/Annotation.d.ts.map +1 -1
  78. package/dist/types/src/Collection.d.ts.map +1 -1
  79. package/dist/types/src/Database.d.ts +13 -1
  80. package/dist/types/src/Database.d.ts.map +1 -1
  81. package/dist/types/src/Dataset.d.ts +2 -1
  82. package/dist/types/src/Dataset.d.ts.map +1 -1
  83. package/dist/types/src/Entity.d.ts +17 -11
  84. package/dist/types/src/Entity.d.ts.map +1 -1
  85. package/dist/types/src/Err.d.ts +18 -18
  86. package/dist/types/src/Err.d.ts.map +1 -1
  87. package/dist/types/src/Extension.d.ts +80 -0
  88. package/dist/types/src/Extension.d.ts.map +1 -0
  89. package/dist/types/src/Extension.test.d.ts +2 -0
  90. package/dist/types/src/Extension.test.d.ts.map +1 -0
  91. package/dist/types/src/Feed.d.ts +37 -20
  92. package/dist/types/src/Feed.d.ts.map +1 -1
  93. package/dist/types/src/Filter.d.ts +33 -4
  94. package/dist/types/src/Filter.d.ts.map +1 -1
  95. package/dist/types/src/Filter.test.d.ts +2 -0
  96. package/dist/types/src/Filter.test.d.ts.map +1 -0
  97. package/dist/types/src/Json.d.ts +33 -0
  98. package/dist/types/src/Json.d.ts.map +1 -0
  99. package/dist/types/src/Json.test.d.ts +2 -0
  100. package/dist/types/src/Json.test.d.ts.map +1 -0
  101. package/dist/types/src/JsonSchema.d.ts +1 -1
  102. package/dist/types/src/Migration.d.ts +57 -0
  103. package/dist/types/src/Migration.d.ts.map +1 -0
  104. package/dist/types/src/Obj.d.ts +41 -27
  105. package/dist/types/src/Obj.d.ts.map +1 -1
  106. package/dist/types/src/Order.d.ts.map +1 -1
  107. package/dist/types/src/Query.d.ts +13 -2
  108. package/dist/types/src/Query.d.ts.map +1 -1
  109. package/dist/types/src/Ref.d.ts.map +1 -1
  110. package/dist/types/src/Relation.d.ts +17 -18
  111. package/dist/types/src/Relation.d.ts.map +1 -1
  112. package/dist/types/src/Tag.d.ts +2 -2
  113. package/dist/types/src/Tag.d.ts.map +1 -1
  114. package/dist/types/src/Type.d.ts +3 -3
  115. package/dist/types/src/Type.d.ts.map +1 -1
  116. package/dist/types/src/View.d.ts +1 -1
  117. package/dist/types/src/View.d.ts.map +1 -1
  118. package/dist/types/src/exemplars.test.d.ts +2 -0
  119. package/dist/types/src/exemplars.test.d.ts.map +1 -0
  120. package/dist/types/src/index.d.ts +3 -0
  121. package/dist/types/src/index.d.ts.map +1 -1
  122. package/dist/types/src/internal/Annotation/annotations.d.ts +12 -2
  123. package/dist/types/src/internal/Annotation/annotations.d.ts.map +1 -1
  124. package/dist/types/src/internal/Annotation/sorting.d.ts.map +1 -1
  125. package/dist/types/src/internal/Annotation/util.d.ts +1 -1
  126. package/dist/types/src/internal/Annotation/util.d.ts.map +1 -1
  127. package/dist/types/src/internal/Entity/api.d.ts.map +1 -1
  128. package/dist/types/src/internal/Entity/object.d.ts.map +1 -1
  129. package/dist/types/src/internal/Entity/relation.d.ts.map +1 -1
  130. package/dist/types/src/internal/Entity/version.d.ts.map +1 -1
  131. package/dist/types/src/internal/Format/date.d.ts.map +1 -1
  132. package/dist/types/src/internal/Format/format.d.ts.map +1 -1
  133. package/dist/types/src/internal/Format/number.d.ts.map +1 -1
  134. package/dist/types/src/internal/Format/object.d.ts.map +1 -1
  135. package/dist/types/src/internal/Format/types.d.ts.map +1 -1
  136. package/dist/types/src/internal/JsonSchema/json-schema-normalize.d.ts.map +1 -1
  137. package/dist/types/src/internal/JsonSchema/json-schema-type.d.ts +28 -28
  138. package/dist/types/src/internal/JsonSchema/json-schema-type.d.ts.map +1 -1
  139. package/dist/types/src/internal/JsonSchema/json-schema.d.ts +1 -1
  140. package/dist/types/src/internal/JsonSchema/json-schema.d.ts.map +1 -1
  141. package/dist/types/src/internal/Obj/clone.d.ts.map +1 -1
  142. package/dist/types/src/internal/Obj/common.d.ts.map +1 -1
  143. package/dist/types/src/internal/Obj/create-object.d.ts.map +1 -1
  144. package/dist/types/src/internal/Obj/deleted.d.ts.map +1 -1
  145. package/dist/types/src/internal/Obj/ids.d.ts.map +1 -1
  146. package/dist/types/src/internal/Obj/json-serializer.d.ts +4 -3
  147. package/dist/types/src/internal/Obj/json-serializer.d.ts.map +1 -1
  148. package/dist/types/src/internal/Obj/set-value.d.ts +1 -1
  149. package/dist/types/src/internal/Obj/set-value.d.ts.map +1 -1
  150. package/dist/types/src/internal/Obj/snapshot.d.ts.map +1 -1
  151. package/dist/types/src/internal/Query.d.ts +10 -0
  152. package/dist/types/src/internal/Query.d.ts.map +1 -0
  153. package/dist/types/src/internal/Ref/ref-array.d.ts.map +1 -1
  154. package/dist/types/src/internal/Ref/ref.d.ts +14 -1
  155. package/dist/types/src/internal/Ref/ref.d.ts.map +1 -1
  156. package/dist/types/src/internal/Type/compose.d.ts.map +1 -1
  157. package/dist/types/src/internal/Type/echo-schema.d.ts +2 -2
  158. package/dist/types/src/internal/Type/echo-schema.d.ts.map +1 -1
  159. package/dist/types/src/internal/Type/manipulation.d.ts.map +1 -1
  160. package/dist/types/src/internal/common/api/meta.d.ts +3 -3
  161. package/dist/types/src/internal/common/api/meta.d.ts.map +1 -1
  162. package/dist/types/src/internal/common/proxy/change-context.d.ts +1 -1
  163. package/dist/types/src/internal/common/proxy/change-context.d.ts.map +1 -1
  164. package/dist/types/src/internal/common/proxy/define-hidden-property.d.ts.map +1 -1
  165. package/dist/types/src/internal/common/proxy/errors.d.ts +1 -1
  166. package/dist/types/src/internal/common/proxy/errors.d.ts.map +1 -1
  167. package/dist/types/src/internal/common/proxy/event-batch.d.ts.map +1 -1
  168. package/dist/types/src/internal/common/proxy/json-serializer.d.ts.map +1 -1
  169. package/dist/types/src/internal/common/proxy/make-object.d.ts.map +1 -1
  170. package/dist/types/src/internal/common/proxy/ownership.d.ts.map +1 -1
  171. package/dist/types/src/internal/common/proxy/proxy-utils.d.ts.map +1 -1
  172. package/dist/types/src/internal/common/proxy/reactive-array.d.ts +1 -1
  173. package/dist/types/src/internal/common/proxy/reactive.d.ts +1 -1
  174. package/dist/types/src/internal/common/proxy/reactive.d.ts.map +1 -1
  175. package/dist/types/src/internal/common/proxy/reactive.test.d.ts +2 -0
  176. package/dist/types/src/internal/common/proxy/reactive.test.d.ts.map +1 -0
  177. package/dist/types/src/internal/common/proxy/schema-validator.d.ts.map +1 -1
  178. package/dist/types/src/internal/common/proxy/typed-handler.d.ts.map +1 -1
  179. package/dist/types/src/internal/common/types/base.d.ts.map +1 -1
  180. package/dist/types/src/internal/common/types/entity.d.ts +4 -4
  181. package/dist/types/src/internal/common/types/entity.d.ts.map +1 -1
  182. package/dist/types/src/internal/common/types/meta.d.ts.map +1 -1
  183. package/dist/types/src/internal/common/types/version.d.ts +1 -1
  184. package/dist/types/src/internal/index.d.ts +1 -0
  185. package/dist/types/src/internal/index.d.ts.map +1 -1
  186. package/dist/types/src/testing/test-data.d.ts +8 -8
  187. package/dist/types/src/testing/test-data.d.ts.map +1 -1
  188. package/dist/types/src/testing/test-schema.d.ts +53 -53
  189. package/dist/types/src/testing/test-schema.d.ts.map +1 -1
  190. package/dist/types/src/testing/util.d.ts.map +1 -1
  191. package/dist/types/tsconfig.tsbuildinfo +1 -1
  192. package/package.json +24 -14
  193. package/src/Annotation.ts +1 -0
  194. package/src/Collection.ts +5 -0
  195. package/src/Database.ts +49 -14
  196. package/src/Entity.ts +18 -12
  197. package/src/Extension.test.ts +235 -0
  198. package/src/Extension.ts +122 -0
  199. package/src/Feed.ts +79 -32
  200. package/src/Filter.test.ts +90 -0
  201. package/src/Filter.ts +66 -3
  202. package/src/Json.test.ts +175 -0
  203. package/src/Json.ts +102 -0
  204. package/src/Migration.ts +94 -0
  205. package/src/Obj.test.ts +105 -13
  206. package/src/Obj.ts +153 -33
  207. package/src/Query.test.ts +198 -8
  208. package/src/Query.ts +46 -1
  209. package/src/Relation.ts +24 -20
  210. package/src/Type.ts +1 -1
  211. package/src/View.ts +5 -0
  212. package/src/exemplars.test.ts +21 -0
  213. package/src/index.ts +4 -0
  214. package/src/internal/Annotation/annotations.test.ts +51 -2
  215. package/src/internal/Annotation/annotations.ts +33 -14
  216. package/src/internal/Annotation/sorting.ts +0 -1
  217. package/src/internal/Entity/api.ts +0 -1
  218. package/src/internal/Entity/object.ts +0 -1
  219. package/src/internal/Entity/version.ts +0 -1
  220. package/src/internal/Format/date.test.ts +0 -1
  221. package/src/internal/Format/format.test.ts +0 -1
  222. package/src/internal/JsonSchema/json-schema-type.ts +1 -1
  223. package/src/internal/JsonSchema/json-schema.test.ts +1 -2
  224. package/src/internal/JsonSchema/json-schema.ts +1 -2
  225. package/src/internal/Obj/clone.ts +1 -1
  226. package/src/internal/Obj/create-object.test.ts +2 -4
  227. package/src/internal/Obj/create-object.ts +2 -3
  228. package/src/internal/Obj/deleted.ts +1 -1
  229. package/src/internal/Obj/json-serializer.test.ts +4 -5
  230. package/src/internal/Obj/json-serializer.ts +22 -15
  231. package/src/internal/Obj/set-value.test.ts +24 -24
  232. package/src/internal/Obj/set-value.ts +1 -1
  233. package/src/internal/Query.ts +137 -0
  234. package/src/internal/Ref/ref-array.ts +0 -1
  235. package/src/internal/Ref/ref.test.ts +0 -1
  236. package/src/internal/Ref/ref.ts +18 -1
  237. package/src/internal/Type/compose.test.ts +0 -1
  238. package/src/internal/Type/echo-schema.ts +3 -4
  239. package/src/internal/Type/persistent-schema.ts +2 -2
  240. package/src/internal/common/README.md +1 -1
  241. package/src/internal/common/api/meta.ts +3 -3
  242. package/src/internal/common/proxy/change-context.ts +1 -1
  243. package/src/internal/common/proxy/change.test.ts +94 -94
  244. package/src/internal/common/proxy/errors.ts +2 -2
  245. package/src/internal/common/proxy/handler.test.ts +0 -2
  246. package/src/internal/common/proxy/make-object.ts +0 -1
  247. package/src/internal/common/proxy/ownership.ts +0 -1
  248. package/src/internal/common/proxy/reactive-array.ts +1 -1
  249. package/src/internal/common/proxy/reactive.test.ts +54 -0
  250. package/src/internal/common/proxy/reactive.ts +11 -3
  251. package/src/internal/common/proxy/typed-handler.test.ts +0 -1
  252. package/src/internal/common/proxy/typed-handler.ts +8 -10
  253. package/src/internal/common/proxy/typed-object.test.ts +2 -3
  254. package/src/internal/common/types/entity.ts +1 -1
  255. package/src/internal/common/types/meta.ts +0 -1
  256. package/src/internal/index.ts +1 -0
  257. package/src/testing/api.test.ts +0 -1
  258. package/src/testing/test-data.ts +157 -98
  259. package/dist/lib/neutral/chunk-43Y5DOS6.mjs.map +0 -7
  260. package/dist/lib/neutral/chunk-BOZZPUXE.mjs.map +0 -7
  261. package/dist/lib/neutral/chunk-CIRHIEMW.mjs.map +0 -7
  262. package/dist/lib/neutral/chunk-DYDJBZEG.mjs.map +0 -7
  263. package/dist/lib/neutral/chunk-KTAWP7GI.mjs.map +0 -7
  264. package/dist/lib/neutral/chunk-NEGC54NE.mjs.map +0 -7
  265. package/dist/lib/neutral/chunk-NQRLRYJM.mjs.map +0 -7
  266. package/dist/lib/neutral/chunk-NXMFBIT5.mjs.map +0 -7
  267. package/dist/lib/neutral/chunk-OENWMTE6.mjs.map +0 -7
  268. package/dist/lib/neutral/chunk-SEMVAGBM.mjs.map +0 -7
  269. package/dist/lib/neutral/chunk-TQQZLKB7.mjs.map +0 -7
  270. package/dist/lib/neutral/chunk-UFDK26FO.mjs.map +0 -7
  271. package/dist/lib/neutral/chunk-VA2F47ZC.mjs.map +0 -7
  272. /package/dist/lib/neutral/{chunk-FZO7LQO7.mjs.map → chunk-44HT3MEC.mjs.map} +0 -0
  273. /package/dist/lib/neutral/{chunk-ANHVGJI4.mjs.map → chunk-7RVZT53K.mjs.map} +0 -0
  274. /package/dist/lib/neutral/{chunk-BNCCGLJN.mjs.map → chunk-BICZKPQG.mjs.map} +0 -0
  275. /package/dist/lib/neutral/{chunk-724GQYEN.mjs.map → chunk-HPNQTEEQ.mjs.map} +0 -0
  276. /package/dist/lib/neutral/{chunk-UTBRYVQC.mjs.map → chunk-QGMIH2SN.mjs.map} +0 -0
  277. /package/dist/lib/neutral/{chunk-B5OXLWZL.mjs.map → chunk-TRPZU2HV.mjs.map} +0 -0
  278. /package/dist/lib/neutral/{chunk-UI6MWK5W.mjs.map → chunk-TTCSATUD.mjs.map} +0 -0
  279. /package/dist/lib/neutral/{chunk-OMUPQMLR.mjs.map → chunk-V72DY6LU.mjs.map} +0 -0
  280. /package/dist/lib/neutral/{chunk-FXEG7EOK.mjs.map → chunk-VYAGNFSJ.mjs.map} +0 -0
@@ -1,41 +1,88 @@
1
1
  import {
2
2
  select
3
- } from "./chunk-KTAWP7GI.mjs";
3
+ } from "./chunk-VGKLHHRT.mjs";
4
4
  import {
5
5
  Feed
6
- } from "./chunk-DYDJBZEG.mjs";
6
+ } from "./chunk-S7IMFVTB.mjs";
7
7
  import {
8
8
  object
9
- } from "./chunk-RMLF7JOZ.mjs";
9
+ } from "./chunk-FZHVQEHN.mjs";
10
10
  import {
11
11
  nothing
12
- } from "./chunk-NXMFBIT5.mjs";
13
- import {
14
- Ref
15
- } from "./chunk-FXEG7EOK.mjs";
12
+ } from "./chunk-RF7ZBZ4A.mjs";
16
13
  import {
17
14
  Unknown,
18
15
  instanceOf,
19
16
  make
20
- } from "./chunk-NQRLRYJM.mjs";
17
+ } from "./chunk-SW5CUSBY.mjs";
18
+ import {
19
+ Ref
20
+ } from "./chunk-VYAGNFSJ.mjs";
21
21
  import {
22
22
  JsonSchemaType
23
- } from "./chunk-BOZZPUXE.mjs";
23
+ } from "./chunk-O5LRY6CO.mjs";
24
24
  import {
25
25
  FormInputAnnotation,
26
+ IconAnnotation,
26
27
  SystemTypeAnnotation
27
- } from "./chunk-SEMVAGBM.mjs";
28
+ } from "./chunk-TNBK56IN.mjs";
28
29
  import {
29
30
  __export
30
31
  } from "./chunk-J5LGTIGS.mjs";
31
32
 
32
33
  // src/index.ts
33
34
  import { QueryAST as QueryAST2 } from "@dxos/echo-protocol";
34
- import { DXN } from "@dxos/keys";
35
+ import { DXN as DXN2 } from "@dxos/keys";
35
36
 
36
37
  // src/Hypergraph.ts
37
38
  var Hypergraph_exports = {};
38
39
 
40
+ // src/Json.ts
41
+ var Json_exports = {};
42
+ __export(Json_exports, {
43
+ createRefReplacer: () => createRefReplacer
44
+ });
45
+ import { DXN } from "@dxos/keys";
46
+ var isEncodedRef = (value) => typeof value === "object" && value !== null && Object.keys(value).length === 1 && typeof value["/"] === "string";
47
+ var toJson = (obj) => typeof obj.toJSON === "function" ? obj.toJSON() : obj;
48
+ var createRefReplacer = ({ db, depth = 1 }) => {
49
+ const hops = /* @__PURE__ */ new WeakMap();
50
+ return function(key, value) {
51
+ const parentHops = this && typeof this === "object" ? hops.get(this) ?? 0 : 0;
52
+ if (isEncodedRef(value)) {
53
+ if (parentHops >= depth) {
54
+ return value;
55
+ }
56
+ const dxnString = value["/"];
57
+ if (!dxnString.startsWith("dxn:")) {
58
+ return value;
59
+ }
60
+ let echoId;
61
+ try {
62
+ echoId = DXN.parse(dxnString).asEchoDXN()?.echoId;
63
+ } catch {
64
+ return value;
65
+ }
66
+ if (!echoId) {
67
+ return value;
68
+ }
69
+ const target = db.getObjectById(echoId);
70
+ if (!target) {
71
+ return value;
72
+ }
73
+ const encoded = toJson(target);
74
+ if (encoded != null && typeof encoded === "object") {
75
+ hops.set(encoded, parentHops + 1);
76
+ }
77
+ return encoded;
78
+ }
79
+ if (value != null && typeof value === "object") {
80
+ hops.set(value, parentHops);
81
+ }
82
+ return value;
83
+ };
84
+ };
85
+
39
86
  // src/Collection.ts
40
87
  var Collection_exports = {};
41
88
  __export(Collection_exports, {
@@ -50,6 +97,9 @@ var Collection = Schema.Struct({
50
97
  }).pipe(object({
51
98
  typename: "org.dxos.type.collection",
52
99
  version: "0.1.0"
100
+ }), IconAnnotation.set({
101
+ icon: "ph--folder--regular",
102
+ hue: "amber"
53
103
  }));
54
104
  var make2 = (props = {}) => make(Collection, {
55
105
  objects: [],
@@ -115,7 +165,10 @@ var ViewSchema = Schema2.Struct({
115
165
  }).pipe(object({
116
166
  typename: "org.dxos.type.view",
117
167
  version: "0.1.0"
118
- }), SystemTypeAnnotation.set(true));
168
+ }), SystemTypeAnnotation.set(true), IconAnnotation.set({
169
+ icon: "ph--funnel--regular",
170
+ hue: "green"
171
+ }));
119
172
  var View = ViewSchema;
120
173
  var make3 = (props) => {
121
174
  return make(View, {
@@ -143,10 +196,11 @@ var isDataset = pipe(instanceOf(Feed), Predicate.or(instanceOf(Collection)), Pre
143
196
 
144
197
  export {
145
198
  Hypergraph_exports,
199
+ Json_exports,
146
200
  Collection_exports,
147
201
  View_exports,
148
202
  Dataset_exports,
149
203
  QueryAST2 as QueryAST,
150
- DXN
204
+ DXN2 as DXN
151
205
  };
152
- //# sourceMappingURL=chunk-VA2F47ZC.mjs.map
206
+ //# sourceMappingURL=chunk-QXIANHKU.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/index.ts", "../../../src/Hypergraph.ts", "../../../src/Json.ts", "../../../src/Collection.ts", "../../../src/View.ts", "../../../src/Dataset.ts"],
4
+ "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nexport { QueryAST } from '@dxos/echo-protocol';\n// TODO(wittjosiah): Refactor DXN to not use statics similar to Query.\nexport { DXN } from '@dxos/keys';\n\nexport * as Annotation from './Annotation';\nexport * as Database from './Database';\nexport * as Entity from './Entity';\n// TODO(burdon): Rename to Error (less problematic than Obj/Object).\nexport * as Err from './Err';\nexport * as Feed from './Feed';\nexport * as Filter from './Filter';\nexport * as Format from './Format';\nexport * as Hypergraph from './Hypergraph';\nexport * as Json from './Json';\nexport * as JsonSchema from './JsonSchema';\nexport * as Key from './Key';\nexport * as Migration from './Migration';\nexport * as Obj from './Obj';\nexport * as Order from './Order';\nexport * as Query from './Query';\nexport * as QueryResult from './QueryResult';\nexport * as Ref from './Ref';\nexport * as Relation from './Relation';\nexport * as SchemaRegistry from './SchemaRegistry';\nexport * as Tag from './Tag';\nexport * as Type from './Type';\nexport * as Collection from './Collection';\nexport * as View from './View';\nexport * as Dataset from './Dataset';\nexport * as Extension from './Extension';\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { type DXN } from '@dxos/keys';\n\nimport type * as Database from './Database';\nimport type * as Entity from './Entity';\nimport type * as internal from './internal';\nimport type * as Key from './Key';\nimport type * as Ref from './Ref';\nimport type * as SchemaRegistry from './SchemaRegistry';\n\n/**\n * Resolution context.\n * Affects how non-absolute DXNs are resolved.\n */\nexport interface RefResolutionContext {\n /**\n * Space that the resolution is happening from.\n */\n space?: Key.SpaceId;\n\n /**\n * Queue that the resolution is happening from.\n * This queue will be searched first, and then the space it belongs to.\n */\n queue?: DXN;\n}\n\nexport interface RefResolverOptions {\n /**\n * Resolution context.\n * Affects how non-absolute DXNs are resolved.\n */\n context?: RefResolutionContext;\n\n /**\n * Middleware to change the resolved object before returning it.\n * @deprecated On track to be removed.\n */\n middleware?: (obj: internal.AnyProperties) => internal.AnyProperties;\n}\n\n/**\n * Manages cross-space database interactions.\n */\nexport interface Hypergraph extends Database.Queryable {\n get schemaRegistry(): SchemaRegistry.SchemaRegistry;\n\n /**\n * Query objects.\n */\n query: Database.QueryFn;\n\n /**\n * Creates a reference to an existing object in the database.\n *\n * NOTE: The reference may be dangling if the object is not present in the database.\n * NOTE: Difference from `Ref.fromDXN`\n * `Ref.fromDXN(dxn)` returns an unhydrated reference. The `.load` and `.target` APIs will not work.\n * `db.makeRef(dxn)` is preferable in cases with access to the database.\n */\n makeRef<T extends Entity.Unknown = Entity.Unknown>(dxn: DXN): Ref.Ref<T>;\n\n /**\n * @param hostDb Host database for reference resolution.\n * @param middleware Called with the loaded object. The caller may change the object.\n * @returns Result of `onLoad`.\n */\n // TODO(dmaretskyi): Restructure API: Remove middleware.\n createRefResolver(options: RefResolverOptions): Ref.Resolver;\n\n /**\n * Get a database by space ID.\n * @returns The database for the given space ID, or undefined if not found.\n */\n getDatabase(spaceId: Key.SpaceId): Database.Database | undefined;\n}\n", "//\n// Copyright 2026 DXOS.org\n//\n\nimport { DXN } from '@dxos/keys';\n\nimport * as Database from './Database';\nimport * as Obj from './Obj';\n\n/**\n * `JSON.stringify` replacer signature.\n *\n * Defined here (rather than re-imported from a UI package) so other ECHO-aware utilities can\n * share a stable signature without creating a dependency edge into the UI tree.\n */\nexport type JsonReplacer = (key: string, value: any) => any;\n\nexport type CreateRefReplacerOptions = {\n db: Database.Database;\n /** How many ref hops to follow. `0` leaves all refs as-is. Default: `1`. */\n depth?: number;\n};\n\nconst isEncodedRef = (value: unknown): value is { '/': string } =>\n typeof value === 'object' &&\n value !== null &&\n Object.keys(value as object).length === 1 &&\n typeof (value as { '/': unknown })['/'] === 'string';\n\nconst toJson = (obj: Obj.Any): unknown => (typeof (obj as any).toJSON === 'function' ? (obj as any).toJSON() : obj);\n\n/**\n * Returns a {@link JsonReplacer} that inlines ECHO ref objects (`{ \"/\": \"dxn:echo:...\" }`) up to\n * `depth` ref hops. Beyond that depth refs are left in their encoded form.\n *\n * Implemented as a per-call `JSON.stringify` replacer (not a one-shot tree walk at root) so it\n * composes with wrappers like `safeStringify` that intercept the root call. JSON.stringify\n * already drives the recursion; we only need to (a) detect a ref at the current callback,\n * (b) resolve and return the target if hop budget remains, and (c) tag the returned object\n * with its hop count so children know how far in they are.\n *\n * The hop count is tracked per-object via a `WeakMap`: a ref-resolved target's children inherit\n * `parentHops + 1`; a regular intermediate object's children inherit `parentHops`. This makes the\n * budget count *ref hops*, not tree depth — a ref deep in a tree still resolves once when\n * `depth >= 1`.\n *\n * Note: ECHO objects' `toJSON` runs before the replacer is invoked, so by the time we see a\n * value refs are already encoded as `{ \"/\": \"dxn:...\" }`.\n */\nexport const createRefReplacer = ({ db, depth = 1 }: CreateRefReplacerOptions): JsonReplacer => {\n // Per-object hop count. Set when we return an object (via ref resolution or pass-through) so\n // the child callbacks (which carry that object as `this`) can read it.\n const hops = new WeakMap<object, number>();\n\n return function (this: any, key: string, value: any) {\n // Hop count for this call: hops at the parent, or 0 for the root.\n const parentHops = this && typeof this === 'object' ? (hops.get(this) ?? 0) : 0;\n if (isEncodedRef(value)) {\n if (parentHops >= depth) {\n return value;\n }\n\n // The `{ '/': string }` shape is shared with non-DXN IPLD-style refs (e.g. CIDs);\n // an unparseable string would otherwise crash the whole `JSON.stringify`.\n // Treat any parse miss as \"leave as-is\" rather than propagating.\n const dxnString = value['/'];\n if (!dxnString.startsWith('dxn:')) {\n return value;\n }\n\n let echoId: string | undefined;\n try {\n echoId = DXN.parse(dxnString).asEchoDXN()?.echoId;\n } catch {\n return value;\n }\n\n if (!echoId) {\n return value;\n }\n const target = db.getObjectById(echoId);\n if (!target) {\n return value;\n }\n\n const encoded = toJson(target);\n if (encoded != null && typeof encoded === 'object') {\n // Children of the resolved target are one hop deeper.\n hops.set(encoded as object, parentHops + 1);\n }\n return encoded;\n }\n\n // Pass-through object: children inherit the parent's hop count (this branch doesn't burn\n // budget).\n if (value != null && typeof value === 'object') {\n hops.set(value, parentHops);\n }\n\n return value;\n };\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\n// @import-as-namespace\n\nimport * as Schema from 'effect/Schema';\n\nimport * as Annotation from './Annotation';\nimport * as internal from './internal';\nimport * as Obj from './Obj';\nimport * as Ref from './Ref';\nimport * as Type from './Type';\n\n/**\n * A an ordered set of objects.\n */\nexport const Collection = Schema.Struct({\n name: Schema.String.pipe(Schema.optional),\n objects: Schema.Array(Ref.Ref(Obj.Unknown)).pipe(internal.FormInputAnnotation.set(false)),\n}).pipe(\n Type.object({\n typename: 'org.dxos.type.collection',\n version: '0.1.0',\n }),\n Annotation.IconAnnotation.set({\n icon: 'ph--folder--regular',\n hue: 'amber',\n }),\n);\n\nexport interface Collection extends Schema.Schema.Type<typeof Collection> {}\n\nexport const make = (props: Partial<Obj.MakeProps<typeof Collection>> = {}): Collection =>\n Obj.make(Collection, { objects: [], ...props });\n\nexport const isCollection: (value: unknown) => value is Collection = Obj.instanceOf(Collection);\n", "//\n// Copyright 2025 DXOS.org\n//\n\n// @import-as-namespace\n\nimport * as Schema from 'effect/Schema';\n\nimport { QueryAST } from '@dxos/echo-protocol';\nimport { JsonPath } from '@dxos/effect';\nimport { PublicKey } from '@dxos/keys';\n\nimport * as Annotation from './Annotation';\nimport * as Filter from './Filter';\nimport * as internal from './internal';\nimport * as Obj from './Obj';\nimport * as Query from './Query';\nimport * as Type from './Type';\n\n/**\n * Stored field metadata (e.g., for UX).\n */\nexport const FieldSchema = Schema.Struct({\n id: Schema.String,\n path: JsonPath,\n visible: Schema.optional(Schema.Boolean),\n\n // TODO(wittjosiah): Presentation-specific?\n referencePath: Schema.optional(JsonPath),\n});\n\nexport type FieldType = Schema.Schema.Type<typeof FieldSchema>;\n\nexport const KeyValueProps = Schema.Record({ key: Schema.String, value: Schema.Any });\n\nexport const createFieldId = () => PublicKey.random().truncate();\n\nexport const Projection = Schema.Struct({\n /**\n * Optional schema override used to customize the underlying schema.\n */\n schema: internal.JsonSchemaType.pipe(Schema.optional),\n\n /**\n * UX metadata associated with displayed fields (in table, form, etc.)\n */\n // TODO(wittjosiah): Should this just be an array of JsonPath?\n fields: Schema.Array(FieldSchema),\n\n /**\n * The id for the field used to pivot the view.\n * E.g., the field to use for kanban columns or the field to use for map coordinates.\n */\n pivotFieldId: Schema.String.pipe(Schema.optional),\n});\n\nexport type Projection = Schema.Schema.Type<typeof Projection>;\n\n/**\n * Views are generated or user-defined projections of a schema's properties.\n * They are used to configure the visual representation of the data.\n */\nconst ViewSchema = Schema.Struct({\n /**\n * Query used to retrieve data.\n * Can be a user-provided query grammar string or a query AST.\n */\n query: Schema.Struct({\n raw: Schema.optional(Schema.String),\n ast: QueryAST.Query,\n }),\n\n /**\n * Projection of the data returned from the query.\n */\n projection: Projection,\n}).pipe(\n Type.object({\n typename: 'org.dxos.type.view',\n version: '0.1.0',\n }),\n internal.SystemTypeAnnotation.set(true),\n Annotation.IconAnnotation.set({\n icon: 'ph--funnel--regular',\n hue: 'green',\n }),\n);\n\nexport interface View extends Schema.Schema.Type<typeof ViewSchema> {}\n\n/**\n * View instance type.\n */\n// NOTE: This interface is explicitly defined rather than derived from the schema to avoid\n// TypeScript \"cannot be named\" portability errors. The schema contains QueryAST.Query which\n// references internal @dxos/echo-protocol module paths. Without this explicit interface,\n// any schema using Ref.Ref(View) would inherit the non-portable type and fail to compile.\n// TODO(wittjosiah): Find a better solution that doesn't require manually keeping the interface in sync.\nexport const View: Type.Obj<View> = ViewSchema as any;\n\nexport const make = (props: Partial<Obj.MakeProps<typeof View>>): View => {\n return Obj.make(View, {\n query: { ast: Query.select(Filter.nothing()).ast },\n projection: { fields: [] },\n ...props,\n });\n};\n", "//\n// Copyright 2026 DXOS.org\n//\n\n// @import-as-namespace\n\nimport { pipe } from 'effect/Function';\nimport * as Predicate from 'effect/Predicate';\nimport * as Schema from 'effect/Schema';\n\nimport * as Collection from './Collection';\nimport * as Feed from './Feed';\nimport * as Obj from './Obj';\nimport * as View from './View';\n\n/**\n * Abstart set of objects, represented by a view, feed, or collection.\n */\nexport const Dataset = Schema.Union(Feed.Feed, Collection.Collection, View.View);\nexport type Dataset = Feed.Feed | Collection.Collection | View.View;\n\nexport const isDataset: (value: unknown) => value is Dataset = pipe(\n Obj.instanceOf(Feed.Feed),\n Predicate.or(Obj.instanceOf(Collection.Collection)),\n Predicate.or(Obj.instanceOf(View.View)),\n);\n"],
5
+ "mappings": "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",
6
+ "names": ["QueryAST", "DXN", "DXN", "isEncodedRef", "value", "Object", "keys", "length", "toJson", "obj", "toJSON", "createRefReplacer", "db", "depth", "hops", "WeakMap", "key", "parentHops", "get", "dxnString", "startsWith", "echoId", "parse", "asEchoDXN", "target", "getObjectById", "encoded", "set", "make", "Schema", "Collection", "Struct", "name", "String", "pipe", "optional", "objects", "Array", "Ref", "Unknown", "FormInputAnnotation", "set", "object", "typename", "version", "IconAnnotation", "icon", "hue", "make", "props", "isCollection", "instanceOf", "make", "Schema", "QueryAST", "JsonPath", "PublicKey", "FieldSchema", "Struct", "id", "String", "path", "JsonPath", "visible", "optional", "Boolean", "referencePath", "KeyValueProps", "Record", "key", "value", "Any", "createFieldId", "PublicKey", "random", "truncate", "Projection", "schema", "JsonSchemaType", "pipe", "fields", "Array", "pivotFieldId", "ViewSchema", "query", "raw", "ast", "QueryAST", "Query", "projection", "object", "typename", "version", "SystemTypeAnnotation", "set", "IconAnnotation", "icon", "hue", "View", "make", "props", "select", "nothing", "pipe", "Predicate", "Schema", "Dataset", "Union", "Feed", "Collection", "View", "isDataset", "pipe", "instanceOf", "or"]
7
+ }
@@ -1,9 +1,13 @@
1
1
  import {
2
2
  isRef
3
- } from "./chunk-FXEG7EOK.mjs";
3
+ } from "./chunk-VYAGNFSJ.mjs";
4
+ import {
5
+ getDXN,
6
+ prettyFilter
7
+ } from "./chunk-SJKBWMJY.mjs";
4
8
  import {
5
9
  getTypeDXNFromSpecifier
6
- } from "./chunk-SEMVAGBM.mjs";
10
+ } from "./chunk-TNBK56IN.mjs";
7
11
  import {
8
12
  __export
9
13
  } from "./chunk-J5LGTIGS.mjs";
@@ -13,7 +17,9 @@ var Filter_exports = {};
13
17
  __export(Filter_exports, {
14
18
  and: () => and,
15
19
  between: () => between,
20
+ childOf: () => childOf,
16
21
  contains: () => contains,
22
+ created: () => created,
17
23
  eq: () => eq,
18
24
  everything: () => everything,
19
25
  foreignKeys: () => foreignKeys,
@@ -29,12 +35,14 @@ __export(Filter_exports, {
29
35
  not: () => not,
30
36
  nothing: () => nothing,
31
37
  or: () => or,
38
+ pretty: () => pretty,
32
39
  props: () => props,
33
40
  tag: () => tag,
34
41
  text: () => text,
35
42
  type: () => type,
36
43
  typeDXN: () => typeDXN,
37
- typename: () => typename
44
+ typename: () => typename,
45
+ updated: () => updated
38
46
  });
39
47
  import * as Match from "effect/Match";
40
48
  import * as Schema from "effect/Schema";
@@ -211,6 +219,48 @@ var between = (from, to) => {
211
219
  to
212
220
  });
213
221
  };
222
+ var _toUnixMs = (date) => typeof date === "number" ? date : date.getTime();
223
+ var _timeRangeFilter = (field, range) => {
224
+ const filters = [];
225
+ if (range.after != null) {
226
+ filters.push(new FilterClass({
227
+ type: "timestamp",
228
+ field,
229
+ operator: "gte",
230
+ value: _toUnixMs(range.after)
231
+ }));
232
+ }
233
+ if (range.before != null) {
234
+ filters.push(new FilterClass({
235
+ type: "timestamp",
236
+ field,
237
+ operator: "lte",
238
+ value: _toUnixMs(range.before)
239
+ }));
240
+ }
241
+ if (filters.length === 0) {
242
+ return everything();
243
+ }
244
+ return filters.length === 1 ? filters[0] : and(...filters);
245
+ };
246
+ var updated = (range) => _timeRangeFilter("updatedAt", range);
247
+ var created = (range) => _timeRangeFilter("createdAt", range);
248
+ var childOf = (parents, options) => {
249
+ const items = Array.isArray(parents) ? parents : [
250
+ parents
251
+ ];
252
+ const dxns = items.map((item) => {
253
+ if (isRef(item)) {
254
+ return item.dxn.toString();
255
+ }
256
+ return getDXN(item).toString();
257
+ });
258
+ return new FilterClass({
259
+ type: "child-of",
260
+ parents: dxns,
261
+ transitive: options?.transitive ?? true
262
+ });
263
+ };
214
264
  var not = (filter) => {
215
265
  return new FilterClass({
216
266
  type: "not",
@@ -268,6 +318,7 @@ var processPredicate = (predicate) => {
268
318
  Match.orElse((value2) => eq(value2).ast)
269
319
  );
270
320
  };
321
+ var pretty = (filter) => prettyFilter(filter.ast);
271
322
 
272
323
  export {
273
324
  is,
@@ -291,9 +342,13 @@ export {
291
342
  in$,
292
343
  contains,
293
344
  between,
345
+ updated,
346
+ created,
347
+ childOf,
294
348
  not,
295
349
  and,
296
350
  or,
351
+ pretty,
297
352
  Filter_exports
298
353
  };
299
- //# sourceMappingURL=chunk-NXMFBIT5.mjs.map
354
+ //# sourceMappingURL=chunk-RF7ZBZ4A.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/Filter.ts"],
4
+ "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\n// @import-as-namespace\n\nimport * as Match from 'effect/Match';\nimport * as Schema from 'effect/Schema';\nimport * as SchemaAST from 'effect/SchemaAST';\nimport type * as Types from 'effect/Types';\n\nimport { type ForeignKey, type QueryAST } from '@dxos/echo-protocol';\nimport { assertArgument } from '@dxos/invariant';\nimport { DXN, ObjectId } from '@dxos/keys';\n\nimport * as internal from './internal';\nimport type * as Obj from './Obj';\nimport * as Ref from './Ref';\n\nexport interface Filter<T> {\n // TODO(dmaretskyi): See new effect-schema approach to variance.\n '~Filter': { value: Types.Covariant<T> };\n\n ast: QueryAST.Filter;\n}\n\nexport type Props<T> = {\n // Predicate or a value as a shorthand for `eq`.\n [K in keyof T & string]?: Filter<T[K]> | T[K];\n};\n\nexport type Any = Filter<any>;\n\nexport type Type<F extends Any> = F extends Filter<infer T> ? T : never;\n\nclass FilterClass implements Any {\n private static 'variance': Any['~Filter'] = {} as Any['~Filter'];\n\n constructor(public readonly ast: QueryAST.Filter) {}\n\n '~Filter' = FilterClass.variance;\n}\n\nexport const is = (value: unknown): value is Any => {\n return typeof value === 'object' && value !== null && '~Filter' in value;\n};\n\n/** Construct a filter from an ast. */\nexport const fromAst = (ast: QueryAST.Filter): Any => {\n return new FilterClass(ast);\n};\n\n/**\n * Filter that matches all objects.\n */\n// TODO(dmaretskyi): `Entity.Any` would be more type-safe, but causes annoying errors in existing code\nexport const everything = (): FilterClass => {\n return new FilterClass({\n type: 'object',\n typename: null,\n props: {},\n });\n};\n\n/**\n * Filter that matches no objects.\n */\nexport const nothing = (): FilterClass => {\n return new FilterClass({\n type: 'not',\n filter: {\n type: 'object',\n typename: null,\n props: {},\n },\n });\n};\n\n/*\n * Filter by ObjectId.\n */\nexport const id = (...ids: ObjectId[]): Any => {\n assertArgument(\n ids.every((id) => ObjectId.isValid(id)),\n 'ids',\n 'ids must be valid',\n );\n\n if (ids.length === 0) {\n return nothing();\n }\n\n return new FilterClass({\n type: 'object',\n typename: null,\n id: ids,\n props: {},\n });\n};\n\n/**\n * Filter by type.\n */\nexport const type = <S extends Schema.Schema.All>(\n schema: S | string,\n props?: Props<Schema.Schema.Type<S>>,\n): Filter<Schema.Schema.Type<S>> => {\n if (Schema.isSchema(schema) && SchemaAST.isUnion(schema.ast)) {\n const typenames = schema.ast.types.map((type) => internal.getTypeDXNFromSpecifier(Schema.make(type)));\n return new FilterClass({\n type: 'or',\n filters: typenames.map((typename) => ({\n type: 'object',\n typename: typename.toString(),\n props: {},\n })),\n });\n }\n\n const dxn = internal.getTypeDXNFromSpecifier(schema);\n return new FilterClass({\n type: 'object',\n typename: dxn.toString(),\n ...propsFilterToAst(props ?? {}),\n });\n};\n\n/**\n * Filter by non-qualified typename.\n */\nexport const typename = (typename: string): Any => {\n assertArgument(!typename.startsWith('dxn:'), 'typename', 'Typename must no be qualified');\n return new FilterClass({\n type: 'object',\n typename: DXN.fromTypename(typename).toString(),\n props: {},\n });\n};\n\n/**\n * Filter by fully qualified type DXN.\n */\nexport const typeDXN = (dxn: DXN): Any => {\n return new FilterClass({\n type: 'object',\n typename: dxn.toString(),\n props: {},\n });\n};\n\n/**\n * Filter by tag.\n */\nexport const tag = (tag: string): Any => {\n return new FilterClass({\n type: 'tag',\n tag,\n });\n};\n\n/**\n * Filter by properties.\n */\nexport const props = <T>(props: Props<T>): Filter<T> => {\n return new FilterClass({\n type: 'object',\n typename: null,\n ...propsFilterToAst(props),\n });\n};\n\nexport type TextSearchOptions = {\n // TODO(dmaretskyi): Hybrid search.\n type?: 'full-text' | 'vector';\n};\n\n/**\n * Full-text or vector search.\n */\nexport const text = (\n // TODO(dmaretskyi): Consider passing a vector here, but really the embedding should be done on the query-executor side.\n text: string,\n options?: TextSearchOptions,\n): Any => {\n return new FilterClass({\n type: 'text-search',\n text,\n searchKind: options?.type,\n });\n};\n\n/**\n * Filter by foreign keys.\n */\nexport const foreignKeys = <S extends Schema.Schema.All>(\n schema: S | string,\n keys: ForeignKey[],\n): Filter<Schema.Schema.Type<S>> => {\n const dxn = internal.getTypeDXNFromSpecifier(schema);\n return new FilterClass({\n type: 'object',\n typename: dxn.toString(),\n props: {},\n foreignKeys: keys,\n });\n};\n\n/**\n * Predicate for property to be equal to the provided value.\n */\nexport const eq = <T>(value: T): Filter<T | undefined> => {\n if (!Ref.isRef(value) && typeof value === 'object' && value !== null) {\n throw new TypeError('Cannot use object as a value for eq filter');\n }\n\n return new FilterClass({\n type: 'compare',\n operator: 'eq',\n value: Ref.isRef(value) ? value.noInline().encode() : value,\n });\n};\n\n/**\n * Predicate for property to be not equal to the provided value.\n */\nexport const neq = <T>(value: T): Filter<T | undefined> => {\n return new FilterClass({\n type: 'compare',\n operator: 'neq',\n value,\n });\n};\n\n/**\n * Predicate for property to be greater than the provided value.\n */\nexport const gt = <T>(value: T): Filter<T | undefined> => {\n return new FilterClass({\n type: 'compare',\n operator: 'gt',\n value,\n });\n};\n\n/**\n * Predicate for property to be greater than or equal to the provided value.\n */\nexport const gte = <T>(value: T): Filter<T | undefined> => {\n return new FilterClass({\n type: 'compare',\n operator: 'gte',\n value,\n });\n};\n\n/**\n * Predicate for property to be less than the provided value.\n */\nexport const lt = <T>(value: T): Filter<T | undefined> => {\n return new FilterClass({\n type: 'compare',\n operator: 'lt',\n value,\n });\n};\n\n/**\n * Predicate for property to be less than or equal to the provided value.\n */\nexport const lte = <T>(value: T): Filter<T | undefined> => {\n return new FilterClass({\n type: 'compare',\n operator: 'lte',\n value,\n });\n};\n\n/**\n * Predicate for property to be in the provided array.\n * @param values - Values to check against.\n */\nconst in$ = <T>(...values: T[]): Filter<T> => {\n return new FilterClass({\n type: 'in',\n values,\n });\n};\nexport { in$ as in };\n\n/**\n * Predicate for an array property to contain the provided value.\n * @param value - Value to check against.\n */\nexport const contains = <T>(value: T): Filter<readonly T[] | undefined> => {\n return new FilterClass({\n type: 'contains',\n value,\n });\n};\n\n/**\n * Predicate for property to be in the provided range.\n * @param from - Start of the range (inclusive).\n * @param to - End of the range (exclusive).\n */\nexport const between = <T>(from: T, to: T): Filter<T> => {\n return new FilterClass({\n type: 'range',\n from,\n to,\n });\n};\n\ntype TimeRange = { after?: Date | number; before?: Date | number };\n\nconst _toUnixMs = (date: Date | number): number => (typeof date === 'number' ? date : date.getTime());\n\nconst _timeRangeFilter = (field: 'updatedAt' | 'createdAt', range: TimeRange): Any => {\n const filters: Any[] = [];\n if (range.after != null) {\n filters.push(new FilterClass({ type: 'timestamp', field, operator: 'gte', value: _toUnixMs(range.after) }));\n }\n if (range.before != null) {\n filters.push(new FilterClass({ type: 'timestamp', field, operator: 'lte', value: _toUnixMs(range.before) }));\n }\n if (filters.length === 0) {\n return everything();\n }\n return filters.length === 1 ? filters[0] : and(...filters);\n};\n\n/**\n * Filter objects by updatedAt timestamp.\n */\nexport const updated = (range: TimeRange): Any => _timeRangeFilter('updatedAt', range);\n\n/**\n * Filter objects by createdAt timestamp.\n */\nexport const created = (range: TimeRange): Any => _timeRangeFilter('createdAt', range);\n\nexport type ChildOfOptions = {\n /** Whether to match transitively (grandchildren, etc.). Defaults to true. */\n transitive?: boolean;\n};\n\n/**\n * Filter objects that are children of the specified parent(s).\n * Accepts ECHO objects, Refs, or arrays of either.\n * Refs are resolved to DXNs without loading; objects use {@link Obj.getDXN}.\n * With transitive=true (default), also matches grandchildren and beyond.\n */\nexport const childOf = (\n parents: Obj.Unknown | Ref.Unknown | readonly (Obj.Unknown | Ref.Unknown)[],\n options?: ChildOfOptions,\n): Any => {\n const items = Array.isArray(parents) ? parents : [parents];\n const dxns = items.map((item) => {\n if (Ref.isRef(item)) {\n return item.dxn.toString();\n }\n return internal.getDXN(item).toString();\n });\n return new FilterClass({\n type: 'child-of',\n parents: dxns,\n transitive: options?.transitive ?? true,\n });\n};\n\n/**\n * Negate the filter.\n */\nexport const not = <F extends Any>(filter: F): Filter<Type<F>> => {\n return new FilterClass({\n type: 'not',\n filter: filter.ast,\n });\n};\n\n/**\n * Combine filters with a logical AND.\n */\nexport const and = <Filters extends readonly Any[]>(...filters: Filters): Filter<Type<Filters[number]>> => {\n return new FilterClass({\n type: 'and',\n filters: filters.map((f) => f.ast),\n });\n};\n\n/**\n * Combine filters with a logical OR.\n */\nexport const or = <Filters extends readonly Any[]>(...filters: Filters): Filter<Type<Filters[number]>> => {\n return new FilterClass({\n type: 'or',\n filters: filters.map((f) => f.ast),\n });\n};\n\n// TODO(dmaretskyi): Add `Filter.match` to support pattern matching on string props.\n\nconst propsFilterToAst = (predicates: Props<any>): Pick<QueryAST.FilterObject, 'id' | 'props'> => {\n let idFilter: readonly ObjectId[] | undefined;\n if ('id' in predicates) {\n assertArgument(\n typeof predicates.id === 'string' || Array.isArray(predicates.id),\n 'predicates.id',\n 'invalid id filter',\n );\n idFilter = typeof predicates.id === 'string' ? [predicates.id] : predicates.id;\n Schema.Array(ObjectId).pipe(Schema.validateSync)(idFilter);\n }\n\n return {\n id: idFilter,\n props: Object.fromEntries(\n Object.entries(predicates)\n .filter(([prop, _value]) => prop !== 'id')\n .map(([prop, predicate]) => [prop, processPredicate(predicate)]),\n ) as Record<string, QueryAST.Filter>,\n };\n};\n\nconst processPredicate = (predicate: any): QueryAST.Filter => {\n return Match.value(predicate).pipe(\n Match.withReturnType<QueryAST.Filter>(),\n Match.when(is, (predicate) => predicate.ast),\n // TODO(wittjosiah): Add support for array predicates.\n Match.when(Array.isArray, (_predicate) => {\n throw new Error('Array predicates are not yet supported.');\n }),\n Match.when(\n (predicate: any) => !Ref.isRef(predicate) && typeof predicate === 'object' && predicate !== null,\n (predicate) => {\n const nestedProps = Object.fromEntries(\n Object.entries(predicate).map(([key, value]) => [key, processPredicate(value)]),\n );\n\n return {\n type: 'object',\n typename: null,\n props: nestedProps,\n };\n },\n ),\n Match.orElse((value) => eq(value).ast),\n );\n};\n\n/**\n * Returns a human-readable string representation of a Filter AST.\n */\nexport const pretty = (filter: Any): string => internal.prettyFilter(filter.ast);\n"],
5
+ "mappings": "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",
6
+ "names": ["Match", "Schema", "SchemaAST", "assertArgument", "DXN", "ObjectId", "FilterClass", "ast", "variance", "is", "value", "fromAst", "everything", "type", "typename", "props", "nothing", "filter", "id", "ids", "assertArgument", "every", "ObjectId", "isValid", "length", "schema", "isSchema", "isUnion", "typenames", "types", "map", "getTypeDXNFromSpecifier", "make", "filters", "toString", "dxn", "propsFilterToAst", "startsWith", "DXN", "fromTypename", "typeDXN", "tag", "text", "options", "searchKind", "foreignKeys", "keys", "eq", "isRef", "TypeError", "operator", "noInline", "encode", "neq", "gt", "gte", "lt", "lte", "in$", "values", "contains", "value", "FilterClass", "type", "between", "from", "to", "_toUnixMs", "date", "getTime", "_timeRangeFilter", "field", "range", "filters", "after", "push", "operator", "before", "length", "everything", "and", "updated", "created", "childOf", "parents", "options", "items", "Array", "isArray", "dxns", "map", "item", "isRef", "dxn", "toString", "getDXN", "transitive", "not", "filter", "ast", "f", "or", "propsFilterToAst", "predicates", "idFilter", "assertArgument", "id", "Schema", "ObjectId", "pipe", "validateSync", "props", "Object", "fromEntries", "entries", "prop", "_value", "predicate", "processPredicate", "withReturnType", "when", "is", "_predicate", "Error", "nestedProps", "key", "typename", "orElse", "eq", "pretty", "prettyFilter"]
7
+ }
@@ -1,14 +1,15 @@
1
1
  import {
2
2
  object
3
- } from "./chunk-RMLF7JOZ.mjs";
3
+ } from "./chunk-FZHVQEHN.mjs";
4
4
  import {
5
- getKeys,
5
+ getDXN,
6
6
  make
7
- } from "./chunk-NQRLRYJM.mjs";
7
+ } from "./chunk-SW5CUSBY.mjs";
8
8
  import {
9
9
  FormInputAnnotation,
10
+ IconAnnotation,
10
11
  SystemTypeAnnotation
11
- } from "./chunk-SEMVAGBM.mjs";
12
+ } from "./chunk-TNBK56IN.mjs";
12
13
  import {
13
14
  __export
14
15
  } from "./chunk-J5LGTIGS.mjs";
@@ -16,8 +17,8 @@ import {
16
17
  // src/Feed.ts
17
18
  var Feed_exports = {};
18
19
  __export(Feed_exports, {
19
- DXN_KEY: () => DXN_KEY,
20
20
  Feed: () => Feed,
21
+ FeedService: () => FeedService,
21
22
  Service: () => Service,
22
23
  append: () => append,
23
24
  cursor: () => cursor,
@@ -29,7 +30,8 @@ __export(Feed_exports, {
29
30
  query: () => query,
30
31
  remove: () => remove,
31
32
  runQuery: () => runQuery,
32
- setRetention: () => setRetention
33
+ setRetention: () => setRetention,
34
+ unsafeFromQueueDXN: () => unsafeFromQueueDXN
33
35
  });
34
36
  import * as Context from "effect/Context";
35
37
  import * as Effect from "effect/Effect";
@@ -40,40 +42,67 @@ var Feed = Schema.Struct({
40
42
  /** User-facing display name. */
41
43
  name: Schema.String.pipe(Schema.optional),
42
44
  /** Identifier for the feed's kind (e.g., plugin id). */
43
- kind: Schema.String.pipe(FormInputAnnotation.set(false), Schema.optional)
45
+ kind: Schema.String.pipe(FormInputAnnotation.set(false), Schema.optional),
46
+ /**
47
+ * Feed namespace.
48
+ * Controls how feed data is stored and replicated.
49
+ * - `data`: Data feed (default).
50
+ * - `trace`: Trace feed.
51
+ */
52
+ namespace: Schema.optional(Schema.Literal("data", "trace"))
44
53
  }).pipe(object({
45
54
  typename: "org.dxos.type.feed",
46
55
  version: "0.1.0"
47
- }), SystemTypeAnnotation.set(true));
48
- var DXN_KEY = "org.dxos.key.feed";
56
+ }), SystemTypeAnnotation.set(true), IconAnnotation.set({
57
+ icon: "ph--rows--regular",
58
+ hue: "yellow"
59
+ }));
49
60
  var make2 = (props = {}) => make(Feed, props);
50
61
  var getQueueDxn = (feed) => {
51
- const keys = getKeys(feed, DXN_KEY);
52
- return keys.length === 0 ? void 0 : DXN.parse(keys[0].id);
62
+ const self = getDXN(feed).asEchoDXN();
63
+ if (!self || !self.spaceId) {
64
+ return void 0;
65
+ }
66
+ return new DXN(DXN.kind.QUEUE, [
67
+ feed.namespace ?? "data",
68
+ self.spaceId,
69
+ self.echoId
70
+ ]);
71
+ };
72
+ var unsafeFromQueueDXN = (queueDxn) => {
73
+ const parts = queueDxn.asQueueDXN();
74
+ if (!parts) {
75
+ throw new Error(`Expected a queue DXN, got: ${queueDxn.toString()}`);
76
+ }
77
+ return make(Feed, {
78
+ id: parts.queueId,
79
+ namespace: parts.subspaceTag === "trace" ? "trace" : void 0
80
+ });
53
81
  };
54
- var Service = class extends Context.Tag("@dxos/echo/Feed/Service")() {
82
+ var FeedService = class extends Context.Tag("@dxos/echo/Feed/FeedService")() {
55
83
  };
56
- var notAvailable = Layer.succeed(Service, {
84
+ var Service = FeedService;
85
+ var notAvailable = Layer.succeed(FeedService, {
57
86
  append: () => {
58
- throw new Error("Feed.Service not available");
87
+ throw new Error("Feed.FeedService not available");
59
88
  },
60
89
  remove: () => {
61
- throw new Error("Feed.Service not available");
90
+ throw new Error("Feed.FeedService not available");
62
91
  },
63
92
  query: () => {
64
- throw new Error("Feed.Service not available");
93
+ throw new Error("Feed.FeedService not available");
65
94
  }
66
95
  });
67
96
  var append = (feed, items) => Effect.gen(function* () {
68
- const service = yield* Service;
97
+ const service = yield* FeedService;
69
98
  yield* Effect.promise(() => service.append(feed, items));
70
99
  });
71
100
  var remove = (feed, items) => Effect.gen(function* () {
72
- const service = yield* Service;
101
+ const service = yield* FeedService;
73
102
  const ids = items.map((item) => item.id);
74
103
  yield* Effect.promise(() => service.remove(feed, ids));
75
104
  });
76
- var query = (feed, queryOrFilter) => Service.pipe(Effect.map((service) => service.query(feed, queryOrFilter)));
105
+ var query = (feed, queryOrFilter) => FeedService.pipe(Effect.map((service) => service.query(feed, queryOrFilter)));
77
106
  var runQuery = (feed, queryOrFilter) => query(feed, queryOrFilter).pipe(Effect.flatMap((queryResult) => Effect.promise(() => queryResult.run())));
78
107
  var cursor = (_feed) => Effect.succeed({
79
108
  _tag: "Cursor"
@@ -84,9 +113,10 @@ var setRetention = (_feed, _options) => Effect.void;
84
113
 
85
114
  export {
86
115
  Feed,
87
- DXN_KEY,
88
116
  make2 as make,
89
117
  getQueueDxn,
118
+ unsafeFromQueueDXN,
119
+ FeedService,
90
120
  Service,
91
121
  notAvailable,
92
122
  append,
@@ -99,4 +129,4 @@ export {
99
129
  setRetention,
100
130
  Feed_exports
101
131
  };
102
- //# sourceMappingURL=chunk-DYDJBZEG.mjs.map
132
+ //# sourceMappingURL=chunk-S7IMFVTB.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/Feed.ts"],
4
+ "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\n// @import-as-namespace\n\nimport * as Context from 'effect/Context';\nimport * as Effect from 'effect/Effect';\nimport * as Layer from 'effect/Layer';\nimport type * as Option from 'effect/Option';\nimport * as Schema from 'effect/Schema';\n\nimport { DXN, type ObjectId } from '@dxos/keys';\n\nimport * as Annotation from './Annotation';\nimport type * as Entity from './Entity';\nimport type * as Filter from './Filter';\nimport * as internal from './internal';\nimport * as Obj from './Obj';\nimport type * as Query from './Query';\nimport type * as QueryResult from './QueryResult';\nimport * as Type from './Type';\n\n/**\n * Runtime schema for a Feed object.\n *\n * @example\n * ```ts\n * const feed = Obj.make(Feed.Feed, { name: 'notifications', kind: 'org.dxos.plugin.notifications.v1' });\n * ```\n */\nexport const Feed = Schema.Struct({\n /** User-facing display name. */\n name: Schema.String.pipe(Schema.optional),\n /** Identifier for the feed's kind (e.g., plugin id). */\n kind: Schema.String.pipe(internal.FormInputAnnotation.set(false), Schema.optional),\n\n /**\n * Feed namespace.\n * Controls how feed data is stored and replicated.\n * - `data`: Data feed (default).\n * - `trace`: Trace feed.\n */\n namespace: Schema.optional(Schema.Literal('data', 'trace')),\n}).pipe(\n Type.object({\n typename: 'org.dxos.type.feed',\n version: '0.1.0',\n }),\n internal.SystemTypeAnnotation.set(true),\n Annotation.IconAnnotation.set({\n icon: 'ph--rows--regular',\n hue: 'yellow',\n }),\n);\n\n/**\n * TypeScript instance type for a Feed object.\n */\nexport interface Feed extends Schema.Schema.Type<typeof Feed> {}\n\n//\n// Types\n//\n\n/**\n * Opaque cursor for iterating over feed items.\n */\n// TODO(dmaretskyi): T needs to be referenced in the type structure for typescript to respect it during inference and type-checking.\nexport interface Cursor<T = Obj.Snapshot> {\n readonly _tag: 'Cursor';\n}\n\n/**\n * Retention options for a feed.\n */\nexport interface RetentionOptions {\n /** Retain items after this cursor position. */\n // TODO(wittjosiah): Use FeedCursor from @dxos/feed?\n cursor?: string;\n}\n\n//\n// Factory\n//\n\n/**\n * Creates a new feed object.\n *\n * @example\n * ```ts\n * const feed = Feed.make({ name: 'notifications', kind: 'org.dxos.plugin.notifications.v1' });\n * ```\n */\n// TODO(wittjosiah): How to control the feed namespace (data/trace)? Why do feeds have namespaces?\nexport const make = (props: Obj.MakeProps<typeof Feed> = {}): Feed => Obj.make(Feed, props);\n\n/**\n * Derives the queue DXN from the feed object's DXN.\n * Returns `undefined` when the feed is not stored in a space yet.\n *\n * Used internally by the feed service layer.\n */\nexport const getQueueDxn = (feed: Feed): DXN | undefined => {\n const self = Obj.getDXN(feed).asEchoDXN();\n if (!self || !self.spaceId) {\n return undefined;\n }\n return new DXN(DXN.kind.QUEUE, [feed.namespace ?? 'data', self.spaceId, self.echoId]);\n};\n\n/**\n * Creates a Feed object from a queue DXN, inferring the feed's id and namespace from the DXN parts.\n *\n * The resulting Feed, when added to the same space as the queue, will have a queue DXN\n * equal to the input (see `Feed.getQueueDxn`). Useful when migrating `Ref(Queue)` fields to\n * `Ref(Feed.Feed)`.\n *\n * @remarks Unsafe because the caller must ensure the queue DXN's space matches the database\n * the feed is added to; the feed id is set from the queue id, bypassing id generation.\n */\nexport const unsafeFromQueueDXN = (queueDxn: DXN): Feed => {\n const parts = queueDxn.asQueueDXN();\n if (!parts) {\n throw new Error(`Expected a queue DXN, got: ${queueDxn.toString()}`);\n }\n return Obj.make(Feed, {\n id: parts.queueId as ObjectId,\n namespace: parts.subspaceTag === 'trace' ? 'trace' : undefined,\n });\n};\n\n//\n// Service\n//\n\n/**\n * Effect service for feed operations.\n * Provides the bridge to the underlying storage implementation.\n * Must be provided by the application layer (e.g., echo-db).\n */\nexport class FeedService extends Context.Tag('@dxos/echo/Feed/FeedService')<\n FeedService,\n {\n /**\n * Appends items to a feed.\n */\n append(feed: Feed, items: Entity.Unknown[]): Promise<void>;\n\n /**\n * Removes items from a feed by ID.\n */\n // TODO(dmaretskyi): Change type to ObjectId.\n remove(feed: Feed, ids: string[]): Promise<void>;\n\n /**\n * Queries items in a feed.\n */\n query: {\n <Q extends Query.Any>(feed: Feed, query: Q): QueryResult.QueryResult<Query.Type<Q>>;\n <F extends Filter.Any>(feed: Feed, filter: F): QueryResult.QueryResult<Filter.Type<F>>;\n };\n }\n>() {}\n\n/**\n * @deprecated Use `FeedService` instead.\n */\nexport type Service = FeedService;\n\n/**\n * @deprecated Use `FeedService` instead.\n */\nexport const Service = FeedService;\n\n/**\n * Layer that provides a Feed service that throws when accessed.\n * Useful as a default layer when no feed service is available.\n */\nexport const notAvailable: Layer.Layer<FeedService> = Layer.succeed(FeedService, {\n append: () => {\n throw new Error('Feed.FeedService not available');\n },\n remove: () => {\n throw new Error('Feed.FeedService not available');\n },\n query: () => {\n throw new Error('Feed.FeedService not available');\n },\n} as Context.Tag.Service<FeedService>);\n\n//\n// Operations\n//\n\n/**\n * Appends items to a feed.\n *\n * @example\n * ```ts\n * yield* Feed.append(feed, [Obj.make(Notification, { title: 'Hello' })]);\n * ```\n */\nexport const append = (feed: Feed, items: Entity.Unknown[]): Effect.Effect<void, never, FeedService> =>\n Effect.gen(function* () {\n const service = yield* FeedService;\n yield* Effect.promise(() => service.append(feed, items));\n });\n\n/**\n * Removes items from a feed.\n *\n * @example\n * ```ts\n * yield* Feed.remove(feed, [item]);\n * ```\n */\n// TODO(dmaretskyi): Should we allow snapshots here? - what does it mean to remove a snapshot?\nexport const remove = (feed: Feed, items: (Entity.Unknown | Obj.Snapshot)[]): Effect.Effect<void, never, FeedService> =>\n Effect.gen(function* () {\n const service = yield* FeedService;\n const ids = items.map((item) => item.id);\n yield* Effect.promise(() => service.remove(feed, ids));\n });\n\n/**\n * Creates a reactive query over items in a feed.\n *\n * @example\n * ```ts\n * const result = yield* Feed.query(feed, Filter.type(Person));\n * ```\n */\n// TODO(dmaretskyi): Suport chained queries:\n// const result = yield* feed.pipe(Feed.query(Filter.type(Person))); result.subscribe(...)\n// const objects = yield* feed.pipe(Feed.query(Filter.type(Person))).run;\n// const object = yield* feed.pipe(Feed.query(Filter.type(Person))).first;\n// ... unify for Database and schema queries.\nexport const query: {\n <Q extends Query.Any>(\n feed: Feed,\n query: Q,\n ): Effect.Effect<QueryResult.QueryResult<Query.Type<Q>>, never, FeedService>;\n <F extends Filter.Any>(\n feed: Feed,\n filter: F,\n ): Effect.Effect<QueryResult.QueryResult<Filter.Type<F>>, never, FeedService>;\n} = (feed: Feed, queryOrFilter: Query.Any | Filter.Any) =>\n FeedService.pipe(Effect.map((service) => service.query(feed, queryOrFilter as any) as QueryResult.QueryResult<any>));\n\n/**\n * Executes a feed query once and returns the results.\n *\n * @example\n * ```ts\n * const items = yield* Feed.runQuery(feed, Filter.type(Person));\n * ```\n */\nexport const runQuery: {\n <Q extends Query.Any>(feed: Feed, query: Q): Effect.Effect<Query.Type<Q>[], never, FeedService>;\n <F extends Filter.Any>(feed: Feed, filter: F): Effect.Effect<Filter.Type<F>[], never, FeedService>;\n} = (feed: Feed, queryOrFilter: Query.Any | Filter.Any) =>\n query(feed, queryOrFilter as any).pipe(Effect.flatMap((queryResult) => Effect.promise(() => queryResult.run())));\n\n/**\n * Creates a cursor for iterating over feed items.\n * Currently stubbed — cursor operations are not yet implemented.\n *\n * @example\n * ```ts\n * const cursor = yield* Feed.cursor<Person>(feed);\n * const item = yield* Feed.next(cursor);\n * ```\n */\n// TODO(wittjosiah): Implement cursor operations. Use Effect streams?\nexport const cursor = <T = Obj.Snapshot>(_feed: Feed): Effect.Effect<Cursor<T>, never, FeedService> =>\n Effect.succeed({ _tag: 'Cursor' } as Cursor<T>);\n\n/**\n * Returns the next item from a feed cursor.\n * Currently stubbed — cursor operations are not yet implemented.\n */\nexport const next = <T = Obj.Snapshot>(_cursor: Cursor<T>): Effect.Effect<T, never, FeedService> =>\n Effect.die('Feed.next is not yet implemented');\n\n/**\n * Returns the next item from a feed cursor as an Option.\n * Currently stubbed — cursor operations are not yet implemented.\n */\nexport const nextOption = <T = Obj.Snapshot>(_cursor: Cursor<T>): Effect.Effect<Option.Option<T>, never, FeedService> =>\n Effect.die('Feed.nextOption is not yet implemented');\n\n/**\n * Sets the local retention policy for a feed.\n * Currently stubbed — queues do not yet support retention.\n *\n * @example\n * ```ts\n * yield* Feed.setRetention(feed, { count: 1000 });\n * ```\n */\n// TODO(feed): Implement when queue retention is supported.\nexport const setRetention = (_feed: Feed, _options: RetentionOptions): Effect.Effect<void, never, FeedService> =>\n Effect.void;\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;AAAA;;;;;;;;cAAAA;EAAA;;;;;;;;;AAMA,YAAYC,aAAa;AACzB,YAAYC,YAAY;AACxB,YAAYC,WAAW;AAEvB,YAAYC,YAAY;AAExB,SAASC,WAA0B;AAmB5B,IAAMC,OAAcC,cAAO;;EAEhCC,MAAaC,cAAOC,KAAYC,eAAQ;;EAExCC,MAAaH,cAAOC,KAAcG,oBAAoBC,IAAI,KAAA,GAAeH,eAAQ;;;;;;;EAQjFI,WAAkBJ,gBAAgBK,eAAQ,QAAQ,OAAA,CAAA;AACpD,CAAA,EAAGN,KACIO,OAAO;EACVC,UAAU;EACVC,SAAS;AACX,CAAA,GACSC,qBAAqBN,IAAI,IAAA,GACvBO,eAAeP,IAAI;EAC5BQ,MAAM;EACNC,KAAK;AACP,CAAA,CAAA;AA0CK,IAAMC,QAAO,CAACC,QAAoC,CAAC,MAAgBD,KAAKlB,MAAMmB,KAAAA;AAQ9E,IAAMC,cAAc,CAACC,SAAAA;AAC1B,QAAMC,OAAWC,OAAOF,IAAAA,EAAMG,UAAS;AACvC,MAAI,CAACF,QAAQ,CAACA,KAAKG,SAAS;AAC1B,WAAOC;EACT;AACA,SAAO,IAAIC,IAAIA,IAAIrB,KAAKsB,OAAO;IAACP,KAAKZ,aAAa;IAAQa,KAAKG;IAASH,KAAKO;GAAO;AACtF;AAYO,IAAMC,qBAAqB,CAACC,aAAAA;AACjC,QAAMC,QAAQD,SAASE,WAAU;AACjC,MAAI,CAACD,OAAO;AACV,UAAM,IAAIE,MAAM,8BAA8BH,SAASI,SAAQ,CAAA,EAAI;EACrE;AACA,SAAWjB,KAAKlB,MAAM;IACpBoC,IAAIJ,MAAMK;IACV5B,WAAWuB,MAAMM,gBAAgB,UAAU,UAAUZ;EACvD,CAAA;AACF;AAWO,IAAMa,cAAN,cAAkCC,YAAI,6BAAA,EAAA,EAAA;AAsBxC;AAUE,IAAMC,UAAUF;AAMhB,IAAMG,eAA+CC,cAAQJ,aAAa;EAC/EK,QAAQ,MAAA;AACN,UAAM,IAAIV,MAAM,gCAAA;EAClB;EACAW,QAAQ,MAAA;AACN,UAAM,IAAIX,MAAM,gCAAA;EAClB;EACAY,OAAO,MAAA;AACL,UAAM,IAAIZ,MAAM,gCAAA;EAClB;AACF,CAAA;AAcO,IAAMU,SAAS,CAACvB,MAAY0B,UAC1BC,WAAI,aAAA;AACT,QAAMC,UAAU,OAAOV;AACvB,SAAcW,eAAQ,MAAMD,QAAQL,OAAOvB,MAAM0B,KAAAA,CAAAA;AACnD,CAAA;AAWK,IAAMF,SAAS,CAACxB,MAAY0B,UAC1BC,WAAI,aAAA;AACT,QAAMC,UAAU,OAAOV;AACvB,QAAMY,MAAMJ,MAAMK,IAAI,CAACC,SAASA,KAAKjB,EAAE;AACvC,SAAcc,eAAQ,MAAMD,QAAQJ,OAAOxB,MAAM8B,GAAAA,CAAAA;AACnD,CAAA;AAeK,IAAML,QAST,CAACzB,MAAYiC,kBACff,YAAYnC,KAAYgD,WAAI,CAACH,YAAYA,QAAQH,MAAMzB,MAAMiC,aAAAA,CAAAA,CAAAA;AAUxD,IAAMC,WAGT,CAAClC,MAAYiC,kBACfR,MAAMzB,MAAMiC,aAAAA,EAAsBlD,KAAYoD,eAAQ,CAACC,gBAAuBP,eAAQ,MAAMO,YAAYC,IAAG,CAAA,CAAA,CAAA;AAatG,IAAMC,SAAS,CAAmBC,UAChCjB,eAAQ;EAAEkB,MAAM;AAAS,CAAA;AAM3B,IAAMC,OAAO,CAAmBC,YAC9BC,WAAI,kCAAA;AAMN,IAAMC,aAAa,CAAmBF,YACpCC,WAAI,wCAAA;AAYN,IAAME,eAAe,CAACN,OAAaO,aACjCC;",
6
+ "names": ["make", "Context", "Effect", "Layer", "Schema", "DXN", "Feed", "Struct", "name", "String", "pipe", "optional", "kind", "FormInputAnnotation", "set", "namespace", "Literal", "object", "typename", "version", "SystemTypeAnnotation", "IconAnnotation", "icon", "hue", "make", "props", "getQueueDxn", "feed", "self", "getDXN", "asEchoDXN", "spaceId", "undefined", "DXN", "QUEUE", "echoId", "unsafeFromQueueDXN", "queueDxn", "parts", "asQueueDXN", "Error", "toString", "id", "queueId", "subspaceTag", "FeedService", "Tag", "Service", "notAvailable", "succeed", "append", "remove", "query", "items", "gen", "service", "promise", "ids", "map", "item", "queryOrFilter", "runQuery", "flatMap", "queryResult", "run", "cursor", "_feed", "_tag", "next", "_cursor", "die", "nextOption", "setRetention", "_options", "void"]
7
+ }