@dxos/echo 0.8.4-main.5ad4a44 → 0.8.4-main.66e292d

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 (343) hide show
  1. package/dist/lib/browser/{chunk-MWLA34S5.mjs → chunk-7GH6RXJ3.mjs} +2513 -2673
  2. package/dist/lib/browser/chunk-7GH6RXJ3.mjs.map +7 -0
  3. package/dist/lib/browser/chunk-E4UTVJNF.mjs +1111 -0
  4. package/dist/lib/browser/chunk-E4UTVJNF.mjs.map +7 -0
  5. package/dist/lib/browser/index.mjs +21 -19
  6. package/dist/lib/browser/internal/index.mjs +55 -45
  7. package/dist/lib/browser/meta.json +1 -1
  8. package/dist/lib/browser/testing/index.mjs +247 -217
  9. package/dist/lib/browser/testing/index.mjs.map +4 -4
  10. package/dist/lib/node-esm/chunk-JE5RXM2I.mjs +1111 -0
  11. package/dist/lib/node-esm/chunk-JE5RXM2I.mjs.map +7 -0
  12. package/dist/lib/node-esm/{chunk-YTNLFBIK.mjs → chunk-M4B6BMD2.mjs} +2513 -2673
  13. package/dist/lib/node-esm/chunk-M4B6BMD2.mjs.map +7 -0
  14. package/dist/lib/node-esm/index.mjs +21 -19
  15. package/dist/lib/node-esm/internal/index.mjs +55 -45
  16. package/dist/lib/node-esm/meta.json +1 -1
  17. package/dist/lib/node-esm/testing/index.mjs +247 -217
  18. package/dist/lib/node-esm/testing/index.mjs.map +4 -4
  19. package/dist/types/src/Annotation.d.ts +2 -0
  20. package/dist/types/src/Annotation.d.ts.map +1 -0
  21. package/dist/types/src/Database.d.ts +137 -0
  22. package/dist/types/src/Database.d.ts.map +1 -0
  23. package/dist/types/src/Entity.d.ts +36 -0
  24. package/dist/types/src/Entity.d.ts.map +1 -0
  25. package/dist/types/src/Format.d.ts +4 -0
  26. package/dist/types/src/Format.d.ts.map +1 -0
  27. package/dist/types/src/JsonSchema.d.ts +9 -0
  28. package/dist/types/src/JsonSchema.d.ts.map +1 -0
  29. package/dist/types/src/Key.d.ts +1 -0
  30. package/dist/types/src/Key.d.ts.map +1 -1
  31. package/dist/types/src/Obj.d.ts +85 -62
  32. package/dist/types/src/Obj.d.ts.map +1 -1
  33. package/dist/types/src/Ref.d.ts +10 -10
  34. package/dist/types/src/Ref.d.ts.map +1 -1
  35. package/dist/types/src/Relation.d.ts +14 -11
  36. package/dist/types/src/Relation.d.ts.map +1 -1
  37. package/dist/types/src/Tag.d.ts +17 -0
  38. package/dist/types/src/Tag.d.ts.map +1 -0
  39. package/dist/types/src/Type.d.ts +39 -49
  40. package/dist/types/src/Type.d.ts.map +1 -1
  41. package/dist/types/src/errors.d.ts +14 -18
  42. package/dist/types/src/errors.d.ts.map +1 -1
  43. package/dist/types/src/index.d.ts +7 -3
  44. package/dist/types/src/index.d.ts.map +1 -1
  45. package/dist/types/src/internal/annotations/annotations.d.ts +174 -0
  46. package/dist/types/src/internal/annotations/annotations.d.ts.map +1 -0
  47. package/dist/types/src/internal/annotations/annotations.test.d.ts.map +1 -0
  48. package/dist/types/src/internal/annotations/index.d.ts +3 -0
  49. package/dist/types/src/internal/annotations/index.d.ts.map +1 -0
  50. package/dist/types/src/internal/annotations/util.d.ts +26 -0
  51. package/dist/types/src/internal/annotations/util.d.ts.map +1 -0
  52. package/dist/types/src/internal/entities/entity.d.ts +10 -0
  53. package/dist/types/src/internal/entities/entity.d.ts.map +1 -0
  54. package/dist/types/src/internal/{object → entities}/expando.d.ts +3 -1
  55. package/dist/types/src/internal/entities/expando.d.ts.map +1 -0
  56. package/dist/types/src/internal/entities/index.d.ts +6 -0
  57. package/dist/types/src/internal/entities/index.d.ts.map +1 -0
  58. package/dist/types/src/internal/entities/model.d.ts +70 -0
  59. package/dist/types/src/internal/entities/model.d.ts.map +1 -0
  60. package/dist/types/src/internal/entities/object.d.ts +11 -0
  61. package/dist/types/src/internal/entities/object.d.ts.map +1 -0
  62. package/dist/types/src/internal/entities/relation.d.ts +55 -0
  63. package/dist/types/src/internal/entities/relation.d.ts.map +1 -0
  64. package/dist/types/src/internal/entities/util.d.ts +2 -0
  65. package/dist/types/src/internal/entities/util.d.ts.map +1 -0
  66. package/dist/types/src/internal/formats/format.d.ts +2 -0
  67. package/dist/types/src/internal/formats/format.d.ts.map +1 -1
  68. package/dist/types/src/internal/formats/types.d.ts +7 -7
  69. package/dist/types/src/internal/formats/types.d.ts.map +1 -1
  70. package/dist/types/src/internal/index.d.ts +6 -10
  71. package/dist/types/src/internal/index.d.ts.map +1 -1
  72. package/dist/types/src/internal/json-schema/annotations.d.ts.map +1 -0
  73. package/dist/types/src/internal/json-schema/effect-schema.test.d.ts.map +1 -0
  74. package/dist/types/src/internal/json-schema/index.d.ts +2 -0
  75. package/dist/types/src/internal/json-schema/index.d.ts.map +1 -1
  76. package/dist/types/src/internal/json-schema/json-schema-type.d.ts.map +1 -1
  77. package/dist/types/src/internal/{json → json-schema}/json-schema.d.ts +2 -5
  78. package/dist/types/src/internal/json-schema/json-schema.d.ts.map +1 -0
  79. package/dist/types/src/internal/json-schema/json-schema.test.d.ts.map +1 -0
  80. package/dist/types/src/internal/object/common.d.ts.map +1 -1
  81. package/dist/types/src/internal/object/{create.d.ts → create-object.d.ts} +9 -10
  82. package/dist/types/src/internal/object/create-object.d.ts.map +1 -0
  83. package/dist/types/src/internal/object/create-object.test.d.ts +2 -0
  84. package/dist/types/src/internal/object/create-object.test.d.ts.map +1 -0
  85. package/dist/types/src/internal/object/deleted.d.ts +2 -2
  86. package/dist/types/src/internal/object/deleted.d.ts.map +1 -1
  87. package/dist/types/src/internal/object/ids.d.ts.map +1 -1
  88. package/dist/types/src/internal/object/index.d.ts +3 -12
  89. package/dist/types/src/internal/object/index.d.ts.map +1 -1
  90. package/dist/types/src/internal/object/json-serializer.d.ts +1 -2
  91. package/dist/types/src/internal/object/json-serializer.d.ts.map +1 -1
  92. package/dist/types/src/internal/object/schema-validator.d.ts.map +1 -1
  93. package/dist/types/src/internal/object/typed-object.d.ts +1 -1
  94. package/dist/types/src/internal/object/typed-object.d.ts.map +1 -1
  95. package/dist/types/src/internal/proxy/index.d.ts +3 -0
  96. package/dist/types/src/internal/proxy/index.d.ts.map +1 -0
  97. package/dist/types/src/internal/proxy/make-object.d.ts +16 -0
  98. package/dist/types/src/internal/proxy/make-object.d.ts.map +1 -0
  99. package/dist/types/src/internal/proxy/typed-handler.d.ts +1 -1
  100. package/dist/types/src/internal/proxy/typed-handler.d.ts.map +1 -1
  101. package/dist/types/src/internal/ref/ref.d.ts +15 -12
  102. package/dist/types/src/internal/ref/ref.d.ts.map +1 -1
  103. package/dist/types/src/internal/schema/compose.d.ts.map +1 -0
  104. package/dist/types/src/internal/schema/compose.test.d.ts.map +1 -0
  105. package/dist/types/src/internal/schema/echo-schema.d.ts +9 -9
  106. package/dist/types/src/internal/schema/echo-schema.d.ts.map +1 -1
  107. package/dist/types/src/internal/schema/index.d.ts +3 -4
  108. package/dist/types/src/internal/schema/index.d.ts.map +1 -1
  109. package/dist/types/src/internal/schema/manipulation.d.ts.map +1 -1
  110. package/dist/types/src/internal/schema/persistent-schema.d.ts +18 -0
  111. package/dist/types/src/internal/schema/persistent-schema.d.ts.map +1 -0
  112. package/dist/types/src/internal/schema/runtime-schema-registry.d.ts +1 -1
  113. package/dist/types/src/internal/schema/runtime-schema-registry.d.ts.map +1 -1
  114. package/dist/types/src/internal/types/base.d.ts +37 -0
  115. package/dist/types/src/internal/types/base.d.ts.map +1 -0
  116. package/dist/types/src/internal/{ast/entity-kind.d.ts → types/entity.d.ts} +3 -1
  117. package/dist/types/src/internal/types/entity.d.ts.map +1 -0
  118. package/dist/types/src/internal/types/index.d.ts +5 -2
  119. package/dist/types/src/internal/types/index.d.ts.map +1 -1
  120. package/dist/types/src/internal/{object → types}/meta.d.ts +20 -11
  121. package/dist/types/src/internal/types/meta.d.ts.map +1 -0
  122. package/dist/types/src/internal/types/typename.d.ts +13 -0
  123. package/dist/types/src/internal/types/typename.d.ts.map +1 -0
  124. package/dist/types/src/internal/{object → types}/version.d.ts +3 -2
  125. package/dist/types/src/internal/types/version.d.ts.map +1 -0
  126. package/dist/types/src/query/filter.d.ts +167 -0
  127. package/dist/types/src/query/filter.d.ts.map +1 -0
  128. package/dist/types/src/query/index.d.ts +3 -1
  129. package/dist/types/src/query/index.d.ts.map +1 -1
  130. package/dist/types/src/query/order.d.ts +12 -0
  131. package/dist/types/src/query/order.d.ts.map +1 -0
  132. package/dist/types/src/query/query.d.ts +9 -144
  133. package/dist/types/src/query/query.d.ts.map +1 -1
  134. package/dist/types/src/query/testing.d.ts +51 -0
  135. package/dist/types/src/query/testing.d.ts.map +1 -0
  136. package/dist/types/src/{internal/query/query.d.ts → query/types.d.ts} +1 -1
  137. package/dist/types/src/query/types.d.ts.map +1 -0
  138. package/dist/types/src/query/util.d.ts +8 -0
  139. package/dist/types/src/query/util.d.ts.map +1 -0
  140. package/dist/types/src/{test → testing}/api.test.d.ts.map +1 -1
  141. package/dist/types/src/testing/index.d.ts +3 -3
  142. package/dist/types/src/testing/index.d.ts.map +1 -1
  143. package/dist/types/src/testing/test-data.d.ts +18 -0
  144. package/dist/types/src/testing/test-data.d.ts.map +1 -0
  145. package/dist/types/src/testing/test-schema.d.ts +337 -0
  146. package/dist/types/src/testing/test-schema.d.ts.map +1 -0
  147. package/dist/types/src/{internal/testing/utils.d.ts → testing/util.d.ts} +11 -5
  148. package/dist/types/src/testing/util.d.ts.map +1 -0
  149. package/dist/types/tsconfig.tsbuildinfo +1 -1
  150. package/package.json +46 -38
  151. package/src/Annotation.ts +17 -0
  152. package/src/Database.ts +189 -0
  153. package/src/Entity.ts +51 -0
  154. package/src/Format.ts +11 -0
  155. package/src/JsonSchema.ts +16 -0
  156. package/src/Key.ts +3 -0
  157. package/src/Obj.ts +260 -147
  158. package/src/Ref.ts +9 -9
  159. package/src/Relation.ts +58 -44
  160. package/src/Tag.ts +40 -0
  161. package/src/Type.ts +96 -83
  162. package/src/index.ts +10 -4
  163. package/src/internal/README.md +83 -0
  164. package/src/internal/{ast → annotations}/annotations.test.ts +13 -15
  165. package/src/internal/annotations/annotations.ts +463 -0
  166. package/src/internal/annotations/index.ts +6 -0
  167. package/src/internal/annotations/util.ts +70 -0
  168. package/src/internal/entities/entity.ts +109 -0
  169. package/src/internal/{object → entities}/expando.ts +7 -5
  170. package/src/internal/entities/index.ts +9 -0
  171. package/src/internal/entities/model.ts +129 -0
  172. package/src/internal/entities/object.ts +45 -0
  173. package/src/internal/entities/relation.ts +155 -0
  174. package/src/internal/entities/util.ts +33 -0
  175. package/src/internal/formats/date.test.ts +1 -1
  176. package/src/internal/formats/date.ts +5 -5
  177. package/src/internal/formats/format.test.ts +5 -5
  178. package/src/internal/formats/format.ts +3 -0
  179. package/src/internal/formats/number.ts +5 -5
  180. package/src/internal/formats/object.ts +2 -2
  181. package/src/internal/formats/string.ts +9 -9
  182. package/src/internal/formats/types.ts +44 -39
  183. package/src/internal/index.ts +29 -13
  184. package/src/internal/{json → json-schema}/annotations.ts +1 -1
  185. package/src/internal/json-schema/index.ts +2 -0
  186. package/src/internal/json-schema/json-schema-type.ts +4 -3
  187. package/src/internal/{json → json-schema}/json-schema.test.ts +230 -97
  188. package/src/internal/{json → json-schema}/json-schema.ts +67 -87
  189. package/src/internal/object/common.ts +3 -4
  190. package/src/internal/object/{create.test.ts → create-object.test.ts} +31 -33
  191. package/src/internal/object/{create.ts → create-object.ts} +34 -35
  192. package/src/internal/object/deleted.ts +6 -6
  193. package/src/internal/object/ids.ts +1 -1
  194. package/src/internal/object/index.ts +3 -12
  195. package/src/internal/object/inspect.ts +3 -5
  196. package/src/internal/object/json-serializer.test.ts +33 -38
  197. package/src/internal/object/json-serializer.ts +43 -38
  198. package/src/internal/object/schema-validator.ts +3 -2
  199. package/src/internal/object/typed-object.test.ts +1 -1
  200. package/src/internal/object/typed-object.ts +17 -4
  201. package/src/internal/proxy/handler.test.ts +30 -20
  202. package/src/internal/proxy/index.ts +6 -0
  203. package/src/internal/proxy/{reactive-object.ts → make-object.ts} +19 -14
  204. package/src/internal/proxy/schema.test.ts +5 -4
  205. package/src/internal/proxy/typed-handler.test.ts +28 -28
  206. package/src/internal/proxy/typed-handler.ts +11 -6
  207. package/src/internal/proxy/typed-object.test.ts +17 -12
  208. package/src/internal/ref/ref.test.ts +9 -8
  209. package/src/internal/ref/ref.ts +24 -20
  210. package/src/internal/{projection → schema}/compose.test.ts +5 -6
  211. package/src/internal/{projection → schema}/compose.ts +2 -1
  212. package/src/internal/schema/echo-schema.ts +30 -28
  213. package/src/internal/schema/index.ts +3 -4
  214. package/src/internal/schema/manipulation.ts +7 -1
  215. package/src/internal/schema/persistent-schema.ts +28 -0
  216. package/src/internal/schema/runtime-schema-registry.ts +4 -4
  217. package/src/internal/types/base.ts +58 -0
  218. package/src/internal/{ast/entity-kind.ts → types/entity.ts} +8 -0
  219. package/src/internal/types/index.ts +5 -2
  220. package/src/internal/{object → types}/meta.ts +32 -18
  221. package/src/internal/types/typename.ts +45 -0
  222. package/src/internal/types/version.ts +20 -0
  223. package/src/query/filter.ts +455 -0
  224. package/src/query/index.ts +4 -1
  225. package/src/query/order.ts +34 -0
  226. package/src/query/query.test.ts +188 -216
  227. package/src/query/query.ts +24 -505
  228. package/src/query/testing.ts +64 -0
  229. package/src/query/util.ts +25 -0
  230. package/src/testing/api.test.ts +100 -0
  231. package/src/testing/index.ts +3 -3
  232. package/src/testing/test-data.ts +130 -0
  233. package/src/testing/test-schema.ts +213 -0
  234. package/src/{internal/testing/utils.ts → testing/util.ts} +38 -14
  235. package/dist/lib/browser/chunk-MWLA34S5.mjs.map +0 -7
  236. package/dist/lib/browser/chunk-OAZJQHVO.mjs +0 -453
  237. package/dist/lib/browser/chunk-OAZJQHVO.mjs.map +0 -7
  238. package/dist/lib/browser/chunk-ORIE2FMS.mjs +0 -514
  239. package/dist/lib/browser/chunk-ORIE2FMS.mjs.map +0 -7
  240. package/dist/lib/browser/query/index.mjs +0 -23
  241. package/dist/lib/browser/query/index.mjs.map +0 -7
  242. package/dist/lib/node-esm/chunk-AXWVDOP7.mjs +0 -453
  243. package/dist/lib/node-esm/chunk-AXWVDOP7.mjs.map +0 -7
  244. package/dist/lib/node-esm/chunk-L4PBAJDP.mjs +0 -514
  245. package/dist/lib/node-esm/chunk-L4PBAJDP.mjs.map +0 -7
  246. package/dist/lib/node-esm/chunk-YTNLFBIK.mjs.map +0 -7
  247. package/dist/lib/node-esm/query/index.mjs +0 -23
  248. package/dist/lib/node-esm/query/index.mjs.map +0 -7
  249. package/dist/types/src/internal/ast/annotation-helper.d.ts +0 -8
  250. package/dist/types/src/internal/ast/annotation-helper.d.ts.map +0 -1
  251. package/dist/types/src/internal/ast/annotations.d.ts +0 -119
  252. package/dist/types/src/internal/ast/annotations.d.ts.map +0 -1
  253. package/dist/types/src/internal/ast/annotations.test.d.ts.map +0 -1
  254. package/dist/types/src/internal/ast/entity-kind.d.ts.map +0 -1
  255. package/dist/types/src/internal/ast/index.d.ts +0 -5
  256. package/dist/types/src/internal/ast/index.d.ts.map +0 -1
  257. package/dist/types/src/internal/ast/types.d.ts +0 -6
  258. package/dist/types/src/internal/ast/types.d.ts.map +0 -1
  259. package/dist/types/src/internal/json/annotations.d.ts.map +0 -1
  260. package/dist/types/src/internal/json/effect-schema.test.d.ts.map +0 -1
  261. package/dist/types/src/internal/json/index.d.ts +0 -2
  262. package/dist/types/src/internal/json/index.d.ts.map +0 -1
  263. package/dist/types/src/internal/json/json-schema.d.ts.map +0 -1
  264. package/dist/types/src/internal/json/json-schema.test.d.ts.map +0 -1
  265. package/dist/types/src/internal/object/accessors.d.ts +0 -29
  266. package/dist/types/src/internal/object/accessors.d.ts.map +0 -1
  267. package/dist/types/src/internal/object/create.d.ts.map +0 -1
  268. package/dist/types/src/internal/object/create.test.d.ts +0 -2
  269. package/dist/types/src/internal/object/create.test.d.ts.map +0 -1
  270. package/dist/types/src/internal/object/entity.d.ts +0 -22
  271. package/dist/types/src/internal/object/entity.d.ts.map +0 -1
  272. package/dist/types/src/internal/object/expando.d.ts.map +0 -1
  273. package/dist/types/src/internal/object/meta.d.ts.map +0 -1
  274. package/dist/types/src/internal/object/model.d.ts +0 -117
  275. package/dist/types/src/internal/object/model.d.ts.map +0 -1
  276. package/dist/types/src/internal/object/relation.d.ts +0 -17
  277. package/dist/types/src/internal/object/relation.d.ts.map +0 -1
  278. package/dist/types/src/internal/object/typed-relation.d.ts +0 -32
  279. package/dist/types/src/internal/object/typed-relation.d.ts.map +0 -1
  280. package/dist/types/src/internal/object/typename.d.ts +0 -15
  281. package/dist/types/src/internal/object/typename.d.ts.map +0 -1
  282. package/dist/types/src/internal/object/version.d.ts.map +0 -1
  283. package/dist/types/src/internal/projection/compose.d.ts.map +0 -1
  284. package/dist/types/src/internal/projection/compose.test.d.ts.map +0 -1
  285. package/dist/types/src/internal/projection/index.d.ts +0 -2
  286. package/dist/types/src/internal/projection/index.d.ts.map +0 -1
  287. package/dist/types/src/internal/proxy/reactive-object.d.ts +0 -15
  288. package/dist/types/src/internal/proxy/reactive-object.d.ts.map +0 -1
  289. package/dist/types/src/internal/query/index.d.ts +0 -2
  290. package/dist/types/src/internal/query/index.d.ts.map +0 -1
  291. package/dist/types/src/internal/query/query.d.ts.map +0 -1
  292. package/dist/types/src/internal/schema/stored-schema.d.ts +0 -13
  293. package/dist/types/src/internal/schema/stored-schema.d.ts.map +0 -1
  294. package/dist/types/src/internal/testing/index.d.ts +0 -3
  295. package/dist/types/src/internal/testing/index.d.ts.map +0 -1
  296. package/dist/types/src/internal/testing/types.d.ts +0 -455
  297. package/dist/types/src/internal/testing/types.d.ts.map +0 -1
  298. package/dist/types/src/internal/testing/utils.d.ts.map +0 -1
  299. package/dist/types/src/internal/types/types.d.ts +0 -79
  300. package/dist/types/src/internal/types/types.d.ts.map +0 -1
  301. package/dist/types/src/internal/types/types.test.d.ts +0 -2
  302. package/dist/types/src/internal/types/types.test.d.ts.map +0 -1
  303. package/dist/types/src/internal/types/util.d.ts +0 -5
  304. package/dist/types/src/internal/types/util.d.ts.map +0 -1
  305. package/dist/types/src/query/tag.d.ts +0 -18
  306. package/dist/types/src/query/tag.d.ts.map +0 -1
  307. package/dist/types/src/testing/echo-schema.d.ts +0 -7
  308. package/dist/types/src/testing/echo-schema.d.ts.map +0 -1
  309. package/dist/types/src/testing/types.d.ts +0 -113
  310. package/dist/types/src/testing/types.d.ts.map +0 -1
  311. package/src/internal/ast/annotation-helper.ts +0 -22
  312. package/src/internal/ast/annotations.ts +0 -212
  313. package/src/internal/ast/index.ts +0 -8
  314. package/src/internal/ast/types.ts +0 -17
  315. package/src/internal/json/index.ts +0 -5
  316. package/src/internal/object/accessors.ts +0 -115
  317. package/src/internal/object/entity.ts +0 -204
  318. package/src/internal/object/model.ts +0 -170
  319. package/src/internal/object/relation.ts +0 -24
  320. package/src/internal/object/typed-relation.ts +0 -85
  321. package/src/internal/object/typename.ts +0 -61
  322. package/src/internal/object/version.ts +0 -22
  323. package/src/internal/projection/index.ts +0 -5
  324. package/src/internal/query/index.ts +0 -5
  325. package/src/internal/schema/stored-schema.ts +0 -26
  326. package/src/internal/testing/index.ts +0 -6
  327. package/src/internal/testing/types.ts +0 -211
  328. package/src/internal/types/types.test.ts +0 -48
  329. package/src/internal/types/types.ts +0 -176
  330. package/src/internal/types/util.ts +0 -9
  331. package/src/query/tag.ts +0 -35
  332. package/src/test/api.test.ts +0 -180
  333. package/src/testing/echo-schema.ts +0 -39
  334. package/src/testing/types.ts +0 -91
  335. /package/dist/types/src/internal/{ast → annotations}/annotations.test.d.ts +0 -0
  336. /package/dist/types/src/internal/{json → json-schema}/annotations.d.ts +0 -0
  337. /package/dist/types/src/internal/{json → json-schema}/effect-schema.test.d.ts +0 -0
  338. /package/dist/types/src/internal/{json → json-schema}/json-schema.test.d.ts +0 -0
  339. /package/dist/types/src/internal/{projection → schema}/compose.d.ts +0 -0
  340. /package/dist/types/src/internal/{projection → schema}/compose.test.d.ts +0 -0
  341. /package/dist/types/src/{test → testing}/api.test.d.ts +0 -0
  342. /package/src/internal/{json → json-schema}/effect-schema.test.ts +0 -0
  343. /package/src/{internal/query/query.ts → query/types.ts} +0 -0
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/index.ts", "../../../src/errors.ts", "../../../src/query/index.ts", "../../../src/query/filter.ts", "../../../src/Ref.ts", "../../../src/query/util.ts", "../../../src/query/order.ts", "../../../src/query/query.ts", "../../../src/Annotation.ts", "../../../src/Database.ts", "../../../src/Entity.ts", "../../../src/Format.ts", "../../../src/JsonSchema.ts", "../../../src/Key.ts", "../../../src/Obj.ts", "../../../src/Type.ts", "../../../src/Relation.ts", "../../../src/Tag.ts"],
4
+ "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nexport { DXN } from '@dxos/keys';\n\nexport * from './errors';\n\n// TODO(burdon): Separate namesapces for Query (Query.Query, Query.Filter, etc.)\nexport * from './query';\n\nexport * as Annotation from './Annotation';\nexport * as Database from './Database';\nexport * as Entity from './Entity';\nexport * as Format from './Format';\nexport * as JsonSchema from './JsonSchema';\nexport * as Key from './Key';\nexport * as Obj from './Obj';\nexport * as Ref from './Ref';\nexport * as Relation from './Relation';\nexport * as Tag from './Tag';\nexport * as Type from './Type';\n", "//\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 2024 DXOS.org\n//\n\nexport { QueryAST } from '@dxos/echo-protocol';\n\nexport * from './filter';\nexport * from './order';\nexport * from './query';\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport * as Match from 'effect/Match';\nimport * as Schema from 'effect/Schema';\nimport type * as Types from 'effect/Types';\n\nimport { type ForeignKey, type QueryAST } from '@dxos/echo-protocol';\nimport { assertArgument } from '@dxos/invariant';\nimport { DXN, ObjectId } from '@dxos/keys';\nimport { type Intersection } from '@dxos/util';\n\nimport type * as Entity from '../Entity';\nimport { type AnyProperties } from '../internal';\nimport type * as Obj from '../Obj';\nimport * as Ref from '../Ref';\nimport type * as Type from '../Type';\n\nimport { getTypeDXNFromSpecifier } from './util';\n\nexport interface Filter<T> {\n // TODO(dmaretskyi): See new effect-schema approach to variance.\n '~Filter': { value: Types.Contravariant<T> };\n\n ast: QueryAST.Filter;\n}\n\ninterface FilterAPI {\n is(value: unknown): value is Filter.Any;\n\n /** Construct a filter from an ast. */\n fromAst(ast: QueryAST.Filter): Filter<Obj.Any>;\n\n /**\n * Filter that matches all objects.\n */\n // TODO(dmaretskyi): `Entity.Any` would be more type-safe, but causes annoying errors in existing code\n everything(): Filter<Entity.Entity<AnyProperties>>;\n\n /**\n * Filter that matches no objects.\n */\n // TODO(dmaretskyi): Filter<never>?\n nothing(): Filter<any>;\n\n /**\n * Filter by object IDs.\n */\n // TODO(dmaretskyi): Rename to `Filter.id`.\n ids(...id: ObjectId[]): Filter<Entity.Entity<AnyProperties>>;\n\n /**\n * Filter by type.\n */\n type<S extends Schema.Schema.All>(\n schema: S | string,\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<Obj.AnyProps>;\n\n /**\n * Filter by fully qualified type DXN.\n */\n typeDXN(dxn: DXN): Filter<Obj.AnyProps>;\n\n /**\n * Filter by tag.\n */\n tag(tag: string): Filter<Obj.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?: Filter.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<readonly T[] | undefined>;\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<unknown>;\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 type Type<F extends Any> = F extends Filter<infer T> ? T : never;\n type And<FS extends readonly Any[]> = Schema.Simplify<Intersection<{ [K in keyof FS]: Type<FS[K]> }>>;\n type Or<FS extends readonly Any[]> = Schema.Simplify<{ [K in keyof FS]: Type<FS[K]> }[number]>;\n\n export type TextSearchOptions = {\n // TODO(dmaretskyi): Hybrid search.\n type?: 'full-text' | 'vector';\n };\n}\n\n// TODO(dmaretskyi): Separate object instead of statics for better devex with type errors.\nexport class 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 fromAst(ast: QueryAST.Filter): Filter<any> {\n return new FilterClass(ast);\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 | string,\n props?: Filter.Props<Schema.Schema.Type<S>>,\n ): Filter<Schema.Schema.Type<S>> {\n const dxn = getTypeDXNFromSpecifier(schema);\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?: Filter.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>(\n schema: S | string,\n keys: ForeignKey[],\n ): Filter<Schema.Schema.Type<S>> {\n const dxn = getTypeDXNFromSpecifier(schema);\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<readonly T[] | undefined> {\n return new FilterClass({\n type: 'contains',\n value,\n });\n }\n\n static between<T>(from: T, to: T): Filter<unknown> {\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\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", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { Ref as Ref$, RefArray, type RefResolver } from './internal';\nimport type * as Obj from './Obj';\n\nexport type Ref<T> = Ref$<T>;\nexport type Any = Ref$<Obj.Any>;\n\nexport const Array = RefArray;\n\n/**\n * Extract reference target.\n */\nexport type Target<R extends Any> = R extends Ref$<infer T> ? T : never;\n\n/**\n * Reference resolver.\n */\nexport type Resolver = RefResolver;\n\nexport const isRef: (value: unknown) => value is Any = Ref$.isRef;\n\nexport const make = Ref$.make;\n\n// TODO(dmaretskyi): Consider just allowing `make` to accept DXN.\nexport const fromDXN = Ref$.fromDXN;\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport * as Schema from 'effect/Schema';\n\nimport { raise } from '@dxos/debug';\nimport { assertArgument } from '@dxos/invariant';\nimport { DXN } from '@dxos/keys';\n\nimport { getTypeReference } from '../internal';\n\n/**\n * @param input schema or a typename string\n * @return type DXN\n */\nexport const getTypeDXNFromSpecifier = (input: Schema.Schema.All | string): DXN => {\n if (Schema.isSchema(input)) {\n return getTypeReference(input)?.toDXN() ?? raise(new TypeError('Schema has no DXN'));\n } else {\n assertArgument(typeof input === 'string', 'input');\n assertArgument(!input.startsWith('dxn:'), 'input');\n return DXN.fromTypename(input);\n }\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { type QueryAST } from '@dxos/echo-protocol';\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", "//\n// Copyright 2025 DXOS.org\n//\n\nimport type * as EffectArray from 'effect/Array';\nimport type * as Schema from 'effect/Schema';\n\nimport { type QueryAST } from '@dxos/echo-protocol';\n\nimport type * as Ref from '../Ref';\nimport type * as Type from '../Type';\n\nimport { Filter, FilterClass } from './filter';\nimport { type Order } from './order';\nimport { getTypeDXNFromSpecifier } from './util';\n\n// TODO(burdon): Query namespace (and move Filter, Order into Query namespace).\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\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\n// TODO(burdon): Narrow T to Entity.Unknown?\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 | string,\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 | string,\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 | string,\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: EffectArray.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 | string,\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\n// TODO(dmaretskyi): Separate object instead of statics for better devex with type errors.\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 | string, 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 | string, key: string): Query.Any {\n const dxn = getTypeDXNFromSpecifier(target);\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 | string, 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 | string, 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", "//\n// Copyright 2025 DXOS.org\n//\n\nexport {\n DescriptionAnnotation,\n FormInputAnnotation,\n GeneratorAnnotation,\n LabelAnnotation,\n SystemTypeAnnotation,\n TypeAnnotation,\n getDescription,\n getLabel,\n getTypeAnnotation,\n setDescription,\n setLabel,\n} from './internal/annotations';\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { type CleanupFn } from '@dxos/async';\nimport { type QueryAST } from '@dxos/echo-protocol';\nimport { type DXN, type PublicKey, type SpaceId } from '@dxos/keys';\nimport { type QueryOptions as QueryOptionsProto } from '@dxos/protocols/proto/dxos/echo/filter';\n\nimport type * as Entity from './Entity';\nimport type { Filter, Query } from './query';\nimport type * as Ref from './Ref';\n\n// TODO(burdon): Create QueryResult namespace.\n\n/**\n * Individual query result entry.\n */\nexport type QueryResultEntry<T extends Entity.Unknown = Entity.Unknown> = {\n id: string;\n\n spaceId: SpaceId;\n\n /**\n * May not be present for remote results.\n */\n object?: T;\n\n match?: {\n // TODO(dmaretskyi): text positional info.\n\n /**\n * Higher means better match.\n */\n rank: number;\n };\n\n /**\n * Query resolution metadata.\n */\n // TODO(dmaretskyi): Rename to meta?\n resolution?: {\n // TODO(dmaretskyi): Make this more generic.\n source: 'remote' | 'local' | 'index';\n\n /**\n * Query resolution time in milliseconds.\n */\n time: number;\n };\n};\n\nexport type OneShotQueryResult<T extends Entity.Unknown = Entity.Unknown> = {\n results: QueryResultEntry<T>[];\n objects: T[];\n};\n\nexport type QuerySubscriptionOptions = {\n /**\n * Fire the callback immediately.\n */\n fire?: boolean;\n};\n\n// TODO(burdon): Narrow types.\nexport interface QueryResult<T extends Entity.Unknown = Entity.Unknown> {\n readonly query: Query<T>;\n readonly results: QueryResultEntry<T>[];\n readonly objects: T[];\n\n run(opts?: QueryRunOptions): Promise<OneShotQueryResult<T>>;\n runSync(): QueryResultEntry<T>[];\n first(opts?: QueryRunOptions): Promise<T>;\n\n subscribe(callback?: (query: QueryResult<T>) => void, opts?: QuerySubscriptionOptions): CleanupFn;\n}\n\nexport type QueryRunOptions = {\n timeout?: number;\n};\n\n/**\n * @deprecated Use `QueryAST.QueryOptions` instead.\n */\nexport type QueryOptions = {\n /**\n * @deprecated Use `spaceIds` instead.\n */\n spaces?: PublicKey[];\n\n /**\n * Query only in specific spaces.\n */\n // TODO(dmaretskyi): Change this to SpaceId.\n spaceIds?: string[];\n\n /**\n * Return only the first `limit` results.\n */\n limit?: number;\n\n /**\n * Query only local spaces, or remote on agent.\n * @default `QueryOptions.DataLocation.LOCAL`\n *\n * Options:\n * - proto3_optional = true\n */\n // TODO(burdon): Remove?\n dataLocation?: QueryOptionsProto.DataLocation;\n};\n\n/**\n * `query` API function declaration.\n */\n// TODO(burdon): Reconcile Query and Filter (should only have one root type).\n// TODO(dmaretskyi): Remove query options.\nexport interface QueryFn {\n <Q extends Query.Any>(\n query: Q,\n options?: (QueryAST.QueryOptions & QueryOptions) | undefined,\n ): QueryResult<Query.Type<Q>>;\n\n <F extends Filter.Any>(\n filter: F,\n options?: (QueryAST.QueryOptions & QueryOptions) | undefined,\n ): QueryResult<Filter.Type<F>>;\n}\n\n/**\n * Common interface for Database and Queue.\n */\nexport interface Queryable {\n query: QueryFn;\n}\n\nexport type GetObjectByIdOptions = {\n deleted?: boolean;\n};\n\nexport type ObjectPlacement = 'root-doc' | 'linked-doc';\n\nexport type AddOptions = {\n /**\n * Where to place the object in the Automerge document tree.\n * Root document is always loaded with the space.\n * Linked documents are loaded lazily.\n * Placing large number of objects in the root document may slow down the initial load.\n *\n * @default 'linked-doc'\n */\n placeIn?: ObjectPlacement;\n};\n\n/**\n * ECHO Database interface.\n */\nexport interface Database extends Queryable {\n get spaceId(): SpaceId;\n\n // TODO(burdon): Move hypergraph def here.\n // get graph(): Hypergraph;\n\n /**\n * Creates a reference to an existing object in the database.\n *\n * NOTE: The reference may be dangling if the object is not present in the database.\n * NOTE: Difference from `Ref.fromDXN`\n * `Ref.fromDXN(dxn)` returns an unhydrated reference. The `.load` and `.target` APIs will not work.\n * `db.makeRef(dxn)` is preferable in cases with access to the database.\n */\n makeRef<T extends Entity.Unknown = Entity.Unknown>(dxn: DXN): Ref.Ref<T>;\n\n /**\n * Query objects.\n */\n query: QueryFn;\n\n /**\n * Adds object to the database.\n */\n add<T extends Entity.Unknown = Entity.Unknown>(obj: T, opts?: AddOptions): T;\n\n /**\n * Removes object from the database.\n */\n // TODO(burdon): Return true if removed (currently throws if not present).\n remove(obj: Entity.Unknown): void;\n}\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport type { ObjectId } from '@dxos/keys';\n\nimport { EntityKind, EntityKindSchema, KindId, getEntityKind } from './internal';\n\nexport { KindId };\n\n// NOTE: Relation does not extend Obj so that, for example, we can prevent Relations from being used as source and target objects.\n// However, we generally refer to Obj and Relation instances as \"objects\",\n// and many API methods accept both Obj.Any and Relation.Any (i.e., Entity.Unknown) instances.\n\nexport const Kind = EntityKind;\nexport type Kind = EntityKind;\nexport const KindSchema = EntityKindSchema;\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<K extends Kind> {\n readonly [KindId]: K;\n readonly id: ObjectId;\n}\n\n/**\n * Obj or Relation with a specific set of properties.\n */\nexport type Entity<Props> = OfKind<Kind> & Props;\n\n/**\n * Unknown Obj or Relation.\n */\nexport interface Unknown extends OfKind<Kind> {}\n\n/**\n * Object with arbitrary properties.\n *\n * NOTE: Due to how typescript works, this type is not assignable to a specific schema type.\n * In that case, use `Obj.instanceOf` to check if an object is of a specific type.\n *\n * This type is very permissive and allows accessing any property on the object.\n * We should move to Obj.Any that is not permissive and requires explicit instanceof checks..\n */\nexport interface Any extends OfKind<Kind> {\n [key: string]: unknown;\n}\n\nexport const getKind = getEntityKind;\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { type TypeFormat as Format } from './internal';\n\n// TODO(burdon): Move Format implementaion to ./Ref folder here.\n\nexport * from './internal/formats';\n\nexport type { Format };\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport type * as Schema from 'effect/Schema';\n\nimport { JsonSchemaType } from './internal';\n\nexport { toEffectSchema, toJsonSchema } from './internal';\n\n/**\n * Serializable JsonSchema type definition.\n */\nexport type JsonSchema = JsonSchemaType;\n\nexport const JsonSchema: Schema.Schema<JsonSchemaType> = JsonSchemaType;\n", "//\n// Copyright 2025 DXOS.org\n//\n\n// TODO(wittjosiah): Should this be a subset of Type?\n\nexport { ForeignKey } from '@dxos/echo-protocol';\nexport { SpaceId, ObjectId } from '@dxos/keys';\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport * as Function from 'effect/Function';\nimport * as Schema from 'effect/Schema';\n\nimport { type ForeignKey } from '@dxos/echo-protocol';\nimport { assertArgument, invariant } from '@dxos/invariant';\nimport { type DXN, ObjectId } from '@dxos/keys';\nimport { getSnapshot as getSnapshot$ } from '@dxos/live-object';\nimport { assumeType, deepMapValues } from '@dxos/util';\n\nimport * as Entity from './Entity';\nimport {\n type AnyEchoObject,\n type AnyProperties,\n type InternalObjectProps,\n MetaId,\n type ObjectJSON,\n type ObjectMeta,\n ObjectVersionId,\n VersionTypeId,\n getDescription as getDescription$,\n getLabel as getLabel$,\n getMeta as getMeta$,\n getObjectDXN,\n getSchema as getSchema$,\n getSchemaTypename,\n getTypeAnnotation,\n getTypeDXN as getTypeDXN$,\n isDeleted as isDeleted$,\n isInstanceOf,\n makeObject,\n objectFromJSON,\n objectToJSON,\n setDescription as setDescription$,\n setLabel as setLabel$,\n} from './internal';\nimport * as Ref from './Ref';\nimport * as Type from './Type';\n\n/**\n * Base type for all ECHO objects.\n * @private\n */\ninterface BaseObj extends AnyEchoObject, Entity.OfKind<typeof Entity.Kind.Object> {}\n\n/**\n * Base type for all Obj objects.\n */\nexport interface Any extends BaseObj {}\n\nexport const Any = Schema.Struct({}).pipe(\n Type.Obj({\n typename: 'dxos.org/type/Any',\n version: '0.1.0',\n }),\n);\n\n/**\n * Object type with specific properties.\n */\nexport type Obj<Props> = BaseObj & Props;\n\n/**\n * Object with arbitrary properties.\n *\n * NOTE: Due to how typescript works, this type is not assignable to a specific schema type.\n * In that case, use `Obj.instanceOf` to check if an object is of a specific type.\n */\nexport interface AnyProps extends BaseObj, AnyProperties {}\n\nconst defaultMeta: ObjectMeta = {\n keys: [],\n};\n\ntype Props<T = any> = {\n id?: ObjectId;\n [Meta]?: Partial<ObjectMeta>;\n} & Type.Properties<T>;\n\n// TODO(burdon): Should we allow the caller to set the id?\nexport type MakeProps<T extends Schema.Schema.AnyNoContext> = {\n id?: ObjectId;\n [Meta]?: Partial<ObjectMeta>;\n} & NoInfer<Props<Schema.Schema.Type<T>>>;\n\n/**\n * Creates a new object of the given types.\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 Schema.Schema.AnyNoContext>(\n schema: S,\n props: MakeProps<S>,\n meta?: Partial<ObjectMeta>,\n): Obj<Schema.Schema.Type<S>> => {\n assertArgument(getTypeAnnotation(schema)?.kind === Entity.Kind.Object, 'schema', 'Expected an object schema');\n\n // Set default fields on meta on creation.\n if (props[MetaId] != null) {\n meta = { ...structuredClone(defaultMeta), ...props[MetaId] };\n delete props[MetaId];\n }\n\n // Filter undefined values.\n const filterUndefined = Object.fromEntries(Object.entries(props).filter(([_, v]) => v !== undefined));\n\n return makeObject<Schema.Schema.Type<S>>(schema, filterUndefined as any, {\n ...defaultMeta,\n ...meta,\n });\n};\n\n/**\n * Determine if object is an ECHO object.\n */\nexport const isObject = (obj: unknown): obj is Any => {\n assumeType<InternalObjectProps>(obj);\n return typeof obj === 'object' && obj !== null && obj[Entity.KindId] === Entity.Kind.Object;\n};\n\n//\n// Snapshot\n//\n\n/**\n * Returns an immutable snapshot of an object.\n */\nexport const getSnapshot: <T extends Any>(obj: Obj<T>) => T = 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>(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 (Ref.isRef(value)) {\n return value;\n }\n return recurse(value);\n });\n\n if (opts?.retainId) {\n props.id = id;\n }\n const meta = getMeta(obj);\n props[MetaId] = deepMapValues(meta, (value, recurse) => {\n if (Ref.isRef(value)) {\n return value;\n }\n return recurse(value);\n });\n\n return make(schema as Type.Obj.Any, props);\n};\n\n//\n// Type\n//\n\n// TODO(burdon): To discuss: prefer over ObjectId or Key.ObjectId or Type.ID?\nexport const ID = ObjectId;\nexport type ID = ObjectId;\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 isPerson = Obj.instanceOf(Person);\n * if (isPerson(john)) {\n * // john is Person\n * }\n * ```\n */\nexport const instanceOf: {\n <S extends Type.Entity.Any>(schema: S): (value: unknown) => value is Schema.Schema.Type<S>;\n <S extends Type.Entity.Any>(schema: S, value: unknown): value is Schema.Schema.Type<S>;\n} = ((...args: [schema: Type.Entity.Any, value: unknown] | [schema: Type.Entity.Any]) => {\n if (args.length === 1) {\n return (entity: unknown) => isInstanceOf(args[0], entity);\n }\n\n return isInstanceOf(args[0], args[1]);\n}) as any;\n\n// TODO(dmaretskyi): Allow returning undefined.\nexport const getDXN = (entity: Entity.Unknown): DXN => {\n assertArgument(!Schema.isSchema(entity), 'obj', 'Object should not be a schema.');\n const dxn = getObjectDXN(entity);\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/Person:1.0.0\n */\n// TODO(burdon): Must define and return type for expando.\nexport const getTypeDXN = getTypeDXN$;\n\n/**\n * Get the schema of the object.\n */\nexport const getSchema = getSchema$;\n\n/**\n * @returns The typename of the object's type.\n * @example `example.com/type/Person`\n */\nexport const getTypename = (entity: Entity.Unknown): string | undefined => {\n const schema = getSchema$(entity);\n if (schema == null) {\n // Try to extract typename from DXN.\n return getTypeDXN$(entity)?.asTypeDXN()?.type;\n }\n\n return getSchemaTypename(schema);\n};\n\n//\n// Meta\n//\n\nexport const Meta: unique symbol = MetaId as any;\n\n// TODO(burdon): Narrow type.\n// TODO(dmaretskyi): Allow returning undefined.\nexport const getMeta = (entity: AnyProperties): ObjectMeta => {\n const meta = getMeta$(entity);\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 (entity: Entity.Unknown, source: string): ForeignKey[];\n (source: string): (entity: Entity.Unknown) => ForeignKey[];\n} = Function.dual(2, (entity: Entity.Unknown, source?: string): ForeignKey[] => {\n const meta = getMeta(entity);\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 entity\n * @param source\n */\nexport const deleteKeys = (entity: Entity.Unknown, source: string) => {\n const meta = getMeta(entity);\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\nexport const addTag = (entity: Entity.Unknown, tag: string) => {\n const meta = getMeta(entity);\n meta.tags ??= [];\n meta.tags.push(tag);\n};\n\nexport const removeTag = (entity: Entity.Unknown, tag: string) => {\n const meta = getMeta(entity);\n if (!meta.tags) {\n return;\n }\n for (let i = 0; i < meta.tags.length; i++) {\n if (meta.tags[i] === tag) {\n meta.tags.splice(i, 1);\n i--;\n }\n }\n};\n\n// TODO(dmaretskyi): Default to `false`.\nexport const isDeleted = (entity: Entity.Unknown): boolean => {\n const deleted = isDeleted$(entity);\n invariant(typeof deleted === 'boolean', 'Invalid object.');\n return deleted;\n};\n\n//\n// Annotations\n//\n\nexport const getLabel = (entity: Entity.Unknown): string | undefined => {\n const schema = getSchema$(entity);\n if (schema != null) {\n return getLabel$(schema, entity);\n }\n};\n\nexport const setLabel = (entity: Entity.Unknown, label: string) => {\n const schema = getSchema$(entity);\n if (schema != null) {\n setLabel$(schema, entity, label);\n }\n};\n\nexport const getDescription = (entity: Entity.Unknown): string | undefined => {\n const schema = getSchema$(entity);\n if (schema != null) {\n return getDescription$(schema, entity);\n }\n};\n\nexport const setDescription = (entity: Entity.Unknown, description: string) => {\n const schema = getSchema$(entity);\n if (schema != null) {\n setDescription$(schema, entity, description);\n }\n};\n\n//\n// JSON\n//\n\n/**\n * JSON representation of an object.\n */\nexport type JSON = 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 */\nexport const toJSON = (entity: Entity.Unknown): JSON => objectToJSON(entity);\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 must 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 objectFromJSON as any;\n\n//\n// Sorting\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: Entity.Unknown, b: Entity.Unknown) => number;\n\nexport const sortByLabel: Comparator = (a: Entity.Unknown, b: Entity.Unknown) => compare(getLabel(a), getLabel(b));\nexport const sortByTypename: Comparator = (a: Entity.Unknown, b: Entity.Unknown) =>\n compare(getTypename(a), getTypename(b));\nexport const sort = (...comparators: Comparator[]): Comparator => {\n return (a: Entity.Unknown, b: Entity.Unknown) => {\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// Version\n//\n\n/**\n * Unique symbol for version type identification.\n */\nexport { 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 = (entity: unknown): entity is Version => {\n return entity != null && typeof entity === 'object' && VersionTypeId in entity;\n};\n\n/**\n * Returns the version of the object.\n */\nexport const version = (entity: Entity.Unknown): Version => {\n const version = (entity as any)[ObjectVersionId];\n if (version === undefined) {\n return unversioned;\n }\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 * as Schema$ from 'effect/Schema';\n\nimport { type EncodedReference } from '@dxos/echo-protocol';\nimport { invariant } from '@dxos/invariant';\nimport { type DXN } from '@dxos/keys';\nimport { type ToMutable } from '@dxos/util';\n\nimport type * as Entity$ from './Entity';\nimport {\n type ATTR_RELATION_SOURCE,\n type ATTR_RELATION_TARGET,\n EchoObjectSchema,\n EchoRelationSchema,\n type EchoRelationSchemaOptions,\n EchoSchema,\n Expando as Expando$,\n type ExpandoEncoded,\n PersistentSchema,\n type PersistentSchemaEncoded,\n Ref as Ref$,\n type RefFn,\n type RefSchema,\n type TypeAnnotation,\n type TypeMeta,\n getSchemaDXN,\n getSchemaTypename,\n getSchemaVersion,\n getTypeAnnotation,\n isMutable as isMutable$,\n toEffectSchema,\n toJsonSchema,\n} from './internal';\nimport type * as Relation$ from './Relation';\n\n// TODO(burdon): Remove toEffectSchema, toJsonSchema (moved to JsonSchema export).\nexport { toEffectSchema, toJsonSchema };\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' | Entity$.KindId | Relation$.Source | Relation$.Target>;\n\n//\n// Entity\n//\n\nexport namespace Entity {\n /**\n * Type.Obj.Any | Type.Relation.Any.\n */\n export type Any = Obj.Any | Relation.Any;\n}\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 TypeMeta,\n Schema$.AnnotableClass<\n obj<Self>,\n Entity$.OfKind<typeof Entity$.Kind.Object> & ToMutable<Schema$.Schema.Type<Self>>,\n Schema$.Simplify<ObjJsonProps & ToMutable<Schema$.Schema.Encoded<Self>>>,\n Schema$.Schema.Context<Self>\n > {}\n\n/**\n * Object schema.\n */\nexport const Obj: {\n (opts: TypeMeta): <Self extends Schema$.Schema.Any>(self: Self) => obj<Self>;\n} = EchoObjectSchema 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 = obj<Schema$.Schema.AnyNoContext>;\n}\n\n//\n// Expando\n//\n\nexport const Expando: obj<Schema$.Schema<Expando$, ExpandoEncoded>> = Expando$ as any;\nexport type Expando = obj<Schema$.Schema<Expando$, ExpandoEncoded>>;\n\n//\n// Schema\n//\n\nexport const PersistentType: obj<Schema$.Schema<PersistentSchema, PersistentSchemaEncoded>> = PersistentSchema as any;\nexport type PersistentType = obj<Schema$.Schema<PersistentSchema, PersistentSchemaEncoded>>;\n\nexport { EchoSchema as RuntimeType };\n\n//\n// Relation\n//\n\ninterface RelationJsonProps {\n id: string;\n [ATTR_RELATION_SOURCE]: string;\n [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 TypeMeta,\n Schema$.AnnotableClass<\n relation<Self, SourceSchema, TargetSchema>,\n Entity$.OfKind<typeof Entity$.Kind.Relation> &\n Relation.Endpoints<Schema$.Schema.Type<SourceSchema>, Schema$.Schema.Type<TargetSchema>> &\n ToMutable<Schema$.Schema.Type<Self>>,\n Schema$.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.\n// TODO(burdon): Remove?\nexport const Relation: {\n <Source extends Schema$.Schema.AnyNoContext, Target extends Schema$.Schema.AnyNoContext>(\n opts: EchoRelationSchemaOptions<Source, Target>,\n ): <Self extends Schema$.Schema.Any>(self: Self) => relation<Self, Source, Target>;\n} = EchoRelationSchema 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 [Relation$.Source]: Source;\n [Relation$.Target]: Target;\n };\n}\n\n//\n// Ref\n// TODO(burdon): Reconcile Type.Ref with Ref.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> extends RefSchema<Schema$.Schema.Type<TargetSchema>> {}\n\n/**\n * Ref schema.\n */\nexport const Ref: RefFn = Ref$;\n\nexport interface Ref<T> extends Schema$.SchemaClass<Ref$<T>, EncodedReference> {}\n\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<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: Entity.Any): DXN | undefined => {\n return 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: Entity.Any): string => {\n const typename = 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: Entity.Any): string => {\n const version = 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 = isMutable$;\n\n/**\n * ECHO type metadata.\n */\nexport type Meta = TypeAnnotation;\n\n/**\n * Gets the meta data of the schema.\n */\nexport const getMeta = (schema: Entity.Any): Meta | undefined => {\n return getTypeAnnotation(schema);\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport * as Schema from 'effect/Schema';\n\nimport { raise } from '@dxos/debug';\nimport { assertArgument, invariant } from '@dxos/invariant';\nimport { DXN, type ObjectId } from '@dxos/keys';\nimport { type Live } from '@dxos/live-object';\nimport { assumeType } from '@dxos/util';\n\nimport * as Entity from './Entity';\nimport {\n ATTR_RELATION_SOURCE,\n ATTR_RELATION_TARGET,\n type AnyEchoObject,\n EntityKind,\n type InternalObjectProps,\n MetaId,\n type ObjectMeta,\n RelationSourceDXNId,\n RelationSourceId,\n RelationTargetDXNId,\n RelationTargetId,\n getObjectDXN,\n getTypeAnnotation,\n makeObject,\n} from './internal';\nimport * as Obj from './Obj';\nimport * as Type from './Type';\n\n/**\n * Base type for all ECHO relations.\n * @private\n */\ninterface BaseRelation<Source, Target>\n extends AnyEchoObject,\n Type.Relation.Endpoints<Source, Target>,\n Entity.OfKind<EntityKind.Relation> {}\n\n/**\n * Base type for all Relations objects.\n */\nexport interface Any extends BaseRelation<Obj.Any, Obj.Any> {}\n\nexport const Any = Schema.Struct({}).pipe(\n Type.Relation({\n typename: 'dxos.org/type/Any',\n version: '0.1.0',\n source: Obj.Any,\n target: Obj.Any,\n }),\n);\n\n/**\n * Relation type with specific source and target types.\n */\nexport type Relation<Source extends Obj.Any, Target extends Obj.Any, Props> = BaseRelation<Source, Target> & Props;\n\nexport const Source: unique symbol = RelationSourceId as any;\nexport type Source = typeof Source;\n\nexport const Target: unique symbol = RelationTargetId as any;\nexport type Target = typeof Target;\n\ntype MakeProps<T extends Any> = {\n id?: ObjectId;\n [MetaId]?: ObjectMeta;\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?: ObjectMeta,\n): Live<Schema.Schema.Type<S> & Entity.OfKind<typeof Entity.Kind.Relation>> => {\n assertArgument(getTypeAnnotation(schema)?.kind === EntityKind.Relation, 'schema', 'Expected a relation schema');\n\n if (props[MetaId] != null) {\n meta = props[MetaId] as any;\n delete props[MetaId];\n }\n\n const sourceDXN = getObjectDXN(props[Source]) ?? raise(new Error('Unresolved relation source'));\n const targetDXN = getObjectDXN(props[Target]) ?? raise(new Error('Unresolved relation target'));\n\n (props as any)[RelationSourceDXNId] = sourceDXN;\n (props as any)[RelationTargetDXNId] = targetDXN;\n\n return makeObject<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 (ATTR_RELATION_SOURCE in value || ATTR_RELATION_TARGET in value) {\n return true;\n }\n\n const kind = (value as any)[Entity.KindId];\n return kind === 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<InternalObjectProps>(value);\n const dxn = (value as InternalObjectProps)[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<InternalObjectProps>(value);\n const dxn = (value as InternalObjectProps)[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<InternalObjectProps>(relation);\n const obj = (relation as InternalObjectProps)[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<InternalObjectProps>(relation);\n const obj = (relation as InternalObjectProps)[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\nimport * as Schema from 'effect/Schema';\n\nimport { LabelAnnotation, SystemTypeAnnotation } from './internal';\nimport * as Obj from './Obj';\nimport * as Type from './Type';\n\nexport const Tag = Schema.Struct({\n label: Schema.String,\n hue: Schema.optional(Schema.String), // TODO(burdon): Color name?\n}).pipe(\n Type.Obj({\n typename: 'dxos.org/type/Tag',\n version: '0.1.0',\n }),\n LabelAnnotation.set(['label']),\n SystemTypeAnnotation.set(true),\n);\n\nexport type Tag = Schema.Schema.Type<typeof Tag>;\n\nexport const make = (props: Obj.MakeProps<typeof Tag>) => Obj.make(Tag, props);\n\n// TODO(burdon): Rename Map.\nexport type Map = Record<string, Tag>;\n\nexport const sortTags = ({ label: a }: Tag, { label: b }: Tag) => a.localeCompare(b);\n\nexport const createTagList = (tags: Map): Tag[] =>\n Object.entries(tags)\n .map(([id, tag]) => ({ ...tag, id }))\n .sort(sortTags);\n\nexport const findTagByLabel = (tags: Map | undefined, name: string): Tag | undefined => {\n const entry = Object.entries(tags ?? {}).find(([_, tag]) => tag.label.toLowerCase() === name.toLowerCase());\n return entry ? { ...entry[1], id: entry[0] } : undefined;\n};\n"],
5
+ "mappings": "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",
6
+ "names": ["DXN", "BaseError", "SchemaNotFoundError", "BaseError", "extend", "schema", "options", "context", "ObjectNotFoundError", "dxn", "QueryAST", "Match", "Schema", "assertArgument", "DXN", "ObjectId", "Array", "Array", "RefArray", "isRef", "Ref$", "make", "fromDXN", "Schema", "raise", "assertArgument", "DXN", "getTypeDXNFromSpecifier", "input", "isSchema", "getTypeReference", "toDXN", "raise", "TypeError", "assertArgument", "startsWith", "DXN", "fromTypename", "FilterClass", "variance", "is", "value", "fromAst", "ast", "everything", "type", "typename", "props", "nothing", "filter", "relation", "ids", "assertArgument", "every", "id", "ObjectId", "isValid", "length", "Filter", "schema", "dxn", "getTypeDXNFromSpecifier", "toString", "propsFilterToAst", "startsWith", "DXN", "fromTypename", "typeDXN", "tag", "text", "options", "searchKind", "foreignKeys", "keys", "eq", "isRef", "TypeError", "operator", "noInline", "encode", "neq", "gt", "gte", "lt", "lte", "in", "values", "contains", "between", "from", "to", "not", "and", "filters", "map", "f", "or", "predicates", "idFilter", "Array", "isArray", "Schema", "pipe", "validateSync", "Object", "fromEntries", "entries", "prop", "_value", "predicate", "processPredicate", "withReturnType", "when", "_predicate", "Error", "nestedProps", "key", "orElse", "OrderClass", "variance", "is", "value", "ast", "Order", "natural", "kind", "property", "direction", "QueryClass", "variance", "is", "value", "fromAst", "ast", "select", "filter", "type", "schema", "predicates", "FilterClass", "all", "queries", "length", "TypeError", "map", "q", "without", "source", "exclude", "Filter", "selection", "props", "reference", "key", "anchor", "property", "referencedBy", "target", "dxn", "getTypeDXNFromSpecifier", "typename", "toString", "sourceOf", "relation", "direction", "targetOf", "orderBy", "order", "query", "o", "options", "Query", "Kind", "EntityKind", "KindSchema", "EntityKindSchema", "getKind", "getEntityKind", "JSON", "JsonSchema", "JsonSchemaType", "ObjectId", "ForeignKey", "SpaceId", "getDXN", "getDescription", "getLabel", "getMeta", "getSchema", "getTypeDXN", "getTypename", "isDeleted", "make", "setDescription", "setLabel", "Function", "Schema", "assertArgument", "invariant", "ObjectId", "getSnapshot", "getSnapshot$", "assumeType", "deepMapValues", "Expando", "Ref", "getMeta", "isMutable", "invariant", "Obj", "EchoObjectSchema", "Expando", "Expando$", "PersistentType", "PersistentSchema", "Relation", "EchoRelationSchema", "Ref", "Ref$", "getDXN", "schema", "getSchemaDXN", "getTypename", "typename", "getSchemaTypename", "invariant", "startsWith", "getVersion", "version", "getSchemaVersion", "match", "isMutable", "isMutable$", "getMeta", "getTypeAnnotation", "Any", "Struct", "pipe", "Obj", "typename", "version", "defaultMeta", "keys", "make", "schema", "props", "meta", "assertArgument", "getTypeAnnotation", "kind", "Kind", "Object", "MetaId", "structuredClone", "filterUndefined", "fromEntries", "entries", "filter", "_", "v", "undefined", "makeObject", "isObject", "obj", "assumeType", "KindId", "getSnapshot", "getSnapshot$", "clone", "opts", "id", "data", "getSchema$", "invariant", "deepMapValues", "value", "recurse", "isRef", "retainId", "getMeta", "ID", "ObjectId", "instanceOf", "args", "length", "entity", "isInstanceOf", "getDXN", "isSchema", "dxn", "getObjectDXN", "getTypeDXN", "getTypeDXN$", "getSchema", "getTypename", "asTypeDXN", "type", "getSchemaTypename", "Meta", "getMeta$", "getKeys", "dual", "source", "key", "deleteKeys", "i", "splice", "addTag", "tag", "tags", "push", "removeTag", "isDeleted", "deleted", "isDeleted$", "getLabel", "getLabel$", "setLabel", "label", "setLabel$", "getDescription", "getDescription$", "setDescription", "description", "setDescription$", "toJSON", "objectToJSON", "fromJSON", "objectFromJSON", "compare", "a", "b", "localeCompare", "sortByLabel", "sortByTypename", "sort", "comparators", "comparator", "result", "unversioned", "VersionTypeId", "versioned", "isVersion", "entity", "version", "ObjectVersionId", "undefined", "versionValid", "assertArgument", "compareVersions", "version1", "version2", "automergeHeads", "length", "some", "head", "includes", "encodeVersion", "JSON", "stringify", "decodeVersion", "parsed", "parse", "Any", "make", "Schema", "raise", "assertArgument", "invariant", "DXN", "assumeType", "Any", "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", "makeObject", "isRelation", "value", "ATTR_RELATION_SOURCE", "ATTR_RELATION_TARGET", "KindId", "getSourceDXN", "assumeType", "dxn", "invariant", "DXN", "getTargetDXN", "getSource", "relation", "obj", "undefined", "id", "getTarget", "make", "Schema", "Tag", "Struct", "label", "String", "hue", "optional", "pipe", "Obj", "typename", "version", "LabelAnnotation", "set", "SystemTypeAnnotation", "make", "props", "sortTags", "a", "b", "localeCompare", "createTagList", "tags", "Object", "entries", "map", "id", "tag", "sort", "findTagByLabel", "name", "entry", "find", "_", "toLowerCase", "undefined"]
7
+ }