@dxos/echo 0.8.4-main.4a85c3132b → 0.8.4-main.4f23b4e393

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 (557) hide show
  1. package/README.md +2 -2
  2. package/dist/lib/neutral/Annotation.mjs +5 -3
  3. package/dist/lib/neutral/Database.mjs +8 -4
  4. package/dist/lib/neutral/Entity.mjs +16 -11
  5. package/dist/lib/neutral/Err.mjs +1 -1
  6. package/dist/lib/neutral/Extension.mjs +18 -0
  7. package/dist/lib/neutral/Extension.mjs.map +7 -0
  8. package/dist/lib/neutral/Feed.mjs +23 -14
  9. package/dist/lib/neutral/Filter.mjs +21 -10
  10. package/dist/lib/neutral/Format.mjs +3 -3
  11. package/dist/lib/neutral/JsonSchema.mjs +8 -7
  12. package/dist/lib/neutral/Key.mjs +1 -1
  13. package/dist/lib/neutral/Migration.mjs +17 -0
  14. package/dist/lib/neutral/Migration.mjs.map +7 -0
  15. package/dist/lib/neutral/Obj.mjs +16 -10
  16. package/dist/lib/neutral/Order.mjs +1 -1
  17. package/dist/lib/neutral/Query.mjs +19 -13
  18. package/dist/lib/neutral/QueryResult.mjs +1 -1
  19. package/dist/lib/neutral/Ref.mjs +9 -7
  20. package/dist/lib/neutral/Relation.mjs +15 -11
  21. package/dist/lib/neutral/SchemaRegistry.mjs +1 -1
  22. package/dist/lib/neutral/Tag.mjs +14 -10
  23. package/dist/lib/neutral/Type.mjs +10 -7
  24. package/dist/lib/neutral/{chunk-DZQSL6RW.mjs → chunk-44HT3MEC.mjs} +2 -2
  25. package/dist/lib/neutral/{chunk-DZQSL6RW.mjs.map → chunk-44HT3MEC.mjs.map} +1 -1
  26. package/dist/lib/neutral/{chunk-OVUBTQLT.mjs → chunk-5SL5LDLD.mjs} +4 -2
  27. package/dist/lib/neutral/chunk-5SL5LDLD.mjs.map +7 -0
  28. package/dist/lib/neutral/{chunk-ANHVGJI4.mjs → chunk-7RVZT53K.mjs} +1 -1
  29. package/dist/lib/neutral/{chunk-T4MPQJ7X.mjs → chunk-AHWSAJHU.mjs} +6 -22
  30. package/dist/lib/neutral/chunk-AHWSAJHU.mjs.map +7 -0
  31. package/dist/lib/neutral/chunk-APHSOTIX.mjs +34 -0
  32. package/dist/lib/neutral/chunk-APHSOTIX.mjs.map +7 -0
  33. package/dist/lib/neutral/{chunk-T6JEFNP6.mjs → chunk-BICZKPQG.mjs} +1 -1
  34. package/dist/lib/neutral/{chunk-T6JEFNP6.mjs.map → chunk-BICZKPQG.mjs.map} +1 -1
  35. package/dist/lib/neutral/chunk-BMB7IHGB.mjs +346 -0
  36. package/dist/lib/neutral/chunk-BMB7IHGB.mjs.map +7 -0
  37. package/dist/lib/neutral/{chunk-BRJSLACP.mjs → chunk-C6LDQTNO.mjs} +71 -17
  38. package/dist/lib/neutral/chunk-C6LDQTNO.mjs.map +7 -0
  39. package/dist/lib/neutral/{chunk-ZWKJ4LZJ.mjs → chunk-GKBXQFQK.mjs} +23 -51
  40. package/dist/lib/neutral/chunk-GKBXQFQK.mjs.map +7 -0
  41. package/dist/lib/neutral/chunk-GWFFC34K.mjs +50 -0
  42. package/dist/lib/neutral/chunk-GWFFC34K.mjs.map +7 -0
  43. package/dist/lib/neutral/{chunk-5ELDDYWE.mjs → chunk-I2DARWPX.mjs} +17 -19
  44. package/dist/lib/neutral/chunk-I2DARWPX.mjs.map +7 -0
  45. package/dist/lib/neutral/chunk-KBZ4RAXR.mjs +136 -0
  46. package/dist/lib/neutral/chunk-KBZ4RAXR.mjs.map +7 -0
  47. package/dist/lib/neutral/chunk-MLS7U7AT.mjs +734 -0
  48. package/dist/lib/neutral/chunk-MLS7U7AT.mjs.map +7 -0
  49. package/dist/lib/neutral/{chunk-4KG6IGL4.mjs → chunk-N4B7FHQT.mjs} +4 -4
  50. package/dist/lib/neutral/{chunk-4KG6IGL4.mjs.map → chunk-N4B7FHQT.mjs.map} +2 -2
  51. package/dist/lib/neutral/{chunk-QXF3LGN2.mjs → chunk-N7VOEPSV.mjs} +8 -3
  52. package/dist/lib/neutral/chunk-N7VOEPSV.mjs.map +7 -0
  53. package/dist/lib/neutral/{chunk-W7OP5HGZ.mjs → chunk-NWXJZVWD.mjs} +14 -10
  54. package/dist/lib/neutral/chunk-NWXJZVWD.mjs.map +7 -0
  55. package/dist/lib/neutral/{chunk-GAWKQ5DZ.mjs → chunk-OMJN6VCR.mjs} +5 -5
  56. package/dist/lib/neutral/chunk-OMJN6VCR.mjs.map +7 -0
  57. package/dist/lib/neutral/{chunk-ALOGSVBP.mjs → chunk-PHOHAIEE.mjs} +59 -4
  58. package/dist/lib/neutral/chunk-PHOHAIEE.mjs.map +7 -0
  59. package/dist/lib/neutral/{chunk-O3TZFQCT.mjs → chunk-QRZ2I3ZM.mjs} +2 -2
  60. package/dist/lib/neutral/chunk-QRZ2I3ZM.mjs.map +7 -0
  61. package/dist/lib/neutral/{chunk-AQP4QKYP.mjs → chunk-SRX3EZY3.mjs} +56 -19
  62. package/dist/lib/neutral/chunk-SRX3EZY3.mjs.map +7 -0
  63. package/dist/lib/neutral/chunk-SUZMWP3Y.mjs +36 -0
  64. package/dist/lib/neutral/chunk-SUZMWP3Y.mjs.map +7 -0
  65. package/dist/lib/neutral/{chunk-F7KMHDPJ.mjs → chunk-TNBK56IN.mjs} +54 -31
  66. package/dist/lib/neutral/chunk-TNBK56IN.mjs.map +7 -0
  67. package/dist/lib/neutral/{chunk-M2KVTHZM.mjs → chunk-TRPZU2HV.mjs} +10 -10
  68. package/dist/lib/neutral/chunk-TRPZU2HV.mjs.map +7 -0
  69. package/dist/lib/neutral/{chunk-ZTUBYOGB.mjs → chunk-TTCSATUD.mjs} +1 -1
  70. package/dist/lib/neutral/chunk-TTCSATUD.mjs.map +7 -0
  71. package/dist/lib/neutral/{chunk-OMUPQMLR.mjs → chunk-V72DY6LU.mjs} +1 -1
  72. package/dist/lib/neutral/{chunk-KGV3QIRX.mjs → chunk-W7U2XGZ3.mjs} +124 -17
  73. package/dist/lib/neutral/chunk-W7U2XGZ3.mjs.map +7 -0
  74. package/dist/lib/neutral/{chunk-MXQJZCPY.mjs → chunk-ZISMEVKD.mjs} +1 -1
  75. package/dist/lib/neutral/chunk-ZISMEVKD.mjs.map +7 -0
  76. package/dist/lib/neutral/{chunk-PP4DNUZU.mjs → chunk-ZVQ26DCR.mjs} +1403 -2886
  77. package/dist/lib/neutral/chunk-ZVQ26DCR.mjs.map +7 -0
  78. package/dist/lib/neutral/index.mjs +38 -25
  79. package/dist/lib/neutral/internal/index.mjs +50 -38
  80. package/dist/lib/neutral/meta.json +1 -1
  81. package/dist/lib/neutral/testing/index.mjs +196 -136
  82. package/dist/lib/neutral/testing/index.mjs.map +3 -3
  83. package/dist/types/src/Annotation.d.ts +3 -3
  84. package/dist/types/src/Annotation.d.ts.map +1 -1
  85. package/dist/types/src/Collection.d.ts.map +1 -1
  86. package/dist/types/src/Database.d.ts +16 -4
  87. package/dist/types/src/Database.d.ts.map +1 -1
  88. package/dist/types/src/Dataset.d.ts +2 -1
  89. package/dist/types/src/Dataset.d.ts.map +1 -1
  90. package/dist/types/src/Entity.d.ts +17 -11
  91. package/dist/types/src/Entity.d.ts.map +1 -1
  92. package/dist/types/src/Err.d.ts +18 -18
  93. package/dist/types/src/Err.d.ts.map +1 -1
  94. package/dist/types/src/Extension.d.ts +80 -0
  95. package/dist/types/src/Extension.d.ts.map +1 -0
  96. package/dist/types/src/Extension.test.d.ts +2 -0
  97. package/dist/types/src/Extension.test.d.ts.map +1 -0
  98. package/dist/types/src/Feed.d.ts +65 -24
  99. package/dist/types/src/Feed.d.ts.map +1 -1
  100. package/dist/types/src/Filter.d.ts +33 -4
  101. package/dist/types/src/Filter.d.ts.map +1 -1
  102. package/dist/types/src/Filter.test.d.ts +2 -0
  103. package/dist/types/src/Filter.test.d.ts.map +1 -0
  104. package/dist/types/src/Format.d.ts +1 -1
  105. package/dist/types/src/Format.d.ts.map +1 -1
  106. package/dist/types/src/Hypergraph.d.ts +9 -4
  107. package/dist/types/src/Hypergraph.d.ts.map +1 -1
  108. package/dist/types/src/Json.d.ts +33 -0
  109. package/dist/types/src/Json.d.ts.map +1 -0
  110. package/dist/types/src/Json.test.d.ts +2 -0
  111. package/dist/types/src/Json.test.d.ts.map +1 -0
  112. package/dist/types/src/JsonSchema.d.ts +5 -5
  113. package/dist/types/src/JsonSchema.d.ts.map +1 -1
  114. package/dist/types/src/Migration.d.ts +57 -0
  115. package/dist/types/src/Migration.d.ts.map +1 -0
  116. package/dist/types/src/Obj.d.ts +45 -29
  117. package/dist/types/src/Obj.d.ts.map +1 -1
  118. package/dist/types/src/Order.d.ts.map +1 -1
  119. package/dist/types/src/Query.d.ts +13 -2
  120. package/dist/types/src/Query.d.ts.map +1 -1
  121. package/dist/types/src/Ref.d.ts +12 -11
  122. package/dist/types/src/Ref.d.ts.map +1 -1
  123. package/dist/types/src/Relation.d.ts +16 -16
  124. package/dist/types/src/Relation.d.ts.map +1 -1
  125. package/dist/types/src/SchemaRegistry.d.ts +1 -1
  126. package/dist/types/src/Tag.d.ts +2 -2
  127. package/dist/types/src/Tag.d.ts.map +1 -1
  128. package/dist/types/src/Type.d.ts +10 -9
  129. package/dist/types/src/Type.d.ts.map +1 -1
  130. package/dist/types/src/View.d.ts +1 -1
  131. package/dist/types/src/View.d.ts.map +1 -1
  132. package/dist/types/src/exemplars.test.d.ts +2 -0
  133. package/dist/types/src/exemplars.test.d.ts.map +1 -0
  134. package/dist/types/src/index.d.ts +3 -0
  135. package/dist/types/src/index.d.ts.map +1 -1
  136. package/dist/types/src/internal/{annotations → Annotation}/annotations.d.ts +33 -2
  137. package/dist/types/src/internal/Annotation/annotations.d.ts.map +1 -0
  138. package/dist/types/src/internal/Annotation/annotations.test.d.ts.map +1 -0
  139. package/dist/types/src/internal/Annotation/index.d.ts +4 -0
  140. package/dist/types/src/internal/Annotation/index.d.ts.map +1 -0
  141. package/dist/types/src/internal/{api → Annotation}/sorting.d.ts +1 -1
  142. package/dist/types/src/internal/Annotation/sorting.d.ts.map +1 -0
  143. package/dist/types/src/internal/{annotations → Annotation}/util.d.ts +2 -2
  144. package/dist/types/src/internal/Annotation/util.d.ts.map +1 -0
  145. package/dist/types/src/internal/{api/entity.d.ts → Entity/api.d.ts} +2 -2
  146. package/dist/types/src/internal/Entity/api.d.ts.map +1 -0
  147. package/dist/types/src/internal/{entities → Entity}/entity.d.ts +2 -2
  148. package/dist/types/src/internal/Entity/entity.d.ts.map +1 -0
  149. package/dist/types/src/internal/{entities → Entity}/index.d.ts +2 -0
  150. package/dist/types/src/internal/Entity/index.d.ts.map +1 -0
  151. package/dist/types/src/internal/{entities → Entity}/model.d.ts +2 -26
  152. package/dist/types/src/internal/Entity/model.d.ts.map +1 -0
  153. package/dist/types/src/internal/{entities → Entity}/object.d.ts +2 -2
  154. package/dist/types/src/internal/Entity/object.d.ts.map +1 -0
  155. package/dist/types/src/internal/{entities → Entity}/relation.d.ts +3 -30
  156. package/dist/types/src/internal/Entity/relation.d.ts.map +1 -0
  157. package/dist/types/src/internal/Entity/util.d.ts.map +1 -0
  158. package/dist/types/src/internal/{api → Entity}/version.d.ts +1 -1
  159. package/dist/types/src/internal/Entity/version.d.ts.map +1 -0
  160. package/dist/types/src/internal/Format/date.d.ts.map +1 -0
  161. package/dist/types/src/internal/Format/date.test.d.ts.map +1 -0
  162. package/dist/types/src/internal/Format/format.d.ts.map +1 -0
  163. package/dist/types/src/internal/Format/format.test.d.ts.map +1 -0
  164. package/dist/types/src/internal/Format/index.d.ts.map +1 -0
  165. package/dist/types/src/internal/Format/number.d.ts.map +1 -0
  166. package/dist/types/src/internal/Format/object.d.ts.map +1 -0
  167. package/dist/types/src/internal/Format/select.d.ts.map +1 -0
  168. package/dist/types/src/internal/Format/string.d.ts.map +1 -0
  169. package/dist/types/src/internal/{formats → Format}/types.d.ts +1 -1
  170. package/dist/types/src/internal/Format/types.d.ts.map +1 -0
  171. package/dist/types/src/internal/{json-schema → JsonSchema}/annotations.d.ts +1 -1
  172. package/dist/types/src/internal/JsonSchema/annotations.d.ts.map +1 -0
  173. package/dist/types/src/internal/JsonSchema/effect-schema.test.d.ts.map +1 -0
  174. package/dist/types/src/internal/JsonSchema/index.d.ts.map +1 -0
  175. package/dist/types/src/internal/JsonSchema/json-schema-normalize.d.ts.map +1 -0
  176. package/dist/types/src/internal/{json-schema → JsonSchema}/json-schema-type.d.ts +23 -23
  177. package/dist/types/src/internal/JsonSchema/json-schema-type.d.ts.map +1 -0
  178. package/dist/types/src/internal/{json-schema → JsonSchema}/json-schema.d.ts +1 -1
  179. package/dist/types/src/internal/JsonSchema/json-schema.d.ts.map +1 -0
  180. package/dist/types/src/internal/JsonSchema/json-schema.test.d.ts.map +1 -0
  181. package/dist/types/src/internal/Obj/clone.d.ts.map +1 -0
  182. package/dist/types/src/internal/Obj/common.d.ts.map +1 -0
  183. package/dist/types/src/internal/{object → Obj}/create-object.d.ts +2 -2
  184. package/dist/types/src/internal/Obj/create-object.d.ts.map +1 -0
  185. package/dist/types/src/internal/Obj/create-object.test.d.ts.map +1 -0
  186. package/dist/types/src/internal/{object → Obj}/deleted.d.ts +1 -1
  187. package/dist/types/src/internal/Obj/deleted.d.ts.map +1 -0
  188. package/dist/types/src/internal/{object → Obj}/ids.d.ts +1 -1
  189. package/dist/types/src/internal/Obj/ids.d.ts.map +1 -0
  190. package/dist/types/src/internal/Obj/index.d.ts.map +1 -0
  191. package/dist/types/src/internal/Obj/inspect.d.ts.map +1 -0
  192. package/dist/types/src/internal/{object → Obj}/json-serializer.d.ts +13 -5
  193. package/dist/types/src/internal/Obj/json-serializer.d.ts.map +1 -0
  194. package/dist/types/src/internal/Obj/json-serializer.test.d.ts.map +1 -0
  195. package/dist/types/src/internal/Obj/schema-validator.d.ts +2 -0
  196. package/dist/types/src/internal/Obj/schema-validator.d.ts.map +1 -0
  197. package/dist/types/src/internal/Obj/schema-validator.test.d.ts.map +1 -0
  198. package/dist/types/src/internal/{object → Obj}/set-value.d.ts +2 -2
  199. package/dist/types/src/internal/Obj/set-value.d.ts.map +1 -0
  200. package/dist/types/src/internal/Obj/set-value.test.d.ts.map +1 -0
  201. package/dist/types/src/internal/Obj/snapshot.d.ts.map +1 -0
  202. package/dist/types/src/internal/{object → Obj}/typed-object.d.ts +2 -2
  203. package/dist/types/src/internal/Obj/typed-object.d.ts.map +1 -0
  204. package/dist/types/src/internal/Obj/typed-object.test.d.ts.map +1 -0
  205. package/dist/types/src/internal/Query.d.ts +10 -0
  206. package/dist/types/src/internal/Query.d.ts.map +1 -0
  207. package/dist/types/src/internal/Ref/index.d.ts.map +1 -0
  208. package/dist/types/src/internal/{ref → Ref}/ref-array.d.ts +1 -1
  209. package/dist/types/src/internal/Ref/ref-array.d.ts.map +1 -0
  210. package/dist/types/src/internal/{ref → Ref}/ref.d.ts +15 -2
  211. package/dist/types/src/internal/Ref/ref.d.ts.map +1 -0
  212. package/dist/types/src/internal/Ref/ref.test.d.ts.map +1 -0
  213. package/dist/types/src/internal/{schema → Type}/compose.d.ts +1 -1
  214. package/dist/types/src/internal/Type/compose.d.ts.map +1 -0
  215. package/dist/types/src/internal/Type/compose.test.d.ts.map +1 -0
  216. package/dist/types/src/internal/{schema → Type}/echo-schema.d.ts +6 -6
  217. package/dist/types/src/internal/Type/echo-schema.d.ts.map +1 -0
  218. package/dist/types/src/internal/Type/index.d.ts.map +1 -0
  219. package/dist/types/src/internal/Type/manipulation.d.ts.map +1 -0
  220. package/dist/types/src/internal/{schema → Type}/persistent-schema.d.ts +2 -2
  221. package/dist/types/src/internal/Type/persistent-schema.d.ts.map +1 -0
  222. package/dist/types/src/internal/{api → common/api}/index.d.ts +0 -4
  223. package/dist/types/src/internal/common/api/index.d.ts.map +1 -0
  224. package/dist/types/src/internal/{api → common/api}/meta.d.ts +3 -3
  225. package/dist/types/src/internal/common/api/meta.d.ts.map +1 -0
  226. package/dist/types/src/internal/common/index.d.ts +4 -0
  227. package/dist/types/src/internal/common/index.d.ts.map +1 -0
  228. package/dist/types/src/internal/{proxy → common/proxy}/change-context.d.ts +1 -1
  229. package/dist/types/src/internal/common/proxy/change-context.d.ts.map +1 -0
  230. package/dist/types/src/internal/common/proxy/change.test.d.ts.map +1 -0
  231. package/dist/types/src/internal/common/proxy/define-hidden-property.d.ts.map +1 -0
  232. package/dist/types/src/internal/{proxy → common/proxy}/errors.d.ts +1 -1
  233. package/dist/types/src/internal/common/proxy/errors.d.ts.map +1 -0
  234. package/dist/types/src/internal/common/proxy/event-batch.d.ts.map +1 -0
  235. package/dist/types/src/internal/common/proxy/handler.test.d.ts.map +1 -0
  236. package/dist/types/src/internal/common/proxy/index.d.ts.map +1 -0
  237. package/dist/types/src/internal/common/proxy/json-serializer.d.ts.map +1 -0
  238. package/dist/types/src/internal/common/proxy/make-object.d.ts.map +1 -0
  239. package/dist/types/src/internal/common/proxy/ownership.d.ts.map +1 -0
  240. package/dist/types/src/internal/common/proxy/proxy-types.d.ts.map +1 -0
  241. package/dist/types/src/internal/common/proxy/proxy-utils.d.ts.map +1 -0
  242. package/dist/types/src/internal/{proxy → common/proxy}/reactive-array.d.ts +1 -1
  243. package/dist/types/src/internal/common/proxy/reactive-array.d.ts.map +1 -0
  244. package/dist/types/src/internal/{proxy → common/proxy}/reactive.d.ts +2 -2
  245. package/dist/types/src/internal/{proxy → common/proxy}/reactive.d.ts.map +1 -1
  246. package/dist/types/src/internal/common/proxy/reactive.test.d.ts +2 -0
  247. package/dist/types/src/internal/common/proxy/reactive.test.d.ts.map +1 -0
  248. package/dist/types/src/internal/common/proxy/schema-validator.d.ts.map +1 -0
  249. package/dist/types/src/internal/common/proxy/schema.test.d.ts.map +1 -0
  250. package/dist/types/src/internal/common/proxy/symbols.d.ts.map +1 -0
  251. package/dist/types/src/internal/common/proxy/typed-handler.d.ts.map +1 -0
  252. package/dist/types/src/internal/common/proxy/typed-handler.test.d.ts.map +1 -0
  253. package/dist/types/src/internal/common/proxy/typed-object.test.d.ts.map +1 -0
  254. package/dist/types/src/internal/common/types/base.d.ts.map +1 -0
  255. package/dist/types/src/internal/{types → common/types}/entity.d.ts +4 -4
  256. package/dist/types/src/internal/common/types/entity.d.ts.map +1 -0
  257. package/dist/types/src/internal/{types → common/types}/index.d.ts +1 -0
  258. package/dist/types/src/internal/common/types/index.d.ts.map +1 -0
  259. package/dist/types/src/internal/{types → common/types}/meta.d.ts +3 -3
  260. package/dist/types/src/internal/common/types/meta.d.ts.map +1 -0
  261. package/dist/types/src/internal/common/types/model-symbols.d.ts +54 -0
  262. package/dist/types/src/internal/common/types/model-symbols.d.ts.map +1 -0
  263. package/dist/types/src/internal/common/types/typename.d.ts.map +1 -0
  264. package/dist/types/src/internal/{types → common/types}/version.d.ts +1 -1
  265. package/dist/types/src/internal/common/types/version.d.ts.map +1 -0
  266. package/dist/types/src/internal/index.d.ts +9 -10
  267. package/dist/types/src/internal/index.d.ts.map +1 -1
  268. package/dist/types/src/testing/test-data.d.ts +8 -8
  269. package/dist/types/src/testing/test-data.d.ts.map +1 -1
  270. package/dist/types/src/testing/test-schema.d.ts +53 -53
  271. package/dist/types/src/testing/test-schema.d.ts.map +1 -1
  272. package/dist/types/src/testing/util.d.ts.map +1 -1
  273. package/dist/types/tsconfig.tsbuildinfo +1 -1
  274. package/package.json +24 -14
  275. package/src/Annotation.ts +6 -3
  276. package/src/Collection.ts +8 -1
  277. package/src/Database.ts +55 -18
  278. package/src/Dataset.ts +2 -0
  279. package/src/Entity.ts +20 -11
  280. package/src/Err.ts +2 -0
  281. package/src/Extension.test.ts +235 -0
  282. package/src/Extension.ts +122 -0
  283. package/src/Feed.ts +118 -37
  284. package/src/Filter.test.ts +90 -0
  285. package/src/Filter.ts +68 -3
  286. package/src/Format.ts +1 -1
  287. package/src/Hypergraph.ts +10 -5
  288. package/src/Json.test.ts +175 -0
  289. package/src/Json.ts +102 -0
  290. package/src/JsonSchema.ts +7 -5
  291. package/src/Migration.ts +94 -0
  292. package/src/Obj.test.ts +107 -15
  293. package/src/Obj.ts +166 -40
  294. package/src/Order.ts +2 -0
  295. package/src/Query.test.ts +222 -32
  296. package/src/Query.ts +62 -10
  297. package/src/Ref.ts +16 -12
  298. package/src/Relation.test.ts +2 -2
  299. package/src/Relation.ts +28 -21
  300. package/src/SchemaRegistry.ts +1 -1
  301. package/src/Tag.ts +3 -1
  302. package/src/Type.ts +14 -11
  303. package/src/View.ts +9 -2
  304. package/src/exemplars.test.ts +21 -0
  305. package/src/index.ts +4 -0
  306. package/src/internal/{annotations → Annotation}/annotations.test.ts +56 -7
  307. package/src/internal/{annotations → Annotation}/annotations.ts +84 -20
  308. package/src/internal/{annotations → Annotation}/index.ts +1 -0
  309. package/src/internal/{api → Annotation}/sorting.ts +2 -4
  310. package/src/internal/{annotations → Annotation}/util.ts +1 -1
  311. package/src/internal/{api/entity.ts → Entity/api.ts} +3 -2
  312. package/src/internal/{entities → Entity}/entity.ts +2 -2
  313. package/src/internal/{entities → Entity}/index.ts +2 -0
  314. package/src/internal/{entities → Entity}/model.ts +13 -42
  315. package/src/internal/{entities → Entity}/object.ts +2 -3
  316. package/src/internal/{entities → Entity}/relation.ts +19 -36
  317. package/src/internal/{api → Entity}/version.ts +2 -2
  318. package/src/internal/{formats → Format}/date.test.ts +1 -2
  319. package/src/internal/{formats → Format}/format.test.ts +1 -2
  320. package/src/internal/{formats → Format}/types.ts +2 -2
  321. package/src/internal/{json-schema → JsonSchema}/annotations.ts +3 -3
  322. package/src/internal/{json-schema → JsonSchema}/json-schema-type.ts +4 -4
  323. package/src/internal/{json-schema → JsonSchema}/json-schema.test.ts +48 -49
  324. package/src/internal/{json-schema → JsonSchema}/json-schema.ts +3 -4
  325. package/src/internal/{object → Obj}/clone.ts +3 -3
  326. package/src/internal/{object → Obj}/common.ts +2 -2
  327. package/src/internal/{object → Obj}/create-object.test.ts +5 -7
  328. package/src/internal/{object → Obj}/create-object.ts +5 -6
  329. package/src/internal/{object → Obj}/deleted.ts +2 -2
  330. package/src/internal/{object → Obj}/ids.ts +1 -1
  331. package/src/internal/{object → Obj}/inspect.ts +2 -2
  332. package/src/internal/{object → Obj}/json-serializer.test.ts +8 -9
  333. package/src/internal/{object → Obj}/json-serializer.ts +44 -26
  334. package/src/internal/{object → Obj}/schema-validator.ts +1 -1
  335. package/src/internal/{object → Obj}/set-value.test.ts +24 -24
  336. package/src/internal/{object → Obj}/set-value.ts +3 -3
  337. package/src/internal/{object → Obj}/snapshot.ts +14 -5
  338. package/src/internal/{object → Obj}/typed-object.test.ts +3 -3
  339. package/src/internal/{object → Obj}/typed-object.ts +2 -2
  340. package/src/internal/Query.ts +137 -0
  341. package/src/internal/{ref → Ref}/ref-array.ts +1 -2
  342. package/src/internal/{ref → Ref}/ref.test.ts +4 -5
  343. package/src/internal/{ref → Ref}/ref.ts +20 -3
  344. package/src/internal/{schema → Type}/compose.test.ts +5 -6
  345. package/src/internal/{schema → Type}/compose.ts +1 -1
  346. package/src/internal/{schema → Type}/echo-schema.ts +7 -8
  347. package/src/internal/{schema → Type}/manipulation.ts +1 -1
  348. package/src/internal/{schema → Type}/persistent-schema.ts +7 -7
  349. package/src/internal/{README.md → common/README.md} +1 -1
  350. package/src/internal/{api → common/api}/index.ts +0 -4
  351. package/src/internal/{api → common/api}/meta.ts +3 -3
  352. package/src/internal/common/index.ts +7 -0
  353. package/src/internal/{proxy → common/proxy}/change-context.ts +1 -1
  354. package/src/internal/{proxy → common/proxy}/change.test.ts +97 -97
  355. package/src/internal/{proxy → common/proxy}/errors.ts +2 -2
  356. package/src/internal/{proxy → common/proxy}/handler.test.ts +2 -4
  357. package/src/internal/{proxy → common/proxy}/json-serializer.ts +6 -3
  358. package/src/internal/{proxy → common/proxy}/make-object.ts +1 -2
  359. package/src/internal/{proxy → common/proxy}/ownership.ts +0 -1
  360. package/src/internal/{proxy → common/proxy}/reactive-array.ts +1 -1
  361. package/src/internal/common/proxy/reactive.test.ts +54 -0
  362. package/src/internal/{proxy → common/proxy}/reactive.ts +12 -4
  363. package/src/internal/{proxy → common/proxy}/schema.test.ts +10 -10
  364. package/src/internal/{proxy → common/proxy}/typed-handler.test.ts +6 -7
  365. package/src/internal/{proxy → common/proxy}/typed-handler.ts +10 -13
  366. package/src/internal/{proxy → common/proxy}/typed-object.test.ts +5 -6
  367. package/src/internal/{types → common/types}/entity.ts +1 -1
  368. package/src/internal/{types → common/types}/index.ts +1 -0
  369. package/src/internal/{types → common/types}/meta.ts +1 -2
  370. package/src/internal/common/types/model-symbols.ts +69 -0
  371. package/src/internal/index.ts +9 -31
  372. package/src/testing/api.test.ts +2 -3
  373. package/src/testing/test-data.ts +157 -98
  374. package/src/testing/test-schema.ts +9 -9
  375. package/dist/lib/neutral/chunk-5ELDDYWE.mjs.map +0 -7
  376. package/dist/lib/neutral/chunk-ALOGSVBP.mjs.map +0 -7
  377. package/dist/lib/neutral/chunk-AQP4QKYP.mjs.map +0 -7
  378. package/dist/lib/neutral/chunk-BRJSLACP.mjs.map +0 -7
  379. package/dist/lib/neutral/chunk-F7KMHDPJ.mjs.map +0 -7
  380. package/dist/lib/neutral/chunk-GAWKQ5DZ.mjs.map +0 -7
  381. package/dist/lib/neutral/chunk-GFNCSK7F.mjs +0 -101
  382. package/dist/lib/neutral/chunk-GFNCSK7F.mjs.map +0 -7
  383. package/dist/lib/neutral/chunk-KGV3QIRX.mjs.map +0 -7
  384. package/dist/lib/neutral/chunk-M2KVTHZM.mjs.map +0 -7
  385. package/dist/lib/neutral/chunk-MXQJZCPY.mjs.map +0 -7
  386. package/dist/lib/neutral/chunk-O3TZFQCT.mjs.map +0 -7
  387. package/dist/lib/neutral/chunk-OVUBTQLT.mjs.map +0 -7
  388. package/dist/lib/neutral/chunk-PP4DNUZU.mjs.map +0 -7
  389. package/dist/lib/neutral/chunk-QXF3LGN2.mjs.map +0 -7
  390. package/dist/lib/neutral/chunk-T4MPQJ7X.mjs.map +0 -7
  391. package/dist/lib/neutral/chunk-W7OP5HGZ.mjs.map +0 -7
  392. package/dist/lib/neutral/chunk-ZTUBYOGB.mjs.map +0 -7
  393. package/dist/lib/neutral/chunk-ZWKJ4LZJ.mjs.map +0 -7
  394. package/dist/types/src/internal/annotations/annotations.d.ts.map +0 -1
  395. package/dist/types/src/internal/annotations/annotations.test.d.ts.map +0 -1
  396. package/dist/types/src/internal/annotations/index.d.ts +0 -3
  397. package/dist/types/src/internal/annotations/index.d.ts.map +0 -1
  398. package/dist/types/src/internal/annotations/util.d.ts.map +0 -1
  399. package/dist/types/src/internal/api/annotations.d.ts +0 -23
  400. package/dist/types/src/internal/api/annotations.d.ts.map +0 -1
  401. package/dist/types/src/internal/api/entity.d.ts.map +0 -1
  402. package/dist/types/src/internal/api/index.d.ts.map +0 -1
  403. package/dist/types/src/internal/api/meta.d.ts.map +0 -1
  404. package/dist/types/src/internal/api/sorting.d.ts.map +0 -1
  405. package/dist/types/src/internal/api/version.d.ts.map +0 -1
  406. package/dist/types/src/internal/entities/entity.d.ts.map +0 -1
  407. package/dist/types/src/internal/entities/index.d.ts.map +0 -1
  408. package/dist/types/src/internal/entities/model.d.ts.map +0 -1
  409. package/dist/types/src/internal/entities/object.d.ts.map +0 -1
  410. package/dist/types/src/internal/entities/relation.d.ts.map +0 -1
  411. package/dist/types/src/internal/entities/util.d.ts.map +0 -1
  412. package/dist/types/src/internal/formats/date.d.ts.map +0 -1
  413. package/dist/types/src/internal/formats/date.test.d.ts.map +0 -1
  414. package/dist/types/src/internal/formats/format.d.ts.map +0 -1
  415. package/dist/types/src/internal/formats/format.test.d.ts.map +0 -1
  416. package/dist/types/src/internal/formats/index.d.ts.map +0 -1
  417. package/dist/types/src/internal/formats/number.d.ts.map +0 -1
  418. package/dist/types/src/internal/formats/object.d.ts.map +0 -1
  419. package/dist/types/src/internal/formats/select.d.ts.map +0 -1
  420. package/dist/types/src/internal/formats/string.d.ts.map +0 -1
  421. package/dist/types/src/internal/formats/types.d.ts.map +0 -1
  422. package/dist/types/src/internal/json-schema/annotations.d.ts.map +0 -1
  423. package/dist/types/src/internal/json-schema/effect-schema.test.d.ts.map +0 -1
  424. package/dist/types/src/internal/json-schema/index.d.ts.map +0 -1
  425. package/dist/types/src/internal/json-schema/json-schema-normalize.d.ts.map +0 -1
  426. package/dist/types/src/internal/json-schema/json-schema-type.d.ts.map +0 -1
  427. package/dist/types/src/internal/json-schema/json-schema.d.ts.map +0 -1
  428. package/dist/types/src/internal/json-schema/json-schema.test.d.ts.map +0 -1
  429. package/dist/types/src/internal/object/clone.d.ts.map +0 -1
  430. package/dist/types/src/internal/object/common.d.ts.map +0 -1
  431. package/dist/types/src/internal/object/create-object.d.ts.map +0 -1
  432. package/dist/types/src/internal/object/create-object.test.d.ts.map +0 -1
  433. package/dist/types/src/internal/object/deleted.d.ts.map +0 -1
  434. package/dist/types/src/internal/object/ids.d.ts.map +0 -1
  435. package/dist/types/src/internal/object/index.d.ts.map +0 -1
  436. package/dist/types/src/internal/object/inspect.d.ts.map +0 -1
  437. package/dist/types/src/internal/object/json-serializer.d.ts.map +0 -1
  438. package/dist/types/src/internal/object/json-serializer.test.d.ts.map +0 -1
  439. package/dist/types/src/internal/object/schema-validator.d.ts +0 -2
  440. package/dist/types/src/internal/object/schema-validator.d.ts.map +0 -1
  441. package/dist/types/src/internal/object/schema-validator.test.d.ts.map +0 -1
  442. package/dist/types/src/internal/object/set-value.d.ts.map +0 -1
  443. package/dist/types/src/internal/object/set-value.test.d.ts.map +0 -1
  444. package/dist/types/src/internal/object/snapshot.d.ts.map +0 -1
  445. package/dist/types/src/internal/object/typed-object.d.ts.map +0 -1
  446. package/dist/types/src/internal/object/typed-object.test.d.ts.map +0 -1
  447. package/dist/types/src/internal/proxy/change-context.d.ts.map +0 -1
  448. package/dist/types/src/internal/proxy/change.test.d.ts.map +0 -1
  449. package/dist/types/src/internal/proxy/define-hidden-property.d.ts.map +0 -1
  450. package/dist/types/src/internal/proxy/errors.d.ts.map +0 -1
  451. package/dist/types/src/internal/proxy/event-batch.d.ts.map +0 -1
  452. package/dist/types/src/internal/proxy/handler.test.d.ts.map +0 -1
  453. package/dist/types/src/internal/proxy/index.d.ts.map +0 -1
  454. package/dist/types/src/internal/proxy/json-serializer.d.ts.map +0 -1
  455. package/dist/types/src/internal/proxy/make-object.d.ts.map +0 -1
  456. package/dist/types/src/internal/proxy/ownership.d.ts.map +0 -1
  457. package/dist/types/src/internal/proxy/proxy-types.d.ts.map +0 -1
  458. package/dist/types/src/internal/proxy/proxy-utils.d.ts.map +0 -1
  459. package/dist/types/src/internal/proxy/reactive-array.d.ts.map +0 -1
  460. package/dist/types/src/internal/proxy/schema-validator.d.ts.map +0 -1
  461. package/dist/types/src/internal/proxy/schema.test.d.ts.map +0 -1
  462. package/dist/types/src/internal/proxy/symbols.d.ts.map +0 -1
  463. package/dist/types/src/internal/proxy/typed-handler.d.ts.map +0 -1
  464. package/dist/types/src/internal/proxy/typed-handler.test.d.ts.map +0 -1
  465. package/dist/types/src/internal/proxy/typed-object.test.d.ts.map +0 -1
  466. package/dist/types/src/internal/ref/index.d.ts.map +0 -1
  467. package/dist/types/src/internal/ref/ref-array.d.ts.map +0 -1
  468. package/dist/types/src/internal/ref/ref.d.ts.map +0 -1
  469. package/dist/types/src/internal/ref/ref.test.d.ts.map +0 -1
  470. package/dist/types/src/internal/schema/compose.d.ts.map +0 -1
  471. package/dist/types/src/internal/schema/compose.test.d.ts.map +0 -1
  472. package/dist/types/src/internal/schema/echo-schema.d.ts.map +0 -1
  473. package/dist/types/src/internal/schema/index.d.ts.map +0 -1
  474. package/dist/types/src/internal/schema/manipulation.d.ts.map +0 -1
  475. package/dist/types/src/internal/schema/persistent-schema.d.ts.map +0 -1
  476. package/dist/types/src/internal/types/base.d.ts.map +0 -1
  477. package/dist/types/src/internal/types/entity.d.ts.map +0 -1
  478. package/dist/types/src/internal/types/index.d.ts.map +0 -1
  479. package/dist/types/src/internal/types/meta.d.ts.map +0 -1
  480. package/dist/types/src/internal/types/typename.d.ts.map +0 -1
  481. package/dist/types/src/internal/types/version.d.ts.map +0 -1
  482. package/src/internal/api/annotations.ts +0 -60
  483. /package/dist/lib/neutral/{chunk-ANHVGJI4.mjs.map → chunk-7RVZT53K.mjs.map} +0 -0
  484. /package/dist/lib/neutral/{chunk-OMUPQMLR.mjs.map → chunk-V72DY6LU.mjs.map} +0 -0
  485. /package/dist/types/src/internal/{annotations → Annotation}/annotations.test.d.ts +0 -0
  486. /package/dist/types/src/internal/{entities → Entity}/util.d.ts +0 -0
  487. /package/dist/types/src/internal/{formats → Format}/date.d.ts +0 -0
  488. /package/dist/types/src/internal/{formats → Format}/date.test.d.ts +0 -0
  489. /package/dist/types/src/internal/{formats → Format}/format.d.ts +0 -0
  490. /package/dist/types/src/internal/{formats → Format}/format.test.d.ts +0 -0
  491. /package/dist/types/src/internal/{formats → Format}/index.d.ts +0 -0
  492. /package/dist/types/src/internal/{formats → Format}/number.d.ts +0 -0
  493. /package/dist/types/src/internal/{formats → Format}/object.d.ts +0 -0
  494. /package/dist/types/src/internal/{formats → Format}/select.d.ts +0 -0
  495. /package/dist/types/src/internal/{formats → Format}/string.d.ts +0 -0
  496. /package/dist/types/src/internal/{json-schema → JsonSchema}/effect-schema.test.d.ts +0 -0
  497. /package/dist/types/src/internal/{json-schema → JsonSchema}/index.d.ts +0 -0
  498. /package/dist/types/src/internal/{json-schema → JsonSchema}/json-schema-normalize.d.ts +0 -0
  499. /package/dist/types/src/internal/{json-schema → JsonSchema}/json-schema.test.d.ts +0 -0
  500. /package/dist/types/src/internal/{object → Obj}/clone.d.ts +0 -0
  501. /package/dist/types/src/internal/{object → Obj}/common.d.ts +0 -0
  502. /package/dist/types/src/internal/{object → Obj}/create-object.test.d.ts +0 -0
  503. /package/dist/types/src/internal/{object → Obj}/index.d.ts +0 -0
  504. /package/dist/types/src/internal/{object → Obj}/inspect.d.ts +0 -0
  505. /package/dist/types/src/internal/{object → Obj}/json-serializer.test.d.ts +0 -0
  506. /package/dist/types/src/internal/{object → Obj}/schema-validator.test.d.ts +0 -0
  507. /package/dist/types/src/internal/{object → Obj}/set-value.test.d.ts +0 -0
  508. /package/dist/types/src/internal/{object → Obj}/snapshot.d.ts +0 -0
  509. /package/dist/types/src/internal/{object → Obj}/typed-object.test.d.ts +0 -0
  510. /package/dist/types/src/internal/{ref → Ref}/index.d.ts +0 -0
  511. /package/dist/types/src/internal/{ref → Ref}/ref.test.d.ts +0 -0
  512. /package/dist/types/src/internal/{schema → Type}/compose.test.d.ts +0 -0
  513. /package/dist/types/src/internal/{schema → Type}/index.d.ts +0 -0
  514. /package/dist/types/src/internal/{schema → Type}/manipulation.d.ts +0 -0
  515. /package/dist/types/src/internal/{proxy → common/proxy}/change.test.d.ts +0 -0
  516. /package/dist/types/src/internal/{proxy → common/proxy}/define-hidden-property.d.ts +0 -0
  517. /package/dist/types/src/internal/{proxy → common/proxy}/event-batch.d.ts +0 -0
  518. /package/dist/types/src/internal/{proxy → common/proxy}/handler.test.d.ts +0 -0
  519. /package/dist/types/src/internal/{proxy → common/proxy}/index.d.ts +0 -0
  520. /package/dist/types/src/internal/{proxy → common/proxy}/json-serializer.d.ts +0 -0
  521. /package/dist/types/src/internal/{proxy → common/proxy}/make-object.d.ts +0 -0
  522. /package/dist/types/src/internal/{proxy → common/proxy}/ownership.d.ts +0 -0
  523. /package/dist/types/src/internal/{proxy → common/proxy}/proxy-types.d.ts +0 -0
  524. /package/dist/types/src/internal/{proxy → common/proxy}/proxy-utils.d.ts +0 -0
  525. /package/dist/types/src/internal/{proxy → common/proxy}/schema-validator.d.ts +0 -0
  526. /package/dist/types/src/internal/{proxy → common/proxy}/schema.test.d.ts +0 -0
  527. /package/dist/types/src/internal/{proxy → common/proxy}/symbols.d.ts +0 -0
  528. /package/dist/types/src/internal/{proxy → common/proxy}/typed-handler.d.ts +0 -0
  529. /package/dist/types/src/internal/{proxy → common/proxy}/typed-handler.test.d.ts +0 -0
  530. /package/dist/types/src/internal/{proxy → common/proxy}/typed-object.test.d.ts +0 -0
  531. /package/dist/types/src/internal/{types → common/types}/base.d.ts +0 -0
  532. /package/dist/types/src/internal/{types → common/types}/typename.d.ts +0 -0
  533. /package/src/internal/{entities → Entity}/util.ts +0 -0
  534. /package/src/internal/{formats → Format}/date.ts +0 -0
  535. /package/src/internal/{formats → Format}/format.ts +0 -0
  536. /package/src/internal/{formats → Format}/index.ts +0 -0
  537. /package/src/internal/{formats → Format}/number.ts +0 -0
  538. /package/src/internal/{formats → Format}/object.ts +0 -0
  539. /package/src/internal/{formats → Format}/select.ts +0 -0
  540. /package/src/internal/{formats → Format}/string.ts +0 -0
  541. /package/src/internal/{json-schema → JsonSchema}/effect-schema.test.ts +0 -0
  542. /package/src/internal/{json-schema → JsonSchema}/index.ts +0 -0
  543. /package/src/internal/{json-schema → JsonSchema}/json-schema-normalize.ts +0 -0
  544. /package/src/internal/{object → Obj}/index.ts +0 -0
  545. /package/src/internal/{object → Obj}/schema-validator.test.ts +0 -0
  546. /package/src/internal/{ref → Ref}/index.ts +0 -0
  547. /package/src/internal/{schema → Type}/index.ts +0 -0
  548. /package/src/internal/{proxy → common/proxy}/define-hidden-property.ts +0 -0
  549. /package/src/internal/{proxy → common/proxy}/event-batch.ts +0 -0
  550. /package/src/internal/{proxy → common/proxy}/index.ts +0 -0
  551. /package/src/internal/{proxy → common/proxy}/proxy-types.ts +0 -0
  552. /package/src/internal/{proxy → common/proxy}/proxy-utils.ts +0 -0
  553. /package/src/internal/{proxy → common/proxy}/schema-validator.ts +0 -0
  554. /package/src/internal/{proxy → common/proxy}/symbols.ts +0 -0
  555. /package/src/internal/{types → common/types}/base.ts +0 -0
  556. /package/src/internal/{types → common/types}/typename.ts +0 -0
  557. /package/src/internal/{types → common/types}/version.ts +0 -0
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/Format.ts"],
4
- "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport type * as internal from './internal';\n\nexport * from './internal/formats';\n\nexport type Format = internal.TypeFormat;\n"],
4
+ "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport type * as internal from './internal';\n\nexport * from './internal/Format';\n\nexport type Format = internal.TypeFormat;\n"],
5
5
  "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;",
6
6
  "names": []
7
7
  }
@@ -3,6 +3,7 @@ import {
3
3
  FormInputAnnotation,
4
4
  GeneratorAnnotation,
5
5
  IconAnnotation,
6
+ IconFromRefAnnotation,
6
7
  LabelAnnotation,
7
8
  ReferenceAnnotation,
8
9
  SystemTypeAnnotation,
@@ -13,7 +14,7 @@ import {
13
14
  makeUserAnnotation,
14
15
  setDescriptionWithSchema,
15
16
  setLabelWithSchema
16
- } from "./chunk-F7KMHDPJ.mjs";
17
+ } from "./chunk-TNBK56IN.mjs";
17
18
  import {
18
19
  __export
19
20
  } from "./chunk-J5LGTIGS.mjs";
@@ -25,6 +26,7 @@ __export(Annotation_exports, {
25
26
  FormInputAnnotation: () => FormInputAnnotation,
26
27
  GeneratorAnnotation: () => GeneratorAnnotation,
27
28
  IconAnnotation: () => IconAnnotation,
29
+ IconFromRefAnnotation: () => IconFromRefAnnotation,
28
30
  LabelAnnotation: () => LabelAnnotation,
29
31
  ReferenceAnnotation: () => ReferenceAnnotation,
30
32
  SystemTypeAnnotation: () => SystemTypeAnnotation,
@@ -42,4 +44,4 @@ export {
42
44
  make,
43
45
  Annotation_exports
44
46
  };
45
- //# sourceMappingURL=chunk-OVUBTQLT.mjs.map
47
+ //# sourceMappingURL=chunk-5SL5LDLD.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/Annotation.ts"],
4
+ "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\n// @import-as-namespace\n\nexport {\n DescriptionAnnotation,\n FormInputAnnotation,\n GeneratorAnnotation,\n LabelAnnotation,\n ReferenceAnnotation,\n SystemTypeAnnotation,\n TypeAnnotation,\n getDescriptionWithSchema,\n getLabelWithSchema,\n getTypeAnnotation,\n setDescriptionWithSchema,\n setLabelWithSchema,\n IconAnnotation,\n IconFromRefAnnotation,\n} from './internal/Annotation';\n\nimport type * as Schema from 'effect/Schema';\n\nimport * as internalAnnotations from './internal/Annotation';\n\ninterface MakeProps<T> {\n id: string;\n schema: Schema.Schema<T, any, never>;\n}\n\n/**\n * Create a new schema annotation.\n * Annotation can be assigned both to fields and to the schema itself.\n * Annotation is serialized with the schema.\n *\n * @example\n * ```ts\n * const ColorAnnotation = Annotation.make({\n * id: 'org.dxos.annotation.color',\n * schema: Schema.String,\n * });\n *\n * const schema = Schema.String.annotations(ColorAnnotation.set('red'));\n * ```\n */\nexport const make: <T>(props: MakeProps<T>) => internalAnnotations.AnnotationHelper<T> =\n internalAnnotations.makeUserAnnotation;\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;;;;AAAA;;;;;;;;;;;;;;;;;;AA+CO,IAAMA,OACSC;",
6
+ "names": ["make", "makeUserAnnotation"]
7
+ }
@@ -18,4 +18,4 @@ export {
18
18
  SpaceId,
19
19
  ObjectId
20
20
  };
21
- //# sourceMappingURL=chunk-ANHVGJI4.mjs.map
21
+ //# sourceMappingURL=chunk-7RVZT53K.mjs.map
@@ -4,17 +4,17 @@ import {
4
4
  EchoSchema,
5
5
  PersistentSchema,
6
6
  isMutable
7
- } from "./chunk-PP4DNUZU.mjs";
7
+ } from "./chunk-ZVQ26DCR.mjs";
8
8
  import {
9
9
  getSchemaDXN,
10
10
  getSchemaTypename,
11
11
  getSchemaVersion,
12
12
  getTypeAnnotation
13
- } from "./chunk-F7KMHDPJ.mjs";
13
+ } from "./chunk-TNBK56IN.mjs";
14
14
  import {
15
15
  EntityKind,
16
16
  SchemaKindId
17
- } from "./chunk-4KG6IGL4.mjs";
17
+ } from "./chunk-N4B7FHQT.mjs";
18
18
  import {
19
19
  __export
20
20
  } from "./chunk-J5LGTIGS.mjs";
@@ -51,28 +51,12 @@ var getDXN = (schema) => {
51
51
  };
52
52
  var getTypename = (schema) => {
53
53
  const typename = getSchemaTypename(schema);
54
- invariant(typeof typename === "string" && !typename.startsWith("dxn:"), "Invalid typename", {
55
- F: __dxlog_file,
56
- L: 227,
57
- S: void 0,
58
- A: [
59
- "typeof typename === 'string' && !typename.startsWith('dxn:')",
60
- "'Invalid typename'"
61
- ]
62
- });
54
+ invariant(typeof typename === "string" && !typename.startsWith("dxn:"), "Invalid typename", { "~LogMeta": "~LogMeta", F: __dxlog_file, L: 70, S: void 0, A: ["typeof typename === 'string' && !typename.startsWith('dxn:')", "'Invalid typename'"] });
63
55
  return typename;
64
56
  };
65
57
  var getVersion = (schema) => {
66
58
  const version = getSchemaVersion(schema);
67
- invariant(typeof version === "string" && version.match(/^\d+\.\d+\.\d+$/), "Invalid version", {
68
- F: __dxlog_file,
69
- L: 237,
70
- S: void 0,
71
- A: [
72
- "typeof version === 'string' && version.match(/^\\d+\\.\\d+\\.\\d+$/)",
73
- "'Invalid version'"
74
- ]
75
- });
59
+ invariant(typeof version === "string" && version.match(/^\d+\.\d+\.\d+$/), "Invalid version", { "~LogMeta": "~LogMeta", F: __dxlog_file, L: 78, S: void 0, A: ["typeof version === 'string' && version.match(/^\\d+\\.\\d+\\.\\d+$/)", "'Invalid version'"] });
76
60
  return version;
77
61
  };
78
62
  var isMutable2 = isMutable;
@@ -94,4 +78,4 @@ export {
94
78
  getMeta,
95
79
  Type_exports
96
80
  };
97
- //# sourceMappingURL=chunk-T4MPQJ7X.mjs.map
81
+ //# sourceMappingURL=chunk-AHWSAJHU.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/Type.ts"],
4
+ "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\n// @import-as-namespace\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 * as internal from './internal';\nimport * as typeInternal from './internal/Type';\nimport type * as ObjModule from './Obj';\nimport type * as RelationModule from './Relation';\n\n/**\n * Dynamic type that can be constructed, mutated, and persisted in the ECHO database.\n */\nexport const RuntimeType = typeInternal.EchoSchema;\n\n/**\n * Dynamic type that can be constructed, mutated, and persisted in the ECHO database.\n */\nexport type RuntimeType = typeInternal.EchoSchema;\n\n//\n// Internal types (not exported)\n//\n\n/**\n * Type that marks a schema as an ECHO schema.\n * The value indicates the entity kind (Object or Relation).\n */\ntype EchoSchemaKind<K extends internal.EntityKind = internal.EntityKind> = {\n readonly [internal.SchemaKindId]: K;\n};\n\n//\n// Obj - Runtime schema for any ECHO object\n//\n\n/**\n * TypeScript type for an ECHO object schema.\n * `T` is the instance type produced by the schema.\n * `Fields` is the optional struct fields type for introspection.\n *\n * @example\n * ```ts\n * const PersonSchema: Type.Obj<Person> = Schema.Struct({\n * name: Schema.String,\n * }).pipe(Type.object({ typename: 'Person', version: '0.1.0' }));\n *\n * // Access fields for introspection:\n * Object.keys(PersonSchema.fields); // ['name']\n * ```\n */\nexport interface Obj<T, Fields extends Schema.Struct.Fields = Schema.Struct.Fields>\n extends\n internal.TypeMeta,\n EchoSchemaKind<internal.EntityKind.Object>,\n Schema.AnnotableClass<\n Obj<T, Fields>,\n Entity.OfKind<typeof Entity.Kind.Object> & T,\n Schema.Simplify<ObjModule.BaseObjJson & ToMutable<T>>,\n never\n > {\n /**\n * The fields defined in the original struct schema.\n * Allows accessing field definitions for introspection.\n */\n readonly fields: Fields;\n}\n\n/**\n * Structural base type for any ECHO object schema.\n * Accepts both static schemas (created with Type.object()) and EchoSchema.\n * NOTE: Does not include the brand symbol to avoid TS4053 declaration portability issues.\n * Use Type.isObjectSchema() for runtime type guards.\n */\ntype ObjectSchemaBase = Schema.Schema.AnyNoContext & {\n readonly typename: string;\n readonly version: string;\n};\n\n/**\n * Type that represents any ECHO object schema.\n * Accepts both static schemas (Type.object()) and mutable schemas (EchoSchema).\n */\nexport type AnyObj = ObjectSchemaBase;\n\n/**\n * Factory function to create an ECHO object schema.\n * Adds object metadata annotations to an Effect schema.\n *\n * @example\n * ```ts\n * const Person = Schema.Struct({\n * name: Schema.String,\n * }).pipe(Type.object({ typename: 'com.example.type.person', version: '0.1.0' }));\n * ```\n */\nexport const object: {\n (opts: internal.TypeMeta): <Self extends Schema.Schema.Any>(self: Self) => Obj<Schema.Schema.Type<Self>>;\n} = internal.EchoObjectSchema as any;\n\n//\n// PersistentType (Schema stored in database)\n//\n\nexport const PersistentType: Obj<typeInternal.PersistentSchema> = typeInternal.PersistentSchema as any;\n\nexport interface PersistentType extends Schema.Schema.Type<typeof PersistentType> {}\n\n/**\n * TypeScript type for an ECHO relation schema.\n * `T` is the instance type produced by the schema (excluding source/target).\n * `Source` and `Target` are the endpoint types.\n * `Fields` is the optional struct fields type for introspection.\n */\nexport interface Relation<T, Source, Target, Fields extends Schema.Struct.Fields = Schema.Struct.Fields>\n extends\n internal.TypeMeta,\n EchoSchemaKind<internal.EntityKind.Relation>,\n Schema.AnnotableClass<\n Relation<T, Source, Target, Fields>,\n Entity.OfKind<typeof Entity.Kind.Relation> & RelationModule.Endpoints<Source, Target> & T,\n Schema.Simplify<RelationModule.BaseRelationJson & ToMutable<T>>,\n never\n > {\n /**\n * The fields defined in the original struct schema.\n * Allows accessing field definitions for introspection.\n */\n readonly fields: Fields;\n}\n\n/**\n * Structural base type for any ECHO relation schema.\n * Accepts static schemas (created with Type.relation()).\n * NOTE: Does not include the brand symbol to avoid TS4053 declaration portability issues.\n * Use Type.isRelationSchema() for runtime type guards.\n */\ntype RelationSchemaBase = Schema.Schema.AnyNoContext & {\n readonly typename: string;\n readonly version: string;\n};\n\n/**\n * Type that represents any ECHO relation schema.\n * Accepts static schemas (Type.relation()).\n */\nexport type AnyRelation = RelationSchemaBase;\n\n/**\n * Factory function to create an ECHO relation schema.\n * Adds relation metadata annotations to an Effect schema.\n *\n * @example\n * ```ts\n * const WorksFor = Schema.Struct({\n * role: Schema.String,\n * }).pipe(Type.relation({\n * typename: 'com.example.type.works-for',\n * version: '0.1.0',\n * source: Person,\n * target: Company,\n * }));\n * ```\n */\nexport const relation: {\n <SourceSchema extends Schema.Schema.AnyNoContext, TargetSchema extends Schema.Schema.AnyNoContext>(\n opts: internal.EchoRelationSchemaOptions<SourceSchema, TargetSchema>,\n ): <Self extends Schema.Schema.Any>(\n self: Self,\n ) => Relation<Schema.Schema.Type<Self>, Schema.Schema.Type<SourceSchema>, Schema.Schema.Type<TargetSchema>>;\n} = internal.EchoRelationSchema as any;\n\n/**\n * Type alias for any ECHO entity schema (object or relation).\n * Use this in type annotations for schema parameters.\n */\nexport type AnyEntity = AnyObj | AnyRelation;\n\n/**\n * Type guard to check if a schema is an object schema.\n * NOTE: This checks SCHEMAS, not instances. Use Obj.isObject for instances.\n */\nexport const isObjectSchema = (schema: AnyEntity): schema is AnyObj => {\n return (schema as any)[internal.SchemaKindId] === internal.EntityKind.Object;\n};\n\n/**\n * Type guard to check if a schema is a relation schema.\n * NOTE: This checks SCHEMAS, not instances. Use Relation.isRelation for instances.\n */\nexport const isRelationSchema = (schema: AnyEntity): schema is AnyRelation => {\n return (schema as any)[internal.SchemaKindId] === internal.EntityKind.Relation;\n};\n\n/**\n * Type that represents any Ref schema (with unknown target type).\n * This is a schema type, not an instance type.\n */\nexport type AnyRef = Schema.Schema<internal.Ref<any>, EncodedReference>;\n\n//\n// Schema utility functions\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:com.example.type.person:0.1.0\"\n * @example \"dxn:echo:SSSSSSSSSS:XXXXXXXXXXXXX\"\n */\nexport const getDXN = (schema: AnyEntity): DXN | undefined => {\n return internal.getSchemaDXN(schema);\n};\n\n/**\n * @param schema - Schema to get the typename from.\n * @returns The typename of the schema. Example: `com.example.type.person`.\n */\nexport const getTypename = (schema: AnyEntity): string => {\n const typename = internal.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: AnyEntity): string => {\n const version = internal.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 = typeInternal.isMutable;\n\n/**\n * ECHO type metadata.\n */\nexport type Meta = internal.TypeAnnotation;\n\n/**\n * Gets the meta data of the schema.\n */\nexport const getMeta = (schema: AnyEntity): Meta | undefined => {\n return internal.getTypeAnnotation(schema);\n};\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;;;;AAAA;;;;;;;;mBAAAA;EAAA;;;;;AASA,SAASC,iBAAiB;AAU1B,IAAA,eAAA;;AA2FA,IAAA,SAAA;;;AAmFE,IAAA,iBAAA,CAAA,WAAA;AAEF,SAAA,OAAA,YAAA,MAAA,WAAA;;AAME,IAAA,mBAAA,CAAA,WAAA;AAQA,SAAA,OAAA,YAAA,MAAA,WAAA;AACF;AAWE,IAAA,SAAA,CAAA,WAAA;AAEF,SAAA,aAAA,MAAA;;AAMEC,IAAU,cAAOC,CAAAA,WAAa;AAC9B,QAAA,WAAOA,kBAAAA,MAAAA;AACP,YAAA,OAAA,aAAA,YAAA,CAAA,SAAA,WAAA,MAAA,GAAA,oBAAA,EAAA,YAAA,YAAA,GAAA,cAAA,GAAA,IAAA,GAAA,QAAA,GAAA,CAAA,gEAAA,oBAAA,EAAA,CAAA;AAEF,SAAA;;AAMED,IAAU,aAAOE,CAAAA,WAAY;AAC7B,QAAA,UAAOA,iBAAAA,MAAAA;AACP,YAAA,OAAA,YAAA,YAAA,QAAA,MAAA,iBAAA,GAAA,mBAAA,EAAA,YAAA,YAAA,GAAA,cAAA,GAAA,IAAA,GAAA,QAAA,GAAA,CAAA,wEAAA,mBAAA,EAAA,CAAA;AAEF,SAAA;;;AAeE,IAAA,UAAA,CAAA,WAAA;;;",
6
+ "names": ["isMutable", "invariant", "invariant", "typename", "version"]
7
+ }
@@ -0,0 +1,34 @@
1
+ import {
2
+ Ref
3
+ } from "./chunk-BMB7IHGB.mjs";
4
+
5
+ // src/internal/Ref/ref-array.ts
6
+ import { isNonNullable } from "@dxos/util";
7
+ var RefArray = Object.freeze({
8
+ /**
9
+ * @returns all resolved targets.
10
+ */
11
+ targets: (refs) => {
12
+ return refs.map((ref) => ref.target).filter(isNonNullable);
13
+ },
14
+ /**
15
+ * Load all referenced objects.
16
+ */
17
+ loadAll: (refs) => {
18
+ return Promise.all(refs.map((ref) => ref.load()));
19
+ },
20
+ /**
21
+ * Removes the ref with the given id.
22
+ */
23
+ removeById: (refs, id) => {
24
+ const index = refs.findIndex(Ref.hasObjectId(id));
25
+ if (index >= 0) {
26
+ refs.splice(index, 1);
27
+ }
28
+ }
29
+ });
30
+
31
+ export {
32
+ RefArray
33
+ };
34
+ //# sourceMappingURL=chunk-APHSOTIX.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/internal/Ref/ref-array.ts"],
4
+ "sourcesContent": ["//\n// Copyright 2024 DXOS.org\n//\n\nimport { type ObjectId } from '@dxos/keys';\nimport { isNonNullable } from '@dxos/util';\n\nimport { type AnyEntity } from '../common/types';\nimport { Ref } from './ref';\n\n/**\n * Helper functions for working with arrays of refs.\n */\nexport const RefArray = Object.freeze({\n /**\n * @returns all resolved targets.\n */\n targets: <T extends AnyEntity>(refs: readonly Ref<T>[]): T[] => {\n return refs.map((ref) => ref.target).filter(isNonNullable);\n },\n\n /**\n * Load all referenced objects.\n */\n loadAll: <T extends AnyEntity>(refs: readonly Ref<T>[]): Promise<T[]> => {\n return Promise.all(refs.map((ref) => ref.load()));\n },\n\n /**\n * Removes the ref with the given id.\n */\n removeById: (refs: Ref<AnyEntity>[], id: ObjectId) => {\n const index = refs.findIndex(Ref.hasObjectId(id));\n if (index >= 0) {\n refs.splice(index, 1);\n }\n },\n});\n"],
5
+ "mappings": ";;;;;AAKA,SAASA,qBAAqB;AAQvB,IAAMC,WAAWC,OAAOC,OAAO;;;;EAIpCC,SAAS,CAAsBC,SAAAA;AAC7B,WAAOA,KAAKC,IAAI,CAACC,QAAQA,IAAIC,MAAM,EAAEC,OAAOC,aAAAA;EAC9C;;;;EAKAC,SAAS,CAAsBN,SAAAA;AAC7B,WAAOO,QAAQC,IAAIR,KAAKC,IAAI,CAACC,QAAQA,IAAIO,KAAI,CAAA,CAAA;EAC/C;;;;EAKAC,YAAY,CAACV,MAAwBW,OAAAA;AACnC,UAAMC,QAAQZ,KAAKa,UAAUC,IAAIC,YAAYJ,EAAAA,CAAAA;AAC7C,QAAIC,SAAS,GAAG;AACdZ,WAAKgB,OAAOJ,OAAO,CAAA;IACrB;EACF;AACF,CAAA;",
6
+ "names": ["isNonNullable", "RefArray", "Object", "freeze", "targets", "refs", "map", "ref", "target", "filter", "isNonNullable", "loadAll", "Promise", "all", "load", "removeById", "id", "index", "findIndex", "Ref", "hasObjectId", "splice"]
7
+ }
@@ -4,4 +4,4 @@ var SchemaRegistry_exports = {};
4
4
  export {
5
5
  SchemaRegistry_exports
6
6
  };
7
- //# sourceMappingURL=chunk-T6JEFNP6.mjs.map
7
+ //# sourceMappingURL=chunk-BICZKPQG.mjs.map
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "version": 3,
3
3
  "sources": ["../../../src/SchemaRegistry.ts"],
4
- "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport type * as Types from 'effect/Types';\n\nimport type * as JsonSchema from './JsonSchema';\nimport type * as Key from './Key';\nimport type * as QueryResult from './QueryResult';\nimport type * as Type from './Type';\n\n// TODO(wittjosiah): Replace w/ Query.Query.\nexport type Query = {\n /**\n * Filter by schema ID.\n * Schema id is a DXN with `echo` or `type` kind.\n */\n id?: string | string[];\n\n /**\n * Id of the backing ECHO object.\n */\n backingObjectId?: Key.ObjectId | Key.ObjectId[];\n\n /**\n * One or more typenames to filter by.\n */\n typename?: string | string[];\n\n /**\n * [Semver Range](https://docs.npmjs.com/cli/v6/using-npm/semver#ranges) for the schema version.\n */\n version?: string;\n\n /**\n * Where to look for the schema.\n *\n * Database schema are stored in the database of the current space.\n * Runtime schema are registered in the runtime.\n *\n * @default ['database']\n */\n location?: ('database' | 'runtime')[];\n\n /**\n * Include system schemas.\n * @default false\n *\n * The system schema include but are not limited to:\n * - dxos.org/type/Schema\n */\n includeSystem?: boolean;\n};\n\n/**\n * Input for schema registration.\n * The typename, version and schema mutability metadata is read from the schema annotations.\n *\n * Accepts:\n * - Branded ECHO schemas created with Type.Obj() or Type.Relation()\n * - JSON schema with typename and version\n */\nexport type RegisterSchemaInput =\n | Type.AnyEntity\n | {\n typename: string;\n version: string;\n jsonSchema: JsonSchema.JsonSchema;\n /**\n * Display name of the schema.\n */\n name?: string;\n };\n\nexport type ExtractQueryResult<Query> = Query extends { location: ('database' | 'runtime')[] }\n ? Type.AnyEntity\n : Type.RuntimeType;\n\n// TODO(dmaretskyi): Rename TypeRegistry\nexport interface SchemaRegistry {\n /**\n * Checks if the provided schema is registered.\n */\n // TODO(burdon): Type?\n hasSchema(schema: Type.AnyEntity): boolean;\n\n /**\n * Registers the provided schema.\n *\n * @returns Mutable runtime instances of schemas that were registered.\n *\n * The behavior of this method depends on the state of the database.\n * The general principle is that the schema will be upserted into the space.\n * If an equivalent schema with the same name and version already exists, the method does nothing.\n * If a different schema with the same name and version exists, the method throws an error.\n * If no schema with the same name and version exists, a new schema will be inserted based on semantic versioning rules.\n */\n register(input: RegisterSchemaInput[]): Promise<Type.RuntimeType[]>;\n\n /**\n *\n */\n query<Q extends Types.NoExcessProperties<Query, Q>>(\n query?: Q & Query,\n ): QueryResult.QueryResult<ExtractQueryResult<Q>>;\n}\n"],
4
+ "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nimport type * as Types from 'effect/Types';\n\nimport type * as JsonSchema from './JsonSchema';\nimport type * as Key from './Key';\nimport type * as QueryResult from './QueryResult';\nimport type * as Type from './Type';\n\n// TODO(wittjosiah): Replace w/ Query.Query.\nexport type Query = {\n /**\n * Filter by schema ID.\n * Schema id is a DXN with `echo` or `type` kind.\n */\n id?: string | string[];\n\n /**\n * Id of the backing ECHO object.\n */\n backingObjectId?: Key.ObjectId | Key.ObjectId[];\n\n /**\n * One or more typenames to filter by.\n */\n typename?: string | string[];\n\n /**\n * [Semver Range](https://docs.npmjs.com/cli/v6/using-npm/semver#ranges) for the schema version.\n */\n version?: string;\n\n /**\n * Where to look for the schema.\n *\n * Database schema are stored in the database of the current space.\n * Runtime schema are registered in the runtime.\n *\n * @default ['database']\n */\n location?: ('database' | 'runtime')[];\n\n /**\n * Include system schemas.\n * @default false\n *\n * The system schema include but are not limited to:\n * - org.dxos.type.schema\n */\n includeSystem?: boolean;\n};\n\n/**\n * Input for schema registration.\n * The typename, version and schema mutability metadata is read from the schema annotations.\n *\n * Accepts:\n * - Branded ECHO schemas created with Type.Obj() or Type.Relation()\n * - JSON schema with typename and version\n */\nexport type RegisterSchemaInput =\n | Type.AnyEntity\n | {\n typename: string;\n version: string;\n jsonSchema: JsonSchema.JsonSchema;\n /**\n * Display name of the schema.\n */\n name?: string;\n };\n\nexport type ExtractQueryResult<Query> = Query extends { location: ('database' | 'runtime')[] }\n ? Type.AnyEntity\n : Type.RuntimeType;\n\n// TODO(dmaretskyi): Rename TypeRegistry\nexport interface SchemaRegistry {\n /**\n * Checks if the provided schema is registered.\n */\n // TODO(burdon): Type?\n hasSchema(schema: Type.AnyEntity): boolean;\n\n /**\n * Registers the provided schema.\n *\n * @returns Mutable runtime instances of schemas that were registered.\n *\n * The behavior of this method depends on the state of the database.\n * The general principle is that the schema will be upserted into the space.\n * If an equivalent schema with the same name and version already exists, the method does nothing.\n * If a different schema with the same name and version exists, the method throws an error.\n * If no schema with the same name and version exists, a new schema will be inserted based on semantic versioning rules.\n */\n register(input: RegisterSchemaInput[]): Promise<Type.RuntimeType[]>;\n\n /**\n *\n */\n query<Q extends Types.NoExcessProperties<Query, Q>>(\n query?: Q & Query,\n ): QueryResult.QueryResult<ExtractQueryResult<Q>>;\n}\n"],
5
5
  "mappings": ";AAAA;",
6
6
  "names": []
7
7
  }
@@ -0,0 +1,346 @@
1
+ import {
2
+ Service
3
+ } from "./chunk-I2DARWPX.mjs";
4
+ import {
5
+ ReferenceAnnotationId,
6
+ getSchemaDXN,
7
+ getTypeAnnotation,
8
+ getTypeIdentifierAnnotation
9
+ } from "./chunk-TNBK56IN.mjs";
10
+
11
+ // src/internal/Ref/ref.ts
12
+ import * as Effect from "effect/Effect";
13
+ import * as Equal from "effect/Equal";
14
+ import * as Hash from "effect/Hash";
15
+ import * as Option from "effect/Option";
16
+ import * as ParseResult from "effect/ParseResult";
17
+ import * as Pipeable from "effect/Pipeable";
18
+ import * as Schema from "effect/Schema";
19
+ import * as SchemaAST from "effect/SchemaAST";
20
+ import { Event } from "@dxos/async";
21
+ import { inspectCustom } from "@dxos/debug";
22
+ import { EncodedReference } from "@dxos/echo-protocol";
23
+ import { assertArgument, invariant } from "@dxos/invariant";
24
+ import { DXN, ObjectId } from "@dxos/keys";
25
+ var __dxlog_file = "/__w/dxos/dxos/packages/core/echo/echo/src/internal/Ref/ref.ts";
26
+ var JSON_SCHEMA_ECHO_REF_ID = "/schemas/echo/ref";
27
+ var getSchemaReference = (property) => {
28
+ const { $id, reference: { schema: { $ref } = {} } = {} } = property;
29
+ if ($id === JSON_SCHEMA_ECHO_REF_ID && $ref) {
30
+ return {
31
+ typename: DXN.parse($ref).typename
32
+ };
33
+ }
34
+ };
35
+ var createSchemaReference = (typename) => {
36
+ return {
37
+ $id: JSON_SCHEMA_ECHO_REF_ID,
38
+ reference: {
39
+ schema: {
40
+ $ref: DXN.fromTypename(typename).toString()
41
+ }
42
+ }
43
+ };
44
+ };
45
+ var getReferenceAst = (ast) => {
46
+ if (ast._tag !== "Declaration" || !ast.annotations[ReferenceAnnotationId]) {
47
+ return void 0;
48
+ }
49
+ return {
50
+ typename: ast.annotations[ReferenceAnnotationId].typename,
51
+ version: ast.annotations[ReferenceAnnotationId].version
52
+ };
53
+ };
54
+ var RefTypeId = /* @__PURE__ */ Symbol("@dxos/echo/internal/Ref");
55
+ var Ref = (schema) => {
56
+ assertArgument(Schema.isSchema(schema), "schema", "Must call with an instance of effect-schema");
57
+ const annotation = getTypeAnnotation(schema);
58
+ if (annotation == null) {
59
+ throw new Error("Reference target must be an ECHO schema.");
60
+ }
61
+ return createEchoReferenceSchema(getTypeIdentifierAnnotation(schema), annotation.typename, annotation.version);
62
+ };
63
+ Ref.isRef = (obj) => {
64
+ return obj && typeof obj === "object" && RefTypeId in obj;
65
+ };
66
+ Ref.hasObjectId = (id) => (ref) => ref.dxn.isLocalObjectId() && ref.dxn.parts[1] === id;
67
+ Ref.isRefSchema = (schema) => {
68
+ return Ref.isRefSchemaAST(schema.ast);
69
+ };
70
+ Ref.isRefSchemaAST = (ast) => {
71
+ return SchemaAST.getAnnotation(ast, ReferenceAnnotationId).pipe(Option.isSome);
72
+ };
73
+ Ref.make = (obj) => {
74
+ if (typeof obj !== "object" || obj === null) {
75
+ throw new TypeError("Expected: ECHO object.");
76
+ }
77
+ const id = obj.id;
78
+ invariant(ObjectId.isValid(id), "Invalid object ID", { "~LogMeta": "~LogMeta", F: __dxlog_file, L: 76, S: void 0, A: ["ObjectId.isValid(id)", "'Invalid object ID'"] });
79
+ const dxn = DXN.fromLocalObjectId(id);
80
+ return new RefImpl(dxn, obj);
81
+ };
82
+ Ref.fromDXN = (dxn) => {
83
+ assertArgument(dxn instanceof DXN, "dxn", "Expected DXN");
84
+ return new RefImpl(dxn);
85
+ };
86
+ var createEchoReferenceSchema = (echoId, typename, version) => {
87
+ if (!echoId && !typename) {
88
+ throw new TypeError("Either echoId or typename must be provided.");
89
+ }
90
+ const referenceInfo = {
91
+ schema: {
92
+ // TODO(dmaretskyi): Include version?
93
+ $ref: echoId ?? DXN.fromTypename(typename).toString()
94
+ },
95
+ schemaVersion: version
96
+ };
97
+ const refSchema = Schema.declare([], {
98
+ encode: () => {
99
+ return (value) => Effect.gen(function* () {
100
+ if (Ref.isRef(value)) {
101
+ return EncodedReference.fromDXN(value.dxn);
102
+ } else if (EncodedReference.isEncodedReference(value)) {
103
+ return value;
104
+ }
105
+ throw new Error("Invalid reference");
106
+ });
107
+ },
108
+ decode: () => {
109
+ return (value) => Effect.gen(function* () {
110
+ const dbService = yield* Effect.serviceOption(Service);
111
+ if (Ref.isRef(value)) {
112
+ if (Option.isSome(dbService)) {
113
+ return dbService.value.db.makeRef(value.dxn);
114
+ } else {
115
+ return value;
116
+ }
117
+ }
118
+ if (!EncodedReference.isEncodedReference(value)) {
119
+ return yield* Effect.fail(new ParseResult.Unexpected(value, "reference"));
120
+ }
121
+ if (Option.isSome(dbService)) {
122
+ return dbService.value.db.makeRef(EncodedReference.toDXN(value));
123
+ } else {
124
+ return Ref.fromDXN(EncodedReference.toDXN(value));
125
+ }
126
+ });
127
+ }
128
+ }, {
129
+ jsonSchema: {
130
+ // TODO(dmaretskyi): We should remove `$id` and keep `$ref` with a fully qualified name.
131
+ $id: JSON_SCHEMA_ECHO_REF_ID,
132
+ $ref: JSON_SCHEMA_ECHO_REF_ID,
133
+ reference: referenceInfo
134
+ },
135
+ [ReferenceAnnotationId]: {
136
+ typename: typename ?? "",
137
+ version
138
+ }
139
+ });
140
+ return refSchema;
141
+ };
142
+ var RefImpl = class _RefImpl {
143
+ #dxn;
144
+ #resolver = void 0;
145
+ #resolved = new Event();
146
+ /**
147
+ * Target is set when the reference is created from a specific object.
148
+ * In this case, the target might not be in the database.
149
+ */
150
+ #target = void 0;
151
+ /**
152
+ * Callback to issue a reactive notification when object is resolved.
153
+ */
154
+ #resolverCallback = () => {
155
+ this.#resolved.emit();
156
+ };
157
+ constructor(dxn, target) {
158
+ this.#dxn = dxn;
159
+ this.#target = target;
160
+ }
161
+ /**
162
+ * @inheritdoc
163
+ */
164
+ get dxn() {
165
+ return this.#dxn;
166
+ }
167
+ /**
168
+ * @inheritdoc
169
+ */
170
+ get isAvailable() {
171
+ return this.#target !== void 0 || this.#resolver !== void 0;
172
+ }
173
+ /**
174
+ * @inheritdoc
175
+ */
176
+ get target() {
177
+ if (this.#target) {
178
+ return this.#target;
179
+ }
180
+ invariant(this.#resolver, "Resolver is not set", { "~LogMeta": "~LogMeta", F: __dxlog_file, L: 181, S: this, A: ["this.#resolver", "'Resolver is not set'"] });
181
+ return this.#resolver.resolveSync(this.#dxn, true, this.#resolverCallback);
182
+ }
183
+ /**
184
+ * @inheritdoc
185
+ */
186
+ async load() {
187
+ if (this.#target) {
188
+ return this.#target;
189
+ }
190
+ invariant(this.#resolver, "Resolver is not set", { "~LogMeta": "~LogMeta", F: __dxlog_file, L: 190, S: this, A: ["this.#resolver", "'Resolver is not set'"] });
191
+ const obj = await this.#resolver.resolve(this.#dxn);
192
+ if (obj == null) {
193
+ throw new Error("Object not found");
194
+ }
195
+ return obj;
196
+ }
197
+ /**
198
+ * @inheritdoc
199
+ */
200
+ async tryLoad() {
201
+ if (this.#target) {
202
+ return this.#target;
203
+ }
204
+ invariant(this.#resolver, "Resolver is not set", { "~LogMeta": "~LogMeta", F: __dxlog_file, L: 203, S: this, A: ["this.#resolver", "'Resolver is not set'"] });
205
+ return await this.#resolver.resolve(this.#dxn);
206
+ }
207
+ /**
208
+ * @inheritdoc
209
+ */
210
+ onResolved(callback) {
211
+ return this.#resolved.on(callback);
212
+ }
213
+ /**
214
+ * Do not inline the target object in the reference.
215
+ * Makes .target unavailable unless the reference is connected to a database context.
216
+ * Clones the reference object.
217
+ */
218
+ noInline() {
219
+ const ref = new _RefImpl(this.#dxn, void 0);
220
+ ref.#resolver = this.#resolver;
221
+ return ref;
222
+ }
223
+ encode() {
224
+ return {
225
+ "/": this.#dxn.toString(),
226
+ ...this.#target ? {
227
+ target: this.#target
228
+ } : {}
229
+ };
230
+ }
231
+ /**
232
+ * Serializes the reference to a JSON object.
233
+ * The serialization format is compatible with the IPLD-style encoded references.
234
+ * When a reference has a saved target (i.e. the target or object holding the reference is not in the database),
235
+ * the target is included in the serialized object.
236
+ */
237
+ toJSON() {
238
+ return this.encode();
239
+ }
240
+ toString() {
241
+ if (this.#target) {
242
+ return `Ref(${this.#target.toString()})`;
243
+ }
244
+ return `Ref(${this.#dxn.toString()})`;
245
+ }
246
+ [inspectCustom] = (depth, options, inspect) => {
247
+ return this.toString();
248
+ };
249
+ [RefTypeId] = refVariance;
250
+ /**
251
+ * Effect Hash trait. Required for MutableHashMap-based caches (e.g., Atom.family)
252
+ * to deduplicate Ref instances that point to the same object.
253
+ * ECHO proxies return new RefImpl instances on every property access,
254
+ * so without this, each access would create a separate cache entry.
255
+ */
256
+ [Hash.symbol]() {
257
+ return Hash.hash(this.#dxn.toString());
258
+ }
259
+ /** Effect Equal trait. See {@link Hash.symbol} for rationale. */
260
+ [Equal.symbol](that) {
261
+ return that instanceof _RefImpl && this.#dxn.toString() === that.dxn.toString();
262
+ }
263
+ /**
264
+ * Internal method to set the resolver.
265
+ *
266
+ * @internal
267
+ */
268
+ _setResolver(resolver) {
269
+ this.#resolver = resolver;
270
+ }
271
+ /**
272
+ * @internal
273
+ */
274
+ _getSavedTarget() {
275
+ return this.#target;
276
+ }
277
+ pipe() {
278
+ return Pipeable.pipeArguments(this, arguments);
279
+ }
280
+ };
281
+ var setRefResolver = (ref, resolver) => {
282
+ invariant(ref instanceof RefImpl, "Ref is not an instance of RefImpl", { "~LogMeta": "~LogMeta", F: __dxlog_file, L: 277, S: void 0, A: ["ref instanceof RefImpl", "'Ref is not an instance of RefImpl'"] });
283
+ ref._setResolver(resolver);
284
+ };
285
+ var getRefSavedTarget = (ref) => {
286
+ invariant(ref instanceof RefImpl, "Ref is not an instance of RefImpl", { "~LogMeta": "~LogMeta", F: __dxlog_file, L: 283, S: void 0, A: ["ref instanceof RefImpl", "'Ref is not an instance of RefImpl'"] });
287
+ return ref._getSavedTarget();
288
+ };
289
+ var refVariance = {
290
+ _T: null
291
+ };
292
+ var refFromEncodedReference = (encodedReference, resolver) => {
293
+ const dxn = DXN.parse(encodedReference["/"]);
294
+ const ref = new RefImpl(dxn);
295
+ if (resolver) {
296
+ setRefResolver(ref, resolver);
297
+ }
298
+ return ref;
299
+ };
300
+ var StaticRefResolver = class {
301
+ objects = /* @__PURE__ */ new Map();
302
+ schemas = /* @__PURE__ */ new Map();
303
+ addObject(obj) {
304
+ this.objects.set(obj.id, obj);
305
+ return this;
306
+ }
307
+ addSchema(schema) {
308
+ const dxn = getSchemaDXN(schema);
309
+ invariant(dxn, "Schema has no DXN", { "~LogMeta": "~LogMeta", F: __dxlog_file, L: 308, S: this, A: ["dxn", "'Schema has no DXN'"] });
310
+ this.schemas.set(dxn.toString(), schema);
311
+ return this;
312
+ }
313
+ resolveSync(dxn, _load, _onLoad) {
314
+ const id = dxn?.asEchoDXN()?.echoId;
315
+ if (id == null) {
316
+ return void 0;
317
+ }
318
+ return this.objects.get(id);
319
+ }
320
+ async resolve(dxn) {
321
+ const id = dxn?.asEchoDXN()?.echoId;
322
+ if (id == null) {
323
+ return void 0;
324
+ }
325
+ return this.objects.get(id);
326
+ }
327
+ async resolveSchema(dxn) {
328
+ return this.schemas.get(dxn.toString());
329
+ }
330
+ };
331
+
332
+ export {
333
+ JSON_SCHEMA_ECHO_REF_ID,
334
+ getSchemaReference,
335
+ createSchemaReference,
336
+ getReferenceAst,
337
+ RefTypeId,
338
+ Ref,
339
+ createEchoReferenceSchema,
340
+ RefImpl,
341
+ setRefResolver,
342
+ getRefSavedTarget,
343
+ refFromEncodedReference,
344
+ StaticRefResolver
345
+ };
346
+ //# sourceMappingURL=chunk-BMB7IHGB.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/internal/Ref/ref.ts"],
4
+ "sourcesContent": ["//\n// Copyright 2024 DXOS.org\n//\n\nimport * as Effect from 'effect/Effect';\nimport * as Equal from 'effect/Equal';\nimport * as Hash from 'effect/Hash';\nimport * as Option from 'effect/Option';\nimport * as ParseResult from 'effect/ParseResult';\nimport * as Pipeable from 'effect/Pipeable';\nimport * as Schema from 'effect/Schema';\nimport * as SchemaAST from 'effect/SchemaAST';\nimport type * as Types from 'effect/Types';\n\nimport { Event } from '@dxos/async';\nimport { type CustomInspectFunction, inspectCustom } from '@dxos/debug';\nimport { EncodedReference } from '@dxos/echo-protocol';\nimport { assertArgument, invariant } from '@dxos/invariant';\nimport { DXN, ObjectId } from '@dxos/keys';\n\nimport * as Database from '../../Database';\nimport { ReferenceAnnotationId, getSchemaDXN, getTypeAnnotation, getTypeIdentifierAnnotation } from '../Annotation';\nimport type { AnyEntity, AnyProperties } from '../common/types';\nimport { type JsonSchemaType } from '../JsonSchema';\n\n/**\n * The `$id` and `$ref` fields for an ECHO reference schema.\n */\nexport const JSON_SCHEMA_ECHO_REF_ID = '/schemas/echo/ref';\n\nexport const getSchemaReference = (property: JsonSchemaType): { typename: string } | undefined => {\n const { $id, reference: { schema: { $ref } = {} } = {} } = property;\n if ($id === JSON_SCHEMA_ECHO_REF_ID && $ref) {\n return { typename: DXN.parse($ref).typename };\n }\n};\n\nexport const createSchemaReference = (typename: string): Types.DeepMutable<JsonSchemaType> => {\n return {\n $id: JSON_SCHEMA_ECHO_REF_ID,\n reference: {\n schema: {\n $ref: DXN.fromTypename(typename).toString(),\n },\n },\n };\n};\n\n/**\n * Runtime type-info for a reference extracted from effect AST.\n */\nexport type RefereneAST = {\n /**\n * Typename of linked schema.\n */\n typename: string;\n\n /**\n * Version of linked schema.\n */\n version: string;\n};\n\nexport const getReferenceAst = (ast: SchemaAST.AST): RefereneAST | undefined => {\n if (ast._tag !== 'Declaration' || !ast.annotations[ReferenceAnnotationId]) {\n return undefined;\n }\n return {\n typename: (ast.annotations[ReferenceAnnotationId] as any).typename,\n version: (ast.annotations[ReferenceAnnotationId] as any).version,\n };\n};\n\nexport const RefTypeId: unique symbol = Symbol('@dxos/echo/internal/Ref');\n\n/**\n * Reference Schema.\n */\nexport interface RefSchema<T extends AnyEntity> extends Schema.SchemaClass<Ref<T>, EncodedReference> {}\n\n/**\n * Type of the `Ref` function and extra methods attached to it.\n */\nexport interface RefFn {\n <S extends Schema.Schema.Any>(schema: S): RefSchema<Schema.Schema.Type<S>>;\n\n /**\n * @returns True if the object is a reference.\n */\n isRef: (obj: unknown) => obj is Ref<any>;\n\n /**\n * @returns True if the reference points to the given object id.\n */\n hasObjectId: (id: ObjectId) => (ref: Ref<any>) => boolean;\n\n /**\n * @returns True if the schema is a reference schema.\n */\n isRefSchema: (schema: Schema.Schema<any, any>) => schema is RefSchema<any>;\n\n /**\n * @returns True if the schema AST is a reference schema.\n */\n isRefSchemaAST: (ast: SchemaAST.AST) => boolean;\n\n /**\n * Constructs a reference that points to the given object.\n */\n // TODO(burdon): Narrow to Obj.Unknown?\n make: <T extends AnyEntity>(object: T) => Ref<T>;\n\n /**\n * Constructs a reference that points to the object specified by the provided DXN.\n */\n fromDXN: (dxn: DXN) => Ref<any>;\n}\n\n/**\n * Schema builder for references.\n */\nexport const Ref: RefFn = <S extends Schema.Schema.Any>(schema: S): RefSchema<Schema.Schema.Type<S>> => {\n assertArgument(Schema.isSchema(schema), 'schema', 'Must call with an instance of effect-schema');\n const annotation = getTypeAnnotation(schema);\n if (annotation == null) {\n throw new Error('Reference target must be an ECHO schema.');\n }\n\n return createEchoReferenceSchema(getTypeIdentifierAnnotation(schema), annotation.typename, annotation.version);\n};\n\n/**\n * Represents materialized reference to a target.\n * This is the data type for the fields marked as ref.\n */\nexport interface Ref<T> extends Pipeable.Pipeable {\n /**\n * Target object DXN.\n */\n get dxn(): DXN;\n\n /**\n * Returns true if the reference has a target available (inlined or resolver set).\n */\n get isAvailable(): boolean;\n\n /**\n * @returns The reference target.\n * May return `undefined` if the object is not loaded in the working set.\n * Accessing this property, even if it returns `undefined` will trigger the object to be loaded to the working set.\n */\n get target(): T | undefined;\n\n /**\n * @returns Promise that will resolves with the target object.\n * Will load the object from disk if it is not present in the working set.\n * @throws If the object is not available locally.\n */\n load(): Promise<T>;\n\n /**\n * @returns Promise that will resolves with the target object or undefined if the object is not loaded locally.\n */\n\n tryLoad(): Promise<T | undefined>;\n\n /**\n * Subscribe to the ref's resolution event.\n * The callback fires when the target object becomes available in the working set\n * (e.g. when its document is loaded after sibling-client mutation).\n * Note: the resolver only schedules a notification when the target is requested\n * via {@link target} while it is not yet loaded.\n * @returns Function that unsubscribes the callback.\n */\n onResolved(callback: () => void): () => void;\n\n /**\n * Do not inline the target object in the reference.\n * Makes .target unavailable unless the reference is connected to a database context.\n *\n * When serialized with toJSON, the difference is between:\n * `{ \"/\": \"dxn:...\" }`\n * and\n * `{ \"/\": \"dxn:...\", \"target\": { ... } }`\n *\n * Clones the reference object.\n */\n noInline(): Ref<T>;\n\n /**\n * Serializes the reference to a JSON object.\n * The serialization format is compatible with the IPLD-style encoded references.\n * When a reference has a saved target (i.e. the target or object holding the reference is not in the database),\n * the target is included in the serialized object.\n *\n * Examples:\n * `{ \"/\": \"dxn:...\" }`\n * `{ \"/\": \"dxn:...\", \"target\": { ... } }`\n */\n encode(): EncodedReference;\n\n [RefTypeId]: {\n _T: T;\n };\n}\n\nexport declare namespace Ref {\n /**\n * Target of the reference.\n */\n export type Target<R> = R extends Ref<infer U> ? U : never;\n}\n\nRef.isRef = (obj: any): obj is Ref<any> => {\n return obj && typeof obj === 'object' && RefTypeId in obj;\n};\n\nRef.hasObjectId = (id: ObjectId) => (ref: Ref<any>) => ref.dxn.isLocalObjectId() && ref.dxn.parts[1] === id;\n\nRef.isRefSchema = (schema: Schema.Schema<any, any>): schema is RefSchema<any> => {\n return Ref.isRefSchemaAST(schema.ast);\n};\n\nRef.isRefSchemaAST = (ast: SchemaAST.AST): boolean => {\n return SchemaAST.getAnnotation(ast, ReferenceAnnotationId).pipe(Option.isSome);\n};\n\nRef.make = <T extends AnyProperties>(obj: T): Ref<T> => {\n if (typeof obj !== 'object' || obj === null) {\n throw new TypeError('Expected: ECHO object.');\n }\n\n // TODO(dmaretskyi): Extract to `getObjectDXN` function.\n const id = obj.id;\n invariant(ObjectId.isValid(id), 'Invalid object ID');\n const dxn = DXN.fromLocalObjectId(id);\n return new RefImpl(dxn, obj);\n};\n\nRef.fromDXN = (dxn: DXN): Ref<any> => {\n assertArgument(dxn instanceof DXN, 'dxn', 'Expected DXN');\n return new RefImpl(dxn);\n};\n\n/**\n * `reference` field on the schema object.\n */\nexport type JsonSchemaReferenceInfo = {\n schema: { $ref: string };\n schemaVersion?: string;\n};\n\n/**\n * @internal\n */\n// TODO(burdon): Move to json schema and make private?\nexport const createEchoReferenceSchema = (\n echoId: string | undefined,\n typename: string | undefined,\n version: string | undefined,\n): Schema.SchemaClass<Ref<any>, EncodedReference> => {\n if (!echoId && !typename) {\n throw new TypeError('Either echoId or typename must be provided.');\n }\n\n const referenceInfo: JsonSchemaReferenceInfo = {\n schema: {\n // TODO(dmaretskyi): Include version?\n $ref: echoId ?? DXN.fromTypename(typename!).toString(),\n },\n schemaVersion: version,\n };\n\n // TODO(dmaretskyi): Add name and description.\n const refSchema = Schema.declare<Ref<any>, EncodedReference, []>(\n [],\n {\n encode: () => {\n return (value) =>\n Effect.gen(function* () {\n if (Ref.isRef(value)) {\n return EncodedReference.fromDXN((value as Ref<any>).dxn);\n } else if (EncodedReference.isEncodedReference(value)) {\n return value;\n }\n throw new Error('Invalid reference');\n });\n },\n decode: () => {\n return (value) =>\n Effect.gen(function* () {\n const dbService = yield* Effect.serviceOption(Database.Service);\n\n // TODO(dmaretskyi): This branch seems to be taken by Schema.is\n if (Ref.isRef(value)) {\n if (Option.isSome(dbService)) {\n return dbService.value.db.makeRef(value.dxn);\n } else {\n return value;\n }\n }\n\n if (!EncodedReference.isEncodedReference(value)) {\n return yield* Effect.fail(new ParseResult.Unexpected(value, 'reference'));\n }\n if (Option.isSome(dbService)) {\n return dbService.value.db.makeRef(EncodedReference.toDXN(value));\n } else {\n return Ref.fromDXN(EncodedReference.toDXN(value));\n }\n });\n },\n },\n {\n jsonSchema: {\n // TODO(dmaretskyi): We should remove `$id` and keep `$ref` with a fully qualified name.\n $id: JSON_SCHEMA_ECHO_REF_ID,\n $ref: JSON_SCHEMA_ECHO_REF_ID,\n reference: referenceInfo,\n },\n [ReferenceAnnotationId]: {\n typename: typename ?? '',\n version,\n },\n },\n );\n\n return refSchema;\n};\n\nconst getSchemaExpectedName = (ast: SchemaAST.Annotated): string | undefined => {\n return SchemaAST.getIdentifierAnnotation(ast).pipe(\n Option.orElse(() => SchemaAST.getTitleAnnotation(ast)),\n Option.orElse(() => SchemaAST.getDescriptionAnnotation(ast)),\n Option.getOrElse(() => undefined),\n );\n};\n\nexport interface RefResolver {\n /**\n * Resolve ref synchronously from the objects in the working set.\n *\n * @param dxn\n * @param load If true the resolver should attempt to load the object from disk.\n * @param onLoad Callback to call when the object is loaded.\n */\n resolveSync(dxn: DXN, load: boolean, onLoad?: () => void): AnyProperties | undefined;\n\n /**\n * Resolver ref asynchronously.\n */\n resolve(dxn: DXN): Promise<AnyProperties | undefined>;\n\n // TODO(dmaretskyi): Combine with `resolve`.\n resolveSchema(dxn: DXN): Promise<Schema.Schema.AnyNoContext | undefined>;\n}\n\nexport class RefImpl<T> implements Ref<T> {\n #dxn: DXN;\n #resolver?: RefResolver = undefined;\n #resolved = new Event<void>();\n\n /**\n * Target is set when the reference is created from a specific object.\n * In this case, the target might not be in the database.\n */\n #target: T | undefined = undefined;\n\n /**\n * Callback to issue a reactive notification when object is resolved.\n */\n #resolverCallback = () => {\n this.#resolved.emit();\n };\n\n constructor(dxn: DXN, target?: T) {\n this.#dxn = dxn;\n this.#target = target;\n }\n\n /**\n * @inheritdoc\n */\n get dxn(): DXN {\n return this.#dxn;\n }\n\n /**\n * @inheritdoc\n */\n get isAvailable(): boolean {\n return this.#target !== undefined || this.#resolver !== undefined;\n }\n\n /**\n * @inheritdoc\n */\n get target(): T | undefined {\n if (this.#target) {\n return this.#target;\n }\n\n invariant(this.#resolver, 'Resolver is not set');\n return this.#resolver.resolveSync(this.#dxn, true, this.#resolverCallback) as T | undefined;\n }\n\n /**\n * @inheritdoc\n */\n async load(): Promise<T> {\n if (this.#target) {\n return this.#target;\n }\n invariant(this.#resolver, 'Resolver is not set');\n const obj = await this.#resolver.resolve(this.#dxn);\n if (obj == null) {\n throw new Error('Object not found');\n }\n return obj as T;\n }\n\n /**\n * @inheritdoc\n */\n async tryLoad(): Promise<T | undefined> {\n if (this.#target) {\n return this.#target;\n }\n invariant(this.#resolver, 'Resolver is not set');\n return (await this.#resolver.resolve(this.#dxn)) as T | undefined;\n }\n\n /**\n * @inheritdoc\n */\n onResolved(callback: () => void): () => void {\n return this.#resolved.on(callback);\n }\n\n /**\n * Do not inline the target object in the reference.\n * Makes .target unavailable unless the reference is connected to a database context.\n * Clones the reference object.\n */\n noInline(): RefImpl<T> {\n const ref = new RefImpl<T>(this.#dxn, undefined);\n ref.#resolver = this.#resolver;\n return ref;\n }\n\n encode(): EncodedReference {\n return {\n '/': this.#dxn.toString(),\n ...(this.#target ? { target: this.#target } : {}),\n };\n }\n\n /**\n * Serializes the reference to a JSON object.\n * The serialization format is compatible with the IPLD-style encoded references.\n * When a reference has a saved target (i.e. the target or object holding the reference is not in the database),\n * the target is included in the serialized object.\n */\n toJSON(): EncodedReference {\n return this.encode();\n }\n\n toString(): string {\n if (this.#target) {\n return `Ref(${this.#target.toString()})`;\n }\n\n return `Ref(${this.#dxn.toString()})`;\n }\n\n [inspectCustom]: CustomInspectFunction = (depth, options, inspect) => {\n return this.toString();\n };\n\n [RefTypeId] = refVariance;\n\n /**\n * Effect Hash trait. Required for MutableHashMap-based caches (e.g., Atom.family)\n * to deduplicate Ref instances that point to the same object.\n * ECHO proxies return new RefImpl instances on every property access,\n * so without this, each access would create a separate cache entry.\n */\n [Hash.symbol](): number {\n return Hash.hash(this.#dxn.toString());\n }\n\n /** Effect Equal trait. See {@link Hash.symbol} for rationale. */\n [Equal.symbol](that: Equal.Equal): boolean {\n return that instanceof RefImpl && this.#dxn.toString() === that.dxn.toString();\n }\n\n /**\n * Internal method to set the resolver.\n *\n * @internal\n */\n _setResolver(resolver: RefResolver): void {\n this.#resolver = resolver;\n }\n\n /**\n * @internal\n */\n _getSavedTarget(): T | undefined {\n return this.#target;\n }\n\n pipe() {\n // eslint-disable-next-line prefer-rest-params\n return Pipeable.pipeArguments(this, arguments);\n }\n}\n\n/**\n * Internal API for setting the reference resolver.\n */\nexport const setRefResolver = (ref: Ref<any>, resolver: RefResolver) => {\n invariant(ref instanceof RefImpl, 'Ref is not an instance of RefImpl');\n ref._setResolver(resolver);\n};\n\n/**\n * Internal API for getting the saved target on a reference.\n */\nexport const getRefSavedTarget = (ref: Ref<any>): AnyProperties | undefined => {\n invariant(ref instanceof RefImpl, 'Ref is not an instance of RefImpl');\n return ref._getSavedTarget();\n};\n\n// Used to validate reference target type.\nconst refVariance: Ref<any>[typeof RefTypeId] = {\n _T: null as any,\n};\n\nexport const refFromEncodedReference = (encodedReference: EncodedReference, resolver?: RefResolver): Ref<any> => {\n const dxn = DXN.parse(encodedReference['/']);\n const ref = new RefImpl(dxn);\n\n // TODO(dmaretskyi): Handle inline target in the encoded reference.\n\n if (resolver) {\n setRefResolver(ref, resolver);\n }\n return ref;\n};\n\nexport class StaticRefResolver implements RefResolver {\n public objects = new Map<ObjectId, AnyProperties>();\n public schemas = new Map<DXN.String, Schema.Schema.AnyNoContext>();\n\n addObject(obj: AnyProperties): this {\n this.objects.set(obj.id, obj);\n return this;\n }\n\n addSchema(schema: Schema.Schema.AnyNoContext): this {\n const dxn = getSchemaDXN(schema);\n invariant(dxn, 'Schema has no DXN');\n this.schemas.set(dxn.toString(), schema);\n return this;\n }\n\n resolveSync(dxn: DXN, _load: boolean, _onLoad?: () => void): AnyProperties | undefined {\n const id = dxn?.asEchoDXN()?.echoId;\n if (id == null) {\n return undefined;\n }\n\n return this.objects.get(id);\n }\n\n async resolve(dxn: DXN): Promise<AnyProperties | undefined> {\n const id = dxn?.asEchoDXN()?.echoId;\n if (id == null) {\n return undefined;\n }\n\n return this.objects.get(id);\n }\n\n async resolveSchema(dxn: DXN): Promise<Schema.Schema.AnyNoContext | undefined> {\n return this.schemas.get(dxn.toString());\n }\n}\n"],
5
+ "mappings": "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",
6
+ "names": ["Effect", "Equal", "Hash", "Option", "ParseResult", "Pipeable", "Schema", "SchemaAST", "Event", "inspectCustom", "EncodedReference", "assertArgument", "invariant", "DXN", "ObjectId", "reference", "$ref", "$id", "JSON_SCHEMA_ECHO_REF_ID", "typename", "schema", "undefined", "version", "annotation", "getTypeAnnotation", "Error", "createEchoReferenceSchema", "isRef", "obj", "hasObjectId", "ref", "isLocalObjectId", "Ref", "isRefSchemaAST", "ast", "make", "TypeError", "dxn", "DXN", "fromDXN", "RefImpl", "referenceInfo", "schemaVersion", "Effect", "gen", "EncodedReference", "value", "dbService", "Option", "isSome", "jsonSchema", "ReferenceAnnotationId", "getSchemaExpectedName", "undefined", "target", "invariant", "obj", "Error", "ref", "encode", "toString", "inspectCustom", "depth", "options", "inspect", "RefTypeId", "refVariance", "pipe", "_setResolver", "resolver", "_getSavedTarget", "dxn", "schemas", "addObject", "objects", "set", "addSchema", "schema", "resolveSync", "id", "resolve", "resolveSchema"]
7
+ }