@dxos/echo 0.8.4-staging.ac66bdf99f → 0.9.0

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 (437) hide show
  1. package/LICENSE +102 -5
  2. package/README.md +7 -7
  3. package/dist/lib/neutral/Annotation.mjs +37 -6
  4. package/dist/lib/neutral/Database.mjs +6 -17
  5. package/dist/lib/neutral/Entity.mjs +31 -20
  6. package/dist/lib/neutral/Err.mjs +3 -3
  7. package/dist/lib/neutral/Feed.mjs +23 -19
  8. package/dist/lib/neutral/Filter.mjs +13 -15
  9. package/dist/lib/neutral/Format.mjs +23 -3
  10. package/dist/lib/neutral/JsonSchema.mjs +7 -8
  11. package/dist/lib/neutral/Key.mjs +9 -5
  12. package/dist/lib/neutral/Migration.mjs +11 -10
  13. package/dist/lib/neutral/Obj.mjs +29 -20
  14. package/dist/lib/neutral/Order.mjs +7 -3
  15. package/dist/lib/neutral/Query.mjs +17 -17
  16. package/dist/lib/neutral/QueryResult.mjs +1 -1
  17. package/dist/lib/neutral/Ref.mjs +10 -9
  18. package/dist/lib/neutral/Registry.mjs +14 -0
  19. package/dist/lib/neutral/Relation.mjs +28 -25
  20. package/dist/lib/neutral/Scope.mjs +12 -0
  21. package/dist/lib/neutral/Tag.mjs +17 -14
  22. package/dist/lib/neutral/Type.mjs +54 -26
  23. package/dist/lib/neutral/{chunk-OMUPQMLR.mjs → chunk-35INCYOE.mjs} +1 -1
  24. package/dist/lib/neutral/chunk-35INCYOE.mjs.map +7 -0
  25. package/dist/lib/neutral/chunk-3PBP4V4O.mjs +101 -0
  26. package/dist/lib/neutral/chunk-3PBP4V4O.mjs.map +7 -0
  27. package/dist/lib/neutral/chunk-4ZUHOTCG.mjs +184 -0
  28. package/dist/lib/neutral/chunk-4ZUHOTCG.mjs.map +7 -0
  29. package/dist/lib/neutral/chunk-5SMDBFVB.mjs +108 -0
  30. package/dist/lib/neutral/chunk-5SMDBFVB.mjs.map +7 -0
  31. package/dist/lib/neutral/{chunk-OS35K56T.mjs → chunk-5SUJPHAE.mjs} +3 -3
  32. package/dist/lib/neutral/{chunk-OS35K56T.mjs.map → chunk-5SUJPHAE.mjs.map} +2 -2
  33. package/dist/lib/neutral/{chunk-GZQTCRJB.mjs → chunk-6M2Z6WBH.mjs} +22 -2
  34. package/dist/lib/neutral/chunk-6M2Z6WBH.mjs.map +7 -0
  35. package/dist/lib/neutral/{chunk-V36VO5SS.mjs → chunk-6YDI3J37.mjs} +32 -40
  36. package/dist/lib/neutral/chunk-6YDI3J37.mjs.map +7 -0
  37. package/dist/lib/neutral/{chunk-MOR5ERFM.mjs → chunk-7FPIAJIV.mjs} +701 -1256
  38. package/dist/lib/neutral/chunk-7FPIAJIV.mjs.map +7 -0
  39. package/dist/lib/neutral/{chunk-ANHVGJI4.mjs → chunk-7LOUAPYZ.mjs} +9 -5
  40. package/dist/lib/neutral/chunk-7LOUAPYZ.mjs.map +7 -0
  41. package/dist/lib/neutral/{chunk-JUXPFOEI.mjs → chunk-7PI7C4EF.mjs} +48 -88
  42. package/dist/lib/neutral/chunk-7PI7C4EF.mjs.map +7 -0
  43. package/dist/lib/neutral/{chunk-UBEZSGXY.mjs → chunk-BBFJWWAV.mjs} +6 -6
  44. package/dist/lib/neutral/chunk-BBFJWWAV.mjs.map +7 -0
  45. package/dist/lib/neutral/{chunk-UI6MWK5W.mjs → chunk-EVK6XBXO.mjs} +16 -2
  46. package/dist/lib/neutral/chunk-EVK6XBXO.mjs.map +7 -0
  47. package/dist/lib/neutral/{chunk-7RO7CPBZ.mjs → chunk-IGK6FN65.mjs} +2 -2
  48. package/dist/lib/neutral/{chunk-HBUZJNZO.mjs → chunk-LWXVKPPW.mjs} +94 -99
  49. package/dist/lib/neutral/chunk-LWXVKPPW.mjs.map +7 -0
  50. package/dist/lib/neutral/{chunk-BVOFLCVF.mjs → chunk-MZ7K3MLL.mjs} +9 -6
  51. package/dist/lib/neutral/chunk-MZ7K3MLL.mjs.map +7 -0
  52. package/dist/lib/neutral/{chunk-TBKX6JQO.mjs → chunk-O6BH7EPN.mjs} +30 -3
  53. package/dist/lib/neutral/chunk-O6BH7EPN.mjs.map +7 -0
  54. package/dist/lib/neutral/{chunk-EAMSSLZC.mjs → chunk-QQIYS74I.mjs} +83 -46
  55. package/dist/lib/neutral/chunk-QQIYS74I.mjs.map +7 -0
  56. package/dist/lib/neutral/chunk-R5W6DXR4.mjs +678 -0
  57. package/dist/lib/neutral/chunk-R5W6DXR4.mjs.map +7 -0
  58. package/dist/lib/neutral/{chunk-WAK4DMFV.mjs → chunk-RIVWNMSF.mjs} +12 -7
  59. package/dist/lib/neutral/chunk-RIVWNMSF.mjs.map +7 -0
  60. package/dist/lib/neutral/{chunk-T6W2LEZU.mjs → chunk-SBVFRTST.mjs} +73 -38
  61. package/dist/lib/neutral/chunk-SBVFRTST.mjs.map +7 -0
  62. package/dist/lib/neutral/chunk-T6E37YIP.mjs +251 -0
  63. package/dist/lib/neutral/chunk-T6E37YIP.mjs.map +7 -0
  64. package/dist/lib/neutral/{chunk-DQYLD2RB.mjs → chunk-TFEWTY5A.mjs} +155 -129
  65. package/dist/lib/neutral/chunk-TFEWTY5A.mjs.map +7 -0
  66. package/dist/lib/neutral/{chunk-B4BASU6W.mjs → chunk-TYGKCRMK.mjs} +85 -76
  67. package/dist/lib/neutral/chunk-TYGKCRMK.mjs.map +7 -0
  68. package/dist/lib/neutral/{chunk-4OIBYSXE.mjs → chunk-UUP46KUQ.mjs} +78 -32
  69. package/dist/lib/neutral/chunk-UUP46KUQ.mjs.map +7 -0
  70. package/dist/lib/neutral/chunk-WISOH2XH.mjs +36 -0
  71. package/dist/lib/neutral/chunk-WISOH2XH.mjs.map +7 -0
  72. package/dist/lib/neutral/{chunk-G3IQMKF7.mjs → chunk-WTQJHC75.mjs} +111 -112
  73. package/dist/lib/neutral/chunk-WTQJHC75.mjs.map +7 -0
  74. package/dist/lib/neutral/chunk-WU3GIANS.mjs +31 -0
  75. package/dist/lib/neutral/chunk-WU3GIANS.mjs.map +7 -0
  76. package/dist/lib/neutral/{chunk-TU3GW67D.mjs → chunk-ZGNNFYHS.mjs} +40 -40
  77. package/dist/lib/neutral/chunk-ZGNNFYHS.mjs.map +7 -0
  78. package/dist/lib/neutral/index.mjs +47 -41
  79. package/dist/lib/neutral/internal/index.mjs +137 -72
  80. package/dist/lib/neutral/meta.json +1 -1
  81. package/dist/lib/neutral/testing/index.mjs +261 -178
  82. package/dist/lib/neutral/testing/index.mjs.map +4 -4
  83. package/dist/types/src/Annotation.d.ts +108 -4
  84. package/dist/types/src/Annotation.d.ts.map +1 -1
  85. package/dist/types/src/Annotation.test.d.ts +2 -0
  86. package/dist/types/src/Annotation.test.d.ts.map +1 -0
  87. package/dist/types/src/Collection.d.ts +2 -3
  88. package/dist/types/src/Collection.d.ts.map +1 -1
  89. package/dist/types/src/Database.d.ts +56 -49
  90. package/dist/types/src/Database.d.ts.map +1 -1
  91. package/dist/types/src/Dataset.d.ts +16 -6
  92. package/dist/types/src/Dataset.d.ts.map +1 -1
  93. package/dist/types/src/Entity.d.ts +101 -28
  94. package/dist/types/src/Entity.d.ts.map +1 -1
  95. package/dist/types/src/Err.d.ts +27 -27
  96. package/dist/types/src/Err.d.ts.map +1 -1
  97. package/dist/types/src/Feed.d.ts +66 -19
  98. package/dist/types/src/Feed.d.ts.map +1 -1
  99. package/dist/types/src/Filter.d.ts +38 -12
  100. package/dist/types/src/Filter.d.ts.map +1 -1
  101. package/dist/types/src/Format.d.ts +0 -2
  102. package/dist/types/src/Format.d.ts.map +1 -1
  103. package/dist/types/src/Hypergraph.d.ts +14 -9
  104. package/dist/types/src/Hypergraph.d.ts.map +1 -1
  105. package/dist/types/src/Json.d.ts +33 -0
  106. package/dist/types/src/Json.d.ts.map +1 -0
  107. package/dist/types/src/Json.test.d.ts +2 -0
  108. package/dist/types/src/Json.test.d.ts.map +1 -0
  109. package/dist/types/src/JsonSchema.d.ts +2 -2
  110. package/dist/types/src/JsonSchema.d.ts.map +1 -1
  111. package/dist/types/src/Key.d.ts +1 -1
  112. package/dist/types/src/Key.d.ts.map +1 -1
  113. package/dist/types/src/Migration.d.ts +26 -11
  114. package/dist/types/src/Migration.d.ts.map +1 -1
  115. package/dist/types/src/Obj.d.ts +104 -61
  116. package/dist/types/src/Obj.d.ts.map +1 -1
  117. package/dist/types/src/Order.d.ts +10 -0
  118. package/dist/types/src/Order.d.ts.map +1 -1
  119. package/dist/types/src/Query.d.ts +34 -12
  120. package/dist/types/src/Query.d.ts.map +1 -1
  121. package/dist/types/src/QueryResult.d.ts +21 -0
  122. package/dist/types/src/QueryResult.d.ts.map +1 -1
  123. package/dist/types/src/Ref.d.ts +15 -7
  124. package/dist/types/src/Ref.d.ts.map +1 -1
  125. package/dist/types/src/Registry.d.ts +131 -0
  126. package/dist/types/src/Registry.d.ts.map +1 -0
  127. package/dist/types/src/Relation.d.ts +73 -41
  128. package/dist/types/src/Relation.d.ts.map +1 -1
  129. package/dist/types/src/Scope.d.ts +35 -0
  130. package/dist/types/src/Scope.d.ts.map +1 -0
  131. package/dist/types/src/Tag.d.ts +21 -5
  132. package/dist/types/src/Tag.d.ts.map +1 -1
  133. package/dist/types/src/Type.d.ts +362 -95
  134. package/dist/types/src/Type.d.ts.map +1 -1
  135. package/dist/types/src/View.d.ts +9 -12
  136. package/dist/types/src/View.d.ts.map +1 -1
  137. package/dist/types/src/exemplars.test.d.ts +2 -0
  138. package/dist/types/src/exemplars.test.d.ts.map +1 -0
  139. package/dist/types/src/index.d.ts +4 -3
  140. package/dist/types/src/index.d.ts.map +1 -1
  141. package/dist/types/src/internal/Annotation/annotations.d.ts +79 -38
  142. package/dist/types/src/internal/Annotation/annotations.d.ts.map +1 -1
  143. package/dist/types/src/internal/Annotation/dictionary.d.ts +24 -0
  144. package/dist/types/src/internal/Annotation/dictionary.d.ts.map +1 -0
  145. package/dist/types/src/internal/Annotation/entity-dictionary.d.ts +14 -0
  146. package/dist/types/src/internal/Annotation/entity-dictionary.d.ts.map +1 -0
  147. package/dist/types/src/internal/Annotation/index.d.ts +4 -2
  148. package/dist/types/src/internal/Annotation/index.d.ts.map +1 -1
  149. package/dist/types/src/internal/Annotation/sorting.d.ts.map +1 -1
  150. package/dist/types/src/internal/Annotation/util.d.ts +14 -5
  151. package/dist/types/src/internal/Annotation/util.d.ts.map +1 -1
  152. package/dist/types/src/internal/Entity/api.d.ts +17 -3
  153. package/dist/types/src/internal/Entity/api.d.ts.map +1 -1
  154. package/dist/types/src/internal/Entity/entity.d.ts +72 -8
  155. package/dist/types/src/internal/Entity/entity.d.ts.map +1 -1
  156. package/dist/types/src/internal/Entity/guard.d.ts +10 -0
  157. package/dist/types/src/internal/Entity/guard.d.ts.map +1 -0
  158. package/dist/types/src/internal/Entity/index.d.ts +2 -0
  159. package/dist/types/src/internal/Entity/index.d.ts.map +1 -1
  160. package/dist/types/src/internal/Entity/model.d.ts +21 -17
  161. package/dist/types/src/internal/Entity/model.d.ts.map +1 -1
  162. package/dist/types/src/internal/Entity/object.d.ts +3 -3
  163. package/dist/types/src/internal/Entity/object.d.ts.map +1 -1
  164. package/dist/types/src/internal/Entity/relation.d.ts +30 -7
  165. package/dist/types/src/internal/Entity/relation.d.ts.map +1 -1
  166. package/dist/types/src/internal/Entity/type-kind.d.ts +24 -0
  167. package/dist/types/src/internal/Entity/type-kind.d.ts.map +1 -0
  168. package/dist/types/src/internal/Entity/type-uri.d.ts +24 -0
  169. package/dist/types/src/internal/Entity/type-uri.d.ts.map +1 -0
  170. package/dist/types/src/internal/Entity/version.d.ts.map +1 -1
  171. package/dist/types/src/internal/Format/date.d.ts.map +1 -1
  172. package/dist/types/src/internal/Format/format.d.ts +3 -2
  173. package/dist/types/src/internal/Format/format.d.ts.map +1 -1
  174. package/dist/types/src/internal/Format/index.d.ts +2 -2
  175. package/dist/types/src/internal/Format/index.d.ts.map +1 -1
  176. package/dist/types/src/internal/Format/number.d.ts.map +1 -1
  177. package/dist/types/src/internal/Format/object.d.ts +3 -1
  178. package/dist/types/src/internal/Format/object.d.ts.map +1 -1
  179. package/dist/types/src/internal/Format/types.d.ts.map +1 -1
  180. package/dist/types/src/internal/JsonSchema/json-schema-normalize.d.ts.map +1 -1
  181. package/dist/types/src/internal/JsonSchema/json-schema-type.d.ts +34 -34
  182. package/dist/types/src/internal/JsonSchema/json-schema-type.d.ts.map +1 -1
  183. package/dist/types/src/internal/JsonSchema/json-schema.d.ts +3 -2
  184. package/dist/types/src/internal/JsonSchema/json-schema.d.ts.map +1 -1
  185. package/dist/types/src/internal/Obj/atoms.d.ts +38 -0
  186. package/dist/types/src/internal/Obj/atoms.d.ts.map +1 -0
  187. package/dist/types/src/internal/Obj/clone.d.ts.map +1 -1
  188. package/dist/types/src/internal/Obj/common.d.ts.map +1 -1
  189. package/dist/types/src/internal/Obj/create-object.d.ts +12 -12
  190. package/dist/types/src/internal/Obj/create-object.d.ts.map +1 -1
  191. package/dist/types/src/internal/Obj/deleted.d.ts.map +1 -1
  192. package/dist/types/src/internal/Obj/index.d.ts +1 -1
  193. package/dist/types/src/internal/Obj/index.d.ts.map +1 -1
  194. package/dist/types/src/internal/Obj/json-serializer.d.ts +8 -8
  195. package/dist/types/src/internal/Obj/json-serializer.d.ts.map +1 -1
  196. package/dist/types/src/internal/Obj/set-value.d.ts +1 -1
  197. package/dist/types/src/internal/Obj/set-value.d.ts.map +1 -1
  198. package/dist/types/src/internal/Obj/snapshot.d.ts.map +1 -1
  199. package/dist/types/src/internal/Obj/typed-object.d.ts +1 -1
  200. package/dist/types/src/internal/Query/index.d.ts +2 -0
  201. package/dist/types/src/internal/Query/index.d.ts.map +1 -0
  202. package/dist/types/src/internal/{Query.d.ts → Query/pretty.d.ts} +1 -1
  203. package/dist/types/src/internal/Query/pretty.d.ts.map +1 -0
  204. package/dist/types/src/internal/Ref/atoms.d.ts +10 -0
  205. package/dist/types/src/internal/Ref/atoms.d.ts.map +1 -0
  206. package/dist/types/src/internal/Ref/ref-array.d.ts +2 -2
  207. package/dist/types/src/internal/Ref/ref.d.ts +50 -19
  208. package/dist/types/src/internal/Ref/ref.d.ts.map +1 -1
  209. package/dist/types/src/internal/Ref/utils.d.ts +8 -0
  210. package/dist/types/src/internal/Ref/utils.d.ts.map +1 -0
  211. package/dist/types/src/internal/Type/compose.d.ts.map +1 -1
  212. package/dist/types/src/internal/Type/index.d.ts +1 -2
  213. package/dist/types/src/internal/Type/index.d.ts.map +1 -1
  214. package/dist/types/src/internal/Type/manipulation.d.ts +0 -1
  215. package/dist/types/src/internal/Type/manipulation.d.ts.map +1 -1
  216. package/dist/types/src/internal/Type/type-schema.d.ts +52 -0
  217. package/dist/types/src/internal/Type/type-schema.d.ts.map +1 -0
  218. package/dist/types/src/internal/common/api/meta.d.ts +14 -11
  219. package/dist/types/src/internal/common/api/meta.d.ts.map +1 -1
  220. package/dist/types/src/internal/common/proxy/change-context.d.ts +1 -1
  221. package/dist/types/src/internal/common/proxy/change-context.d.ts.map +1 -1
  222. package/dist/types/src/internal/common/proxy/define-hidden-property.d.ts.map +1 -1
  223. package/dist/types/src/internal/common/proxy/errors.d.ts +1 -1
  224. package/dist/types/src/internal/common/proxy/errors.d.ts.map +1 -1
  225. package/dist/types/src/internal/common/proxy/event-batch.d.ts.map +1 -1
  226. package/dist/types/src/internal/common/proxy/json-serializer.d.ts.map +1 -1
  227. package/dist/types/src/internal/common/proxy/make-object.d.ts +11 -5
  228. package/dist/types/src/internal/common/proxy/make-object.d.ts.map +1 -1
  229. package/dist/types/src/internal/common/proxy/ownership.d.ts.map +1 -1
  230. package/dist/types/src/internal/common/proxy/proxy-utils.d.ts.map +1 -1
  231. package/dist/types/src/internal/common/proxy/reactive-array.d.ts +1 -1
  232. package/dist/types/src/internal/common/proxy/reactive.d.ts +1 -1
  233. package/dist/types/src/internal/common/proxy/reactive.d.ts.map +1 -1
  234. package/dist/types/src/internal/common/proxy/reactive.test.d.ts +2 -0
  235. package/dist/types/src/internal/common/proxy/reactive.test.d.ts.map +1 -0
  236. package/dist/types/src/internal/common/proxy/schema-validator.d.ts.map +1 -1
  237. package/dist/types/src/internal/common/proxy/typed-handler.d.ts +18 -2
  238. package/dist/types/src/internal/common/proxy/typed-handler.d.ts.map +1 -1
  239. package/dist/types/src/internal/common/types/base.d.ts +4 -4
  240. package/dist/types/src/internal/common/types/base.d.ts.map +1 -1
  241. package/dist/types/src/internal/common/types/entity.d.ts +62 -5
  242. package/dist/types/src/internal/common/types/entity.d.ts.map +1 -1
  243. package/dist/types/src/internal/common/types/index.d.ts +1 -1
  244. package/dist/types/src/internal/common/types/index.d.ts.map +1 -1
  245. package/dist/types/src/internal/common/types/meta.d.ts +33 -12
  246. package/dist/types/src/internal/common/types/meta.d.ts.map +1 -1
  247. package/dist/types/src/internal/common/types/model-symbols.d.ts +15 -4
  248. package/dist/types/src/internal/common/types/model-symbols.d.ts.map +1 -1
  249. package/dist/types/src/internal/common/types/typename.d.ts +7 -0
  250. package/dist/types/src/internal/common/types/typename.d.ts.map +1 -1
  251. package/dist/types/src/internal/common/types/version.d.ts +1 -1
  252. package/dist/types/src/internal/common/types/well-known-types.d.ts +11 -0
  253. package/dist/types/src/internal/common/types/well-known-types.d.ts.map +1 -0
  254. package/dist/types/src/internal/index.d.ts +2 -2
  255. package/dist/types/src/internal/index.d.ts.map +1 -1
  256. package/dist/types/src/testing/index.d.ts +1 -0
  257. package/dist/types/src/testing/index.d.ts.map +1 -1
  258. package/dist/types/src/testing/registry.d.ts +9 -0
  259. package/dist/types/src/testing/registry.d.ts.map +1 -0
  260. package/dist/types/src/testing/test-data.d.ts +8 -8
  261. package/dist/types/src/testing/test-data.d.ts.map +1 -1
  262. package/dist/types/src/testing/test-schema.d.ts +83 -89
  263. package/dist/types/src/testing/test-schema.d.ts.map +1 -1
  264. package/dist/types/src/testing/util.d.ts +5 -3
  265. package/dist/types/src/testing/util.d.ts.map +1 -1
  266. package/dist/types/tsconfig.tsbuildinfo +1 -1
  267. package/package.json +26 -24
  268. package/src/Annotation.test.ts +439 -0
  269. package/src/Annotation.ts +158 -4
  270. package/src/Collection.ts +5 -9
  271. package/src/Database.ts +93 -100
  272. package/src/Dataset.ts +10 -2
  273. package/src/Entity.test.ts +116 -6
  274. package/src/Entity.ts +134 -32
  275. package/src/Err.ts +4 -4
  276. package/src/Feed.ts +92 -44
  277. package/src/Filter.ts +70 -40
  278. package/src/Format.ts +0 -4
  279. package/src/Hypergraph.ts +14 -9
  280. package/src/Json.test.ts +175 -0
  281. package/src/Json.ts +103 -0
  282. package/src/Key.ts +1 -1
  283. package/src/Migration.ts +39 -19
  284. package/src/Obj.test.ts +122 -20
  285. package/src/Obj.ts +168 -91
  286. package/src/Order.ts +22 -0
  287. package/src/Query.test.ts +183 -154
  288. package/src/Query.ts +172 -85
  289. package/src/QueryResult.ts +26 -0
  290. package/src/Ref.ts +22 -4
  291. package/src/Registry.ts +155 -0
  292. package/src/Relation.test.ts +10 -10
  293. package/src/Relation.ts +116 -69
  294. package/src/Scope.ts +50 -0
  295. package/src/Tag.md +88 -0
  296. package/src/Tag.ts +49 -6
  297. package/src/Type.test.ts +223 -18
  298. package/src/Type.ts +609 -131
  299. package/src/View.ts +14 -23
  300. package/src/exemplars.test.ts +21 -0
  301. package/src/index.ts +4 -4
  302. package/src/internal/Annotation/annotations.test.ts +31 -11
  303. package/src/internal/Annotation/annotations.ts +143 -111
  304. package/src/internal/Annotation/dictionary.ts +47 -0
  305. package/src/internal/Annotation/entity-dictionary.ts +74 -0
  306. package/src/internal/Annotation/index.ts +4 -2
  307. package/src/internal/Annotation/util.ts +17 -8
  308. package/src/internal/Entity/api.ts +54 -7
  309. package/src/internal/Entity/entity.ts +196 -47
  310. package/src/internal/Entity/guard.ts +26 -0
  311. package/src/internal/Entity/index.ts +2 -0
  312. package/src/internal/Entity/model.ts +38 -28
  313. package/src/internal/Entity/object.ts +21 -5
  314. package/src/internal/Entity/relation.ts +68 -34
  315. package/src/internal/Entity/type-kind.ts +75 -0
  316. package/src/internal/Entity/type-uri.ts +92 -0
  317. package/src/internal/Entity/util.ts +9 -9
  318. package/src/internal/Format/date.ts +0 -4
  319. package/src/internal/Format/format.test.ts +21 -0
  320. package/src/internal/Format/index.ts +2 -3
  321. package/src/internal/Format/object.ts +21 -4
  322. package/src/internal/Format/types.ts +1 -1
  323. package/src/internal/JsonSchema/annotations.ts +1 -1
  324. package/src/internal/JsonSchema/json-schema-type.ts +4 -4
  325. package/src/internal/JsonSchema/json-schema.test.ts +71 -145
  326. package/src/internal/JsonSchema/json-schema.ts +49 -35
  327. package/src/internal/Obj/atoms.ts +244 -0
  328. package/src/internal/Obj/clone.ts +9 -4
  329. package/src/internal/Obj/create-object.test.ts +12 -10
  330. package/src/internal/Obj/create-object.ts +68 -22
  331. package/src/internal/Obj/index.ts +1 -1
  332. package/src/internal/Obj/inspect.ts +5 -3
  333. package/src/internal/Obj/json-serializer.test.ts +101 -22
  334. package/src/internal/Obj/json-serializer.ts +89 -33
  335. package/src/internal/Obj/set-value.test.ts +22 -45
  336. package/src/internal/Obj/set-value.ts +12 -19
  337. package/src/internal/Obj/snapshot.ts +13 -4
  338. package/src/internal/Obj/typed-object.test.ts +9 -11
  339. package/src/internal/Obj/typed-object.ts +1 -1
  340. package/src/internal/Query/index.ts +5 -0
  341. package/src/internal/{Query.ts → Query/pretty.ts} +40 -12
  342. package/src/internal/Ref/atoms.ts +20 -0
  343. package/src/internal/Ref/ref-array.ts +3 -3
  344. package/src/internal/Ref/ref.test.ts +18 -27
  345. package/src/internal/Ref/ref.ts +137 -59
  346. package/src/internal/Ref/utils.ts +45 -0
  347. package/src/internal/Type/compose.test.ts +3 -1
  348. package/src/internal/Type/index.ts +1 -2
  349. package/src/internal/Type/manipulation.ts +0 -25
  350. package/src/internal/Type/type-schema.ts +60 -0
  351. package/src/internal/common/README.md +2 -2
  352. package/src/internal/common/api/meta.ts +19 -17
  353. package/src/internal/common/proxy/change-context.ts +1 -1
  354. package/src/internal/common/proxy/change.test.ts +91 -83
  355. package/src/internal/common/proxy/errors.ts +2 -2
  356. package/src/internal/common/proxy/handler.test.ts +1 -1
  357. package/src/internal/common/proxy/json-serializer.ts +27 -16
  358. package/src/internal/common/proxy/make-object.ts +44 -20
  359. package/src/internal/common/proxy/ownership.ts +2 -2
  360. package/src/internal/common/proxy/reactive-array.ts +1 -1
  361. package/src/internal/common/proxy/reactive.test.ts +54 -0
  362. package/src/internal/common/proxy/reactive.ts +11 -2
  363. package/src/internal/common/proxy/schema.test.ts +48 -86
  364. package/src/internal/common/proxy/typed-handler.test.ts +12 -11
  365. package/src/internal/common/proxy/typed-handler.ts +78 -16
  366. package/src/internal/common/proxy/typed-object.test.ts +16 -28
  367. package/src/internal/common/types/base.ts +4 -4
  368. package/src/internal/common/types/entity.ts +80 -1
  369. package/src/internal/common/types/index.ts +6 -1
  370. package/src/internal/common/types/meta.ts +62 -20
  371. package/src/internal/common/types/model-symbols.ts +24 -4
  372. package/src/internal/common/types/typename.ts +39 -3
  373. package/src/internal/common/types/well-known-types.ts +15 -0
  374. package/src/internal/index.ts +6 -4
  375. package/src/testing/api.test.ts +15 -9
  376. package/src/testing/index.ts +1 -0
  377. package/src/testing/registry.ts +44 -0
  378. package/src/testing/test-data.ts +159 -99
  379. package/src/testing/test-schema.ts +22 -58
  380. package/src/testing/util.ts +14 -11
  381. package/dist/lib/neutral/Extension.mjs +0 -18
  382. package/dist/lib/neutral/SchemaRegistry.mjs +0 -2
  383. package/dist/lib/neutral/chunk-2KHZ36F5.mjs +0 -361
  384. package/dist/lib/neutral/chunk-2KHZ36F5.mjs.map +0 -7
  385. package/dist/lib/neutral/chunk-4OIBYSXE.mjs.map +0 -7
  386. package/dist/lib/neutral/chunk-4P3IXBLT.mjs +0 -45
  387. package/dist/lib/neutral/chunk-4P3IXBLT.mjs.map +0 -7
  388. package/dist/lib/neutral/chunk-ANHVGJI4.mjs.map +0 -7
  389. package/dist/lib/neutral/chunk-B4BASU6W.mjs.map +0 -7
  390. package/dist/lib/neutral/chunk-BNCCGLJN.mjs +0 -7
  391. package/dist/lib/neutral/chunk-BNCCGLJN.mjs.map +0 -7
  392. package/dist/lib/neutral/chunk-BVOFLCVF.mjs.map +0 -7
  393. package/dist/lib/neutral/chunk-DQYLD2RB.mjs.map +0 -7
  394. package/dist/lib/neutral/chunk-EAMSSLZC.mjs.map +0 -7
  395. package/dist/lib/neutral/chunk-G3IQMKF7.mjs.map +0 -7
  396. package/dist/lib/neutral/chunk-GZQTCRJB.mjs.map +0 -7
  397. package/dist/lib/neutral/chunk-HBUZJNZO.mjs.map +0 -7
  398. package/dist/lib/neutral/chunk-JUXPFOEI.mjs.map +0 -7
  399. package/dist/lib/neutral/chunk-MOR5ERFM.mjs.map +0 -7
  400. package/dist/lib/neutral/chunk-OMUPQMLR.mjs.map +0 -7
  401. package/dist/lib/neutral/chunk-PHU22NLC.mjs +0 -136
  402. package/dist/lib/neutral/chunk-PHU22NLC.mjs.map +0 -7
  403. package/dist/lib/neutral/chunk-ROG4RXXL.mjs +0 -97
  404. package/dist/lib/neutral/chunk-ROG4RXXL.mjs.map +0 -7
  405. package/dist/lib/neutral/chunk-T6W2LEZU.mjs.map +0 -7
  406. package/dist/lib/neutral/chunk-TBKX6JQO.mjs.map +0 -7
  407. package/dist/lib/neutral/chunk-TU3GW67D.mjs.map +0 -7
  408. package/dist/lib/neutral/chunk-UBEZSGXY.mjs.map +0 -7
  409. package/dist/lib/neutral/chunk-UI6MWK5W.mjs.map +0 -7
  410. package/dist/lib/neutral/chunk-V36VO5SS.mjs.map +0 -7
  411. package/dist/lib/neutral/chunk-WAK4DMFV.mjs.map +0 -7
  412. package/dist/lib/neutral/chunk-YAHXAYOW.mjs +0 -56
  413. package/dist/lib/neutral/chunk-YAHXAYOW.mjs.map +0 -7
  414. package/dist/lib/neutral/chunk-YS6Q3XAD.mjs +0 -50
  415. package/dist/lib/neutral/chunk-YS6Q3XAD.mjs.map +0 -7
  416. package/dist/types/src/Extension.d.ts +0 -80
  417. package/dist/types/src/Extension.d.ts.map +0 -1
  418. package/dist/types/src/Extension.test.d.ts +0 -2
  419. package/dist/types/src/Extension.test.d.ts.map +0 -1
  420. package/dist/types/src/SchemaRegistry.d.ts +0 -84
  421. package/dist/types/src/SchemaRegistry.d.ts.map +0 -1
  422. package/dist/types/src/internal/Obj/ids.d.ts +0 -6
  423. package/dist/types/src/internal/Obj/ids.d.ts.map +0 -1
  424. package/dist/types/src/internal/Query.d.ts.map +0 -1
  425. package/dist/types/src/internal/Type/echo-schema.d.ts +0 -181
  426. package/dist/types/src/internal/Type/echo-schema.d.ts.map +0 -1
  427. package/dist/types/src/internal/Type/persistent-schema.d.ts +0 -20
  428. package/dist/types/src/internal/Type/persistent-schema.d.ts.map +0 -1
  429. package/src/Extension.test.ts +0 -235
  430. package/src/Extension.ts +0 -122
  431. package/src/SchemaRegistry.ts +0 -106
  432. package/src/internal/Obj/ids.ts +0 -12
  433. package/src/internal/Type/echo-schema.ts +0 -423
  434. package/src/internal/Type/persistent-schema.ts +0 -33
  435. /package/dist/lib/neutral/{Extension.mjs.map → Registry.mjs.map} +0 -0
  436. /package/dist/lib/neutral/{SchemaRegistry.mjs.map → Scope.mjs.map} +0 -0
  437. /package/dist/lib/neutral/{chunk-7RO7CPBZ.mjs.map → chunk-IGK6FN65.mjs.map} +0 -0
package/src/Query.test.ts CHANGED
@@ -3,10 +3,10 @@
3
3
  //
4
4
 
5
5
  import * as Schema from 'effect/Schema';
6
- import { describe, expect, test } from 'vitest';
6
+ import { describe, expect, expectTypeOf, test } from 'vitest';
7
7
 
8
8
  import { QueryAST } from '@dxos/echo-protocol';
9
- import { DXN, ObjectId, SpaceId } from '@dxos/keys';
9
+ import { DXN, EID, EntityId, SpaceId } from '@dxos/keys';
10
10
  import { log } from '@dxos/log';
11
11
 
12
12
  import * as Dataset from './Dataset';
@@ -17,6 +17,7 @@ import * as Order from './Order';
17
17
  import * as Query from './Query';
18
18
  import * as Ref from './Ref';
19
19
  import { TestSchema } from './testing';
20
+ import * as Type from './Type';
20
21
 
21
22
  describe('query api', () => {
22
23
  describe('Query', () => {
@@ -36,6 +37,12 @@ describe('query api', () => {
36
37
  log('getAllPeopleOrderedByName', { ast: getAllPeopleOrderedByName.ast });
37
38
  });
38
39
 
40
+ test('order by updated timestamp', () => {
41
+ const recentlyUpdated = Query.type(TestSchema.Person).orderBy(Order.updated('desc')).limit(3);
42
+
43
+ Schema.validateSync(QueryAST.Query)(recentlyUpdated.ast);
44
+ });
45
+
39
46
  test('get all people named Fred', () => {
40
47
  const PeopleNamedFred = Query.select(Filter.type(TestSchema.Person, { name: 'Fred' }));
41
48
 
@@ -98,7 +105,7 @@ describe('query api', () => {
98
105
  expect(ObjectsReferencingFred.ast).toMatchObject({
99
106
  type: 'incoming-references',
100
107
  property: null,
101
- typename: 'dxn:type:com.example.type.task:0.1.0',
108
+ typename: 'dxn:com.example.type.task:0.1.0',
102
109
  });
103
110
  });
104
111
 
@@ -115,6 +122,16 @@ describe('query api', () => {
115
122
  });
116
123
  });
117
124
 
125
+ test('reference through array of refs is typed', () => {
126
+ const objects = Query.select(Filter.type(TestSchema.Container)).reference('objects');
127
+ expectTypeOf<Query.Type<typeof objects>>().toEqualTypeOf<Obj.Unknown>();
128
+ });
129
+
130
+ test('reference through single ref is typed', () => {
131
+ const assignee = Query.select(Filter.type(TestSchema.Task)).reference('assignee');
132
+ expectTypeOf<Query.Type<typeof assignee>>().toEqualTypeOf<Type.InstanceType<typeof TestSchema.Person>>();
133
+ });
134
+
118
135
  test('get all tasks for employees of Cyberdyne', () => {
119
136
  const TasksForEmployeesOfCyberdyne = Query.select(Filter.type(TestSchema.Organization, { name: 'Cyberdyne' }))
120
137
  .targetOf(TestSchema.EmployedBy)
@@ -150,17 +167,17 @@ describe('query api', () => {
150
167
  {
151
168
  "props": {},
152
169
  "type": "object",
153
- "typename": "dxn:type:org.dxos.type.feed:0.1.0",
170
+ "typename": "dxn:org.dxos.type.feed:0.1.0",
154
171
  },
155
172
  {
156
173
  "props": {},
157
174
  "type": "object",
158
- "typename": "dxn:type:org.dxos.type.collection:0.1.0",
175
+ "typename": "dxn:org.dxos.type.collection:0.1.0",
159
176
  },
160
177
  {
161
178
  "props": {},
162
179
  "type": "object",
163
- "typename": "dxn:type:org.dxos.type.view:0.1.0",
180
+ "typename": "dxn:org.dxos.type.view:0.1.0",
164
181
  },
165
182
  ],
166
183
  "type": "or",
@@ -177,30 +194,30 @@ describe('query api', () => {
177
194
  Schema.validateSync(QueryAST.Query)(AllDatasets.ast);
178
195
  log('AllDatasets', { ast: AllDatasets.ast });
179
196
  expect(AllDatasets.ast).toMatchInlineSnapshot(`
180
- {
181
- "filter": {
182
- "filters": [
183
- {
184
- "props": {},
185
- "type": "object",
186
- "typename": "dxn:type:org.dxos.type.feed:0.1.0",
187
- },
188
- {
189
- "props": {},
190
- "type": "object",
191
- "typename": "dxn:type:org.dxos.type.collection:0.1.0",
192
- },
193
197
  {
194
- "props": {},
195
- "type": "object",
196
- "typename": "dxn:type:org.dxos.type.view:0.1.0",
197
- },
198
- ],
199
- "type": "or",
200
- },
201
- "type": "select",
202
- }
203
- `);
198
+ "filter": {
199
+ "filters": [
200
+ {
201
+ "props": {},
202
+ "type": "object",
203
+ "typename": "dxn:org.dxos.type.feed:0.1.0",
204
+ },
205
+ {
206
+ "props": {},
207
+ "type": "object",
208
+ "typename": "dxn:org.dxos.type.collection:0.1.0",
209
+ },
210
+ {
211
+ "props": {},
212
+ "type": "object",
213
+ "typename": "dxn:org.dxos.type.view:0.1.0",
214
+ },
215
+ ],
216
+ "type": "or",
217
+ },
218
+ "type": "select",
219
+ }
220
+ `);
204
221
  });
205
222
 
206
223
  test('get all people not in orgs', () => {
@@ -230,15 +247,15 @@ describe('query api', () => {
230
247
  log('query', { ast: contactFullTextSearch.ast });
231
248
  Schema.validateSync(QueryAST.Query)(contactFullTextSearch.ast);
232
249
  expect(contactFullTextSearch.ast).toMatchInlineSnapshot(`
233
- {
234
- "filter": {
235
- "searchKind": undefined,
236
- "text": "Bill",
237
- "type": "text-search",
238
- },
239
- "type": "select",
240
- }
241
- `);
250
+ {
251
+ "filter": {
252
+ "searchKind": undefined,
253
+ "text": "Bill",
254
+ "type": "text-search",
255
+ },
256
+ "type": "select",
257
+ }
258
+ `);
242
259
  });
243
260
 
244
261
  test('typed full-text search', () => {
@@ -247,24 +264,24 @@ describe('query api', () => {
247
264
  log('query', { ast: contactFullTextSearch.ast });
248
265
  Schema.validateSync(QueryAST.Query)(contactFullTextSearch.ast);
249
266
  expect(contactFullTextSearch.ast).toMatchInlineSnapshot(`
250
- {
251
- "filter": {
252
- "searchKind": undefined,
253
- "text": "Bill",
254
- "type": "text-search",
255
- },
256
- "selection": {
267
+ {
257
268
  "filter": {
258
- "id": undefined,
259
- "props": {},
260
- "type": "object",
261
- "typename": "dxn:type:com.example.type.person:0.1.0",
269
+ "searchKind": undefined,
270
+ "text": "Bill",
271
+ "type": "text-search",
262
272
  },
263
- "type": "select",
264
- },
265
- "type": "filter",
266
- }
267
- `);
273
+ "selection": {
274
+ "filter": {
275
+ "id": undefined,
276
+ "props": {},
277
+ "type": "object",
278
+ "typename": "dxn:com.example.type.person:0.1.0",
279
+ },
280
+ "type": "select",
281
+ },
282
+ "type": "filter",
283
+ }
284
+ `);
268
285
  });
269
286
 
270
287
  test('filter by ref', () => {
@@ -276,12 +293,12 @@ describe('query api', () => {
276
293
  operator: 'eq',
277
294
  type: 'compare',
278
295
  value: {
279
- '/': DXN.fromLocalObjectId(fred.id).toString(),
296
+ '/': EID.make({ entityId: fred.id }),
280
297
  },
281
298
  },
282
299
  },
283
300
  type: 'object',
284
- typename: 'dxn:type:com.example.type.task:0.1.0',
301
+ typename: 'dxn:com.example.type.task:0.1.0',
285
302
  });
286
303
  log('tasksByFred', { ast: tasksByFred.ast });
287
304
  });
@@ -293,60 +310,60 @@ describe('query api', () => {
293
310
 
294
311
  Schema.validateSync(QueryAST.Query)(orgsAndPeople.ast);
295
312
  expect(orgsAndPeople.ast).toMatchInlineSnapshot(`
296
- {
297
- "filter": {
298
- "filters": [
299
- {
300
- "id": undefined,
301
- "props": {},
302
- "type": "object",
303
- "typename": "dxn:type:com.example.type.organization:0.1.0",
304
- },
305
- {
306
- "id": undefined,
307
- "props": {},
308
- "type": "object",
309
- "typename": "dxn:type:com.example.type.person:0.1.0",
310
- },
311
- ],
312
- "type": "or",
313
- },
314
- "type": "select",
315
- }
316
- `);
317
- });
318
-
319
- test('select everything but orgs and people', () => {
320
- const everythingButOrgsAndPeople = Query.select(
321
- Filter.not(Filter.or(Filter.type(TestSchema.Organization), Filter.type(TestSchema.Person))),
322
- );
323
-
324
- Schema.validateSync(QueryAST.Query)(everythingButOrgsAndPeople.ast);
325
- expect(everythingButOrgsAndPeople.ast).toMatchInlineSnapshot(`
326
- {
327
- "filter": {
313
+ {
328
314
  "filter": {
329
315
  "filters": [
330
316
  {
331
317
  "id": undefined,
332
318
  "props": {},
333
319
  "type": "object",
334
- "typename": "dxn:type:com.example.type.organization:0.1.0",
320
+ "typename": "dxn:com.example.type.organization:0.1.0",
335
321
  },
336
322
  {
337
323
  "id": undefined,
338
324
  "props": {},
339
325
  "type": "object",
340
- "typename": "dxn:type:com.example.type.person:0.1.0",
326
+ "typename": "dxn:com.example.type.person:0.1.0",
341
327
  },
342
328
  ],
343
329
  "type": "or",
344
330
  },
345
- "type": "not",
346
- },
347
- "type": "select",
348
- }
349
- `);
331
+ "type": "select",
332
+ }
333
+ `);
334
+ });
335
+
336
+ test('select everything but orgs and people', () => {
337
+ const everythingButOrgsAndPeople = Query.select(
338
+ Filter.not(Filter.or(Filter.type(TestSchema.Organization), Filter.type(TestSchema.Person))),
339
+ );
340
+
341
+ Schema.validateSync(QueryAST.Query)(everythingButOrgsAndPeople.ast);
342
+ expect(everythingButOrgsAndPeople.ast).toMatchInlineSnapshot(`
343
+ {
344
+ "filter": {
345
+ "filter": {
346
+ "filters": [
347
+ {
348
+ "id": undefined,
349
+ "props": {},
350
+ "type": "object",
351
+ "typename": "dxn:com.example.type.organization:0.1.0",
352
+ },
353
+ {
354
+ "id": undefined,
355
+ "props": {},
356
+ "type": "object",
357
+ "typename": "dxn:com.example.type.person:0.1.0",
358
+ },
359
+ ],
360
+ "type": "or",
361
+ },
362
+ "type": "not",
363
+ },
364
+ "type": "select",
365
+ }
366
+ `);
350
367
  });
351
368
 
352
369
  test('select deleted tasks', () => {
@@ -356,22 +373,22 @@ describe('query api', () => {
356
373
 
357
374
  Schema.validateSync(QueryAST.Query)(deletedTasks.ast);
358
375
  expect(deletedTasks.ast).toMatchInlineSnapshot(`
359
- {
360
- "options": {
361
- "deleted": "only",
362
- },
363
- "query": {
364
- "filter": {
365
- "id": undefined,
366
- "props": {},
367
- "type": "object",
368
- "typename": "dxn:type:com.example.type.task:0.1.0",
376
+ {
377
+ "options": {
378
+ "deleted": "only",
369
379
  },
370
- "type": "select",
371
- },
372
- "type": "options",
373
- }
374
- `);
380
+ "query": {
381
+ "filter": {
382
+ "id": undefined,
383
+ "props": {},
384
+ "type": "object",
385
+ "typename": "dxn:com.example.type.task:0.1.0",
386
+ },
387
+ "type": "select",
388
+ },
389
+ "type": "options",
390
+ }
391
+ `);
375
392
  });
376
393
 
377
394
  test('filter by tags', () => {
@@ -388,7 +405,7 @@ describe('query api', () => {
388
405
  "id": undefined,
389
406
  "props": {},
390
407
  "type": "object",
391
- "typename": "dxn:type:com.example.type.task:0.1.0",
408
+ "typename": "dxn:com.example.type.task:0.1.0",
392
409
  },
393
410
  "type": "select",
394
411
  },
@@ -408,7 +425,7 @@ describe('query api', () => {
408
425
  "id": undefined,
409
426
  "props": {},
410
427
  "type": "object",
411
- "typename": "dxn:type:com.example.type.task:0.1.0",
428
+ "typename": "dxn:com.example.type.task:0.1.0",
412
429
  },
413
430
  "type": "select",
414
431
  },
@@ -436,7 +453,7 @@ describe('query api', () => {
436
453
  "id": undefined,
437
454
  "props": {},
438
455
  "type": "object",
439
- "typename": "dxn:type:com.example.type.task:0.1.0",
456
+ "typename": "dxn:com.example.type.task:0.1.0",
440
457
  },
441
458
  "type": "select",
442
459
  },
@@ -463,7 +480,7 @@ describe('query api', () => {
463
480
  "id": undefined,
464
481
  "props": {},
465
482
  "type": "object",
466
- "typename": "dxn:type:com.example.type.person:0.1.0",
483
+ "typename": "dxn:com.example.type.person:0.1.0",
467
484
  },
468
485
  "type": "select",
469
486
  },
@@ -476,7 +493,7 @@ describe('query api', () => {
476
493
  "id": undefined,
477
494
  "props": {},
478
495
  "type": "object",
479
- "typename": "dxn:type:com.example.type.organization:0.1.0",
496
+ "typename": "dxn:com.example.type.organization:0.1.0",
480
497
  },
481
498
  "type": "select",
482
499
  },
@@ -496,14 +513,14 @@ describe('query api', () => {
496
513
  {
497
514
  "from": {
498
515
  "_tag": "scope",
499
- "scope": {},
516
+ "scopes": [],
500
517
  },
501
518
  "query": {
502
519
  "filter": {
503
520
  "id": undefined,
504
521
  "props": {},
505
522
  "type": "object",
506
- "typename": "dxn:type:com.example.type.person:0.1.0",
523
+ "typename": "dxn:com.example.type.person:0.1.0",
507
524
  },
508
525
  "type": "select",
509
526
  },
@@ -522,16 +539,14 @@ describe('query api', () => {
522
539
  {
523
540
  "from": {
524
541
  "_tag": "scope",
525
- "scope": {
526
- "allQueuesFromSpaces": true,
527
- },
542
+ "scopes": [],
528
543
  },
529
544
  "query": {
530
545
  "filter": {
531
546
  "id": undefined,
532
547
  "props": {},
533
548
  "type": "object",
534
- "typename": "dxn:type:com.example.type.person:0.1.0",
549
+ "typename": "dxn:com.example.type.person:0.1.0",
535
550
  },
536
551
  "type": "select",
537
552
  },
@@ -549,7 +564,7 @@ describe('query api', () => {
549
564
  Schema.validateSync(QueryAST.Query)(query.ast);
550
565
  expect(query.ast).toMatchObject({
551
566
  type: 'from',
552
- from: { _tag: 'scope', scope: {} },
567
+ from: { _tag: 'scope', scopes: [] },
553
568
  query: {
554
569
  type: 'limit',
555
570
  limit: 10,
@@ -562,18 +577,18 @@ describe('query api', () => {
562
577
 
563
578
  test('Query.type(...).from(feed) sets queue scope', async () => {
564
579
  const spaceId = SpaceId.random();
565
- const feedId = ObjectId.random();
566
- const feedDxn = DXN.parse(`dxn:echo:${spaceId}:${feedId}`);
580
+ const feedId = EntityId.random();
581
+ const feedDxn = EID.make({ spaceId: spaceId, entityId: feedId });
567
582
  const feed = (await Obj.fromJSON(
568
583
  {
569
- '@type': 'dxn:type:org.dxos.type.feed:0.1.0',
584
+ '@type': 'dxn:org.dxos.type.feed:0.1.0',
570
585
  id: feedId,
571
586
  name: 'test-feed',
572
587
  },
573
- { dxn: feedDxn },
588
+ { uri: feedDxn },
574
589
  )) as Feed.Feed;
575
590
 
576
- const expectedQueueDxn = new DXN(DXN.kind.QUEUE, ['data', spaceId, feedId]);
591
+ const expectedQueueUri = Feed.getQueueUri(feed);
577
592
 
578
593
  const query = Query.type(TestSchema.Person).from(feed);
579
594
  Schema.validateSync(QueryAST.Query)(query.ast);
@@ -581,15 +596,13 @@ describe('query api', () => {
581
596
  type: 'from',
582
597
  from: {
583
598
  _tag: 'scope',
584
- scope: {
585
- queues: [expectedQueueDxn.toString()],
586
- },
599
+ scopes: [{ _tag: 'feed', feedUri: expectedQueueUri?.toString() }],
587
600
  },
588
601
  query: {
589
602
  type: 'select',
590
603
  filter: {
591
604
  type: 'object',
592
- typename: 'dxn:type:com.example.type.person:0.1.0',
605
+ typename: 'dxn:com.example.type.person:0.1.0',
593
606
  },
594
607
  },
595
608
  });
@@ -617,6 +630,22 @@ describe('query api', () => {
617
630
  );
618
631
  });
619
632
 
633
+ test('Query.pretty surfaces debugLabel from options', () => {
634
+ const query = Query.select(Filter.type(TestSchema.Person)).debugLabel('my-label');
635
+ expect(Query.pretty(query)).toContain('debugLabel');
636
+ expect(Query.pretty(query)).toContain('"my-label"');
637
+ });
638
+
639
+ test('Query.debugLabel merges onto existing options clause', () => {
640
+ const query = Query.select(Filter.type(TestSchema.Person))
641
+ .options({ deleted: 'exclude' })
642
+ .debugLabel('timer-probe');
643
+ const pretty = Query.pretty(query);
644
+ expect(pretty).toContain('deleted');
645
+ expect(pretty).toContain('debugLabel');
646
+ expect(pretty).toContain('"timer-probe"');
647
+ });
648
+
620
649
  test('Query.pretty returns human-readable query string', () => {
621
650
  const query = Query.select(Filter.type(TestSchema.Person, { name: 'Fred' }));
622
651
  const pretty = Query.pretty(query);
@@ -626,7 +655,7 @@ describe('query api', () => {
626
655
  });
627
656
 
628
657
  test('Query.pretty handles complex queries', () => {
629
- const query = Query.select(Filter.and(Filter.type(TestSchema.Person), Filter.id(ObjectId.random()))).limit(10);
658
+ const query = Query.select(Filter.and(Filter.type(TestSchema.Person), Filter.id(EntityId.random()))).limit(10);
630
659
  const pretty = Query.pretty(query);
631
660
  expect(pretty).toContain('Query.select');
632
661
  expect(pretty).toContain('Filter.and');
@@ -670,13 +699,13 @@ describe('query api', () => {
670
699
 
671
700
  describe('Filter.childOf', () => {
672
701
  test('childOf with Ref', () => {
673
- const parentDxn = DXN.fromSpaceAndObjectId(SpaceId.random(), ObjectId.random());
674
- const parentRef = Ref.fromDXN(parentDxn);
702
+ const parentDxn = EID.make({ spaceId: SpaceId.random(), entityId: EntityId.random() });
703
+ const parentRef = Ref.fromURI(parentDxn);
675
704
  const filter = Filter.childOf(parentRef);
676
705
 
677
706
  expect(filter.ast).toMatchObject({
678
707
  type: 'child-of',
679
- parents: [parentDxn.toString()],
708
+ parents: [parentDxn],
680
709
  transitive: true,
681
710
  });
682
711
  Schema.validateSync(QueryAST.Filter)(filter.ast);
@@ -695,40 +724,40 @@ describe('query api', () => {
695
724
  });
696
725
 
697
726
  test('childOf with array of Refs', () => {
698
- const dxn1 = DXN.fromSpaceAndObjectId(SpaceId.random(), ObjectId.random());
699
- const dxn2 = DXN.fromSpaceAndObjectId(SpaceId.random(), ObjectId.random());
700
- const filter = Filter.childOf([Ref.fromDXN(dxn1), Ref.fromDXN(dxn2)]);
727
+ const dxn1 = EID.make({ spaceId: SpaceId.random(), entityId: EntityId.random() });
728
+ const dxn2 = EID.make({ spaceId: SpaceId.random(), entityId: EntityId.random() });
729
+ const filter = Filter.childOf([Ref.fromURI(dxn1), Ref.fromURI(dxn2)]);
701
730
 
702
731
  expect(filter.ast).toMatchObject({
703
732
  type: 'child-of',
704
- parents: [dxn1.toString(), dxn2.toString()],
733
+ parents: [dxn1, dxn2],
705
734
  transitive: true,
706
735
  });
707
736
  Schema.validateSync(QueryAST.Filter)(filter.ast);
708
737
  });
709
738
 
710
739
  test('childOf with transitive=false', () => {
711
- const parentRef = Ref.fromDXN(DXN.fromSpaceAndObjectId(SpaceId.random(), ObjectId.random()));
740
+ const parentRef = Ref.fromURI(EID.make({ spaceId: SpaceId.random(), entityId: EntityId.random() }));
712
741
  const filter = Filter.childOf(parentRef, { transitive: false });
713
742
 
714
743
  expect(filter.ast).toMatchObject({
715
744
  type: 'child-of',
716
- parents: [parentRef.dxn.toString()],
745
+ parents: [parentRef.uri],
717
746
  transitive: false,
718
747
  });
719
748
  Schema.validateSync(QueryAST.Filter)(filter.ast);
720
749
  });
721
750
 
722
751
  test('childOf in select query', () => {
723
- const parentDxn = DXN.fromSpaceAndObjectId(SpaceId.random(), ObjectId.random());
724
- const parentRef = Ref.fromDXN(parentDxn);
752
+ const parentDxn = EID.make({ spaceId: SpaceId.random(), entityId: EntityId.random() });
753
+ const parentRef = Ref.fromURI(parentDxn);
725
754
  const query = Query.select(Filter.childOf(parentRef));
726
755
 
727
756
  expect(query.ast).toMatchObject({
728
757
  type: 'select',
729
758
  filter: {
730
759
  type: 'child-of',
731
- parents: [parentDxn.toString()],
760
+ parents: [parentDxn],
732
761
  transitive: true,
733
762
  },
734
763
  });
@@ -736,8 +765,8 @@ describe('query api', () => {
736
765
  });
737
766
 
738
767
  test('childOf combined with type filter', () => {
739
- const parentDxn = DXN.fromSpaceAndObjectId(SpaceId.random(), ObjectId.random());
740
- const parentRef = Ref.fromDXN(parentDxn);
768
+ const parentDxn = EID.make({ spaceId: SpaceId.random(), entityId: EntityId.random() });
769
+ const parentRef = Ref.fromURI(parentDxn);
741
770
  const query = Query.select(Filter.and(Filter.type(TestSchema.Person), Filter.childOf(parentRef)));
742
771
 
743
772
  Schema.validateSync(QueryAST.Query)(query.ast);
@@ -746,15 +775,15 @@ describe('query api', () => {
746
775
  filter: {
747
776
  type: 'and',
748
777
  filters: [
749
- { type: 'object', typename: 'dxn:type:com.example.type.person:0.1.0' },
750
- { type: 'child-of', parents: [parentDxn.toString()], transitive: true },
778
+ { type: 'object', typename: 'dxn:com.example.type.person:0.1.0' },
779
+ { type: 'child-of', parents: [parentDxn], transitive: true },
751
780
  ],
752
781
  },
753
782
  });
754
783
  });
755
784
 
756
785
  test('childOf pretty-prints correctly', () => {
757
- const parentRef = Ref.fromDXN(DXN.fromSpaceAndObjectId(SpaceId.random(), ObjectId.random()));
786
+ const parentRef = Ref.fromURI(EID.make({ spaceId: SpaceId.random(), entityId: EntityId.random() }));
758
787
  const filter = Filter.childOf(parentRef);
759
788
  const pretty = Filter.pretty(filter);
760
789
  expect(pretty).toContain('Filter.childOf');
@@ -763,8 +792,8 @@ describe('query api', () => {
763
792
 
764
793
  test('childOf with mixed objects and Refs', () => {
765
794
  const parent = Obj.make(TestSchema.Person, { name: 'Parent' });
766
- const refDxn = DXN.fromSpaceAndObjectId(SpaceId.random(), ObjectId.random());
767
- const parentRef = Ref.fromDXN(refDxn);
795
+ const refDxn = EID.make({ spaceId: SpaceId.random(), entityId: EntityId.random() });
796
+ const parentRef = Ref.fromURI(refDxn);
768
797
  const filter = Filter.childOf([parent, parentRef]);
769
798
 
770
799
  expect(filter.ast).toMatchObject({
@@ -777,8 +806,8 @@ describe('query api', () => {
777
806
  });
778
807
 
779
808
  describe('Filter', () => {
780
- test('Filter.or(Filter.typename(...))', () => {
781
- const filter = Filter.or(Filter.typename('com.example.type.person'));
809
+ test('Filter.or(Filter.type(...))', () => {
810
+ const filter = Filter.or(Filter.type(DXN.make('com.example.type.person')));
782
811
  // TODO(dmaretskyi): Give vitest type-tests a try.
783
812
  const _isAssignable: Obj.Unknown = null as any as Filter.Type<typeof filter>;
784
813
  });
@@ -791,7 +820,7 @@ describe('query api', () => {
791
820
  });
792
821
 
793
822
  test('Filter.pretty handles complex filters', () => {
794
- const filter = Filter.and(Filter.type(TestSchema.Person), Filter.id(ObjectId.random()));
823
+ const filter = Filter.and(Filter.type(TestSchema.Person), Filter.id(EntityId.random()));
795
824
  const pretty = Filter.pretty(filter);
796
825
  expect(pretty).toContain('Filter.and');
797
826
  expect(pretty).toContain('Filter.type');