@dxos/echo 0.8.4-main.a4bbb77 → 0.8.4-main.ae835ea

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 (307) hide show
  1. package/dist/lib/browser/chunk-JUTFUT73.mjs +175 -0
  2. package/dist/lib/browser/chunk-JUTFUT73.mjs.map +7 -0
  3. package/dist/lib/browser/chunk-KEBVBR65.mjs +3727 -0
  4. package/dist/lib/browser/chunk-KEBVBR65.mjs.map +7 -0
  5. package/dist/lib/browser/{chunk-I4YEWYJA.mjs → chunk-WO76TDT6.mjs} +572 -640
  6. package/dist/lib/browser/chunk-WO76TDT6.mjs.map +7 -0
  7. package/dist/lib/browser/index.mjs +12 -7
  8. package/dist/lib/browser/internal/index.mjs +336 -0
  9. package/dist/lib/browser/internal/index.mjs.map +7 -0
  10. package/dist/lib/browser/meta.json +1 -1
  11. package/dist/lib/browser/query/index.mjs +15 -0
  12. package/dist/lib/browser/query/index.mjs.map +7 -0
  13. package/dist/lib/browser/testing/index.mjs +245 -32
  14. package/dist/lib/browser/testing/index.mjs.map +4 -4
  15. package/dist/lib/node-esm/chunk-DWZYQ2UR.mjs +3727 -0
  16. package/dist/lib/node-esm/chunk-DWZYQ2UR.mjs.map +7 -0
  17. package/dist/lib/node-esm/chunk-KBD3A2I6.mjs +175 -0
  18. package/dist/lib/node-esm/chunk-KBD3A2I6.mjs.map +7 -0
  19. package/dist/lib/node-esm/{chunk-AWWFAF75.mjs → chunk-ZSSII3JW.mjs} +572 -640
  20. package/dist/lib/node-esm/chunk-ZSSII3JW.mjs.map +7 -0
  21. package/dist/lib/node-esm/index.mjs +12 -7
  22. package/dist/lib/node-esm/internal/index.mjs +336 -0
  23. package/dist/lib/node-esm/internal/index.mjs.map +7 -0
  24. package/dist/lib/node-esm/meta.json +1 -1
  25. package/dist/lib/node-esm/query/index.mjs +15 -0
  26. package/dist/lib/node-esm/query/index.mjs.map +7 -0
  27. package/dist/lib/node-esm/testing/index.mjs +245 -32
  28. package/dist/lib/node-esm/testing/index.mjs.map +4 -4
  29. package/dist/types/src/Obj.d.ts +16 -4
  30. package/dist/types/src/Obj.d.ts.map +1 -1
  31. package/dist/types/src/Ref.d.ts +1 -1
  32. package/dist/types/src/Ref.d.ts.map +1 -1
  33. package/dist/types/src/Relation.d.ts +2 -2
  34. package/dist/types/src/Relation.d.ts.map +1 -1
  35. package/dist/types/src/Type.d.ts +16 -17
  36. package/dist/types/src/Type.d.ts.map +1 -1
  37. package/dist/types/src/index.d.ts +2 -2
  38. package/dist/types/src/index.d.ts.map +1 -1
  39. package/dist/types/src/internal/ast/annotation-helper.d.ts +8 -0
  40. package/dist/types/src/internal/ast/annotation-helper.d.ts.map +1 -0
  41. package/dist/types/src/internal/ast/annotations.d.ts +131 -0
  42. package/dist/types/src/internal/ast/annotations.d.ts.map +1 -0
  43. package/dist/types/src/internal/ast/annotations.test.d.ts +2 -0
  44. package/dist/types/src/internal/ast/annotations.test.d.ts.map +1 -0
  45. package/dist/types/src/internal/ast/entity-kind.d.ts +10 -0
  46. package/dist/types/src/internal/ast/entity-kind.d.ts.map +1 -0
  47. package/dist/types/src/internal/ast/index.d.ts +5 -0
  48. package/dist/types/src/internal/ast/index.d.ts.map +1 -0
  49. package/dist/types/src/internal/ast/types.d.ts +6 -0
  50. package/dist/types/src/internal/ast/types.d.ts.map +1 -0
  51. package/dist/types/src/internal/formats/date.d.ts +63 -0
  52. package/dist/types/src/internal/formats/date.d.ts.map +1 -0
  53. package/dist/types/src/internal/formats/date.test.d.ts +2 -0
  54. package/dist/types/src/internal/formats/date.test.d.ts.map +1 -0
  55. package/dist/types/src/internal/formats/format.d.ts +30 -0
  56. package/dist/types/src/internal/formats/format.d.ts.map +1 -0
  57. package/dist/types/src/internal/formats/format.test.d.ts +2 -0
  58. package/dist/types/src/internal/formats/format.test.d.ts.map +1 -0
  59. package/dist/types/src/internal/formats/index.d.ts +8 -0
  60. package/dist/types/src/internal/formats/index.d.ts.map +1 -0
  61. package/dist/types/src/internal/formats/number.d.ts +31 -0
  62. package/dist/types/src/internal/formats/number.d.ts.map +1 -0
  63. package/dist/types/src/internal/formats/object.d.ts +35 -0
  64. package/dist/types/src/internal/formats/object.d.ts.map +1 -0
  65. package/dist/types/src/internal/formats/select.d.ts +11 -0
  66. package/dist/types/src/internal/formats/select.d.ts.map +1 -0
  67. package/dist/types/src/internal/formats/string.d.ts +38 -0
  68. package/dist/types/src/internal/formats/string.d.ts.map +1 -0
  69. package/dist/types/src/internal/formats/types.d.ts +68 -0
  70. package/dist/types/src/internal/formats/types.d.ts.map +1 -0
  71. package/dist/types/src/internal/index.d.ts +15 -0
  72. package/dist/types/src/internal/index.d.ts.map +1 -0
  73. package/dist/types/src/internal/json/annotations.d.ts +19 -0
  74. package/dist/types/src/internal/json/annotations.d.ts.map +1 -0
  75. package/dist/types/src/internal/json/effect-schema.test.d.ts +2 -0
  76. package/dist/types/src/internal/json/effect-schema.test.d.ts.map +1 -0
  77. package/dist/types/src/internal/json/index.d.ts +2 -0
  78. package/dist/types/src/internal/json/index.d.ts.map +1 -0
  79. package/dist/types/src/internal/json/json-schema.d.ts +28 -0
  80. package/dist/types/src/internal/json/json-schema.d.ts.map +1 -0
  81. package/dist/types/src/internal/json/json-schema.test.d.ts +2 -0
  82. package/dist/types/src/internal/json/json-schema.test.d.ts.map +1 -0
  83. package/dist/types/src/internal/json-schema/index.d.ts +3 -0
  84. package/dist/types/src/internal/json-schema/index.d.ts.map +1 -0
  85. package/dist/types/src/internal/json-schema/json-schema-normalize.d.ts +7 -0
  86. package/dist/types/src/internal/json-schema/json-schema-normalize.d.ts.map +1 -0
  87. package/dist/types/src/internal/json-schema/json-schema-type.d.ts +250 -0
  88. package/dist/types/src/internal/json-schema/json-schema-type.d.ts.map +1 -0
  89. package/dist/types/src/internal/object/accessors.d.ts +37 -0
  90. package/dist/types/src/internal/object/accessors.d.ts.map +1 -0
  91. package/dist/types/src/internal/object/common.d.ts +18 -0
  92. package/dist/types/src/internal/object/common.d.ts.map +1 -0
  93. package/dist/types/src/internal/object/create.d.ts +40 -0
  94. package/dist/types/src/internal/object/create.d.ts.map +1 -0
  95. package/dist/types/src/internal/object/create.test.d.ts +2 -0
  96. package/dist/types/src/internal/object/create.test.d.ts.map +1 -0
  97. package/dist/types/src/internal/object/deleted.d.ts +6 -0
  98. package/dist/types/src/internal/object/deleted.d.ts.map +1 -0
  99. package/dist/types/src/internal/object/entity.d.ts +33 -0
  100. package/dist/types/src/internal/object/entity.d.ts.map +1 -0
  101. package/dist/types/src/internal/object/expando.d.ts +14 -0
  102. package/dist/types/src/internal/object/expando.d.ts.map +1 -0
  103. package/dist/types/src/internal/object/ids.d.ts +6 -0
  104. package/dist/types/src/internal/object/ids.d.ts.map +1 -0
  105. package/dist/types/src/internal/object/index.d.ts +16 -0
  106. package/dist/types/src/internal/object/index.d.ts.map +1 -0
  107. package/dist/types/src/internal/object/inspect.d.ts +2 -0
  108. package/dist/types/src/internal/object/inspect.d.ts.map +1 -0
  109. package/dist/types/src/internal/object/json-serializer.d.ts +32 -0
  110. package/dist/types/src/internal/object/json-serializer.d.ts.map +1 -0
  111. package/dist/types/src/internal/object/json-serializer.test.d.ts +2 -0
  112. package/dist/types/src/internal/object/json-serializer.test.d.ts.map +1 -0
  113. package/dist/types/src/internal/object/meta.d.ts +31 -0
  114. package/dist/types/src/internal/object/meta.d.ts.map +1 -0
  115. package/dist/types/src/internal/object/model.d.ts +117 -0
  116. package/dist/types/src/internal/object/model.d.ts.map +1 -0
  117. package/dist/types/src/internal/object/relation.d.ts +17 -0
  118. package/dist/types/src/internal/object/relation.d.ts.map +1 -0
  119. package/dist/types/src/internal/object/schema-validator.d.ts +15 -0
  120. package/dist/types/src/internal/object/schema-validator.d.ts.map +1 -0
  121. package/dist/types/src/internal/object/schema-validator.test.d.ts +2 -0
  122. package/dist/types/src/internal/object/schema-validator.test.d.ts.map +1 -0
  123. package/dist/types/src/internal/object/typed-object.d.ts +31 -0
  124. package/dist/types/src/internal/object/typed-object.d.ts.map +1 -0
  125. package/dist/types/src/internal/object/typed-object.test.d.ts +2 -0
  126. package/dist/types/src/internal/object/typed-object.test.d.ts.map +1 -0
  127. package/dist/types/src/internal/object/typename.d.ts +15 -0
  128. package/dist/types/src/internal/object/typename.d.ts.map +1 -0
  129. package/dist/types/src/internal/object/version.d.ts +14 -0
  130. package/dist/types/src/internal/object/version.d.ts.map +1 -0
  131. package/dist/types/src/internal/projection/compose.d.ts +6 -0
  132. package/dist/types/src/internal/projection/compose.d.ts.map +1 -0
  133. package/dist/types/src/internal/projection/compose.test.d.ts +2 -0
  134. package/dist/types/src/internal/projection/compose.test.d.ts.map +1 -0
  135. package/dist/types/src/internal/projection/index.d.ts +2 -0
  136. package/dist/types/src/internal/projection/index.d.ts.map +1 -0
  137. package/dist/types/src/internal/proxy/handler.test.d.ts +2 -0
  138. package/dist/types/src/internal/proxy/handler.test.d.ts.map +1 -0
  139. package/dist/types/src/internal/proxy/reactive-object.d.ts +15 -0
  140. package/dist/types/src/internal/proxy/reactive-object.d.ts.map +1 -0
  141. package/dist/types/src/internal/proxy/schema.test.d.ts +2 -0
  142. package/dist/types/src/internal/proxy/schema.test.d.ts.map +1 -0
  143. package/dist/types/src/internal/proxy/typed-handler.d.ts +44 -0
  144. package/dist/types/src/internal/proxy/typed-handler.d.ts.map +1 -0
  145. package/dist/types/src/internal/proxy/typed-handler.test.d.ts +2 -0
  146. package/dist/types/src/internal/proxy/typed-handler.test.d.ts.map +1 -0
  147. package/dist/types/src/internal/proxy/typed-object.test.d.ts +2 -0
  148. package/dist/types/src/internal/proxy/typed-object.test.d.ts.map +1 -0
  149. package/dist/types/src/internal/query/index.d.ts +2 -0
  150. package/dist/types/src/internal/query/index.d.ts.map +1 -0
  151. package/dist/types/src/internal/query/query.d.ts +17 -0
  152. package/dist/types/src/internal/query/query.d.ts.map +1 -0
  153. package/dist/types/src/internal/ref/index.d.ts +3 -0
  154. package/dist/types/src/internal/ref/index.d.ts.map +1 -0
  155. package/dist/types/src/internal/ref/ref-array.d.ts +21 -0
  156. package/dist/types/src/internal/ref/ref-array.d.ts.map +1 -0
  157. package/dist/types/src/internal/ref/ref.d.ts +206 -0
  158. package/dist/types/src/internal/ref/ref.d.ts.map +1 -0
  159. package/dist/types/src/internal/ref/ref.test.d.ts +2 -0
  160. package/dist/types/src/internal/ref/ref.test.d.ts.map +1 -0
  161. package/dist/types/src/internal/schema/echo-schema.d.ts +168 -0
  162. package/dist/types/src/internal/schema/echo-schema.d.ts.map +1 -0
  163. package/dist/types/src/internal/schema/index.d.ts +7 -0
  164. package/dist/types/src/internal/schema/index.d.ts.map +1 -0
  165. package/dist/types/src/internal/schema/manipulation.d.ts +10 -0
  166. package/dist/types/src/internal/schema/manipulation.d.ts.map +1 -0
  167. package/dist/types/src/internal/schema/runtime-schema-registry.d.ts +18 -0
  168. package/dist/types/src/internal/schema/runtime-schema-registry.d.ts.map +1 -0
  169. package/dist/types/src/internal/schema/snapshot.d.ts +6 -0
  170. package/dist/types/src/internal/schema/snapshot.d.ts.map +1 -0
  171. package/dist/types/src/internal/schema/stored-schema.d.ts +13 -0
  172. package/dist/types/src/internal/schema/stored-schema.d.ts.map +1 -0
  173. package/dist/types/src/internal/testing/index.d.ts +3 -0
  174. package/dist/types/src/internal/testing/index.d.ts.map +1 -0
  175. package/dist/types/src/internal/testing/types.d.ts +455 -0
  176. package/dist/types/src/internal/testing/types.d.ts.map +1 -0
  177. package/dist/types/src/internal/testing/utils.d.ts +10 -0
  178. package/dist/types/src/internal/testing/utils.d.ts.map +1 -0
  179. package/dist/types/src/internal/types/index.d.ts +3 -0
  180. package/dist/types/src/internal/types/index.d.ts.map +1 -0
  181. package/dist/types/src/internal/types/types.d.ts +79 -0
  182. package/dist/types/src/internal/types/types.d.ts.map +1 -0
  183. package/dist/types/src/internal/types/types.test.d.ts +2 -0
  184. package/dist/types/src/internal/types/types.test.d.ts.map +1 -0
  185. package/dist/types/src/internal/types/util.d.ts +5 -0
  186. package/dist/types/src/internal/types/util.d.ts.map +1 -0
  187. package/dist/types/src/query/index.d.ts +2 -1
  188. package/dist/types/src/query/index.d.ts.map +1 -1
  189. package/dist/types/src/query/{dsl.d.ts → query.d.ts} +24 -21
  190. package/dist/types/src/query/query.d.ts.map +1 -0
  191. package/dist/types/src/query/query.test.d.ts +2 -0
  192. package/dist/types/src/query/query.test.d.ts.map +1 -0
  193. package/dist/types/src/query/tag.d.ts +17 -0
  194. package/dist/types/src/query/tag.d.ts.map +1 -0
  195. package/dist/types/src/testing/echo-schema.d.ts +7 -0
  196. package/dist/types/src/testing/echo-schema.d.ts.map +1 -0
  197. package/dist/types/src/testing/index.d.ts +2 -0
  198. package/dist/types/src/testing/index.d.ts.map +1 -1
  199. package/dist/types/src/testing/types.d.ts +18 -18
  200. package/dist/types/src/testing/types.d.ts.map +1 -1
  201. package/dist/types/tsconfig.tsbuildinfo +1 -1
  202. package/package.json +27 -16
  203. package/src/Obj.ts +40 -10
  204. package/src/Ref.ts +1 -2
  205. package/src/Relation.ts +4 -3
  206. package/src/Type.ts +28 -29
  207. package/src/index.ts +2 -2
  208. package/src/internal/ast/annotation-helper.ts +22 -0
  209. package/src/internal/ast/annotations.test.ts +98 -0
  210. package/src/internal/ast/annotations.ts +226 -0
  211. package/src/internal/ast/entity-kind.ts +15 -0
  212. package/src/internal/ast/index.ts +8 -0
  213. package/src/internal/ast/types.ts +17 -0
  214. package/src/internal/formats/date.test.ts +56 -0
  215. package/src/internal/formats/date.ts +217 -0
  216. package/src/internal/formats/format.test.ts +77 -0
  217. package/src/internal/formats/format.ts +52 -0
  218. package/src/internal/formats/index.ts +12 -0
  219. package/src/internal/formats/number.ts +89 -0
  220. package/src/internal/formats/object.ts +80 -0
  221. package/src/internal/formats/select.ts +16 -0
  222. package/src/internal/formats/string.ts +76 -0
  223. package/src/internal/formats/types.ts +175 -0
  224. package/src/internal/index.ts +22 -0
  225. package/src/internal/json/annotations.ts +50 -0
  226. package/src/internal/json/effect-schema.test.ts +143 -0
  227. package/src/internal/json/index.ts +5 -0
  228. package/src/internal/json/json-schema.test.ts +857 -0
  229. package/src/internal/json/json-schema.ts +519 -0
  230. package/src/internal/json-schema/index.ts +6 -0
  231. package/src/internal/json-schema/json-schema-normalize.ts +109 -0
  232. package/src/internal/json-schema/json-schema-type.ts +403 -0
  233. package/src/internal/object/accessors.ts +153 -0
  234. package/src/internal/object/common.ts +76 -0
  235. package/src/internal/object/create.test.ts +118 -0
  236. package/src/internal/object/create.ts +96 -0
  237. package/src/internal/object/deleted.ts +19 -0
  238. package/src/internal/object/entity.ts +248 -0
  239. package/src/internal/object/expando.ts +21 -0
  240. package/src/internal/object/ids.ts +12 -0
  241. package/src/internal/object/index.ts +19 -0
  242. package/src/internal/object/inspect.ts +48 -0
  243. package/src/internal/object/json-serializer.test.ts +99 -0
  244. package/src/internal/object/json-serializer.ts +225 -0
  245. package/src/internal/object/meta.ts +61 -0
  246. package/src/internal/object/model.ts +170 -0
  247. package/src/internal/object/relation.ts +24 -0
  248. package/src/internal/object/schema-validator.test.ts +186 -0
  249. package/src/internal/object/schema-validator.ts +241 -0
  250. package/src/internal/object/typed-object.test.ts +34 -0
  251. package/src/internal/object/typed-object.ts +88 -0
  252. package/src/internal/object/typename.ts +61 -0
  253. package/src/internal/object/version.ts +22 -0
  254. package/src/internal/projection/compose.test.ts +43 -0
  255. package/src/internal/projection/compose.ts +36 -0
  256. package/src/internal/projection/index.ts +5 -0
  257. package/src/internal/proxy/handler.test.ts +163 -0
  258. package/src/internal/proxy/reactive-object.ts +108 -0
  259. package/src/internal/proxy/schema.test.ts +136 -0
  260. package/src/internal/proxy/typed-handler.test.ts +102 -0
  261. package/src/internal/proxy/typed-handler.ts +228 -0
  262. package/src/internal/proxy/typed-object.test.ts +100 -0
  263. package/src/internal/query/index.ts +5 -0
  264. package/src/internal/query/query.ts +23 -0
  265. package/src/internal/ref/index.ts +6 -0
  266. package/src/internal/ref/ref-array.ts +39 -0
  267. package/src/internal/ref/ref.test.ts +100 -0
  268. package/src/internal/ref/ref.ts +521 -0
  269. package/src/internal/schema/echo-schema.ts +383 -0
  270. package/src/internal/schema/index.ts +10 -0
  271. package/src/internal/schema/manipulation.ts +92 -0
  272. package/src/internal/schema/runtime-schema-registry.ts +78 -0
  273. package/src/internal/schema/snapshot.ts +25 -0
  274. package/src/internal/schema/stored-schema.ts +26 -0
  275. package/src/internal/testing/index.ts +6 -0
  276. package/src/internal/testing/types.ts +211 -0
  277. package/src/internal/testing/utils.ts +54 -0
  278. package/src/internal/types/index.ts +6 -0
  279. package/src/internal/types/types.test.ts +48 -0
  280. package/src/internal/types/types.ts +176 -0
  281. package/src/internal/types/util.ts +9 -0
  282. package/src/query/index.ts +2 -1
  283. package/src/query/query.test.ts +401 -0
  284. package/src/query/{dsl.ts → query.ts} +68 -38
  285. package/src/query/tag.ts +37 -0
  286. package/src/test/api.test.ts +2 -2
  287. package/src/testing/echo-schema.ts +39 -0
  288. package/src/testing/index.ts +2 -0
  289. package/src/testing/types.ts +1 -1
  290. package/dist/lib/browser/chunk-I4YEWYJA.mjs.map +0 -7
  291. package/dist/lib/node-esm/chunk-AWWFAF75.mjs.map +0 -7
  292. package/dist/types/src/experimental/database.d.ts +0 -8
  293. package/dist/types/src/experimental/database.d.ts.map +0 -1
  294. package/dist/types/src/experimental/index.d.ts +0 -1
  295. package/dist/types/src/experimental/index.d.ts.map +0 -1
  296. package/dist/types/src/experimental/queue.d.ts +0 -8
  297. package/dist/types/src/experimental/queue.d.ts.map +0 -1
  298. package/dist/types/src/experimental/space.d.ts +0 -8
  299. package/dist/types/src/experimental/space.d.ts.map +0 -1
  300. package/dist/types/src/query/dsl.d.ts.map +0 -1
  301. package/dist/types/src/query/dsl.test.d.ts +0 -2
  302. package/dist/types/src/query/dsl.test.d.ts.map +0 -1
  303. package/src/experimental/database.ts +0 -11
  304. package/src/experimental/index.ts +0 -7
  305. package/src/experimental/queue.ts +0 -11
  306. package/src/experimental/space.ts +0 -11
  307. package/src/query/dsl.test.ts +0 -362
@@ -2,16 +2,18 @@
2
2
  // Copyright 2025 DXOS.org
3
3
  //
4
4
 
5
- import { Match, Schema } from 'effect';
6
- import type { NonEmptyArray } from 'effect/Array';
7
- import type { Simplify } from 'effect/Schema';
5
+ import type * as EffectArray from 'effect/Array';
6
+ import * as Match from 'effect/Match';
7
+ import * as Schema from 'effect/Schema';
8
+ import type * as Types from 'effect/Types';
8
9
 
9
10
  import { raise } from '@dxos/debug';
10
11
  import { type ForeignKey, type QueryAST } from '@dxos/echo-protocol';
11
- import { getTypeReference } from '@dxos/echo-schema';
12
12
  import { assertArgument } from '@dxos/invariant';
13
13
  import { DXN, ObjectId } from '@dxos/keys';
14
14
 
15
+ import { getTypeReference } from '../internal';
16
+ import type * as Obj from '../Obj';
15
17
  import * as Ref from '../Ref';
16
18
  import type * as Type from '../Type';
17
19
 
@@ -86,7 +88,7 @@ export interface Query<T> {
86
88
  // TODO(dmaretskyi): any way to enforce `Ref.Target<Schema.Schema.Type<S>[key]> == T`?
87
89
  // TODO(dmaretskyi): Ability to go through arrays of references.
88
90
  referencedBy<S extends Schema.Schema.All>(
89
- target: S,
91
+ target: S | string,
90
92
  key: RefPropKey<Schema.Schema.Type<S>>,
91
93
  ): Query<Schema.Schema.Type<S>>;
92
94
 
@@ -97,7 +99,7 @@ export interface Query<T> {
97
99
  * @param predicates - Predicates to filter the relation objects.
98
100
  */
99
101
  sourceOf<S extends Schema.Schema.All>(
100
- relation: S,
102
+ relation: S | string,
101
103
  predicates?: Filter.Props<Schema.Schema.Type<S>>,
102
104
  ): Query<Schema.Schema.Type<S>>;
103
105
 
@@ -108,7 +110,7 @@ export interface Query<T> {
108
110
  * @param predicates - Predicates to filter the relation objects.
109
111
  */
110
112
  targetOf<S extends Schema.Schema.All>(
111
- relation: S,
113
+ relation: S | string,
112
114
  predicates?: Filter.Props<Schema.Schema.Type<S>>,
113
115
  ): Query<Schema.Schema.Type<S>>;
114
116
 
@@ -130,7 +132,7 @@ export interface Query<T> {
130
132
  * @param order - Order to sort the results.
131
133
  * @returns Query for the ordered results.
132
134
  */
133
- orderBy(...order: NonEmptyArray<Order<T>>): Query<T>;
135
+ orderBy(...order: EffectArray.NonEmptyArray<Order<T>>): Query<T>;
134
136
 
135
137
  /**
136
138
  * Add options to a query.
@@ -160,7 +162,7 @@ interface QueryAPI {
160
162
  * Shorthand for: `Query.select(Filter.type(schema, predicates))`.
161
163
  */
162
164
  type<S extends Schema.Schema.All>(
163
- schema: S,
165
+ schema: S | string,
164
166
  predicates?: Filter.Props<Schema.Schema.Type<S>>,
165
167
  ): Query<Schema.Schema.Type<S>>;
166
168
 
@@ -194,7 +196,7 @@ export declare namespace Query {
194
196
 
195
197
  export interface Filter<T> {
196
198
  // TODO(dmaretskyi): See new effect-schema approach to variance.
197
- '~Filter': { value: T };
199
+ '~Filter': { value: Types.Contravariant<T> };
198
200
 
199
201
  ast: QueryAST.Filter;
200
202
  }
@@ -204,46 +206,51 @@ type Intersection<Types extends readonly unknown[]> = Types extends [infer First
204
206
  : unknown;
205
207
 
206
208
  interface FilterAPI {
207
- is(value: unknown): value is Filter<any>;
209
+ is(value: unknown): value is Filter.Any;
210
+
211
+ /** Construct a filter from an ast. */
212
+ fromAst(ast: QueryAST.Filter): Filter<Obj.Any>;
208
213
 
209
214
  /**
210
215
  * Filter that matches all objects.
211
216
  */
212
- everything(): Filter<any>;
217
+ // TODO(dmaretskyi): `Obj.Any` would be more type-safe, but causes annoying errors in existing code
218
+ everything(): Filter<Obj.AnyProps>;
213
219
 
214
220
  /**
215
221
  * Filter that matches no objects.
216
222
  */
223
+ // TODO(dmaretskyi): Filter<never>?
217
224
  nothing(): Filter<any>;
218
225
 
219
226
  /**
220
227
  * Filter by object IDs.
221
228
  */
222
229
  // TODO(dmaretskyi): Rename to `Filter.id`.
223
- ids(...id: ObjectId[]): Filter<any>;
230
+ ids(...id: ObjectId[]): Filter<Obj.AnyProps>;
224
231
 
225
232
  /**
226
233
  * Filter by type.
227
234
  */
228
235
  type<S extends Schema.Schema.All>(
229
- schema: S,
236
+ schema: S | string,
230
237
  props?: Filter.Props<Schema.Schema.Type<S>>,
231
238
  ): Filter<Schema.Schema.Type<S>>;
232
239
 
233
240
  /**
234
241
  * Filter by non-qualified typename.
235
242
  */
236
- typename(typename: string): Filter<any>;
243
+ typename(typename: string): Filter<Obj.AnyProps>;
237
244
 
238
245
  /**
239
246
  * Filter by fully qualified type DXN.
240
247
  */
241
- typeDXN(dxn: DXN): Filter<any>;
248
+ typeDXN(dxn: DXN): Filter<Obj.AnyProps>;
242
249
 
243
250
  /**
244
251
  * Filter by tag.
245
252
  */
246
- tag(tag: string): Filter<any>;
253
+ tag(tag: string): Filter<Obj.Any>;
247
254
 
248
255
  /**
249
256
  * Filter by properties.
@@ -309,14 +316,14 @@ interface FilterAPI {
309
316
  * Predicate for an array property to contain the provided value.
310
317
  * @param value - Value to check against.
311
318
  */
312
- contains<T>(value: T): Filter<T[]>;
319
+ contains<T>(value: T): Filter<readonly T[] | undefined>;
313
320
 
314
321
  /**
315
322
  * Predicate for property to be in the provided range.
316
323
  * @param from - Start of the range (inclusive).
317
324
  * @param to - End of the range (exclusive).
318
325
  */
319
- between<T>(from: T, to: T): Filter<T>;
326
+ between<T>(from: T, to: T): Filter<unknown>;
320
327
 
321
328
  /**
322
329
  * Negate the filter.
@@ -346,11 +353,12 @@ export declare namespace Filter {
346
353
 
347
354
  type Type<F extends Any> = F extends Filter<infer T> ? T : never;
348
355
 
349
- type And<FS extends readonly Any[]> = Simplify<Intersection<{ [K in keyof FS]: Type<FS[K]> }>>;
356
+ type And<FS extends readonly Any[]> = Schema.Simplify<Intersection<{ [K in keyof FS]: Type<FS[K]> }>>;
350
357
 
351
- type Or<FS extends readonly Any[]> = Simplify<{ [K in keyof FS]: Type<FS[K]> }[number]>;
358
+ type Or<FS extends readonly Any[]> = Schema.Simplify<{ [K in keyof FS]: Type<FS[K]> }[number]>;
352
359
  }
353
360
 
361
+ // TODO(dmaretskyi): Separate object instead of statics for better devex with type errors.
354
362
  class FilterClass implements Filter<any> {
355
363
  private static variance: Filter<any>['~Filter'] = {} as Filter<any>['~Filter'];
356
364
 
@@ -358,6 +366,10 @@ class FilterClass implements Filter<any> {
358
366
  return typeof value === 'object' && value !== null && '~Filter' in value;
359
367
  }
360
368
 
369
+ static fromAst(ast: QueryAST.Filter): Filter<any> {
370
+ return new FilterClass(ast);
371
+ }
372
+
361
373
  static everything(): FilterClass {
362
374
  return new FilterClass({
363
375
  type: 'object',
@@ -405,10 +417,10 @@ class FilterClass implements Filter<any> {
405
417
  }
406
418
 
407
419
  static type<S extends Schema.Schema.All>(
408
- schema: S,
420
+ schema: S | string,
409
421
  props?: Filter.Props<Schema.Schema.Type<S>>,
410
422
  ): Filter<Schema.Schema.Type<S>> {
411
- const dxn = getTypeReference(schema)?.toDXN() ?? raise(new TypeError('Schema has no DXN'));
423
+ const dxn = getTypeDXNFromSpecifier(schema);
412
424
  return new FilterClass({
413
425
  type: 'object',
414
426
  typename: dxn.toString(),
@@ -456,8 +468,11 @@ class FilterClass implements Filter<any> {
456
468
  });
457
469
  }
458
470
 
459
- static foreignKeys<S extends Schema.Schema.All>(schema: S, keys: ForeignKey[]): Filter<Schema.Schema.Type<S>> {
460
- const dxn = getTypeReference(schema)?.toDXN() ?? raise(new TypeError('Schema has no DXN'));
471
+ static foreignKeys<S extends Schema.Schema.All>(
472
+ schema: S | string,
473
+ keys: ForeignKey[],
474
+ ): Filter<Schema.Schema.Type<S>> {
475
+ const dxn = getTypeDXNFromSpecifier(schema);
461
476
  return new FilterClass({
462
477
  type: 'object',
463
478
  typename: dxn.toString(),
@@ -525,14 +540,14 @@ class FilterClass implements Filter<any> {
525
540
  });
526
541
  }
527
542
 
528
- static contains<T>(value: T): Filter<T[]> {
543
+ static contains<T>(value: T): Filter<readonly T[] | undefined> {
529
544
  return new FilterClass({
530
545
  type: 'contains',
531
546
  value,
532
547
  });
533
548
  }
534
549
 
535
- static between<T>(from: T, to: T): Filter<T> {
550
+ static between<T>(from: T, to: T): Filter<unknown> {
536
551
  return new FilterClass({
537
552
  type: 'range',
538
553
  from,
@@ -622,6 +637,7 @@ const processPredicate = (predicate: any): QueryAST.Filter => {
622
637
  );
623
638
  };
624
639
 
640
+ // TODO(dmaretskyi): Separate object instead of statics for better devex with type errors.
625
641
  class QueryClass implements Query<any> {
626
642
  private static variance: Query<any>['~Query'] = {} as Query<any>['~Query'];
627
643
 
@@ -640,7 +656,7 @@ class QueryClass implements Query<any> {
640
656
  });
641
657
  }
642
658
 
643
- static type(schema: Schema.Schema.All, predicates?: Filter.Props<unknown>): Query<any> {
659
+ static type(schema: Schema.Schema.All | string, predicates?: Filter.Props<unknown>): Query<any> {
644
660
  return new QueryClass({
645
661
  type: 'select',
646
662
  filter: FilterClass.type(schema, predicates).ast,
@@ -671,7 +687,7 @@ class QueryClass implements Query<any> {
671
687
 
672
688
  '~Query' = QueryClass.variance;
673
689
 
674
- select(filter: Filter<any> | Filter.Props<any>): Query<any> {
690
+ select(filter: Filter.Any | Filter.Props<any>): Query.Any {
675
691
  if (Filter.is(filter)) {
676
692
  return new QueryClass({
677
693
  type: 'filter',
@@ -687,7 +703,7 @@ class QueryClass implements Query<any> {
687
703
  }
688
704
  }
689
705
 
690
- reference(key: string): Query<any> {
706
+ reference(key: string): Query.Any {
691
707
  return new QueryClass({
692
708
  type: 'reference-traversal',
693
709
  anchor: this.ast,
@@ -695,8 +711,8 @@ class QueryClass implements Query<any> {
695
711
  });
696
712
  }
697
713
 
698
- referencedBy(target: Schema.Schema.All, key: string): Query<any> {
699
- const dxn = getTypeReference(target)?.toDXN() ?? raise(new TypeError('Target schema has no DXN'));
714
+ referencedBy(target: Schema.Schema.All | string, key: string): Query.Any {
715
+ const dxn = getTypeDXNFromSpecifier(target);
700
716
  return new QueryClass({
701
717
  type: 'incoming-references',
702
718
  anchor: this.ast,
@@ -705,7 +721,7 @@ class QueryClass implements Query<any> {
705
721
  });
706
722
  }
707
723
 
708
- sourceOf(relation: Schema.Schema.All, predicates?: Filter.Props<unknown> | undefined): Query<any> {
724
+ sourceOf(relation: Schema.Schema.All | string, predicates?: Filter.Props<unknown> | undefined): Query.Any {
709
725
  return new QueryClass({
710
726
  type: 'relation',
711
727
  anchor: this.ast,
@@ -714,7 +730,7 @@ class QueryClass implements Query<any> {
714
730
  });
715
731
  }
716
732
 
717
- targetOf(relation: Schema.Schema.All, predicates?: Filter.Props<unknown> | undefined): Query<any> {
733
+ targetOf(relation: Schema.Schema.All | string, predicates?: Filter.Props<unknown> | undefined): Query.Any {
718
734
  return new QueryClass({
719
735
  type: 'relation',
720
736
  anchor: this.ast,
@@ -723,7 +739,7 @@ class QueryClass implements Query<any> {
723
739
  });
724
740
  }
725
741
 
726
- source(): Query<any> {
742
+ source(): Query.Any {
727
743
  return new QueryClass({
728
744
  type: 'relation-traversal',
729
745
  anchor: this.ast,
@@ -731,7 +747,7 @@ class QueryClass implements Query<any> {
731
747
  });
732
748
  }
733
749
 
734
- target(): Query<any> {
750
+ target(): Query.Any {
735
751
  return new QueryClass({
736
752
  type: 'relation-traversal',
737
753
  anchor: this.ast,
@@ -739,7 +755,7 @@ class QueryClass implements Query<any> {
739
755
  });
740
756
  }
741
757
 
742
- orderBy(...order: Order<any>[]): Query<any> {
758
+ orderBy(...order: Order<any>[]): Query.Any {
743
759
  return new QueryClass({
744
760
  type: 'order',
745
761
  query: this.ast,
@@ -747,7 +763,7 @@ class QueryClass implements Query<any> {
747
763
  });
748
764
  }
749
765
 
750
- options(options: QueryAST.QueryOptions): Query<any> {
766
+ options(options: QueryAST.QueryOptions): Query.Any {
751
767
  return new QueryClass({
752
768
  type: 'options',
753
769
  query: this.ast,
@@ -757,3 +773,17 @@ class QueryClass implements Query<any> {
757
773
  }
758
774
 
759
775
  export const Query: QueryAPI = QueryClass;
776
+
777
+ /**
778
+ * @param input schema or a typename string
779
+ * @return type DXN
780
+ */
781
+ const getTypeDXNFromSpecifier = (input: Schema.Schema.All | string): DXN => {
782
+ if (Schema.isSchema(input)) {
783
+ return getTypeReference(input)?.toDXN() ?? raise(new TypeError('Schema has no DXN'));
784
+ } else {
785
+ assertArgument(typeof input === 'string', 'input');
786
+ assertArgument(!input.startsWith('dxn:'), 'input');
787
+ return DXN.fromTypename(input);
788
+ }
789
+ };
@@ -0,0 +1,37 @@
1
+ //
2
+ // Copyright 2025 DXOS.org
3
+ //
4
+
5
+ import * as Schema from 'effect/Schema';
6
+
7
+ import { LabelAnnotation } from '../internal';
8
+ import * as Obj from '../Obj';
9
+ import * as Type from '../Type';
10
+
11
+ export const Tag = Schema.Struct({
12
+ label: Schema.String,
13
+ hue: Schema.optional(Schema.String), // TODO(burdon): Color name?
14
+ }).pipe(
15
+ Type.Obj({
16
+ typename: 'dxos.org/type/Tag',
17
+ version: '0.1.0',
18
+ }),
19
+ LabelAnnotation.set(['label']),
20
+ );
21
+ export type Tag = Schema.Schema.Type<typeof Tag>;
22
+
23
+ export const make = (props: Obj.MakeProps<typeof Tag>) => Obj.make(Tag, props);
24
+
25
+ export type TagMap = Record<string, Tag>;
26
+
27
+ export const sortTags = ({ label: a }: Tag, { label: b }: Tag) => a.localeCompare(b);
28
+
29
+ export const createTagList = (tags: TagMap): Tag[] =>
30
+ Object.entries(tags)
31
+ .map(([id, tag]) => ({ ...tag, id }))
32
+ .sort(sortTags);
33
+
34
+ export const findTagByLabel = (tags: TagMap | undefined, name: string): Tag | undefined => {
35
+ const entry = Object.entries(tags ?? {}).find(([_, tag]) => tag.label.toLowerCase() === name.toLowerCase());
36
+ return entry ? { ...entry[1], id: entry[0] } : undefined;
37
+ };
@@ -2,11 +2,11 @@
2
2
  // Copyright 2025 DXOS.org
3
3
  //
4
4
 
5
- import { Schema } from 'effect';
5
+ import * as Schema from 'effect/Schema';
6
6
  import { describe, test } from 'vitest';
7
7
 
8
8
  import { raise } from '@dxos/debug';
9
- import { FormatAnnotation, FormatEnum } from '@dxos/echo-schema';
9
+ import { FormatAnnotation, FormatEnum } from '@dxos/echo/internal';
10
10
 
11
11
  import { type Live, Obj, Ref, Relation, Type } from '../index';
12
12
 
@@ -0,0 +1,39 @@
1
+ //
2
+ // Copyright 2024 DXOS.org
3
+ //
4
+
5
+ import { effect } from '@preact/signals-core';
6
+ import type * as Schema from 'effect/Schema';
7
+
8
+ import { registerSignalsRuntime } from '@dxos/echo-signals';
9
+ import { assertArgument } from '@dxos/invariant';
10
+
11
+ import { EchoSchema, StoredSchema, getSchemaTypename, live, toJsonSchema } from '../internal';
12
+
13
+ // NOTE: Registration is done here is this is the module that calls out to `effect`.
14
+ registerSignalsRuntime();
15
+
16
+ /**
17
+ * Create a reactive mutable schema that updates when the JSON schema is updated.
18
+ */
19
+ // TODO(dmaretskyi): Should be replaced by registration of typed object.
20
+ export const createEchoSchema = (schema: Schema.Schema.AnyNoContext): EchoSchema => {
21
+ const typename = getSchemaTypename(schema);
22
+ assertArgument(typename, 'typename', 'Schema does not have a typename.');
23
+
24
+ const echoSchema = new EchoSchema(
25
+ live(StoredSchema, {
26
+ typename,
27
+ version: '0.1.0',
28
+ jsonSchema: toJsonSchema(schema),
29
+ }),
30
+ );
31
+
32
+ // TODO(burdon): Unsubscribe is never called.
33
+ effect(() => {
34
+ const _ = echoSchema.jsonSchema;
35
+ echoSchema._invalidate();
36
+ });
37
+
38
+ return echoSchema;
39
+ };
@@ -2,4 +2,6 @@
2
2
  // Copyright 2025 DXOS.org
3
3
  //
4
4
 
5
+ export { prepareAstForCompare, Testing as TestingDeprecated, updateCounter } from '../internal/testing';
5
6
  export * from './types';
7
+ export * from './echo-schema';
@@ -2,7 +2,7 @@
2
2
  // Copyright 2024 DXOS.org
3
3
  //
4
4
 
5
- import { Schema } from 'effect';
5
+ import * as Schema from 'effect/Schema';
6
6
 
7
7
  import { Type } from '..';
8
8
 
@@ -1,7 +0,0 @@
1
- {
2
- "version": 3,
3
- "sources": ["../../../src/errors.ts", "../../../src/Key.ts", "../../../src/Obj.ts", "../../../src/Type.ts", "../../../src/Ref.ts", "../../../src/Relation.ts", "../../../src/index.ts", "../../../src/query/dsl.ts"],
4
- "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport { BaseError, type BaseErrorOptions } from '@dxos/errors';\nimport { type DXN } from '@dxos/keys';\n\nexport class SchemaNotFoundError extends BaseError.extend('SCHEMA_NOT_FOUND', 'Schema not found') {\n constructor(schema: string, options?: BaseErrorOptions) {\n super({ context: { schema }, ...options });\n }\n}\n\nexport class ObjectNotFoundError extends BaseError.extend('OBJECT_NOT_FOUND', 'Object not found') {\n constructor(dxn: DXN, options?: BaseErrorOptions) {\n super({ context: { dxn }, ...options });\n }\n}\n", "//\n// Copyright 2025 DXOS.org\n//\n\nexport { SpaceId, ObjectId } from '@dxos/keys';\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { Schema } from 'effect';\nimport { dual } from 'effect/Function';\n\nimport * as EchoSchema from '@dxos/echo-schema';\nimport { assertArgument, invariant } from '@dxos/invariant';\nimport { type DXN } from '@dxos/keys';\nimport * as LiveObject from '@dxos/live-object';\nimport { live } from '@dxos/live-object';\nimport { assumeType, deepMapValues } from '@dxos/util';\n\nimport type * as Ref from './Ref';\nimport type * as Relation from './Relation';\nimport * as Type from './Type';\n\n/**\n * NOTE: Don't export: Obj.Any and Obj.Obj form the public API.\n */\ninterface BaseObj extends EchoSchema.HasId, Type.OfKind<EchoSchema.EntityKind.Object> {}\n\n/**\n * Object type with specific properties.\n */\nexport type Obj<Props> = BaseObj & Props;\n\n/**\n * Base type for all ECHO objects.\n */\nexport interface Any extends BaseObj {}\n\nexport const Any = Schema.Struct({}).pipe(\n Type.Obj({\n typename: 'dxos.org/types/Any',\n version: '0.1.0',\n }),\n);\n\ntype Props<T = any> = { id?: EchoSchema.ObjectId } & Type.Properties<T>;\n\nexport type MakeProps<T extends Type.Obj.Any> = NoInfer<Props<Schema.Schema.Type<T>>> & {\n [Meta]?: Partial<EchoSchema.ObjectMeta>;\n};\n\nexport const Meta: unique symbol = EchoSchema.MetaId as any;\n\n// TODO(dmaretskyi): Expose Meta = EchoSchema.MetaId.\n\n/**\n * Creates new object.\n * @param schema - Object schema.\n * @param props - Object properties.\n * @param meta - Object metadata (deprecated) -- pass with Obj.Meta.\n *\n * Meta can be passed as a symbol in `props`.\n *\n * Example:\n * ```ts\n * const obj = Obj.make(Person, { [Obj.Meta]: { keys: [...] }, name: 'John' });\n * ```\n */\nexport const make = <S extends Type.Obj.Any>(\n schema: S,\n props: MakeProps<S>,\n meta?: EchoSchema.ObjectMeta,\n): LiveObject.Live<Schema.Schema.Type<S>> => {\n assertArgument(\n EchoSchema.getTypeAnnotation(schema)?.kind === EchoSchema.EntityKind.Object,\n 'schema',\n 'Expected an object schema',\n );\n\n if (props[EchoSchema.MetaId] != null) {\n meta = props[EchoSchema.MetaId] as any;\n delete props[EchoSchema.MetaId];\n }\n\n return live<Schema.Schema.Type<S>>(schema, props as any, meta);\n};\n\nexport const isObject = (obj: unknown): obj is Any => {\n assumeType<EchoSchema.InternalObjectProps>(obj);\n return typeof obj === 'object' && obj !== null && obj[EchoSchema.EntityKindId] === EchoSchema.EntityKind.Object;\n};\n\n/**\n * Test if object or relation is an instance of a schema.\n * @example\n * ```ts\n * const john = Obj.make(Person, { name: 'John' });\n * const johnIsPerson = Obj.instanceOf(Person)(john);\n *\n * const isPerson = Obj.instanceOf(Person);\n * if(isPerson(john)) {\n * // john is Person\n * }\n * ```\n */\nexport const instanceOf: {\n <S extends Type.Relation.Any | Type.Obj.Any>(schema: S): (value: unknown) => value is Schema.Schema.Type<S>;\n <S extends Type.Relation.Any | Type.Obj.Any>(schema: S, value: unknown): value is Schema.Schema.Type<S>;\n} = ((\n ...args: [schema: Type.Relation.Any | Type.Obj.Any, value: unknown] | [schema: Type.Relation.Any | Type.Obj.Any]\n) => {\n if (args.length === 1) {\n return (obj: unknown) => EchoSchema.isInstanceOf(args[0], obj);\n }\n\n return EchoSchema.isInstanceOf(args[0], args[1]);\n}) as any;\n\nexport const getSchema = EchoSchema.getSchema;\n\n// TODO(dmaretskyi): Allow returning undefined.\nexport const getDXN = (obj: Any | Relation.Any): DXN => {\n assertArgument(!Schema.isSchema(obj), 'obj', 'Object should not be a schema.');\n const dxn = EchoSchema.getObjectDXN(obj);\n invariant(dxn != null, 'Invalid object.');\n return dxn;\n};\n\n/**\n * @returns The DXN of the object's type.\n * @example dxn:example.com/type/Contact:1.0.0\n */\n// TODO(burdon): Expando does not have a type.\nexport const getTypeDXN = EchoSchema.getType;\n\n/**\n * @returns The typename of the object's type.\n * @example `example.com/type/Contact`\n */\nexport const getTypename = (obj: Any | Relation.Any): string | undefined => {\n const schema = getSchema(obj);\n if (schema == null) {\n // Try to extract typename from DXN.\n return EchoSchema.getType(obj)?.asTypeDXN()?.type;\n }\n\n return EchoSchema.getSchemaTypename(schema);\n};\n\n// TODO(dmaretskyi): Allow returning undefined.\nexport const getMeta = (obj: Any | Relation.Any): EchoSchema.ObjectMeta => {\n const meta = EchoSchema.getMeta(obj);\n invariant(meta != null, 'Invalid object.');\n return meta;\n};\n\n/**\n * @returns Foreign keys for the object from the specified source.\n */\nexport const getKeys: {\n (obj: Any | Relation.Any, source: string): EchoSchema.ForeignKey[];\n (source: string): (obj: Any | Relation.Any) => EchoSchema.ForeignKey[];\n} = dual(2, (obj: Any | Relation.Any, source?: string): EchoSchema.ForeignKey[] => {\n const meta = EchoSchema.getMeta(obj);\n invariant(meta != null, 'Invalid object.');\n return meta.keys.filter((key) => key.source === source);\n});\n\n/**\n * Delete all keys from the object for the specified source.\n * @param obj\n * @param source\n */\nexport const deleteKeys = (obj: Any | Relation.Any, source: string) => {\n const meta = EchoSchema.getMeta(obj);\n for (let i = 0; i < meta.keys.length; i++) {\n if (meta.keys[i].source === source) {\n meta.keys.splice(i, 1);\n i--;\n }\n }\n};\n\n// TODO(dmaretskyi): Default to `false`.\nexport const isDeleted = (obj: Any | Relation.Any): boolean => {\n const deleted = EchoSchema.isDeleted(obj);\n invariant(typeof deleted === 'boolean', 'Invalid object.');\n return deleted;\n};\n\nexport const getLabel = (obj: Any | Relation.Any): string | undefined => {\n const schema = getSchema(obj);\n if (schema != null) {\n return EchoSchema.getLabel(schema, obj);\n }\n};\n\nexport const setLabel = (obj: Any | Relation.Any, label: string) => {\n const schema = getSchema(obj);\n if (schema != null) {\n EchoSchema.setLabel(schema, obj, label);\n }\n};\n\nconst compare = (a?: string, b?: string) => {\n if (a == null) {\n return b == null ? 0 : 1;\n }\n\n if (b == null) {\n return -1;\n }\n\n return a.localeCompare(b);\n};\n\nexport type Comparator = (a: Any, b: Any) => number;\n\nexport const sortByLabel: Comparator = (a: Any, b: Any) => compare(getLabel(a), getLabel(b));\nexport const sortByTypename: Comparator = (a: Any, b: Any) => compare(getTypename(a), getTypename(b));\nexport const sort = (...comparators: Comparator[]): Comparator => {\n return (a: Any, b: Any) => {\n for (const comparator of comparators) {\n const result = comparator(a, b);\n if (result !== 0) {\n return result;\n }\n }\n\n return 0;\n };\n};\n\n/**\n * JSON representation of an object.\n */\nexport type JSON = EchoSchema.ObjectJSON;\n\n/**\n * Converts object to its JSON representation.\n *\n * The same algorithm is used when calling the standard `JSON.stringify(obj)` function.\n */\n// TODO(burdon): Base util type for Obj/Relation?\nexport const toJSON = (obj: Any | Relation.Any): JSON => EchoSchema.objectToJSON(obj);\n\n/**\n * Creates an object from its json representation, performing schema validation.\n * References and schemas will be resolvable if the `refResolver` is provided.\n *\n * The function need to be async to support resolving the schema as well as the relation endpoints.\n *\n * @param options.refResolver - Resolver for references. Produces hydrated references that can be resolved.\n * @param options.dxn - Override object DXN. Changes the result of `Obj.getDXN`.\n */\nexport const fromJSON: (json: unknown, options?: { refResolver?: Ref.Resolver; dxn?: DXN }) => Promise<Any> =\n EchoSchema.objectFromJSON as any;\n\n/**\n * Returns an immutable snapshot of an object.\n */\nexport const getSnapshot: <T extends Any>(obj: Obj<T>) => T = LiveObject.getSnapshot;\n\nexport type CloneOptions = {\n /**\n * Retain the original object's ID.\n * @default false\n */\n retainId?: boolean;\n};\n\n/**\n * Clones an object or relation.\n * This does not clone referenced objects, only the properties in the object.\n * @returns A new object with the same schema and properties.\n */\nexport const clone = <T extends Any | Relation.Any>(obj: T, opts?: CloneOptions): T => {\n const { id, ...data } = obj;\n const schema = getSchema(obj);\n invariant(schema != null, 'Object should have a schema');\n const props: any = deepMapValues(data, (value, recurse) => {\n if (EchoSchema.Ref.isRef(value)) {\n return value;\n }\n return recurse(value);\n });\n if (opts?.retainId) {\n props.id = id;\n }\n const meta = getMeta(obj);\n props[EchoSchema.MetaId] = deepMapValues(meta, (value, recurse) => {\n if (EchoSchema.Ref.isRef(value)) {\n return value;\n }\n return recurse(value);\n });\n return make(schema, props);\n};\n\nexport const VersionTypeId = EchoSchema.VersionTypeId;\nexport type VersionType = typeof VersionTypeId;\n\n/**\n * Represent object version.\n * May be backed by Automerge.\n * Objects with no history are not versioned.\n */\nexport interface Version {\n [VersionTypeId]: {};\n\n /**\n * Whether the object is versioned.\n */\n versioned: boolean;\n\n /**\n * Automerge heads.\n */\n automergeHeads?: string[];\n}\n\nconst unversioned: Version = {\n [VersionTypeId]: {},\n versioned: false,\n};\n\n/**\n * Checks that `obj` is a version object.\n */\nexport const isVersion = (obj: unknown): obj is Version => {\n return obj != null && typeof obj === 'object' && VersionTypeId in obj;\n};\n\n/**\n * Returns the version of the object.\n */\nexport const version = (obj: Any | Relation.Any): Version => {\n const version = (obj as any)[EchoSchema.ObjectVersionId];\n if (version === undefined) {\n return unversioned;\n }\n return version;\n};\n\n/**\n * Checks that `version` is a valid version object.\n */\nexport const versionValid = (version: Version): boolean => {\n assertArgument(isVersion(version), 'version', 'Invalid version object');\n return !!version.versioned;\n};\n\nexport type VersionCompareResult = 'unversioned' | 'equal' | 'different';\n\n/**\n * Compares two versions.\n * @param version1\n * @param version2\n * @returns 'unversioned' if either object is unversioned, 'equal' if the versions are equal, 'different' if the versions are different.\n */\nexport const compareVersions = (version1: Version, version2: Version): VersionCompareResult => {\n assertArgument(isVersion(version1), 'version1', 'Invalid version object');\n assertArgument(isVersion(version2), 'version2', 'Invalid version object');\n\n if (!versionValid(version1) || !versionValid(version2)) {\n return 'unversioned';\n }\n\n if (version1.automergeHeads?.length !== version2.automergeHeads?.length) {\n return 'different';\n }\n if (version1.automergeHeads?.some((head) => !version2.automergeHeads?.includes(head))) {\n return 'different';\n }\n\n return 'equal';\n};\n\nexport const encodeVersion = (version: Version): string => {\n return JSON.stringify(version);\n};\n\nexport const decodeVersion = (version: string): Version => {\n const parsed = JSON.parse(version);\n parsed[VersionTypeId] = {};\n return parsed;\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { type Schema } from 'effect';\nimport { type Simplify } from 'effect/Schema';\n\nimport { type EncodedReference } from '@dxos/echo-protocol';\nimport * as EchoSchema from '@dxos/echo-schema';\nimport { type ToMutable } from '@dxos/echo-schema';\nimport { invariant } from '@dxos/invariant';\nimport type * as Keys from '@dxos/keys';\n\nimport type * as RelationModule from './Relation';\n\n//\n// Kind\n//\n\nexport const KindId: unique symbol = EchoSchema.EntityKindId as any;\nexport type KindId = typeof KindId;\n\nexport const Kind = EchoSchema.EntityKind;\n\n/**\n * Assigns a kind to an Object or Relation instance.\n */\n// NOTE: Needed to make `isRelation` and `isObject` checks work.\nexport interface OfKind<Kind extends EchoSchema.EntityKind> {\n readonly id: Keys.ObjectId;\n readonly [KindId]: Kind;\n}\n\n/**\n * Base ECHO schema type.\n */\nexport type Schema = EchoSchema.EchoSchema;\n\n/**\n * Returns all properties of an object or relation except for the id and kind.\n */\nexport type Properties<T = any> = Omit<T, 'id' | KindId | RelationModule.Source | RelationModule.Target>;\n\n//\n// Obj\n//\n\ninterface ObjJsonProps {\n id: string;\n}\n\n/**\n * Return type of the `Obj` schema constructor.\n *\n * This typedef avoids `TS4023` error (name from external module cannot be used named).\n * See Effect's note on interface types.\n */\nexport interface obj<Self extends Schema.Schema.Any>\n extends EchoSchema.TypeMeta,\n Schema.AnnotableClass<\n obj<Self>,\n OfKind<EchoSchema.EntityKind.Object> & ToMutable<Schema.Schema.Type<Self>>,\n Simplify<ObjJsonProps & ToMutable<Schema.Schema.Encoded<Self>>>,\n Schema.Schema.Context<Self>\n > {}\n\n/**\n * Object schema.\n */\nexport const Obj: {\n (opts: EchoSchema.TypeMeta): <Self extends Schema.Schema.Any>(self: Self) => obj<Self>;\n} = EchoSchema.EchoObject as any;\n\n/**\n * Object schema type definitions.\n */\nexport declare namespace Obj {\n /**\n * Type that represents an arbitrary schema type of an object.\n * NOTE: This is not an instance type.\n */\n // TODO(dmaretskyi): If schema was covariant, we could specify props in here, like `id: ObjectId`.\n // TODO(burdon): This erases the ECHO type info (e.g., id, typename).\n export type Any = Schema.Schema.AnyNoContext;\n}\n\n//\n// Expando\n//\n\n// TODO(burdon): We're using Expando in many places as a base type.\nexport interface Expando extends OfKind<EchoSchema.EntityKind.Object> {\n [key: string]: any;\n}\n\ntype ExpandoEncoded = Simplify<ObjJsonProps & { [key: string]: any }>;\n\nexport const Expando: Schema.Schema<Expando, ExpandoEncoded, never> = EchoSchema.Expando as any;\n\n//\n// Relation\n//\n\ninterface RelationJsonProps {\n id: string;\n [EchoSchema.ATTR_RELATION_SOURCE]: string;\n [EchoSchema.ATTR_RELATION_TARGET]: string;\n}\n\n/**\n * Return type of the `Relation` schema constructor.\n *\n * This typedef avoids `TS4023` error (name from external module cannot be used named).\n * See Effect's note on interface types.\n */\nexport interface relation<\n Self extends Schema.Schema.Any,\n SourceSchema extends Schema.Schema.Any,\n TargetSchema extends Schema.Schema.Any,\n> extends EchoSchema.TypeMeta,\n Schema.AnnotableClass<\n relation<Self, SourceSchema, TargetSchema>,\n OfKind<EchoSchema.EntityKind.Relation> &\n Relation.Endpoints<Schema.Schema.Type<SourceSchema>, Schema.Schema.Type<TargetSchema>> &\n ToMutable<Schema.Schema.Type<Self>>,\n Simplify<RelationJsonProps & ToMutable<Schema.Schema.Encoded<Self>>>,\n Schema.Schema.Context<Self>\n > {}\n\n/**\n * Relation schema.\n */\n// TODO(dmaretskyi): I have to redefine the type here so that the definition uses symbols from @dxos/echo/Relation.\nexport const Relation: {\n <Source extends Schema.Schema.AnyNoContext, Target extends Schema.Schema.AnyNoContext>(\n opts: EchoSchema.EchoRelationOptions<Source, Target>,\n ): <Self extends Schema.Schema.Any>(self: Self) => relation<Self, Source, Target>;\n} = EchoSchema.EchoRelation as any;\n\n/**\n * Relation schema type definitions.\n */\nexport namespace Relation {\n /**\n * Type that represents an arbitrary schema type of a relation.\n * NOTE: This is not an instance type.\n */\n // TODO(dmaretskyi): If schema was covariant, we could specify props in here, like `id: ObjectId`.\n export type Any = Schema.Schema.AnyNoContext;\n\n /**\n * Get relation source type.\n */\n export type Source<A> = A extends Relation.Endpoints<infer S, infer _T> ? S : never;\n\n /**\n * Get relation target type.\n */\n export type Target<A> = A extends Relation.Endpoints<infer _S, infer T> ? T : never;\n\n export type Endpoints<Source, Target> = {\n [RelationModule.Source]: Source;\n [RelationModule.Target]: Target;\n };\n}\n\n//\n// Ref\n//\n\n/**\n * Return type of the `Ref` schema constructor.\n *\n * This typedef avoids `TS4023` error (name from external module cannot be used named).\n * See Effect's note on interface types.\n */\nexport interface ref<TargetSchema extends Schema.Schema.Any>\n extends EchoSchema.Ref$<Schema.Schema.Type<TargetSchema>> {}\n\n/**\n * Ref schema.\n */\nexport const Ref: <S extends Obj.Any>(schema: S) => ref<S> = EchoSchema.Ref;\n\nexport interface Ref<T> extends Schema.SchemaClass<EchoSchema.Ref<T>, EncodedReference> {}\n\n// TODO(buurdon): Move to Ref?\nexport namespace Ref {\n /**\n * Type that represents an arbitrary schema type of a reference.\n * NOTE: This is not an instance type.\n */\n export type Any = Schema.Schema<EchoSchema.Ref<any>, EncodedReference>;\n}\n\n/**\n * Gets the full DXN of the schema.\n * Will include the version if it's a `type` DXN.\n * @example \"dxn:example.com/type/Person:0.1.0\"\n * @example \"dxn:echo:SSSSSSSSSS:XXXXXXXXXXXXX\"\n */\nexport const getDXN = (schema: Obj.Any | Relation.Any): Keys.DXN | undefined => {\n return EchoSchema.getSchemaDXN(schema);\n};\n\n/**\n * @param schema - Schema to get the typename from.\n * @returns The typename of the schema. Example: `example.com/type/Person`.\n */\nexport const getTypename = (schema: Obj.Any | Relation.Any): string => {\n const typename = EchoSchema.getSchemaTypename(schema);\n invariant(typeof typename === 'string' && !typename.startsWith('dxn:'), 'Invalid typename');\n return typename;\n};\n\n/**\n * Gets the version of the schema.\n * @example 0.1.0\n */\nexport const getVersion = (schema: Obj.Any | Relation.Any): string => {\n const version = EchoSchema.getSchemaVersion(schema);\n invariant(typeof version === 'string' && version.match(/^\\d+\\.\\d+\\.\\d+$/), 'Invalid version');\n return version;\n};\n\n/**\n * @returns True if the schema is mutable.\n */\nexport const isMutable = EchoSchema.isMutable;\n\n/**\n * ECHO type metadata.\n */\nexport type Meta = EchoSchema.TypeAnnotation;\n\n/**\n * Gets the meta data of the schema.\n */\nexport const getMeta = (schema: Obj.Any | Relation.Any): Meta | undefined => {\n return EchoSchema.getTypeAnnotation(schema);\n};\n\n// TODO(dmaretskyi): Remove re-exports.\nexport { SpaceId, ObjectId, DXN } from '@dxos/keys';\n\nexport { Format, JsonSchemaType as JsonSchema, toEffectSchema, toJsonSchema } from '@dxos/echo-schema';\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport * as EchoSchema from '@dxos/echo-schema';\n\nimport type * as Obj from './Obj';\n\nexport type Ref<T> = EchoSchema.Ref<T>;\nexport type Any = EchoSchema.Ref<Obj.Any>;\n\nexport const Array = EchoSchema.RefArray;\n\n/**\n * Extract reference target.\n */\nexport type Target<R extends Any> = R extends EchoSchema.Ref<infer T> ? T : never;\n\n/**\n * Reference resolver.\n */\nexport type Resolver = EchoSchema.RefResolver;\n\nexport const isRef: (value: unknown) => value is Any = EchoSchema.Ref.isRef;\n\nexport const make = EchoSchema.Ref.make;\n\n// TODO(dmaretskyi): Consider just allowing `make` to accept DXN.\nexport const fromDXN = EchoSchema.Ref.fromDXN;\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { Schema } from 'effect';\n\nimport { raise } from '@dxos/debug';\nimport * as EchoSchema from '@dxos/echo-schema';\nimport { assertArgument, invariant } from '@dxos/invariant';\nimport { DXN } from '@dxos/keys';\nimport { type Live, live } from '@dxos/live-object';\nimport { assumeType } from '@dxos/util';\n\nimport * as Obj from './Obj';\nimport * as Type from './Type';\n\n/**\n * NOTE: Don't export: Relation.Relation and Relation.Any form the public API.\n */\ninterface BaseRelation<Source, Target>\n extends EchoSchema.HasId,\n Type.Relation.Endpoints<Source, Target>,\n Type.OfKind<EchoSchema.EntityKind.Relation> {}\n\n/**\n * Relation type with specific properties.\n */\nexport type Relation<Source extends Obj.Any, Target extends Obj.Any, Props> = BaseRelation<Source, Target> & Props;\n\n/**\n * Base type for all ECHO relations.\n */\nexport interface Any extends BaseRelation<Obj.Any, Obj.Any> {}\n\nexport const Any = Schema.Struct({}).pipe(\n Type.Relation({\n typename: 'dxos.org/types/Any',\n version: '0.1.0',\n source: Obj.Any,\n target: Obj.Any,\n }),\n);\n\n// TODO(dmaretskyi): Has to be `unique symbol`.\nexport const Source: unique symbol = EchoSchema.RelationSourceId as any;\nexport type Source = typeof Source;\nexport const Target: unique symbol = EchoSchema.RelationTargetId as any;\nexport type Target = typeof Target;\n\ntype MakeProps<T extends Any> = {\n id?: EchoSchema.ObjectId;\n [Source]: T[Source];\n [Target]: T[Target];\n} & Type.Properties<T>;\n\n/**\n * Creates new relation.\n * @param schema - Relation schema.\n * @param props - Relation properties. Endpoints are passed as [Relation.Source] and [Relation.Target] keys.\n * @param meta - Relation metadata.\n * @returns\n */\n// NOTE: Writing the definition this way (with generic over schema) makes typescript perfer to infer the type from the first param (this schema) rather than the second param (the props).\n// TODO(dmaretskyi): Move meta into props.\nexport const make = <S extends Type.Relation.Any>(\n schema: S,\n props: NoInfer<MakeProps<Schema.Schema.Type<S>>>,\n meta?: EchoSchema.ObjectMeta,\n): Live<Schema.Schema.Type<S> & Type.OfKind<EchoSchema.EntityKind.Relation>> => {\n assertArgument(\n EchoSchema.getTypeAnnotation(schema)?.kind === EchoSchema.EntityKind.Relation,\n 'schema',\n 'Expected a relation schema',\n );\n\n if (props[EchoSchema.MetaId] != null) {\n meta = props[EchoSchema.MetaId] as any;\n delete props[EchoSchema.MetaId];\n }\n\n const sourceDXN = EchoSchema.getObjectDXN(props[Source]) ?? raise(new Error('Unresolved relation source'));\n const targetDXN = EchoSchema.getObjectDXN(props[Target]) ?? raise(new Error('Unresolved relation target'));\n (props as any)[EchoSchema.RelationSourceDXNId] = sourceDXN;\n (props as any)[EchoSchema.RelationTargetDXNId] = targetDXN;\n\n return live<Schema.Schema.Type<S>>(schema, props as any, meta);\n};\n\nexport const isRelation = (value: unknown): value is Any => {\n if (typeof value !== 'object' || value === null) {\n return false;\n }\n if (EchoSchema.ATTR_RELATION_SOURCE in value || EchoSchema.ATTR_RELATION_TARGET in value) {\n return true;\n }\n\n const kind = (value as any)[EchoSchema.EntityKindId];\n return kind === EchoSchema.EntityKind.Relation;\n};\n\n/**\n * @returns Relation source DXN.\n * @throws If the object is not a relation.\n */\nexport const getSourceDXN = (value: Any): DXN => {\n assertArgument(isRelation(value), 'Expected a relation');\n assumeType<EchoSchema.InternalObjectProps>(value);\n const dxn = (value as EchoSchema.InternalObjectProps)[EchoSchema.RelationSourceDXNId];\n invariant(dxn instanceof DXN);\n return dxn;\n};\n\n/**\n * @returns Relation target DXN.\n * @throws If the object is not a relation.\n */\nexport const getTargetDXN = (value: Any): DXN => {\n assertArgument(isRelation(value), 'Expected a relation');\n assumeType<EchoSchema.InternalObjectProps>(value);\n const dxn = (value as EchoSchema.InternalObjectProps)[EchoSchema.RelationTargetDXNId];\n invariant(dxn instanceof DXN);\n return dxn;\n};\n\n/**\n * @returns Relation source.\n * @throws If the object is not a relation.\n */\nexport const getSource = <T extends Any>(relation: T): Type.Relation.Source<T> => {\n assertArgument(isRelation(relation), 'Expected a relation');\n assumeType<EchoSchema.InternalObjectProps>(relation);\n const obj = (relation as EchoSchema.InternalObjectProps)[EchoSchema.RelationSourceId];\n invariant(obj !== undefined, `Invalid source: ${relation.id}`);\n return obj as Type.Relation.Source<T>;\n};\n\n/**\n * @returns Relation target.\n * @throws If the object is not a relation.\n */\nexport const getTarget = <T extends Any>(relation: T): Type.Relation.Target<T> => {\n assertArgument(isRelation(relation), 'Expected a relation');\n assumeType<EchoSchema.InternalObjectProps>(relation);\n const obj = (relation as EchoSchema.InternalObjectProps)[EchoSchema.RelationTargetId];\n invariant(obj !== undefined, `Invalid target: ${relation.id}`);\n return obj as Type.Relation.Target<T>;\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nexport * from './errors';\n\nexport * as Key from './Key';\nexport * as Obj from './Obj';\nexport * as Ref from './Ref';\nexport * as Relation from './Relation';\nexport * as Type from './Type';\n\nexport { DXN } from '@dxos/keys';\nexport { Filter, Order, Query } from './query';\nexport { QueryAST } from '@dxos/echo-protocol';\nexport { type Live } from '@dxos/live-object';\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { Match, Schema } from 'effect';\nimport type { NonEmptyArray } from 'effect/Array';\nimport type { Simplify } from 'effect/Schema';\n\nimport { raise } from '@dxos/debug';\nimport { type ForeignKey, type QueryAST } from '@dxos/echo-protocol';\nimport { getTypeReference } from '@dxos/echo-schema';\nimport { assertArgument } from '@dxos/invariant';\nimport { DXN, ObjectId } from '@dxos/keys';\n\nimport * as Ref from '../Ref';\nimport type * as Type from '../Type';\n\n// TODO(dmaretskyi): Split up into interfaces for objects and relations so they can have separate verbs.\n// TODO(dmaretskyi): Undirected relation traversals.\n// TODO(wittjosiah): Make Filter & Query pipeable.\n\nexport interface Order<T> {\n // TODO(dmaretskyi): See new effect-schema approach to variance.\n '~Order': { value: T };\n\n ast: QueryAST.Order;\n}\n\nclass OrderClass implements Order<any> {\n private static variance: Order<any>['~Order'] = {} as Order<any>['~Order'];\n\n static is(value: unknown): value is Order<any> {\n return typeof value === 'object' && value !== null && '~Order' in value;\n }\n\n constructor(public readonly ast: QueryAST.Order) {}\n\n '~Order' = OrderClass.variance;\n}\n\nexport namespace Order {\n export const natural: Order<any> = new OrderClass({ kind: 'natural' });\n export const property = <T>(property: keyof T & string, direction: QueryAST.OrderDirection): Order<T> =>\n new OrderClass({\n kind: 'property',\n property,\n direction,\n });\n}\n\nexport interface Query<T> {\n // TODO(dmaretskyi): See new effect-schema approach to variance.\n '~Query': { value: T };\n\n ast: QueryAST.Query;\n\n /**\n * Filter the current selection based on a filter.\n * @param filter - Filter to select the objects.\n * @returns Query for the selected objects.\n */\n select(filter: Filter<T>): Query<T>;\n select(props: Filter.Props<T>): Query<T>;\n\n /**\n * Traverse an outgoing reference.\n * @param key - Property path inside T that is a reference or optional reference.\n * @returns Query for the target of the reference.\n */\n reference<K extends RefPropKey<T>>(\n key: K,\n ): Query<\n T[K] extends Ref.Any\n ? Ref.Target<T[K]>\n : T[K] extends Ref.Any | undefined\n ? Ref.Target<Exclude<T[K], undefined>>\n : never\n >;\n\n /**\n * Find objects referencing this object.\n * @param target - Schema of the referencing object.\n * @param key - Property path inside the referencing object that is a reference.\n * @returns Query for the referencing objects.\n */\n // TODO(dmaretskyi): any way to enforce `Ref.Target<Schema.Schema.Type<S>[key]> == T`?\n // TODO(dmaretskyi): Ability to go through arrays of references.\n referencedBy<S extends Schema.Schema.All>(\n target: S,\n key: RefPropKey<Schema.Schema.Type<S>>,\n ): Query<Schema.Schema.Type<S>>;\n\n /**\n * Find relations where this object is the source.\n * @returns Query for the relation objects.\n * @param relation - Schema of the relation.\n * @param predicates - Predicates to filter the relation objects.\n */\n sourceOf<S extends Schema.Schema.All>(\n relation: S,\n predicates?: Filter.Props<Schema.Schema.Type<S>>,\n ): Query<Schema.Schema.Type<S>>;\n\n /**\n * Find relations where this object is the target.\n * @returns Query for the relation objects.\n * @param relation - Schema of the relation.\n * @param predicates - Predicates to filter the relation objects.\n */\n targetOf<S extends Schema.Schema.All>(\n relation: S,\n predicates?: Filter.Props<Schema.Schema.Type<S>>,\n ): Query<Schema.Schema.Type<S>>;\n\n /**\n * For a query for relations, get the source objects.\n * @returns Query for the source objects.\n */\n source(): Query<Type.Relation.Source<T>>;\n\n /**\n * For a query for relations, get the target objects.\n * @returns Query for the target objects.\n */\n target(): Query<Type.Relation.Target<T>>;\n\n /**\n * Order the query results.\n * Orders are specified in priority order. The first order will be applied first, etc.\n * @param order - Order to sort the results.\n * @returns Query for the ordered results.\n */\n orderBy(...order: NonEmptyArray<Order<T>>): Query<T>;\n\n /**\n * Add options to a query.\n */\n options(options: QueryAST.QueryOptions): Query<T>;\n}\n\ninterface QueryAPI {\n is(value: unknown): value is Query.Any;\n\n /** Construct a query from an ast. */\n fromAst(ast: QueryAST.Query): Query<any>;\n\n /**\n * Select objects based on a filter.\n * @param filter - Filter to select the objects.\n * @returns Query for the selected objects.\n */\n select<F extends Filter.Any>(filter: F): Query<Filter.Type<F>>;\n\n /**\n * Query for objects of a given schema.\n * @param schema - Schema of the objects.\n * @param predicates - Predicates to filter the objects.\n * @returns Query for the objects.\n *\n * Shorthand for: `Query.select(Filter.type(schema, predicates))`.\n */\n type<S extends Schema.Schema.All>(\n schema: S,\n predicates?: Filter.Props<Schema.Schema.Type<S>>,\n ): Query<Schema.Schema.Type<S>>;\n\n /**\n * Combine results of multiple queries.\n * @param queries - Queries to combine.\n * @returns Query for the combined results.\n */\n // TODO(dmaretskyi): Rename to `combine` or `union`.\n all<T>(...queries: Query<T>[]): Query<T>;\n\n /**\n * Subtract one query from another.\n * @param source - Query to subtract from.\n * @param exclude - Query to subtract.\n * @returns Query for the results of the source query minus the results of the exclude query.\n */\n without<T>(source: Query<T>, exclude: Query<T>): Query<T>;\n}\n\nexport declare namespace Query {\n export type Any = Query<any>;\n\n export type Type<Q extends Any> = Q extends Query<infer T> ? T : never;\n\n export type TextSearchOptions = {\n // TODO(dmaretskyi): Hybrid search.\n type?: 'full-text' | 'vector';\n };\n}\n\nexport interface Filter<T> {\n // TODO(dmaretskyi): See new effect-schema approach to variance.\n '~Filter': { value: T };\n\n ast: QueryAST.Filter;\n}\n\ntype Intersection<Types extends readonly unknown[]> = Types extends [infer First, ...infer Rest]\n ? First & Intersection<Rest>\n : unknown;\n\ninterface FilterAPI {\n is(value: unknown): value is Filter<any>;\n\n /**\n * Filter that matches all objects.\n */\n everything(): Filter<any>;\n\n /**\n * Filter that matches no objects.\n */\n nothing(): Filter<any>;\n\n /**\n * Filter by object IDs.\n */\n // TODO(dmaretskyi): Rename to `Filter.id`.\n ids(...id: ObjectId[]): Filter<any>;\n\n /**\n * Filter by type.\n */\n type<S extends Schema.Schema.All>(\n schema: S,\n props?: Filter.Props<Schema.Schema.Type<S>>,\n ): Filter<Schema.Schema.Type<S>>;\n\n /**\n * Filter by non-qualified typename.\n */\n typename(typename: string): Filter<any>;\n\n /**\n * Filter by fully qualified type DXN.\n */\n typeDXN(dxn: DXN): Filter<any>;\n\n /**\n * Filter by tag.\n */\n tag(tag: string): Filter<any>;\n\n /**\n * Filter by properties.\n */\n props<T>(props: Filter.Props<T>): Filter<T>;\n\n /**\n * Full-text or vector search.\n */\n 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?: Query.TextSearchOptions,\n ): Filter<any>;\n\n /**\n * Filter by foreign keys.\n */\n foreignKeys<S extends Schema.Schema.All>(schema: S, keys: ForeignKey[]): Filter<Schema.Schema.Type<S>>;\n\n /**\n * Predicate for property to be equal to the provided value.\n */\n eq<T>(value: T): Filter<T>;\n\n /**\n * Predicate for property to be not equal to the provided value.\n */\n neq<T>(value: T): Filter<T>;\n\n /**\n * Predicate for property to be greater than the provided value.\n */\n gt<T>(value: T): Filter<T>;\n\n /**\n * Predicate for property to be greater than the provided value.\n */\n gt<T>(value: T): Filter<T>;\n\n /**\n * Predicate for property to be greater than or equal to the provided value.\n */\n gte<T>(value: T): Filter<T>;\n\n /**\n * Predicate for property to be less than the provided value.\n */\n lt<T>(value: T): Filter<T>;\n\n /**\n * Predicate for property to be less than or equal to the provided value.\n */\n lte<T>(value: T): Filter<T>;\n\n /**\n * Predicate for property to be in the provided array.\n * @param values - Values to check against.\n */\n in<T>(...values: T[]): Filter<T>;\n\n /**\n * Predicate for an array property to contain the provided value.\n * @param value - Value to check against.\n */\n contains<T>(value: T): Filter<T[]>;\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 */\n between<T>(from: T, to: T): Filter<T>;\n\n /**\n * Negate the filter.\n */\n not<F extends Filter.Any>(filter: F): Filter<Filter.Type<F>>;\n\n /**\n * Combine filters with a logical AND.\n */\n and<FS extends Filter.Any[]>(...filters: FS): Filter<Filter.And<FS>>;\n\n /**\n * Combine filters with a logical OR.\n */\n or<FS extends Filter.Any[]>(...filters: FS): Filter<Filter.Or<FS>>;\n\n // TODO(dmaretskyi): Add `Filter.match` to support pattern matching on string props.\n}\n\nexport declare namespace Filter {\n 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\n type Any = Filter<any>;\n\n type Type<F extends Any> = F extends Filter<infer T> ? T : never;\n\n type And<FS extends readonly Any[]> = Simplify<Intersection<{ [K in keyof FS]: Type<FS[K]> }>>;\n\n type Or<FS extends readonly Any[]> = Simplify<{ [K in keyof FS]: Type<FS[K]> }[number]>;\n}\n\nclass FilterClass implements Filter<any> {\n private static variance: Filter<any>['~Filter'] = {} as Filter<any>['~Filter'];\n\n static is(value: unknown): value is Filter<any> {\n return typeof value === 'object' && value !== null && '~Filter' in value;\n }\n\n static everything(): FilterClass {\n return new FilterClass({\n type: 'object',\n typename: null,\n props: {},\n });\n }\n\n static nothing(): FilterClass {\n return new FilterClass({\n type: 'not',\n filter: {\n type: 'object',\n typename: null,\n props: {},\n },\n });\n }\n\n static relation() {\n return new FilterClass({\n type: 'object',\n typename: null,\n props: {},\n });\n }\n\n static ids(...ids: ObjectId[]): Filter<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 Filter.nothing();\n }\n\n return new FilterClass({\n type: 'object',\n typename: null,\n id: ids,\n props: {},\n });\n }\n\n static type<S extends Schema.Schema.All>(\n schema: S,\n props?: Filter.Props<Schema.Schema.Type<S>>,\n ): Filter<Schema.Schema.Type<S>> {\n const dxn = getTypeReference(schema)?.toDXN() ?? raise(new TypeError('Schema has no DXN'));\n return new FilterClass({\n type: 'object',\n typename: dxn.toString(),\n ...propsFilterToAst(props ?? {}),\n });\n }\n\n static typename(typename: string): Filter<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 static typeDXN(dxn: DXN): Filter<any> {\n return new FilterClass({\n type: 'object',\n typename: dxn.toString(),\n props: {},\n });\n }\n\n static tag(tag: string): Filter<any> {\n return new FilterClass({\n type: 'tag',\n tag,\n });\n }\n\n static props<T>(props: Filter.Props<T>): Filter<T> {\n return new FilterClass({\n type: 'object',\n typename: null,\n ...propsFilterToAst(props),\n });\n }\n\n static text(text: string, options?: Query.TextSearchOptions): Filter<any> {\n return new FilterClass({\n type: 'text-search',\n text,\n searchKind: options?.type,\n });\n }\n\n static foreignKeys<S extends Schema.Schema.All>(schema: S, keys: ForeignKey[]): Filter<Schema.Schema.Type<S>> {\n const dxn = getTypeReference(schema)?.toDXN() ?? raise(new TypeError('Schema has no DXN'));\n return new FilterClass({\n type: 'object',\n typename: dxn.toString(),\n props: {},\n foreignKeys: keys,\n });\n }\n\n static eq<T>(value: T): Filter<T> {\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 static neq<T>(value: T): Filter<T> {\n return new FilterClass({\n type: 'compare',\n operator: 'neq',\n value,\n });\n }\n\n static gt<T>(value: T): Filter<T> {\n return new FilterClass({\n type: 'compare',\n operator: 'gt',\n value,\n });\n }\n\n static gte<T>(value: T): Filter<T> {\n return new FilterClass({\n type: 'compare',\n operator: 'gte',\n value,\n });\n }\n\n static lt<T>(value: T): Filter<T> {\n return new FilterClass({\n type: 'compare',\n operator: 'lt',\n value,\n });\n }\n\n static lte<T>(value: T): Filter<T> {\n return new FilterClass({\n type: 'compare',\n operator: 'lte',\n value,\n });\n }\n\n static in<T>(...values: T[]): Filter<T> {\n return new FilterClass({\n type: 'in',\n values,\n });\n }\n\n static contains<T>(value: T): Filter<T[]> {\n return new FilterClass({\n type: 'contains',\n value,\n });\n }\n\n static between<T>(from: T, to: T): Filter<T> {\n return new FilterClass({\n type: 'range',\n from,\n to,\n });\n }\n\n static not<F extends Filter.Any>(filter: F): Filter<Filter.Type<F>> {\n return new FilterClass({\n type: 'not',\n filter: filter.ast,\n });\n }\n\n static and<T>(...filters: Filter<T>[]): Filter<T> {\n return new FilterClass({\n type: 'and',\n filters: filters.map((f) => f.ast),\n });\n }\n\n static or<T>(...filters: Filter<T>[]): Filter<T> {\n return new FilterClass({\n type: 'or',\n filters: filters.map((f) => f.ast),\n });\n }\n\n private constructor(public readonly ast: QueryAST.Filter) {}\n\n '~Filter' = FilterClass.variance;\n}\n\nexport const Filter: FilterAPI = FilterClass;\n\n/**\n * All property paths inside T that are references.\n */\n// TODO(dmaretskyi): Filter only properties that are references (or optional references, or unions that include references).\ntype RefPropKey<T> = keyof T & string;\n\nconst propsFilterToAst = (predicates: Filter.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(Filter.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) => Filter.eq(value).ast),\n );\n};\n\nclass QueryClass implements Query<any> {\n private static variance: Query<any>['~Query'] = {} as Query<any>['~Query'];\n\n static is(value: unknown): value is Query<any> {\n return typeof value === 'object' && value !== null && '~Query' in value;\n }\n\n static fromAst(ast: QueryAST.Query): Query<any> {\n return new QueryClass(ast);\n }\n\n static select<F extends Filter.Any>(filter: F): Query<Filter.Type<F>> {\n return new QueryClass({\n type: 'select',\n filter: filter.ast,\n });\n }\n\n static type(schema: Schema.Schema.All, predicates?: Filter.Props<unknown>): Query<any> {\n return new QueryClass({\n type: 'select',\n filter: FilterClass.type(schema, predicates).ast,\n });\n }\n\n static all(...queries: Query<any>[]): Query<any> {\n if (queries.length === 0) {\n throw new TypeError(\n 'Query.all combines results of multiple queries, to query all objects use Query.select(Filter.everything())',\n );\n }\n return new QueryClass({\n type: 'union',\n queries: queries.map((q) => q.ast),\n });\n }\n\n static without<T>(source: Query<T>, exclude: Query<T>): Query<T> {\n return new QueryClass({\n type: 'set-difference',\n source: source.ast,\n exclude: exclude.ast,\n });\n }\n\n constructor(public readonly ast: QueryAST.Query) {}\n\n '~Query' = QueryClass.variance;\n\n select(filter: Filter<any> | Filter.Props<any>): Query<any> {\n if (Filter.is(filter)) {\n return new QueryClass({\n type: 'filter',\n selection: this.ast,\n filter: filter.ast,\n });\n } else {\n return new QueryClass({\n type: 'filter',\n selection: this.ast,\n filter: FilterClass.props(filter).ast,\n });\n }\n }\n\n reference(key: string): Query<any> {\n return new QueryClass({\n type: 'reference-traversal',\n anchor: this.ast,\n property: key,\n });\n }\n\n referencedBy(target: Schema.Schema.All, key: string): Query<any> {\n const dxn = getTypeReference(target)?.toDXN() ?? raise(new TypeError('Target schema has no DXN'));\n return new QueryClass({\n type: 'incoming-references',\n anchor: this.ast,\n property: key,\n typename: dxn.toString(),\n });\n }\n\n sourceOf(relation: Schema.Schema.All, predicates?: Filter.Props<unknown> | undefined): Query<any> {\n return new QueryClass({\n type: 'relation',\n anchor: this.ast,\n direction: 'outgoing',\n filter: FilterClass.type(relation, predicates).ast,\n });\n }\n\n targetOf(relation: Schema.Schema.All, predicates?: Filter.Props<unknown> | undefined): Query<any> {\n return new QueryClass({\n type: 'relation',\n anchor: this.ast,\n direction: 'incoming',\n filter: FilterClass.type(relation, predicates).ast,\n });\n }\n\n source(): Query<any> {\n return new QueryClass({\n type: 'relation-traversal',\n anchor: this.ast,\n direction: 'source',\n });\n }\n\n target(): Query<any> {\n return new QueryClass({\n type: 'relation-traversal',\n anchor: this.ast,\n direction: 'target',\n });\n }\n\n orderBy(...order: Order<any>[]): Query<any> {\n return new QueryClass({\n type: 'order',\n query: this.ast,\n order: order.map((o) => o.ast),\n });\n }\n\n options(options: QueryAST.QueryOptions): Query<any> {\n return new QueryClass({\n type: 'options',\n query: this.ast,\n options,\n });\n }\n}\n\nexport const Query: QueryAPI = QueryClass;\n"],
5
- "mappings": "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",
6
- "names": ["BaseError", "SchemaNotFoundError", "BaseError", "extend", "schema", "options", "context", "ObjectNotFoundError", "dxn", "SpaceId", "ObjectId", "VersionTypeId", "getDXN", "getLabel", "getMeta", "getSchema", "getSnapshot", "getTypename", "isDeleted", "setLabel", "Schema", "dual", "EchoSchema", "assertArgument", "invariant", "LiveObject", "live", "assumeType", "deepMapValues", "Expando", "ObjectId", "Ref", "SpaceId", "isMutable", "EchoSchema", "invariant", "DXN", "Format", "JsonSchema", "toEffectSchema", "toJsonSchema", "KindId", "EntityKindId", "Kind", "EntityKind", "Obj", "EchoObject", "Relation", "EchoRelation", "getDXN", "schema", "getSchemaDXN", "getTypename", "typename", "getSchemaTypename", "startsWith", "getVersion", "version", "getSchemaVersion", "match", "getMeta", "getTypeAnnotation", "Any", "Schema", "Struct", "pipe", "Obj", "typename", "version", "Meta", "MetaId", "make", "schema", "props", "meta", "assertArgument", "getTypeAnnotation", "kind", "EntityKind", "Object", "live", "isObject", "obj", "assumeType", "EntityKindId", "instanceOf", "args", "length", "isInstanceOf", "getSchema", "getDXN", "isSchema", "dxn", "getObjectDXN", "invariant", "getTypeDXN", "getType", "getTypename", "asTypeDXN", "type", "getSchemaTypename", "getMeta", "getKeys", "dual", "source", "keys", "filter", "key", "deleteKeys", "i", "splice", "isDeleted", "deleted", "getLabel", "setLabel", "label", "EchoSchema", "compare", "a", "b", "localeCompare", "sortByLabel", "sortByTypename", "sort", "comparators", "comparator", "result", "toJSON", "objectToJSON", "fromJSON", "objectFromJSON", "getSnapshot", "clone", "opts", "id", "data", "deepMapValues", "value", "recurse", "Ref", "isRef", "retainId", "VersionTypeId", "unversioned", "versioned", "isVersion", "ObjectVersionId", "undefined", "versionValid", "compareVersions", "version1", "version2", "automergeHeads", "some", "head", "includes", "encodeVersion", "JSON", "stringify", "decodeVersion", "parsed", "parse", "Array", "make", "EchoSchema", "Array", "RefArray", "isRef", "Ref", "make", "fromDXN", "Any", "make", "Schema", "raise", "EchoSchema", "assertArgument", "invariant", "DXN", "live", "assumeType", "Any", "Schema", "Struct", "pipe", "Relation", "typename", "version", "source", "target", "Source", "RelationSourceId", "Target", "RelationTargetId", "make", "schema", "props", "meta", "assertArgument", "getTypeAnnotation", "kind", "EntityKind", "MetaId", "sourceDXN", "getObjectDXN", "raise", "Error", "targetDXN", "RelationSourceDXNId", "RelationTargetDXNId", "live", "isRelation", "value", "ATTR_RELATION_SOURCE", "ATTR_RELATION_TARGET", "EntityKindId", "getSourceDXN", "assumeType", "dxn", "invariant", "DXN", "getTargetDXN", "getSource", "relation", "obj", "undefined", "id", "getTarget", "DXN", "Match", "Schema", "raise", "getTypeReference", "assertArgument", "DXN", "ObjectId", "OrderClass", "is", "value", "ast", "variance", "Order", "natural", "kind", "property", "direction", "FilterClass", "everything", "type", "typename", "props", "nothing", "filter", "relation", "ids", "assertArgument", "every", "id", "ObjectId", "isValid", "length", "Filter", "schema", "dxn", "getTypeReference", "toDXN", "raise", "TypeError", "toString", "propsFilterToAst", "startsWith", "DXN", "fromTypename", "typeDXN", "tag", "text", "options", "searchKind", "foreignKeys", "keys", "eq", "isRef", "operator", "noInline", "encode", "neq", "gt", "gte", "lt", "lte", "in", "values", "contains", "between", "from", "to", "not", "and", "filters", "map", "f", "or", "predicates", "idFilter", "Array", "isArray", "Schema", "pipe", "validateSync", "Object", "fromEntries", "entries", "prop", "_value", "predicate", "processPredicate", "Match", "withReturnType", "when", "_predicate", "Error", "nestedProps", "key", "orElse", "QueryClass", "fromAst", "select", "all", "queries", "q", "without", "source", "exclude", "selection", "reference", "anchor", "referencedBy", "target", "sourceOf", "targetOf", "orderBy", "order", "query", "o", "Query", "QueryAST"]
7
- }