@dxos/echo 0.8.4-main.40e3dcdf1b → 0.8.4-main.43cb759274

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 (428) hide show
  1. package/LICENSE +102 -5
  2. package/README.md +7 -7
  3. package/dist/lib/neutral/Annotation.mjs +29 -6
  4. package/dist/lib/neutral/Database.mjs +8 -9
  5. package/dist/lib/neutral/Entity.mjs +29 -18
  6. package/dist/lib/neutral/Err.mjs +3 -3
  7. package/dist/lib/neutral/Feed.mjs +27 -19
  8. package/dist/lib/neutral/Filter.mjs +25 -15
  9. package/dist/lib/neutral/Format.mjs +23 -3
  10. package/dist/lib/neutral/JsonSchema.mjs +7 -8
  11. package/dist/lib/neutral/Key.mjs +9 -5
  12. package/dist/lib/neutral/Migration.mjs +18 -0
  13. package/dist/lib/neutral/Obj.mjs +25 -19
  14. package/dist/lib/neutral/Order.mjs +1 -1
  15. package/dist/lib/neutral/Query.mjs +19 -16
  16. package/dist/lib/neutral/QueryResult.mjs +1 -1
  17. package/dist/lib/neutral/Ref.mjs +10 -9
  18. package/dist/lib/neutral/Registry.mjs +14 -0
  19. package/dist/lib/neutral/Registry.mjs.map +7 -0
  20. package/dist/lib/neutral/Relation.mjs +26 -24
  21. package/dist/lib/neutral/Scope.mjs +12 -0
  22. package/dist/lib/neutral/Scope.mjs.map +7 -0
  23. package/dist/lib/neutral/Tag.mjs +17 -13
  24. package/dist/lib/neutral/Type.mjs +52 -26
  25. package/dist/lib/neutral/chunk-3DKP2EIN.mjs +31 -0
  26. package/dist/lib/neutral/chunk-3DKP2EIN.mjs.map +7 -0
  27. package/dist/lib/neutral/chunk-4BB4MFCN.mjs +154 -0
  28. package/dist/lib/neutral/chunk-4BB4MFCN.mjs.map +7 -0
  29. package/dist/lib/neutral/{chunk-CIRHIEMW.mjs → chunk-4SFPZJVA.mjs} +92 -112
  30. package/dist/lib/neutral/chunk-4SFPZJVA.mjs.map +7 -0
  31. package/dist/lib/neutral/{chunk-YWXWXIE5.mjs → chunk-4Z6GET2X.mjs} +3 -3
  32. package/dist/lib/neutral/chunk-4Z6GET2X.mjs.map +7 -0
  33. package/dist/lib/neutral/{chunk-ANHVGJI4.mjs → chunk-7LOUAPYZ.mjs} +9 -5
  34. package/dist/lib/neutral/chunk-7LOUAPYZ.mjs.map +7 -0
  35. package/dist/lib/neutral/{chunk-43Y5DOS6.mjs → chunk-7OAFN3OX.mjs} +75 -112
  36. package/dist/lib/neutral/chunk-7OAFN3OX.mjs.map +7 -0
  37. package/dist/lib/neutral/{chunk-BOZZPUXE.mjs → chunk-7PRCIDHH.mjs} +41 -81
  38. package/dist/lib/neutral/chunk-7PRCIDHH.mjs.map +7 -0
  39. package/dist/lib/neutral/{chunk-UBEZSGXY.mjs → chunk-BBFJWWAV.mjs} +6 -6
  40. package/dist/lib/neutral/chunk-BBFJWWAV.mjs.map +7 -0
  41. package/dist/lib/neutral/chunk-BDQGMDIX.mjs +132 -0
  42. package/dist/lib/neutral/chunk-BDQGMDIX.mjs.map +7 -0
  43. package/dist/lib/neutral/chunk-CGTI5MXO.mjs +36 -0
  44. package/dist/lib/neutral/chunk-CGTI5MXO.mjs.map +7 -0
  45. package/dist/lib/neutral/{chunk-OMUPQMLR.mjs → chunk-DKLUHO4T.mjs} +1 -1
  46. package/dist/lib/neutral/chunk-DKLUHO4T.mjs.map +7 -0
  47. package/dist/lib/neutral/chunk-DMN2CKPX.mjs +93 -0
  48. package/dist/lib/neutral/chunk-DMN2CKPX.mjs.map +7 -0
  49. package/dist/lib/neutral/{chunk-UTBRYVQC.mjs → chunk-G6CFWUYH.mjs} +2 -2
  50. package/dist/lib/neutral/chunk-H26LSXVJ.mjs +653 -0
  51. package/dist/lib/neutral/chunk-H26LSXVJ.mjs.map +7 -0
  52. package/dist/lib/neutral/{chunk-FXEG7EOK.mjs → chunk-J3MNM65T.mjs} +9 -6
  53. package/dist/lib/neutral/chunk-J3MNM65T.mjs.map +7 -0
  54. package/dist/lib/neutral/chunk-JE7AOSWF.mjs +247 -0
  55. package/dist/lib/neutral/chunk-JE7AOSWF.mjs.map +7 -0
  56. package/dist/lib/neutral/chunk-LAF3LSWI.mjs +379 -0
  57. package/dist/lib/neutral/chunk-LAF3LSWI.mjs.map +7 -0
  58. package/dist/lib/neutral/chunk-LMNRFOVB.mjs +108 -0
  59. package/dist/lib/neutral/chunk-LMNRFOVB.mjs.map +7 -0
  60. package/dist/lib/neutral/{chunk-WYOKA6AE.mjs → chunk-O6BH7EPN.mjs} +31 -4
  61. package/dist/lib/neutral/chunk-O6BH7EPN.mjs.map +7 -0
  62. package/dist/lib/neutral/{chunk-KTAWP7GI.mjs → chunk-OIYW7R2G.mjs} +99 -46
  63. package/dist/lib/neutral/chunk-OIYW7R2G.mjs.map +7 -0
  64. package/dist/lib/neutral/{chunk-TQQZLKB7.mjs → chunk-OYUG4FHF.mjs} +648 -1228
  65. package/dist/lib/neutral/chunk-OYUG4FHF.mjs.map +7 -0
  66. package/dist/lib/neutral/{chunk-NQRLRYJM.mjs → chunk-Q5FKCVBC.mjs} +173 -60
  67. package/dist/lib/neutral/chunk-Q5FKCVBC.mjs.map +7 -0
  68. package/dist/lib/neutral/chunk-Q62IHV2N.mjs +41 -0
  69. package/dist/lib/neutral/chunk-Q62IHV2N.mjs.map +7 -0
  70. package/dist/lib/neutral/{chunk-UFDK26FO.mjs → chunk-QVJDDG44.mjs} +69 -34
  71. package/dist/lib/neutral/chunk-QVJDDG44.mjs.map +7 -0
  72. package/dist/lib/neutral/{chunk-B5OXLWZL.mjs → chunk-TFEWTY5A.mjs} +155 -129
  73. package/dist/lib/neutral/chunk-TFEWTY5A.mjs.map +7 -0
  74. package/dist/lib/neutral/{chunk-UI6MWK5W.mjs → chunk-TTCSATUD.mjs} +1 -1
  75. package/dist/lib/neutral/{chunk-FZO7LQO7.mjs → chunk-VKWOFXT2.mjs} +22 -2
  76. package/dist/lib/neutral/{chunk-FZO7LQO7.mjs.map → chunk-VKWOFXT2.mjs.map} +1 -1
  77. package/dist/lib/neutral/{chunk-NXMFBIT5.mjs → chunk-ZACMEAYV.mjs} +89 -23
  78. package/dist/lib/neutral/chunk-ZACMEAYV.mjs.map +7 -0
  79. package/dist/lib/neutral/index.mjs +58 -38
  80. package/dist/lib/neutral/internal/index.mjs +131 -64
  81. package/dist/lib/neutral/meta.json +1 -1
  82. package/dist/lib/neutral/testing/index.mjs +222 -177
  83. package/dist/lib/neutral/testing/index.mjs.map +3 -3
  84. package/dist/types/src/Annotation.d.ts +108 -4
  85. package/dist/types/src/Annotation.d.ts.map +1 -1
  86. package/dist/types/src/Annotation.test.d.ts +2 -0
  87. package/dist/types/src/Annotation.test.d.ts.map +1 -0
  88. package/dist/types/src/Collection.d.ts +2 -3
  89. package/dist/types/src/Collection.d.ts.map +1 -1
  90. package/dist/types/src/Database.d.ts +56 -24
  91. package/dist/types/src/Database.d.ts.map +1 -1
  92. package/dist/types/src/Dataset.d.ts +17 -6
  93. package/dist/types/src/Dataset.d.ts.map +1 -1
  94. package/dist/types/src/Entity.d.ts +102 -26
  95. package/dist/types/src/Entity.d.ts.map +1 -1
  96. package/dist/types/src/Err.d.ts +27 -27
  97. package/dist/types/src/Err.d.ts.map +1 -1
  98. package/dist/types/src/Feed.d.ts +89 -25
  99. package/dist/types/src/Feed.d.ts.map +1 -1
  100. package/dist/types/src/Filter.d.ts +74 -11
  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/Hypergraph.d.ts +14 -9
  105. package/dist/types/src/Hypergraph.d.ts.map +1 -1
  106. package/dist/types/src/Json.d.ts +33 -0
  107. package/dist/types/src/Json.d.ts.map +1 -0
  108. package/dist/types/src/Json.test.d.ts +2 -0
  109. package/dist/types/src/Json.test.d.ts.map +1 -0
  110. package/dist/types/src/JsonSchema.d.ts +2 -2
  111. package/dist/types/src/JsonSchema.d.ts.map +1 -1
  112. package/dist/types/src/Key.d.ts +1 -1
  113. package/dist/types/src/Key.d.ts.map +1 -1
  114. package/dist/types/src/Migration.d.ts +72 -0
  115. package/dist/types/src/Migration.d.ts.map +1 -0
  116. package/dist/types/src/Obj.d.ts +108 -65
  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 +35 -10
  120. package/dist/types/src/Query.d.ts.map +1 -1
  121. package/dist/types/src/QueryResult.d.ts +9 -0
  122. package/dist/types/src/QueryResult.d.ts.map +1 -1
  123. package/dist/types/src/Ref.d.ts +15 -7
  124. package/dist/types/src/Ref.d.ts.map +1 -1
  125. package/dist/types/src/Registry.d.ts +131 -0
  126. package/dist/types/src/Registry.d.ts.map +1 -0
  127. package/dist/types/src/Relation.d.ts +72 -44
  128. package/dist/types/src/Relation.d.ts.map +1 -1
  129. package/dist/types/src/Scope.d.ts +34 -0
  130. package/dist/types/src/Scope.d.ts.map +1 -0
  131. package/dist/types/src/StateMap.d.ts +32 -0
  132. package/dist/types/src/StateMap.d.ts.map +1 -0
  133. package/dist/types/src/StateMap.test.d.ts +2 -0
  134. package/dist/types/src/StateMap.test.d.ts.map +1 -0
  135. package/dist/types/src/Tag.d.ts +21 -5
  136. package/dist/types/src/Tag.d.ts.map +1 -1
  137. package/dist/types/src/TagIndex.d.ts +36 -0
  138. package/dist/types/src/TagIndex.d.ts.map +1 -0
  139. package/dist/types/src/TagIndex.test.d.ts +2 -0
  140. package/dist/types/src/TagIndex.test.d.ts.map +1 -0
  141. package/dist/types/src/Tagging.d.ts +31 -0
  142. package/dist/types/src/Tagging.d.ts.map +1 -0
  143. package/dist/types/src/Type.d.ts +357 -96
  144. package/dist/types/src/Type.d.ts.map +1 -1
  145. package/dist/types/src/View.d.ts +2 -5
  146. package/dist/types/src/View.d.ts.map +1 -1
  147. package/dist/types/src/exemplars.test.d.ts +2 -0
  148. package/dist/types/src/exemplars.test.d.ts.map +1 -0
  149. package/dist/types/src/index.d.ts +8 -2
  150. package/dist/types/src/index.d.ts.map +1 -1
  151. package/dist/types/src/internal/Annotation/annotations.d.ts +79 -37
  152. package/dist/types/src/internal/Annotation/annotations.d.ts.map +1 -1
  153. package/dist/types/src/internal/Annotation/dictionary.d.ts +24 -0
  154. package/dist/types/src/internal/Annotation/dictionary.d.ts.map +1 -0
  155. package/dist/types/src/internal/Annotation/entity-dictionary.d.ts +14 -0
  156. package/dist/types/src/internal/Annotation/entity-dictionary.d.ts.map +1 -0
  157. package/dist/types/src/internal/Annotation/index.d.ts +4 -2
  158. package/dist/types/src/internal/Annotation/index.d.ts.map +1 -1
  159. package/dist/types/src/internal/Annotation/sorting.d.ts.map +1 -1
  160. package/dist/types/src/internal/Annotation/util.d.ts +14 -5
  161. package/dist/types/src/internal/Annotation/util.d.ts.map +1 -1
  162. package/dist/types/src/internal/Entity/api.d.ts +3 -3
  163. package/dist/types/src/internal/Entity/api.d.ts.map +1 -1
  164. package/dist/types/src/internal/Entity/entity.d.ts +72 -8
  165. package/dist/types/src/internal/Entity/entity.d.ts.map +1 -1
  166. package/dist/types/src/internal/Entity/guard.d.ts +10 -0
  167. package/dist/types/src/internal/Entity/guard.d.ts.map +1 -0
  168. package/dist/types/src/internal/Entity/index.d.ts +2 -0
  169. package/dist/types/src/internal/Entity/index.d.ts.map +1 -1
  170. package/dist/types/src/internal/Entity/model.d.ts +20 -17
  171. package/dist/types/src/internal/Entity/model.d.ts.map +1 -1
  172. package/dist/types/src/internal/Entity/object.d.ts +3 -3
  173. package/dist/types/src/internal/Entity/object.d.ts.map +1 -1
  174. package/dist/types/src/internal/Entity/relation.d.ts +30 -7
  175. package/dist/types/src/internal/Entity/relation.d.ts.map +1 -1
  176. package/dist/types/src/internal/Entity/type-kind.d.ts +24 -0
  177. package/dist/types/src/internal/Entity/type-kind.d.ts.map +1 -0
  178. package/dist/types/src/internal/Entity/type-uri.d.ts +25 -0
  179. package/dist/types/src/internal/Entity/type-uri.d.ts.map +1 -0
  180. package/dist/types/src/internal/Entity/version.d.ts.map +1 -1
  181. package/dist/types/src/internal/Format/date.d.ts.map +1 -1
  182. package/dist/types/src/internal/Format/format.d.ts +3 -2
  183. package/dist/types/src/internal/Format/format.d.ts.map +1 -1
  184. package/dist/types/src/internal/Format/index.d.ts +2 -2
  185. package/dist/types/src/internal/Format/index.d.ts.map +1 -1
  186. package/dist/types/src/internal/Format/number.d.ts.map +1 -1
  187. package/dist/types/src/internal/Format/object.d.ts +3 -1
  188. package/dist/types/src/internal/Format/object.d.ts.map +1 -1
  189. package/dist/types/src/internal/Format/types.d.ts.map +1 -1
  190. package/dist/types/src/internal/JsonSchema/json-schema-normalize.d.ts.map +1 -1
  191. package/dist/types/src/internal/JsonSchema/json-schema-type.d.ts +28 -28
  192. package/dist/types/src/internal/JsonSchema/json-schema-type.d.ts.map +1 -1
  193. package/dist/types/src/internal/JsonSchema/json-schema.d.ts +3 -2
  194. package/dist/types/src/internal/JsonSchema/json-schema.d.ts.map +1 -1
  195. package/dist/types/src/internal/Obj/clone.d.ts.map +1 -1
  196. package/dist/types/src/internal/Obj/common.d.ts.map +1 -1
  197. package/dist/types/src/internal/Obj/create-object.d.ts +11 -12
  198. package/dist/types/src/internal/Obj/create-object.d.ts.map +1 -1
  199. package/dist/types/src/internal/Obj/deleted.d.ts.map +1 -1
  200. package/dist/types/src/internal/Obj/index.d.ts +0 -1
  201. package/dist/types/src/internal/Obj/index.d.ts.map +1 -1
  202. package/dist/types/src/internal/Obj/json-serializer.d.ts +11 -10
  203. package/dist/types/src/internal/Obj/json-serializer.d.ts.map +1 -1
  204. package/dist/types/src/internal/Obj/set-value.d.ts +1 -1
  205. package/dist/types/src/internal/Obj/set-value.d.ts.map +1 -1
  206. package/dist/types/src/internal/Obj/snapshot.d.ts.map +1 -1
  207. package/dist/types/src/internal/Obj/typed-object.d.ts +1 -1
  208. package/dist/types/src/internal/Query.d.ts +10 -0
  209. package/dist/types/src/internal/Query.d.ts.map +1 -0
  210. package/dist/types/src/internal/Ref/ref-array.d.ts +2 -2
  211. package/dist/types/src/internal/Ref/ref-array.d.ts.map +1 -1
  212. package/dist/types/src/internal/Ref/ref.d.ts +42 -19
  213. package/dist/types/src/internal/Ref/ref.d.ts.map +1 -1
  214. package/dist/types/src/internal/Type/compose.d.ts.map +1 -1
  215. package/dist/types/src/internal/Type/index.d.ts +1 -2
  216. package/dist/types/src/internal/Type/index.d.ts.map +1 -1
  217. package/dist/types/src/internal/Type/manipulation.d.ts +0 -1
  218. package/dist/types/src/internal/Type/manipulation.d.ts.map +1 -1
  219. package/dist/types/src/internal/Type/type-schema.d.ts +52 -0
  220. package/dist/types/src/internal/Type/type-schema.d.ts.map +1 -0
  221. package/dist/types/src/internal/common/api/meta.d.ts +14 -11
  222. package/dist/types/src/internal/common/api/meta.d.ts.map +1 -1
  223. package/dist/types/src/internal/common/proxy/change-context.d.ts +1 -1
  224. package/dist/types/src/internal/common/proxy/change-context.d.ts.map +1 -1
  225. package/dist/types/src/internal/common/proxy/define-hidden-property.d.ts.map +1 -1
  226. package/dist/types/src/internal/common/proxy/errors.d.ts +1 -1
  227. package/dist/types/src/internal/common/proxy/errors.d.ts.map +1 -1
  228. package/dist/types/src/internal/common/proxy/event-batch.d.ts.map +1 -1
  229. package/dist/types/src/internal/common/proxy/json-serializer.d.ts.map +1 -1
  230. package/dist/types/src/internal/common/proxy/make-object.d.ts +11 -5
  231. package/dist/types/src/internal/common/proxy/make-object.d.ts.map +1 -1
  232. package/dist/types/src/internal/common/proxy/ownership.d.ts.map +1 -1
  233. package/dist/types/src/internal/common/proxy/proxy-utils.d.ts.map +1 -1
  234. package/dist/types/src/internal/common/proxy/reactive-array.d.ts +1 -1
  235. package/dist/types/src/internal/common/proxy/reactive.d.ts +1 -1
  236. package/dist/types/src/internal/common/proxy/reactive.d.ts.map +1 -1
  237. package/dist/types/src/internal/common/proxy/reactive.test.d.ts +2 -0
  238. package/dist/types/src/internal/common/proxy/reactive.test.d.ts.map +1 -0
  239. package/dist/types/src/internal/common/proxy/schema-validator.d.ts.map +1 -1
  240. package/dist/types/src/internal/common/proxy/typed-handler.d.ts +18 -2
  241. package/dist/types/src/internal/common/proxy/typed-handler.d.ts.map +1 -1
  242. package/dist/types/src/internal/common/types/base.d.ts +4 -4
  243. package/dist/types/src/internal/common/types/base.d.ts.map +1 -1
  244. package/dist/types/src/internal/common/types/entity.d.ts +63 -6
  245. package/dist/types/src/internal/common/types/entity.d.ts.map +1 -1
  246. package/dist/types/src/internal/common/types/index.d.ts +1 -1
  247. package/dist/types/src/internal/common/types/index.d.ts.map +1 -1
  248. package/dist/types/src/internal/common/types/meta.d.ts +23 -7
  249. package/dist/types/src/internal/common/types/meta.d.ts.map +1 -1
  250. package/dist/types/src/internal/common/types/model-symbols.d.ts +8 -4
  251. package/dist/types/src/internal/common/types/model-symbols.d.ts.map +1 -1
  252. package/dist/types/src/internal/common/types/typename.d.ts +7 -0
  253. package/dist/types/src/internal/common/types/typename.d.ts.map +1 -1
  254. package/dist/types/src/internal/common/types/version.d.ts +1 -1
  255. package/dist/types/src/internal/common/types/well-known-types.d.ts +11 -0
  256. package/dist/types/src/internal/common/types/well-known-types.d.ts.map +1 -0
  257. package/dist/types/src/internal/index.d.ts +2 -0
  258. package/dist/types/src/internal/index.d.ts.map +1 -1
  259. package/dist/types/src/testing/test-data.d.ts +8 -8
  260. package/dist/types/src/testing/test-data.d.ts.map +1 -1
  261. package/dist/types/src/testing/test-schema.d.ts +83 -89
  262. package/dist/types/src/testing/test-schema.d.ts.map +1 -1
  263. package/dist/types/src/testing/util.d.ts +5 -3
  264. package/dist/types/src/testing/util.d.ts.map +1 -1
  265. package/dist/types/tsconfig.tsbuildinfo +1 -1
  266. package/package.json +27 -19
  267. package/src/Annotation.test.ts +439 -0
  268. package/src/Annotation.ts +152 -4
  269. package/src/Collection.ts +6 -5
  270. package/src/Database.ts +117 -57
  271. package/src/Dataset.ts +10 -2
  272. package/src/Entity.test.ts +116 -6
  273. package/src/Entity.ts +130 -31
  274. package/src/Err.ts +4 -4
  275. package/src/Feed.ts +138 -43
  276. package/src/Filter.test.ts +90 -0
  277. package/src/Filter.ts +143 -27
  278. package/src/Hypergraph.ts +14 -9
  279. package/src/Json.test.ts +175 -0
  280. package/src/Json.ts +103 -0
  281. package/src/Key.ts +1 -1
  282. package/src/Migration.ts +114 -0
  283. package/src/Obj.test.ts +122 -19
  284. package/src/Obj.ts +279 -97
  285. package/src/Query.test.ts +317 -131
  286. package/src/Query.ts +181 -73
  287. package/src/QueryResult.ts +11 -0
  288. package/src/Ref.ts +22 -4
  289. package/src/Registry.ts +155 -0
  290. package/src/Relation.test.ts +10 -10
  291. package/src/Relation.ts +112 -71
  292. package/src/Scope.ts +50 -0
  293. package/src/StateMap.test.ts +56 -0
  294. package/src/StateMap.ts +99 -0
  295. package/src/Tag.md +88 -0
  296. package/src/Tag.ts +49 -6
  297. package/src/TagIndex.test.ts +57 -0
  298. package/src/TagIndex.ts +110 -0
  299. package/src/Tagging.ts +83 -0
  300. package/src/Type.test.ts +223 -18
  301. package/src/Type.ts +602 -132
  302. package/src/View.ts +11 -15
  303. package/src/exemplars.test.ts +21 -0
  304. package/src/index.ts +9 -3
  305. package/src/internal/Annotation/annotations.test.ts +82 -13
  306. package/src/internal/Annotation/annotations.ts +153 -115
  307. package/src/internal/Annotation/dictionary.ts +47 -0
  308. package/src/internal/Annotation/entity-dictionary.ts +40 -0
  309. package/src/internal/Annotation/index.ts +4 -2
  310. package/src/internal/Annotation/sorting.ts +0 -1
  311. package/src/internal/Annotation/util.ts +17 -8
  312. package/src/internal/Entity/api.ts +7 -8
  313. package/src/internal/Entity/entity.ts +196 -47
  314. package/src/internal/Entity/guard.ts +26 -0
  315. package/src/internal/Entity/index.ts +2 -0
  316. package/src/internal/Entity/model.ts +37 -28
  317. package/src/internal/Entity/object.ts +21 -6
  318. package/src/internal/Entity/relation.ts +68 -34
  319. package/src/internal/Entity/type-kind.ts +75 -0
  320. package/src/internal/Entity/type-uri.ts +87 -0
  321. package/src/internal/Entity/util.ts +10 -9
  322. package/src/internal/Entity/version.ts +0 -1
  323. package/src/internal/Format/date.test.ts +0 -1
  324. package/src/internal/Format/date.ts +0 -4
  325. package/src/internal/Format/format.test.ts +21 -1
  326. package/src/internal/Format/index.ts +2 -3
  327. package/src/internal/Format/object.ts +21 -4
  328. package/src/internal/Format/types.ts +1 -1
  329. package/src/internal/JsonSchema/annotations.ts +1 -1
  330. package/src/internal/JsonSchema/json-schema-type.ts +1 -1
  331. package/src/internal/JsonSchema/json-schema.test.ts +55 -142
  332. package/src/internal/JsonSchema/json-schema.ts +44 -31
  333. package/src/internal/Obj/clone.ts +9 -4
  334. package/src/internal/Obj/create-object.test.ts +13 -13
  335. package/src/internal/Obj/create-object.ts +68 -24
  336. package/src/internal/Obj/deleted.ts +1 -1
  337. package/src/internal/Obj/index.ts +0 -1
  338. package/src/internal/Obj/inspect.ts +4 -3
  339. package/src/internal/Obj/json-serializer.test.ts +102 -24
  340. package/src/internal/Obj/json-serializer.ts +105 -43
  341. package/src/internal/Obj/set-value.test.ts +31 -54
  342. package/src/internal/Obj/set-value.ts +1 -1
  343. package/src/internal/Obj/snapshot.ts +11 -4
  344. package/src/internal/Obj/typed-object.test.ts +9 -11
  345. package/src/internal/Obj/typed-object.ts +1 -1
  346. package/src/internal/Query.ts +159 -0
  347. package/src/internal/Ref/ref-array.ts +3 -4
  348. package/src/internal/Ref/ref.test.ts +17 -27
  349. package/src/internal/Ref/ref.ts +124 -59
  350. package/src/internal/Type/compose.test.ts +3 -2
  351. package/src/internal/Type/index.ts +1 -2
  352. package/src/internal/Type/manipulation.ts +0 -25
  353. package/src/internal/Type/type-schema.ts +60 -0
  354. package/src/internal/common/README.md +2 -2
  355. package/src/internal/common/api/meta.ts +19 -17
  356. package/src/internal/common/proxy/change-context.ts +1 -1
  357. package/src/internal/common/proxy/change.test.ts +118 -110
  358. package/src/internal/common/proxy/errors.ts +2 -2
  359. package/src/internal/common/proxy/handler.test.ts +1 -3
  360. package/src/internal/common/proxy/json-serializer.ts +26 -16
  361. package/src/internal/common/proxy/make-object.ts +43 -21
  362. package/src/internal/common/proxy/ownership.ts +2 -3
  363. package/src/internal/common/proxy/reactive-array.ts +1 -1
  364. package/src/internal/common/proxy/reactive.test.ts +54 -0
  365. package/src/internal/common/proxy/reactive.ts +11 -3
  366. package/src/internal/common/proxy/schema.test.ts +48 -86
  367. package/src/internal/common/proxy/typed-handler.test.ts +12 -12
  368. package/src/internal/common/proxy/typed-handler.ts +79 -19
  369. package/src/internal/common/proxy/typed-object.test.ts +16 -29
  370. package/src/internal/common/types/base.ts +4 -4
  371. package/src/internal/common/types/entity.ts +81 -2
  372. package/src/internal/common/types/index.ts +6 -1
  373. package/src/internal/common/types/meta.ts +49 -15
  374. package/src/internal/common/types/model-symbols.ts +16 -4
  375. package/src/internal/common/types/typename.ts +39 -3
  376. package/src/internal/common/types/well-known-types.ts +15 -0
  377. package/src/internal/index.ts +6 -0
  378. package/src/testing/api.test.ts +15 -10
  379. package/src/testing/test-data.ts +159 -100
  380. package/src/testing/test-schema.ts +22 -58
  381. package/src/testing/util.ts +14 -11
  382. package/dist/lib/neutral/SchemaRegistry.mjs +0 -2
  383. package/dist/lib/neutral/chunk-43Y5DOS6.mjs.map +0 -7
  384. package/dist/lib/neutral/chunk-724GQYEN.mjs +0 -56
  385. package/dist/lib/neutral/chunk-724GQYEN.mjs.map +0 -7
  386. package/dist/lib/neutral/chunk-ANHVGJI4.mjs.map +0 -7
  387. package/dist/lib/neutral/chunk-B5OXLWZL.mjs.map +0 -7
  388. package/dist/lib/neutral/chunk-BNCCGLJN.mjs +0 -7
  389. package/dist/lib/neutral/chunk-BNCCGLJN.mjs.map +0 -7
  390. package/dist/lib/neutral/chunk-BOZZPUXE.mjs.map +0 -7
  391. package/dist/lib/neutral/chunk-CIRHIEMW.mjs.map +0 -7
  392. package/dist/lib/neutral/chunk-DYDJBZEG.mjs +0 -102
  393. package/dist/lib/neutral/chunk-DYDJBZEG.mjs.map +0 -7
  394. package/dist/lib/neutral/chunk-FXEG7EOK.mjs.map +0 -7
  395. package/dist/lib/neutral/chunk-KTAWP7GI.mjs.map +0 -7
  396. package/dist/lib/neutral/chunk-NEGC54NE.mjs +0 -130
  397. package/dist/lib/neutral/chunk-NEGC54NE.mjs.map +0 -7
  398. package/dist/lib/neutral/chunk-NQRLRYJM.mjs.map +0 -7
  399. package/dist/lib/neutral/chunk-NXMFBIT5.mjs.map +0 -7
  400. package/dist/lib/neutral/chunk-OENWMTE6.mjs +0 -45
  401. package/dist/lib/neutral/chunk-OENWMTE6.mjs.map +0 -7
  402. package/dist/lib/neutral/chunk-OMUPQMLR.mjs.map +0 -7
  403. package/dist/lib/neutral/chunk-RMLF7JOZ.mjs +0 -97
  404. package/dist/lib/neutral/chunk-RMLF7JOZ.mjs.map +0 -7
  405. package/dist/lib/neutral/chunk-SEMVAGBM.mjs +0 -355
  406. package/dist/lib/neutral/chunk-SEMVAGBM.mjs.map +0 -7
  407. package/dist/lib/neutral/chunk-TQQZLKB7.mjs.map +0 -7
  408. package/dist/lib/neutral/chunk-UBEZSGXY.mjs.map +0 -7
  409. package/dist/lib/neutral/chunk-UFDK26FO.mjs.map +0 -7
  410. package/dist/lib/neutral/chunk-VA2F47ZC.mjs +0 -152
  411. package/dist/lib/neutral/chunk-VA2F47ZC.mjs.map +0 -7
  412. package/dist/lib/neutral/chunk-WYOKA6AE.mjs.map +0 -7
  413. package/dist/lib/neutral/chunk-YWXWXIE5.mjs.map +0 -7
  414. package/dist/types/src/SchemaRegistry.d.ts +0 -84
  415. package/dist/types/src/SchemaRegistry.d.ts.map +0 -1
  416. package/dist/types/src/internal/Obj/ids.d.ts +0 -6
  417. package/dist/types/src/internal/Obj/ids.d.ts.map +0 -1
  418. package/dist/types/src/internal/Type/echo-schema.d.ts +0 -181
  419. package/dist/types/src/internal/Type/echo-schema.d.ts.map +0 -1
  420. package/dist/types/src/internal/Type/persistent-schema.d.ts +0 -20
  421. package/dist/types/src/internal/Type/persistent-schema.d.ts.map +0 -1
  422. package/src/SchemaRegistry.ts +0 -106
  423. package/src/internal/Obj/ids.ts +0 -12
  424. package/src/internal/Type/echo-schema.ts +0 -424
  425. package/src/internal/Type/persistent-schema.ts +0 -33
  426. /package/dist/lib/neutral/{SchemaRegistry.mjs.map → Migration.mjs.map} +0 -0
  427. /package/dist/lib/neutral/{chunk-UTBRYVQC.mjs.map → chunk-G6CFWUYH.mjs.map} +0 -0
  428. /package/dist/lib/neutral/{chunk-UI6MWK5W.mjs.map → chunk-TTCSATUD.mjs.map} +0 -0
@@ -0,0 +1,379 @@
1
+ import {
2
+ select
3
+ } from "./chunk-OIYW7R2G.mjs";
4
+ import {
5
+ Feed
6
+ } from "./chunk-BDQGMDIX.mjs";
7
+ import {
8
+ nothing
9
+ } from "./chunk-ZACMEAYV.mjs";
10
+ import {
11
+ ID,
12
+ Unknown,
13
+ getMeta,
14
+ instanceOf,
15
+ make,
16
+ update
17
+ } from "./chunk-Q5FKCVBC.mjs";
18
+ import {
19
+ Ref,
20
+ fromURI
21
+ } from "./chunk-J3MNM65T.mjs";
22
+ import {
23
+ getSchema,
24
+ makeObject
25
+ } from "./chunk-JE7AOSWF.mjs";
26
+ import {
27
+ JsonSchemaType
28
+ } from "./chunk-7PRCIDHH.mjs";
29
+ import {
30
+ FormInputAnnotation,
31
+ HiddenAnnotation,
32
+ IconAnnotation
33
+ } from "./chunk-H26LSXVJ.mjs";
34
+ import {
35
+ __export
36
+ } from "./chunk-J5LGTIGS.mjs";
37
+
38
+ // src/index.ts
39
+ import { QueryAST as QueryAST2 } from "@dxos/echo-protocol";
40
+ import { DXN as DXN3, EID as EID3, URI as URI2 } from "@dxos/keys";
41
+
42
+ // src/Hypergraph.ts
43
+ var Hypergraph_exports = {};
44
+
45
+ // src/Json.ts
46
+ var Json_exports = {};
47
+ __export(Json_exports, {
48
+ createRefReplacer: () => createRefReplacer
49
+ });
50
+ import { EID } from "@dxos/keys";
51
+ var isEncodedRef = (value) => typeof value === "object" && value !== null && Object.keys(value).length === 1 && typeof value["/"] === "string";
52
+ var toJson = (obj) => typeof obj.toJSON === "function" ? obj.toJSON() : obj;
53
+ var createRefReplacer = ({ db, depth = 1 }) => {
54
+ const hops = /* @__PURE__ */ new WeakMap();
55
+ return function(key, value) {
56
+ const parentHops = this && typeof this === "object" ? hops.get(this) ?? 0 : 0;
57
+ if (isEncodedRef(value)) {
58
+ if (parentHops >= depth) {
59
+ return value;
60
+ }
61
+ const dxnString = value["/"];
62
+ if (!dxnString.startsWith("dxn:") && !dxnString.startsWith("echo:")) {
63
+ return value;
64
+ }
65
+ let echoUri;
66
+ try {
67
+ const parsed = EID.tryParse(dxnString);
68
+ echoUri = parsed ? EID.getEntityId(parsed) : void 0;
69
+ } catch {
70
+ return value;
71
+ }
72
+ if (!echoUri) {
73
+ return value;
74
+ }
75
+ const target = db.getObjectById(echoUri);
76
+ if (!target) {
77
+ return value;
78
+ }
79
+ const encoded = toJson(target);
80
+ if (encoded != null && typeof encoded === "object") {
81
+ hops.set(encoded, parentHops + 1);
82
+ }
83
+ return encoded;
84
+ }
85
+ if (value != null && typeof value === "object") {
86
+ hops.set(value, parentHops);
87
+ }
88
+ return value;
89
+ };
90
+ };
91
+
92
+ // src/StateMap.ts
93
+ var StateMap_exports = {};
94
+ __export(StateMap_exports, {
95
+ bind: () => bind,
96
+ field: () => field
97
+ });
98
+ import * as Schema from "effect/Schema";
99
+ var field = (value) => Schema.Record({
100
+ key: Schema.String,
101
+ value
102
+ }).pipe(FormInputAnnotation.set(false), Schema.optional);
103
+ var bind = (host, key) => {
104
+ const asView = (obj) => obj;
105
+ const read = () => asView(host)[key] ?? {};
106
+ const write = (mutate) => {
107
+ update(host, (host2) => {
108
+ const view = asView(host2);
109
+ if (view[key] === void 0) {
110
+ view[key] = {};
111
+ }
112
+ mutate(view[key]);
113
+ });
114
+ };
115
+ const has = (record, id) => Object.keys(record).includes(id);
116
+ return {
117
+ ids: (predicate) => {
118
+ const record = read();
119
+ const keys = Object.keys(record);
120
+ return predicate ? keys.filter((id) => predicate(record[id], id)) : keys;
121
+ },
122
+ get: (id) => {
123
+ const record = read();
124
+ return has(record, id) ? record[id] : {};
125
+ },
126
+ entries: () => {
127
+ const record = read();
128
+ return Object.keys(record).map((id) => [
129
+ id,
130
+ record[id]
131
+ ]);
132
+ },
133
+ patch: (id, patch) => write((record) => {
134
+ if (!has(record, id)) {
135
+ record[id] = {
136
+ ...patch
137
+ };
138
+ } else {
139
+ Object.assign(record[id], patch);
140
+ }
141
+ }),
142
+ remove: (id) => write((record) => {
143
+ if (has(record, id)) {
144
+ delete record[id];
145
+ }
146
+ })
147
+ };
148
+ };
149
+
150
+ // src/TagIndex.ts
151
+ var TagIndex_exports = {};
152
+ __export(TagIndex_exports, {
153
+ bind: () => bind2,
154
+ field: () => field2
155
+ });
156
+ import * as Schema2 from "effect/Schema";
157
+ var field2 = () => Schema2.Record({
158
+ key: Schema2.String,
159
+ value: Schema2.Array(ID)
160
+ }).pipe(FormInputAnnotation.set(false), Schema2.optional);
161
+ var bind2 = (host, key) => {
162
+ const asView = (obj) => obj;
163
+ const read = () => asView(host)[key] ?? {};
164
+ const write = (mutate) => {
165
+ update(host, (host2) => {
166
+ const view = asView(host2);
167
+ if (view[key] === void 0) {
168
+ view[key] = {};
169
+ }
170
+ mutate(view[key]);
171
+ });
172
+ };
173
+ const has = (record, tagId) => Object.keys(record).includes(tagId);
174
+ return {
175
+ tagIds: () => Object.keys(read()),
176
+ objects: (tagId) => {
177
+ const record = read();
178
+ return has(record, tagId) ? record[tagId] : [];
179
+ },
180
+ tags: (objectId) => {
181
+ const record = read();
182
+ return Object.keys(record).filter((tagId) => record[tagId].includes(objectId));
183
+ },
184
+ setTag: (tagId, objectId) => write((record) => {
185
+ if (!has(record, tagId)) {
186
+ record[tagId] = [
187
+ objectId
188
+ ];
189
+ } else if (!record[tagId].includes(objectId)) {
190
+ record[tagId] = [
191
+ ...record[tagId],
192
+ objectId
193
+ ];
194
+ }
195
+ }),
196
+ unsetTag: (tagId, objectId) => write((record) => {
197
+ if (!has(record, tagId)) {
198
+ return;
199
+ }
200
+ const next = record[tagId].filter((existing) => existing !== objectId);
201
+ if (next.length === 0) {
202
+ delete record[tagId];
203
+ } else {
204
+ record[tagId] = next;
205
+ }
206
+ })
207
+ };
208
+ };
209
+
210
+ // src/Tagging.ts
211
+ var Tagging_exports = {};
212
+ __export(Tagging_exports, {
213
+ get: () => get,
214
+ resolve: () => resolve,
215
+ set: () => set,
216
+ unset: () => unset
217
+ });
218
+ import { EID as EID2, URI } from "@dxos/keys";
219
+ var DEFAULT_KEY = "tags";
220
+ var get = (object, options = {}) => {
221
+ const { host, key = DEFAULT_KEY } = options;
222
+ if (host) {
223
+ return bind2(host, key).tags(object.id);
224
+ }
225
+ return getMeta(object).tags.map((tag) => tag.uri);
226
+ };
227
+ var set = (object, tagId, options = {}) => {
228
+ const { host, key = DEFAULT_KEY } = options;
229
+ if (host) {
230
+ bind2(host, key).setTag(tagId, object.id);
231
+ return;
232
+ }
233
+ const id = EID2.tryParse(tagId) ?? tagId;
234
+ update(object, (object2) => {
235
+ const meta = getMeta(object2);
236
+ if (!meta.tags.some((tag) => tag.uri === id)) {
237
+ meta.tags.push(fromURI(URI.make(id)));
238
+ }
239
+ });
240
+ };
241
+ var unset = (object, tagId, options = {}) => {
242
+ const { host, key = DEFAULT_KEY } = options;
243
+ if (host) {
244
+ bind2(host, key).unsetTag(tagId, object.id);
245
+ return;
246
+ }
247
+ const id = EID2.tryParse(tagId) ?? tagId;
248
+ update(object, (object2) => {
249
+ const meta = getMeta(object2);
250
+ for (let i = meta.tags.length - 1; i >= 0; i--) {
251
+ if (meta.tags[i].uri === id) {
252
+ meta.tags.splice(i, 1);
253
+ }
254
+ }
255
+ });
256
+ };
257
+ var resolve = (db, tagIds) => tagIds.map((id) => db.makeRef(URI.make(id)));
258
+
259
+ // src/Collection.ts
260
+ var Collection_exports = {};
261
+ __export(Collection_exports, {
262
+ Collection: () => Collection,
263
+ isCollection: () => isCollection,
264
+ make: () => make2
265
+ });
266
+ import * as Schema3 from "effect/Schema";
267
+ import { DXN } from "@dxos/keys";
268
+ var Collection = Schema3.Struct({
269
+ name: Schema3.String.pipe(Schema3.optional),
270
+ objects: Schema3.Array(Ref(Unknown)).pipe(FormInputAnnotation.set(false))
271
+ }).pipe(IconAnnotation.set({
272
+ icon: "ph--folder--regular",
273
+ hue: "amber"
274
+ }), makeObject(DXN.make("org.dxos.type.collection", "0.1.0")));
275
+ var make2 = (props = {}) => make(Collection, {
276
+ objects: [],
277
+ ...props
278
+ });
279
+ var isCollection = instanceOf(Collection);
280
+
281
+ // src/View.ts
282
+ var View_exports = {};
283
+ __export(View_exports, {
284
+ FieldSchema: () => FieldSchema,
285
+ KeyValueProps: () => KeyValueProps,
286
+ Projection: () => Projection,
287
+ View: () => View,
288
+ createFieldId: () => createFieldId,
289
+ make: () => make3
290
+ });
291
+ import * as Schema4 from "effect/Schema";
292
+ import { QueryAST } from "@dxos/echo-protocol";
293
+ import { JsonPath } from "@dxos/effect";
294
+ import { DXN as DXN2, PublicKey } from "@dxos/keys";
295
+ var FieldSchema = Schema4.Struct({
296
+ id: Schema4.String,
297
+ path: JsonPath,
298
+ visible: Schema4.optional(Schema4.Boolean),
299
+ // TODO(wittjosiah): Presentation-specific?
300
+ referencePath: Schema4.optional(JsonPath)
301
+ });
302
+ var KeyValueProps = Schema4.Record({
303
+ key: Schema4.String,
304
+ value: Schema4.Any
305
+ });
306
+ var createFieldId = () => PublicKey.random().truncate();
307
+ var Projection = Schema4.Struct({
308
+ /**
309
+ * Optional schema override used to customize the underlying schema.
310
+ */
311
+ schema: JsonSchemaType.pipe(Schema4.optional),
312
+ /**
313
+ * UX metadata associated with displayed fields (in table, form, etc.)
314
+ */
315
+ // TODO(wittjosiah): Should this just be an array of JsonPath?
316
+ fields: Schema4.Array(FieldSchema),
317
+ /**
318
+ * The id for the field used to pivot the view.
319
+ * E.g., the field to use for kanban columns or the field to use for map coordinates.
320
+ */
321
+ pivotFieldId: Schema4.String.pipe(Schema4.optional)
322
+ });
323
+ var ViewSchema = Schema4.Struct({
324
+ /**
325
+ * Query used to retrieve data.
326
+ * Can be a user-provided query grammar string or a query AST.
327
+ */
328
+ query: Schema4.Struct({
329
+ raw: Schema4.optional(Schema4.String),
330
+ ast: QueryAST.Query
331
+ }),
332
+ /**
333
+ * Projection of the data returned from the query.
334
+ */
335
+ projection: Projection
336
+ }).pipe(HiddenAnnotation.set(true), IconAnnotation.set({
337
+ icon: "ph--funnel--regular",
338
+ hue: "green"
339
+ }), makeObject(DXN2.make("org.dxos.type.view", "0.1.0")));
340
+ var View = ViewSchema;
341
+ var make3 = (props) => {
342
+ return make(View, {
343
+ query: {
344
+ ast: select(nothing()).ast
345
+ },
346
+ projection: {
347
+ fields: []
348
+ },
349
+ ...props
350
+ });
351
+ };
352
+
353
+ // src/Dataset.ts
354
+ var Dataset_exports = {};
355
+ __export(Dataset_exports, {
356
+ Dataset: () => Dataset,
357
+ isDataset: () => isDataset
358
+ });
359
+ import { pipe } from "effect/Function";
360
+ import * as Predicate from "effect/Predicate";
361
+ import * as Schema5 from "effect/Schema";
362
+ var Dataset = Schema5.Union(getSchema(Feed), getSchema(Collection), getSchema(View));
363
+ var isDataset = pipe(instanceOf(Feed), Predicate.or(instanceOf(Collection)), Predicate.or(instanceOf(View)));
364
+
365
+ export {
366
+ Hypergraph_exports,
367
+ Json_exports,
368
+ StateMap_exports,
369
+ TagIndex_exports,
370
+ Tagging_exports,
371
+ Collection_exports,
372
+ View_exports,
373
+ Dataset_exports,
374
+ QueryAST2 as QueryAST,
375
+ DXN3 as DXN,
376
+ EID3 as EID,
377
+ URI2 as URI
378
+ };
379
+ //# sourceMappingURL=chunk-LAF3LSWI.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/index.ts", "../../../src/Hypergraph.ts", "../../../src/Json.ts", "../../../src/StateMap.ts", "../../../src/TagIndex.ts", "../../../src/Tagging.ts", "../../../src/Collection.ts", "../../../src/View.ts", "../../../src/Dataset.ts"],
4
+ "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nexport { QueryAST } from '@dxos/echo-protocol';\nexport { DXN, EID, URI } from '@dxos/keys';\n\nexport * as Annotation from './Annotation';\nexport * as Database from './Database';\nexport * as Entity from './Entity';\n// TODO(burdon): Rename to Error (less problematic than Obj/Object).\nexport * as Err from './Err';\nexport * as Feed from './Feed';\nexport * as Filter from './Filter';\nexport * as Format from './Format';\nexport * as Hypergraph from './Hypergraph';\nexport * as Json from './Json';\nexport * as JsonSchema from './JsonSchema';\nexport * as Key from './Key';\nexport * as Migration from './Migration';\nexport * as Obj from './Obj';\nexport * as Order from './Order';\nexport * as Query from './Query';\nexport * as QueryResult from './QueryResult';\nexport * as Ref from './Ref';\nexport * as Registry from './Registry';\nexport * as Relation from './Relation';\nexport * as Scope from './Scope';\nexport * as StateMap from './StateMap';\nexport * as Tag from './Tag';\nexport * as TagIndex from './TagIndex';\nexport * as Tagging from './Tagging';\nexport * as Type from './Type';\nexport * as Collection from './Collection';\nexport * as View from './View';\nexport * as Dataset from './Dataset';\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { type URI } from '@dxos/keys';\n\nimport type * as Database from './Database';\nimport type * as Entity from './Entity';\nimport type * as internal from './internal';\nimport type * as Key from './Key';\nimport type * as Ref from './Ref';\nimport type * as Registry from './Registry';\n\n/**\n * Resolution context.\n * Affects how non-absolute DXNs are resolved.\n */\nexport interface RefResolutionContext {\n /**\n * Space that the resolution is happening from.\n */\n space?: Key.SpaceId;\n\n /**\n * Feed that the resolution is happening from.\n * This feed will be searched first, and then the space it belongs to.\n */\n feed?: URI.URI;\n}\n\nexport interface RefResolverOptions {\n /**\n * Resolution context.\n * Affects how non-absolute DXNs are resolved.\n */\n context?: RefResolutionContext;\n\n /**\n * Middleware to change the resolved object before returning it.\n * @deprecated On track to be removed.\n */\n middleware?: (obj: internal.AnyProperties) => internal.AnyProperties;\n}\n\n/**\n * Manages cross-space database interactions.\n */\nexport interface Hypergraph extends Database.Queryable {\n /**\n * In-process registry of keyed objects and static schema types.\n * Populated at startup via `registry.add(objects)` / `registry.add(schemas)`.\n * Queries that include no explicit from() clause will fan out to this registry automatically.\n */\n get registry(): Registry.Registry;\n\n /**\n * Query objects.\n */\n query: Database.QueryFn;\n\n /**\n * Creates a reference to an existing object in the database.\n *\n * NOTE: The reference may be dangling if the object is not present in the database.\n * NOTE: Difference from `Ref.fromURI`\n * `Ref.fromURI(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>(uri: URI.URI): Ref.Ref<T>;\n\n /**\n * @param hostDb Host database for reference resolution.\n * @param middleware Called with the loaded object. The caller may change the object.\n * @returns Result of `onLoad`.\n */\n // TODO(dmaretskyi): Restructure API: Remove middleware.\n createRefResolver(options: RefResolverOptions): Ref.Resolver;\n\n /**\n * Get a database by space ID.\n * @returns The database for the given space ID, or undefined if not found.\n */\n getDatabase(spaceId: Key.SpaceId): Database.Database | undefined;\n}\n", "//\n// Copyright 2026 DXOS.org\n//\n\nimport { EID } from '@dxos/keys';\n\nimport * as Database from './Database';\nimport * as Obj from './Obj';\n\n/**\n * `JSON.stringify` replacer signature.\n *\n * Defined here (rather than re-imported from a UI package) so other ECHO-aware utilities can\n * share a stable signature without creating a dependency edge into the UI tree.\n */\nexport type JsonReplacer = (key: string, value: any) => any;\n\nexport type CreateRefReplacerOptions = {\n db: Database.Database;\n /** How many ref hops to follow. `0` leaves all refs as-is. Default: `1`. */\n depth?: number;\n};\n\nconst isEncodedRef = (value: unknown): value is { '/': string } =>\n typeof value === 'object' &&\n value !== null &&\n Object.keys(value as object).length === 1 &&\n typeof (value as { '/': unknown })['/'] === 'string';\n\nconst toJson = (obj: Obj.Any): unknown => (typeof (obj as any).toJSON === 'function' ? (obj as any).toJSON() : obj);\n\n/**\n * Returns a {@link JsonReplacer} that inlines ECHO ref objects (`{ \"/\": \"dxn:echo:...\" }`) up to\n * `depth` ref hops. Beyond that depth refs are left in their encoded form.\n *\n * Implemented as a per-call `JSON.stringify` replacer (not a one-shot tree walk at root) so it\n * composes with wrappers like `safeStringify` that intercept the root call. JSON.stringify\n * already drives the recursion; we only need to (a) detect a ref at the current callback,\n * (b) resolve and return the target if hop budget remains, and (c) tag the returned object\n * with its hop count so children know how far in they are.\n *\n * The hop count is tracked per-object via a `WeakMap`: a ref-resolved target's children inherit\n * `parentHops + 1`; a regular intermediate object's children inherit `parentHops`. This makes the\n * budget count *ref hops*, not tree depth — a ref deep in a tree still resolves once when\n * `depth >= 1`.\n *\n * Note: ECHO objects' `toJSON` runs before the replacer is invoked, so by the time we see a\n * value refs are already encoded as `{ \"/\": \"dxn:...\" }`.\n */\nexport const createRefReplacer = ({ db, depth = 1 }: CreateRefReplacerOptions): JsonReplacer => {\n // Per-object hop count. Set when we return an object (via ref resolution or pass-through) so\n // the child callbacks (which carry that object as `this`) can read it.\n const hops = new WeakMap<object, number>();\n\n return function (this: any, key: string, value: any) {\n // Hop count for this call: hops at the parent, or 0 for the root.\n const parentHops = this && typeof this === 'object' ? (hops.get(this) ?? 0) : 0;\n if (isEncodedRef(value)) {\n if (parentHops >= depth) {\n return value;\n }\n\n // The `{ '/': string }` shape is shared with non-DXN IPLD-style refs (e.g. CIDs);\n // an unparseable string would otherwise crash the whole `JSON.stringify`.\n // Treat any parse miss as \"leave as-is\" rather than propagating.\n const dxnString = value['/'];\n if (!dxnString.startsWith('dxn:') && !dxnString.startsWith('echo:')) {\n return value;\n }\n\n let echoUri: string | undefined;\n try {\n const parsed = EID.tryParse(dxnString);\n echoUri = parsed ? EID.getEntityId(parsed) : undefined;\n } catch {\n return value;\n }\n\n if (!echoUri) {\n return value;\n }\n const target = db.getObjectById(echoUri);\n if (!target) {\n return value;\n }\n\n const encoded = toJson(target);\n if (encoded != null && typeof encoded === 'object') {\n // Children of the resolved target are one hop deeper.\n hops.set(encoded as object, parentHops + 1);\n }\n return encoded;\n }\n\n // Pass-through object: children inherit the parent's hop count (this branch doesn't burn\n // budget).\n if (value != null && typeof value === 'object') {\n hops.set(value, parentHops);\n }\n\n return value;\n };\n};\n", "//\n// Copyright 2026 DXOS.org\n//\n\n// @import-as-namespace\n\nimport * as Schema from 'effect/Schema';\n\nimport { FormInputAnnotation } from './internal';\nimport * as Obj from './Obj';\n\n/**\n * A per-object state side-map: an in-document `Record<objectId, S>` holding small mutable metadata\n * for each object, keyed by object id.\n *\n * The companion to immutable feed/queue objects: the objects are immutable, so their mutable\n * per-item state (read-marker, hero image, snippet, …) lives here on a host object. Use this for\n * non-tag metadata; boolean labels (starred, archived) belong in the tag model ({@link TagIndex} /\n * {@link Tagging}) so they share the space-wide `Tag` registry.\n */\n\n/** Read/write accessor over a host object's state side-map field, bound to a single field key. */\nexport interface Accessor<S extends object> {\n /** All object ids with an entry, optionally filtered by a predicate over their state. */\n ids(predicate?: (state: Partial<S>, id: string) => boolean): string[];\n /** The entry for an object id; `{}` when absent (so call sites read fields without `?` chains). */\n get(id: string): Partial<S>;\n /** All `[id, state]` entries. */\n entries(): Array<[string, Partial<S>]>;\n /** Shallow-merges a patch into an object's entry, creating it when absent. */\n patch(id: string, patch: Partial<S>): void;\n /** Removes an object's entry. */\n remove(id: string): void;\n}\n\n/**\n * Schema fragment for a state side-map field. Splice into a host Struct. Optional record, hidden\n * from forms. Keyed by object id; the value is the per-object state struct `S`.\n */\nexport const field = <S, I>(value: Schema.Schema<S, I>) =>\n Schema.Record({ key: Schema.String, value }).pipe(FormInputAnnotation.set(false), Schema.optional);\n\n/** Binds an {@link Accessor} over `host[key]`; all mutations go through `Obj.update`. */\nexport const bind = <S extends object = Record<string, unknown>>(host: Obj.Any, key: string): Accessor<S> => {\n type Entry = Partial<S>;\n\n // The field is addressed by a runtime key, so the ECHO object is viewed as a keyed record — a\n // deliberate type-system boundary (dynamic field access — the field name is a parameter).\n const asView = (obj: Obj.Any) => obj as unknown as Record<string, Record<string, Entry> | undefined>;\n const read = (): Record<string, Entry> => asView(host)[key] ?? {};\n\n // Mutate the live typed record in place (do NOT reassign the whole tree); assigning a detached\n // plain object tree bypasses ECHO's schema-aware conversion. Mutating the typed proxy preserves it.\n const write = (mutate: (record: Record<string, Entry>) => void): void => {\n Obj.update(host, (host) => {\n const view = asView(host);\n if (view[key] === undefined) {\n view[key] = {};\n }\n // Re-read after assignment: the assignment expression yields the plain RHS, not the\n // ECHO-backed reactive record, so mutating that would not persist.\n mutate(view[key]!);\n });\n };\n\n // Existence check via `Object.keys` — ECHO's reactive record proxy auto-vivifies missing keys on\n // direct access, so `record[id]` is not reliably `undefined` for absent ids.\n const has = (record: Record<string, Entry>, id: string): boolean => Object.keys(record).includes(id);\n\n return {\n ids: (predicate) => {\n const record = read();\n const keys = Object.keys(record);\n return predicate ? keys.filter((id) => predicate(record[id], id)) : keys;\n },\n get: (id) => {\n const record = read();\n return has(record, id) ? record[id] : {};\n },\n entries: () => {\n const record = read();\n return Object.keys(record).map((id) => [id, record[id]]);\n },\n patch: (id, patch) =>\n write((record) => {\n if (!has(record, id)) {\n record[id] = { ...patch };\n } else {\n Object.assign(record[id], patch);\n }\n }),\n remove: (id) =>\n write((record) => {\n if (has(record, id)) {\n delete record[id];\n }\n }),\n };\n};\n", "//\n// Copyright 2026 DXOS.org\n//\n\n// @import-as-namespace\n\nimport * as Schema from 'effect/Schema';\n\nimport { FormInputAnnotation } from './internal';\nimport * as Obj from './Obj';\n\n/**\n * An inverse tag index: an in-document `Record<tagId, objectId[]>` mapping a tag id to the ids of\n * the objects carrying that tag.\n *\n * Mutable database objects track their tags in `Obj.getMeta(obj).tags` (an array of tag ids).\n * Immutable feed/queue objects cannot carry their own meta, so this index — managed alongside the\n * feed on its host object — augments that same process for them. Tags are sparse, so keying by tag\n * id (rather than object id) keeps the index small and makes \"filter the feed by tag\" a single\n * lookup.\n *\n * The tag id is an existing {@link Tag} object's id/URI; labels are never duplicated here — they\n * live on the {@link Tag} object and stay editable in one place.\n */\n\n/** Read/write accessor over a host object's tag-index field, bound to a single field key. */\nexport interface Accessor {\n /** All tag ids present in the index. */\n tagIds(): string[];\n /** Object ids carrying the given tag; `[]` when the tag is absent (filter the feed by tag). */\n objects(tagId: string): readonly string[];\n /** Inverse lookup: the tag ids applied to the given object id. */\n tags(objectId: string): string[];\n /** Applies a tag to an object (creating the tag entry when absent); idempotent. */\n setTag(tagId: string, objectId: string): void;\n /** Removes a tag from an object, pruning the tag entry when it empties. */\n unsetTag(tagId: string, objectId: string): void;\n}\n\n/**\n * Schema fragment for a tag-index field. Splice into a host Struct. Optional record, hidden from\n * forms. Keyed by tag id; the value is the array of object ids carrying that tag.\n */\nexport const field = () =>\n Schema.Record({ key: Schema.String, value: Schema.Array(Obj.ID) }).pipe(\n FormInputAnnotation.set(false),\n Schema.optional,\n );\n\n/** Binds an {@link Accessor} over `host[key]`; all mutations go through `Obj.update`. */\nexport const bind = (host: Obj.Any, key: string): Accessor => {\n type Record_ = Record<string, string[]>;\n\n // The field is addressed by a runtime key, so the ECHO object is viewed as a keyed record — a\n // deliberate type-system boundary (dynamic field access — the field name is a parameter).\n const asView = (obj: Obj.Any) => obj as unknown as Record<string, Record_ | undefined>;\n const read = (): Record_ => asView(host)[key] ?? {};\n\n // Mutate the live typed record in place (do NOT reassign the whole tree); assigning a detached\n // plain object tree bypasses ECHO's schema-aware conversion and stores arrays as numeric-keyed\n // objects. Mutating the typed proxy (and assigning real arrays to its values) preserves arrays.\n const write = (mutate: (record: Record_) => void): void => {\n Obj.update(host, (host) => {\n const view = asView(host);\n if (view[key] === undefined) {\n view[key] = {};\n }\n // Re-read after assignment: the assignment expression yields the plain RHS, not the\n // ECHO-backed reactive record, so mutating that would not persist.\n mutate(view[key]!);\n });\n };\n\n // Existence check via `Object.keys` — ECHO's reactive record proxy auto-vivifies missing keys on\n // direct access, so `record[tagId]` is not reliably `undefined` for absent tags.\n const has = (record: Record_, tagId: string): boolean => Object.keys(record).includes(tagId);\n\n return {\n tagIds: () => Object.keys(read()),\n objects: (tagId) => {\n const record = read();\n return has(record, tagId) ? record[tagId] : [];\n },\n tags: (objectId) => {\n const record = read();\n return Object.keys(record).filter((tagId) => record[tagId].includes(objectId));\n },\n setTag: (tagId, objectId) =>\n write((record) => {\n // Use `has` (not `record[tagId]`) for absence — the proxy auto-vivifies missing keys.\n if (!has(record, tagId)) {\n record[tagId] = [objectId];\n } else if (!record[tagId].includes(objectId)) {\n record[tagId] = [...record[tagId], objectId];\n }\n }),\n unsetTag: (tagId, objectId) =>\n write((record) => {\n if (!has(record, tagId)) {\n return;\n }\n const next = record[tagId].filter((existing) => existing !== objectId);\n if (next.length === 0) {\n delete record[tagId];\n } else {\n record[tagId] = next;\n }\n }),\n };\n};\n", "//\n// Copyright 2026 DXOS.org\n//\n\n// @import-as-namespace\n\nimport { EID, URI } from '@dxos/keys';\n\nimport type * as Database from './Database';\nimport * as Obj from './Obj';\nimport * as Ref from './Ref';\nimport type * as Tag from './Tag';\nimport * as TagIndex from './TagIndex';\n\n/**\n * Unified tag handling for objects whether their tags live on the object (mutable database objects)\n * or alongside it (immutable feed/queue objects).\n *\n * - Mutable database objects track their tags in `Obj.getMeta(obj).tags` (an array of `Ref<Tag>`).\n * - Immutable feed objects can't carry their own meta, so their tags live in a {@link TagIndex} on\n * a host object; pass that host via {@link Options.host}.\n *\n * Either way the tag id is an existing {@link Tag} object's id/URI, so the same tag applies across\n * mutable and immutable objects and its label is resolved (and edited) in one place. This API works\n * in terms of those URI tag ids; on the mutable path it converts to/from the stored `Ref<Tag>`.\n */\nexport interface Options {\n /** Host object whose tag index holds tags for the (immutable) object. Omit for mutable objects. */\n host?: Obj.Any;\n /** Tag-index field name on the host (default `tags`). */\n key?: string;\n}\n\nconst DEFAULT_KEY = 'tags';\n\n/** Returns the tag ids (URIs) applied to an object. */\nexport const get = (object: Obj.Any, options: Options = {}): string[] => {\n const { host, key = DEFAULT_KEY } = options;\n if (host) {\n return TagIndex.bind(host, key).tags(object.id);\n }\n return Obj.getMeta(object).tags.map((tag) => tag.uri);\n};\n\n/** Applies a tag (by id/URI) to an object (idempotent). */\nexport const set = (object: Obj.Any, tagId: string, options: Options = {}): void => {\n const { host, key = DEFAULT_KEY } = options;\n if (host) {\n TagIndex.bind(host, key).setTag(tagId, object.id);\n return;\n }\n // Stored tag refs are canonical EIDs (read-time upgrade normalizes legacy DXN ids); normalize the\n // incoming id the same way so dedupe compares like-for-like.\n const id = EID.tryParse(tagId) ?? tagId;\n Obj.update(object, (object) => {\n const meta = Obj.getMeta(object);\n if (!meta.tags.some((tag) => tag.uri === id)) {\n meta.tags.push(Ref.fromURI(URI.make(id)));\n }\n });\n};\n\n/** Removes a tag (by id/URI) from an object. No-op when not present. */\nexport const unset = (object: Obj.Any, tagId: string, options: Options = {}): void => {\n const { host, key = DEFAULT_KEY } = options;\n if (host) {\n TagIndex.bind(host, key).unsetTag(tagId, object.id);\n return;\n }\n const id = EID.tryParse(tagId) ?? tagId;\n Obj.update(object, (object) => {\n const meta = Obj.getMeta(object);\n for (let i = meta.tags.length - 1; i >= 0; i--) {\n if (meta.tags[i].uri === id) {\n meta.tags.splice(i, 1);\n }\n }\n });\n};\n\n/** Resolves tag ids (URIs) to {@link Tag} object refs via the database. */\nexport const resolve = (db: Pick<Database.Database, 'makeRef'>, tagIds: readonly string[]): Ref.Ref<Tag.Tag>[] =>\n tagIds.map((id) => db.makeRef<Tag.Tag>(URI.make(id)));\n", "//\n// Copyright 2024 DXOS.org\n//\n\n// @import-as-namespace\n\nimport * as Schema from 'effect/Schema';\n\nimport { DXN } from '@dxos/keys';\n\nimport * as Annotation from './Annotation';\nimport * as internal from './internal';\nimport * as Obj from './Obj';\nimport * as Ref from './Ref';\nimport * as Type from './Type';\n\n/**\n * A an ordered set of objects.\n */\nexport const Collection = Schema.Struct({\n name: Schema.String.pipe(Schema.optional),\n objects: Schema.Array(Ref.Ref(Obj.Unknown)).pipe(internal.FormInputAnnotation.set(false)),\n}).pipe(\n Annotation.IconAnnotation.set({ icon: 'ph--folder--regular', hue: 'amber' }),\n Type.makeObject(DXN.make('org.dxos.type.collection', '0.1.0')),\n);\n\nexport type Collection = Type.InstanceType<typeof Collection>;\n\nexport const make = (props: Partial<Obj.MakeProps<typeof Collection>> = {}): Collection =>\n Obj.make(Collection, { objects: [], ...props });\n\nexport const isCollection: (value: unknown) => value is Collection = Obj.instanceOf(Collection);\n", "//\n// Copyright 2025 DXOS.org\n//\n\n// @import-as-namespace\n\nimport * as Schema from 'effect/Schema';\n\nimport { QueryAST } from '@dxos/echo-protocol';\nimport { JsonPath } from '@dxos/effect';\nimport { DXN, PublicKey } from '@dxos/keys';\n\nimport * as Annotation from './Annotation';\nimport * as Filter from './Filter';\nimport * as internal from './internal';\nimport * as Obj from './Obj';\nimport * as Query from './Query';\nimport * as Type from './Type';\n\n/**\n * Stored field metadata (e.g., for UX).\n */\nexport const FieldSchema = Schema.Struct({\n id: Schema.String,\n path: JsonPath,\n visible: Schema.optional(Schema.Boolean),\n\n // TODO(wittjosiah): Presentation-specific?\n referencePath: Schema.optional(JsonPath),\n});\n\nexport type FieldType = Schema.Schema.Type<typeof FieldSchema>;\n\nexport const KeyValueProps = Schema.Record({ key: Schema.String, value: Schema.Any });\n\nexport const createFieldId = () => PublicKey.random().truncate();\n\nexport const Projection = Schema.Struct({\n /**\n * Optional schema override used to customize the underlying schema.\n */\n schema: internal.JsonSchemaType.pipe(Schema.optional),\n\n /**\n * UX metadata associated with displayed fields (in table, form, etc.)\n */\n // TODO(wittjosiah): Should this just be an array of JsonPath?\n fields: Schema.Array(FieldSchema),\n\n /**\n * The id for the field used to pivot the view.\n * E.g., the field to use for kanban columns or the field to use for map coordinates.\n */\n pivotFieldId: Schema.String.pipe(Schema.optional),\n});\n\nexport type Projection = Schema.Schema.Type<typeof Projection>;\n\n/**\n * Views are generated or user-defined projections of a schema's properties.\n * They are used to configure the visual representation of the data.\n */\nconst ViewSchema = Schema.Struct({\n /**\n * Query used to retrieve data.\n * Can be a user-provided query grammar string or a query AST.\n */\n query: Schema.Struct({\n raw: Schema.optional(Schema.String),\n ast: QueryAST.Query,\n }),\n\n /**\n * Projection of the data returned from the query.\n */\n projection: Projection,\n}).pipe(\n internal.HiddenAnnotation.set(true),\n Annotation.IconAnnotation.set({ icon: 'ph--funnel--regular', hue: 'green' }),\n Type.makeObject(DXN.make('org.dxos.type.view', '0.1.0')),\n);\n\n// NOTE: Declared as a named interface and the `View` const is annotated `Type.Obj<View>` so\n// downstream consumers see a named `View` type instead of the inlined `QueryAST.Query` union.\n// Without the named interface, embedding `Type.getSchema(View.View)` in a downstream\n// `Schema.Struct` triggers TS2742 portability errors (e.g. plugin-kanban, plugin-table).\n// TODO(wittjosiah): Find a better solution that doesn't require manually keeping the interface in sync.\nexport interface View extends Type.InstanceType<typeof ViewSchema> {}\n\nexport const View: Type.Obj<View> = ViewSchema as any;\n\nexport const make = (props: Partial<Obj.MakeProps<typeof View>>): View => {\n return Obj.make(View, {\n query: { ast: Query.select(Filter.nothing()).ast },\n projection: { fields: [] },\n ...props,\n });\n};\n", "//\n// Copyright 2026 DXOS.org\n//\n\n// @import-as-namespace\n\nimport { pipe } from 'effect/Function';\nimport * as Predicate from 'effect/Predicate';\nimport * as Schema from 'effect/Schema';\n\nimport * as Collection from './Collection';\nimport * as Feed from './Feed';\nimport * as Obj from './Obj';\nimport * as Type from './Type';\nimport * as View from './View';\n\n/**\n * Abstract set of objects, represented by a view, feed, or collection.\n * Schema-level union of the underlying type entities (rebuilt via\n * `Type.getSchema`) so this can still be consumed by Schema-side APIs such\n * as `Filter.type(...)` on a union.\n */\nexport type Dataset = Feed.Feed | Collection.Collection | View.View;\nexport const Dataset = Schema.Union(\n Type.getSchema(Feed.Feed),\n Type.getSchema(Collection.Collection),\n Type.getSchema(View.View),\n);\n\nexport const isDataset: (value: unknown) => value is Dataset = pipe(\n Obj.instanceOf(Feed.Feed),\n Predicate.or(Obj.instanceOf(Collection.Collection)),\n Predicate.or(Obj.instanceOf(View.View)),\n);\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAIA,SAASA,YAAAA,iBAAgB;AACzB,SAASC,OAAAA,MAAKC,OAAAA,MAAKC,OAAAA,YAAW;;;ACL9B;;;ACAA;;;;AAIA,SAASC,WAAW;AAmBpB,IAAMC,eAAe,CAACC,UACpB,OAAOA,UAAU,YACjBA,UAAU,QACVC,OAAOC,KAAKF,KAAAA,EAAiBG,WAAW,KACxC,OAAQH,MAA2B,GAAA,MAAS;AAE9C,IAAMI,SAAS,CAACC,QAA2B,OAAQA,IAAYC,WAAW,aAAcD,IAAYC,OAAM,IAAKD;AAoBxG,IAAME,oBAAoB,CAAC,EAAEC,IAAIC,QAAQ,EAAC,MAA4B;AAG3E,QAAMC,OAAO,oBAAIC,QAAAA;AAEjB,SAAO,SAAqBC,KAAaZ,OAAU;AAEjD,UAAMa,aAAa,QAAQ,OAAO,SAAS,WAAYH,KAAKI,IAAI,IAAI,KAAK,IAAK;AAC9E,QAAIf,aAAaC,KAAAA,GAAQ;AACvB,UAAIa,cAAcJ,OAAO;AACvB,eAAOT;MACT;AAKA,YAAMe,YAAYf,MAAM,GAAA;AACxB,UAAI,CAACe,UAAUC,WAAW,MAAA,KAAW,CAACD,UAAUC,WAAW,OAAA,GAAU;AACnE,eAAOhB;MACT;AAEA,UAAIiB;AACJ,UAAI;AACF,cAAMC,SAASpB,IAAIqB,SAASJ,SAAAA;AAC5BE,kBAAUC,SAASpB,IAAIsB,YAAYF,MAAAA,IAAUG;MAC/C,QAAQ;AACN,eAAOrB;MACT;AAEA,UAAI,CAACiB,SAAS;AACZ,eAAOjB;MACT;AACA,YAAMsB,SAASd,GAAGe,cAAcN,OAAAA;AAChC,UAAI,CAACK,QAAQ;AACX,eAAOtB;MACT;AAEA,YAAMwB,UAAUpB,OAAOkB,MAAAA;AACvB,UAAIE,WAAW,QAAQ,OAAOA,YAAY,UAAU;AAElDd,aAAKe,IAAID,SAAmBX,aAAa,CAAA;MAC3C;AACA,aAAOW;IACT;AAIA,QAAIxB,SAAS,QAAQ,OAAOA,UAAU,UAAU;AAC9CU,WAAKe,IAAIzB,OAAOa,UAAAA;IAClB;AAEA,WAAOb;EACT;AACF;;;ACtGA;;;;;AAMA,YAAY0B,YAAY;AAiCjB,IAAMC,QAAQ,CAAOC,UACnBC,cAAO;EAAEC,KAAYC;EAAQH;AAAM,CAAA,EAAGI,KAAKC,oBAAoBC,IAAI,KAAA,GAAeC,eAAQ;AAG5F,IAAMC,OAAO,CAA6CC,MAAeP,QAAAA;AAK9E,QAAMQ,SAAS,CAACC,QAAiBA;AACjC,QAAMC,OAAO,MAA6BF,OAAOD,IAAAA,EAAMP,GAAAA,KAAQ,CAAC;AAIhE,QAAMW,QAAQ,CAACC,WAAAA;AACbC,IAAIC,OAAOP,MAAM,CAACA,UAAAA;AAChB,YAAMQ,OAAOP,OAAOD,KAAAA;AACpB,UAAIQ,KAAKf,GAAAA,MAASgB,QAAW;AAC3BD,aAAKf,GAAAA,IAAO,CAAC;MACf;AAGAY,aAAOG,KAAKf,GAAAA,CAAI;IAClB,CAAA;EACF;AAIA,QAAMiB,MAAM,CAACC,QAA+BC,OAAwBC,OAAOC,KAAKH,MAAAA,EAAQI,SAASH,EAAAA;AAEjG,SAAO;IACLI,KAAK,CAACC,cAAAA;AACJ,YAAMN,SAASR,KAAAA;AACf,YAAMW,OAAOD,OAAOC,KAAKH,MAAAA;AACzB,aAAOM,YAAYH,KAAKI,OAAO,CAACN,OAAOK,UAAUN,OAAOC,EAAAA,GAAKA,EAAAA,CAAAA,IAAOE;IACtE;IACAK,KAAK,CAACP,OAAAA;AACJ,YAAMD,SAASR,KAAAA;AACf,aAAOO,IAAIC,QAAQC,EAAAA,IAAMD,OAAOC,EAAAA,IAAM,CAAC;IACzC;IACAQ,SAAS,MAAA;AACP,YAAMT,SAASR,KAAAA;AACf,aAAOU,OAAOC,KAAKH,MAAAA,EAAQU,IAAI,CAACT,OAAO;QAACA;QAAID,OAAOC,EAAAA;OAAI;IACzD;IACAU,OAAO,CAACV,IAAIU,UACVlB,MAAM,CAACO,WAAAA;AACL,UAAI,CAACD,IAAIC,QAAQC,EAAAA,GAAK;AACpBD,eAAOC,EAAAA,IAAM;UAAE,GAAGU;QAAM;MAC1B,OAAO;AACLT,eAAOU,OAAOZ,OAAOC,EAAAA,GAAKU,KAAAA;MAC5B;IACF,CAAA;IACFE,QAAQ,CAACZ,OACPR,MAAM,CAACO,WAAAA;AACL,UAAID,IAAIC,QAAQC,EAAAA,GAAK;AACnB,eAAOD,OAAOC,EAAAA;MAChB;IACF,CAAA;EACJ;AACF;;;AClGA;;cAAAa;EAAA,aAAAC;;AAMA,YAAYC,aAAY;AAqCjB,IAAMC,SAAQ,MACZC,eAAO;EAAEC,KAAYC;EAAQC,OAAcC,cAAUC,EAAE;AAAE,CAAA,EAAGC,KACjEC,oBAAoBC,IAAI,KAAA,GACjBC,gBAAQ;AAIZ,IAAMC,QAAO,CAACC,MAAeV,QAAAA;AAKlC,QAAMW,SAAS,CAACC,QAAiBA;AACjC,QAAMC,OAAO,MAAeF,OAAOD,IAAAA,EAAMV,GAAAA,KAAQ,CAAC;AAKlD,QAAMc,QAAQ,CAACC,WAAAA;AACbC,IAAIC,OAAOP,MAAM,CAACA,UAAAA;AAChB,YAAMQ,OAAOP,OAAOD,KAAAA;AACpB,UAAIQ,KAAKlB,GAAAA,MAASmB,QAAW;AAC3BD,aAAKlB,GAAAA,IAAO,CAAC;MACf;AAGAe,aAAOG,KAAKlB,GAAAA,CAAI;IAClB,CAAA;EACF;AAIA,QAAMoB,MAAM,CAACC,QAAiBC,UAA2BC,OAAOC,KAAKH,MAAAA,EAAQI,SAASH,KAAAA;AAEtF,SAAO;IACLI,QAAQ,MAAMH,OAAOC,KAAKX,KAAAA,CAAAA;IAC1Bc,SAAS,CAACL,UAAAA;AACR,YAAMD,SAASR,KAAAA;AACf,aAAOO,IAAIC,QAAQC,KAAAA,IAASD,OAAOC,KAAAA,IAAS,CAAA;IAC9C;IACAM,MAAM,CAACC,aAAAA;AACL,YAAMR,SAASR,KAAAA;AACf,aAAOU,OAAOC,KAAKH,MAAAA,EAAQS,OAAO,CAACR,UAAUD,OAAOC,KAAAA,EAAOG,SAASI,QAAAA,CAAAA;IACtE;IACAE,QAAQ,CAACT,OAAOO,aACdf,MAAM,CAACO,WAAAA;AAEL,UAAI,CAACD,IAAIC,QAAQC,KAAAA,GAAQ;AACvBD,eAAOC,KAAAA,IAAS;UAACO;;MACnB,WAAW,CAACR,OAAOC,KAAAA,EAAOG,SAASI,QAAAA,GAAW;AAC5CR,eAAOC,KAAAA,IAAS;aAAID,OAAOC,KAAAA;UAAQO;;MACrC;IACF,CAAA;IACFG,UAAU,CAACV,OAAOO,aAChBf,MAAM,CAACO,WAAAA;AACL,UAAI,CAACD,IAAIC,QAAQC,KAAAA,GAAQ;AACvB;MACF;AACA,YAAMW,OAAOZ,OAAOC,KAAAA,EAAOQ,OAAO,CAACI,aAAaA,aAAaL,QAAAA;AAC7D,UAAII,KAAKE,WAAW,GAAG;AACrB,eAAOd,OAAOC,KAAAA;MAChB,OAAO;AACLD,eAAOC,KAAAA,IAASW;MAClB;IACF,CAAA;EACJ;AACF;;;AC7GA;;;;;;;AAMA,SAASG,OAAAA,MAAKC,WAAW;AA2BzB,IAAMC,cAAc;AAGb,IAAMC,MAAM,CAACC,QAAiBC,UAAmB,CAAC,MAAC;AACxD,QAAM,EAAEC,MAAMC,MAAML,YAAW,IAAKG;AACpC,MAAIC,MAAM;AACR,WAAgBE,MAAKF,MAAMC,GAAAA,EAAKE,KAAKL,OAAOM,EAAE;EAChD;AACA,SAAWC,QAAQP,MAAAA,EAAQK,KAAKG,IAAI,CAACC,QAAQA,IAAIC,GAAG;AACtD;AAGO,IAAMC,MAAM,CAACX,QAAiBY,OAAeX,UAAmB,CAAC,MAAC;AACvE,QAAM,EAAEC,MAAMC,MAAML,YAAW,IAAKG;AACpC,MAAIC,MAAM;AACRW,IAAST,MAAKF,MAAMC,GAAAA,EAAKW,OAAOF,OAAOZ,OAAOM,EAAE;AAChD;EACF;AAGA,QAAMA,KAAKS,KAAIC,SAASJ,KAAAA,KAAUA;AAClCK,EAAIC,OAAOlB,QAAQ,CAACA,YAAAA;AAClB,UAAMmB,OAAWZ,QAAQP,OAAAA;AACzB,QAAI,CAACmB,KAAKd,KAAKe,KAAK,CAACX,QAAQA,IAAIC,QAAQJ,EAAAA,GAAK;AAC5Ca,WAAKd,KAAKgB,KAASC,QAAQC,IAAIC,KAAKlB,EAAAA,CAAAA,CAAAA;IACtC;EACF,CAAA;AACF;AAGO,IAAMmB,QAAQ,CAACzB,QAAiBY,OAAeX,UAAmB,CAAC,MAAC;AACzE,QAAM,EAAEC,MAAMC,MAAML,YAAW,IAAKG;AACpC,MAAIC,MAAM;AACRW,IAAST,MAAKF,MAAMC,GAAAA,EAAKuB,SAASd,OAAOZ,OAAOM,EAAE;AAClD;EACF;AACA,QAAMA,KAAKS,KAAIC,SAASJ,KAAAA,KAAUA;AAClCK,EAAIC,OAAOlB,QAAQ,CAACA,YAAAA;AAClB,UAAMmB,OAAWZ,QAAQP,OAAAA;AACzB,aAAS2B,IAAIR,KAAKd,KAAKuB,SAAS,GAAGD,KAAK,GAAGA,KAAK;AAC9C,UAAIR,KAAKd,KAAKsB,CAAAA,EAAGjB,QAAQJ,IAAI;AAC3Ba,aAAKd,KAAKwB,OAAOF,GAAG,CAAA;MACtB;IACF;EACF,CAAA;AACF;AAGO,IAAMG,UAAU,CAACC,IAAwCC,WAC9DA,OAAOxB,IAAI,CAACF,OAAOyB,GAAGE,QAAiBV,IAAIC,KAAKlB,EAAAA,CAAAA,CAAAA;;;AClFlD;;;;cAAA4B;;AAMA,YAAYC,aAAY;AAExB,SAASC,WAAW;AAWb,IAAMC,aAAoBC,eAAO;EACtCC,MAAaC,eAAOC,KAAYC,gBAAQ;EACxCC,SAAgBC,cAAUC,IAAQC,OAAO,CAAA,EAAGL,KAAcM,oBAAoBC,IAAI,KAAA,CAAA;AACpF,CAAA,EAAGP,KACUQ,eAAeD,IAAI;EAAEE,MAAM;EAAuBC,KAAK;AAAQ,CAAA,GACrEC,WAAWC,IAAIC,KAAK,4BAA4B,OAAA,CAAA,CAAA;AAKhD,IAAMA,QAAO,CAACC,QAAmD,CAAC,MACnED,KAAKjB,YAAY;EAAEM,SAAS,CAAA;EAAI,GAAGY;AAAM,CAAA;AAExC,IAAMC,eAA4DC,WAAWpB,UAAAA;;;AChCpF;;;;;;;cAAAqB;;AAMA,YAAYC,aAAY;AAExB,SAASC,gBAAgB;AACzB,SAASC,gBAAgB;AACzB,SAASC,OAAAA,MAAKC,iBAAiB;AAYxB,IAAMC,cAAqBC,eAAO;EACvCC,IAAWC;EACXC,MAAMC;EACNC,SAAgBC,iBAAgBC,eAAO;;EAGvCC,eAAsBF,iBAASF,QAAAA;AACjC,CAAA;AAIO,IAAMK,gBAAuBC,eAAO;EAAEC,KAAYT;EAAQU,OAAcC;AAAI,CAAA;AAE5E,IAAMC,gBAAgB,MAAMC,UAAUC,OAAM,EAAGC,SAAQ;AAEvD,IAAMC,aAAoBlB,eAAO;;;;EAItCmB,QAAiBC,eAAeC,KAAYf,gBAAQ;;;;;EAMpDgB,QAAeC,cAAMxB,WAAAA;;;;;EAMrByB,cAAqBtB,eAAOmB,KAAYf,gBAAQ;AAClD,CAAA;AAQA,IAAMmB,aAAoBzB,eAAO;;;;;EAK/B0B,OAAc1B,eAAO;IACnB2B,KAAYrB,iBAAgBJ,cAAM;IAClC0B,KAAKC,SAASC;EAChB,CAAA;;;;EAKAC,YAAYb;AACd,CAAA,EAAGG,KACQW,iBAAiBC,IAAI,IAAA,GACnBC,eAAeD,IAAI;EAAEE,MAAM;EAAuBC,KAAK;AAAQ,CAAA,GACrEC,WAAWC,KAAIC,KAAK,sBAAsB,OAAA,CAAA,CAAA;AAU1C,IAAMC,OAAuBf;AAE7B,IAAMc,QAAO,CAACE,UAAAA;AACnB,SAAWF,KAAKC,MAAM;IACpBd,OAAO;MAAEE,KAAWc,OAAcC,QAAO,CAAA,EAAIf;IAAI;IACjDG,YAAY;MAAET,QAAQ,CAAA;IAAG;IACzB,GAAGmB;EACL,CAAA;AACF;;;ACjGA;;;;;AAMA,SAASG,YAAY;AACrB,YAAYC,eAAe;AAC3B,YAAYC,aAAY;AAejB,IAAMC,UAAiBC,cACvBC,UAAeC,IAAI,GACnBD,UAAqBE,UAAU,GAC/BF,UAAeG,IAAI,CAAA;AAGnB,IAAMC,YAAkDC,KACzDC,WAAgBL,IAAI,GACdM,aAAOD,WAAsBJ,UAAU,CAAA,GACvCK,aAAOD,WAAgBH,IAAI,CAAA,CAAA;",
6
+ "names": ["QueryAST", "DXN", "EID", "URI", "EID", "isEncodedRef", "value", "Object", "keys", "length", "toJson", "obj", "toJSON", "createRefReplacer", "db", "depth", "hops", "WeakMap", "key", "parentHops", "get", "dxnString", "startsWith", "echoUri", "parsed", "tryParse", "getEntityId", "undefined", "target", "getObjectById", "encoded", "set", "Schema", "field", "value", "Record", "key", "String", "pipe", "FormInputAnnotation", "set", "optional", "bind", "host", "asView", "obj", "read", "write", "mutate", "Obj", "update", "view", "undefined", "has", "record", "id", "Object", "keys", "includes", "ids", "predicate", "filter", "get", "entries", "map", "patch", "assign", "remove", "bind", "field", "Schema", "field", "Record", "key", "String", "value", "Array", "ID", "pipe", "FormInputAnnotation", "set", "optional", "bind", "host", "asView", "obj", "read", "write", "mutate", "Obj", "update", "view", "undefined", "has", "record", "tagId", "Object", "keys", "includes", "tagIds", "objects", "tags", "objectId", "filter", "setTag", "unsetTag", "next", "existing", "length", "EID", "URI", "DEFAULT_KEY", "get", "object", "options", "host", "key", "bind", "tags", "id", "getMeta", "map", "tag", "uri", "set", "tagId", "TagIndex", "setTag", "EID", "tryParse", "Obj", "update", "meta", "some", "push", "fromURI", "URI", "make", "unset", "unsetTag", "i", "length", "splice", "resolve", "db", "tagIds", "makeRef", "make", "Schema", "DXN", "Collection", "Struct", "name", "String", "pipe", "optional", "objects", "Array", "Ref", "Unknown", "FormInputAnnotation", "set", "IconAnnotation", "icon", "hue", "makeObject", "DXN", "make", "props", "isCollection", "instanceOf", "make", "Schema", "QueryAST", "JsonPath", "DXN", "PublicKey", "FieldSchema", "Struct", "id", "String", "path", "JsonPath", "visible", "optional", "Boolean", "referencePath", "KeyValueProps", "Record", "key", "value", "Any", "createFieldId", "PublicKey", "random", "truncate", "Projection", "schema", "JsonSchemaType", "pipe", "fields", "Array", "pivotFieldId", "ViewSchema", "query", "raw", "ast", "QueryAST", "Query", "projection", "HiddenAnnotation", "set", "IconAnnotation", "icon", "hue", "makeObject", "DXN", "make", "View", "props", "select", "nothing", "pipe", "Predicate", "Schema", "Dataset", "Union", "getSchema", "Feed", "Collection", "View", "isDataset", "pipe", "instanceOf", "or"]
7
+ }
@@ -0,0 +1,108 @@
1
+ import {
2
+ foreignKeys,
3
+ type
4
+ } from "./chunk-ZACMEAYV.mjs";
5
+ import {
6
+ Meta,
7
+ getMeta,
8
+ make,
9
+ update
10
+ } from "./chunk-Q5FKCVBC.mjs";
11
+ import {
12
+ makeObject
13
+ } from "./chunk-JE7AOSWF.mjs";
14
+ import {
15
+ TagTypeDXN
16
+ } from "./chunk-4BB4MFCN.mjs";
17
+ import {
18
+ HiddenAnnotation,
19
+ LabelAnnotation
20
+ } from "./chunk-H26LSXVJ.mjs";
21
+ import {
22
+ __export
23
+ } from "./chunk-J5LGTIGS.mjs";
24
+
25
+ // src/Tag.ts
26
+ var Tag_exports = {};
27
+ __export(Tag_exports, {
28
+ Tag: () => Tag,
29
+ createTagList: () => createTagList,
30
+ findOrCreate: () => findOrCreate,
31
+ findTagByLabel: () => findTagByLabel,
32
+ make: () => make2,
33
+ sortTags: () => sortTags
34
+ });
35
+ import * as Schema from "effect/Schema";
36
+ var Tag = Schema.Struct({
37
+ label: Schema.String,
38
+ hue: Schema.optional(Schema.String)
39
+ }).pipe(
40
+ LabelAnnotation.set([
41
+ "label"
42
+ ]),
43
+ HiddenAnnotation.set(true),
44
+ // Shared DXN so `meta.tags` (the `Ref<Tag>` schema) and this type stay in sync.
45
+ makeObject(TagTypeDXN)
46
+ );
47
+ var make2 = (props) => make(Tag, props);
48
+ var sortTags = ({ label: a }, { label: b }) => a.localeCompare(b);
49
+ var createTagList = (tags) => Object.entries(tags).map(([id, tag]) => ({
50
+ ...tag,
51
+ id
52
+ })).sort(sortTags);
53
+ var findTagByLabel = (tags, name) => {
54
+ const entry = Object.entries(tags ?? {}).find(([_, tag]) => tag.label.toLowerCase() === name.toLowerCase());
55
+ return entry ? {
56
+ ...entry[1],
57
+ id: entry[0]
58
+ } : void 0;
59
+ };
60
+ var findOrCreate = async (db, options) => {
61
+ const { label, hue, key } = options;
62
+ const withHue = hue ? {
63
+ hue
64
+ } : {};
65
+ if (key) {
66
+ const [existing2] = await db.query(foreignKeys(Tag, [
67
+ key
68
+ ])).run();
69
+ if (existing2) {
70
+ if (existing2.label !== label || hue !== void 0 && existing2.hue !== hue) {
71
+ update(existing2, (existing3) => {
72
+ existing3.label = label;
73
+ if (hue !== void 0) {
74
+ existing3.hue = hue;
75
+ }
76
+ });
77
+ }
78
+ return existing2;
79
+ }
80
+ return db.add(make(Tag, {
81
+ [Meta]: {
82
+ keys: [
83
+ key
84
+ ]
85
+ },
86
+ label,
87
+ ...withHue
88
+ }));
89
+ }
90
+ const lowered = label.toLowerCase();
91
+ const candidates = await db.query(type(Tag)).run();
92
+ const existing = candidates.find((tag) => tag.label.toLowerCase() === lowered && (getMeta(tag).keys ?? []).length === 0);
93
+ return existing ?? db.add(make2({
94
+ label,
95
+ ...withHue
96
+ }));
97
+ };
98
+
99
+ export {
100
+ Tag,
101
+ make2 as make,
102
+ sortTags,
103
+ createTagList,
104
+ findTagByLabel,
105
+ findOrCreate,
106
+ Tag_exports
107
+ };
108
+ //# sourceMappingURL=chunk-LMNRFOVB.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/Tag.ts"],
4
+ "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\n// @import-as-namespace\n\nimport * as Schema from 'effect/Schema';\n\nimport type { ForeignKey } from '@dxos/echo-protocol';\n\nimport type * as Database from './Database';\nimport * as Filter from './Filter';\nimport * as internal 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 internal.LabelAnnotation.set(['label']),\n internal.HiddenAnnotation.set(true),\n // Shared DXN so `meta.tags` (the `Ref<Tag>` schema) and this type stay in sync.\n Type.makeObject(internal.TagTypeDXN),\n);\n\nexport type Tag = Type.InstanceType<typeof Tag>;\n\nexport const make = (props: Obj.MakeProps<typeof Tag>) => Obj.make(Tag, props);\n\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\n/**\n * Finds or creates a {@link Tag} object in the database.\n *\n * - With a foreign `key` (system/provider tags): matched by that key; the label is kept current on\n * re-sync. Use a stable key (e.g. `{ source: 'google.com/gmail/label', id }`) for tags whose\n * identity is external or well-known.\n * - Without a key (user tags): matched by case-insensitive label among tags that carry **no**\n * foreign key, so it never collides with a keyed system/provider tag of the same label.\n */\nexport const findOrCreate = async (\n db: Pick<Database.Database, 'query' | 'add'>,\n options: { label: string; hue?: string; key?: ForeignKey },\n): Promise<Tag> => {\n const { label, hue, key } = options;\n const withHue = hue ? { hue } : {};\n if (key) {\n const [existing] = await db.query(Filter.foreignKeys(Tag, [key])).run();\n if (existing) {\n // Keep label (and hue, when provided) current on re-sync. `hue` is only touched when supplied,\n // so a label-only re-sync (e.g. Gmail) doesn't wipe a user-set colour.\n if (existing.label !== label || (hue !== undefined && existing.hue !== hue)) {\n Obj.update(existing, (existing) => {\n existing.label = label;\n if (hue !== undefined) {\n existing.hue = hue;\n }\n });\n }\n return existing;\n }\n return db.add(Obj.make(Tag, { [Obj.Meta]: { keys: [key] }, label, ...withHue }));\n }\n\n const lowered = label.toLowerCase();\n const candidates = await db.query(Filter.type(Tag)).run();\n const existing = candidates.find(\n (tag) => tag.label.toLowerCase() === lowered && (Obj.getMeta(tag).keys ?? []).length === 0,\n );\n return existing ?? db.add(make({ label, ...withHue }));\n};\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;AAAA;;;;;;cAAAA;EAAA;;AAMA,YAAYC,YAAY;AAUjB,IAAMC,MAAaC,cAAO;EAC/BC,OAAcC;EACdC,KAAYC,gBAAgBF,aAAM;AACpC,CAAA,EAAGG;EACQC,gBAAgBC,IAAI;IAAC;GAAQ;EAC7BC,iBAAiBD,IAAI,IAAA;;EAEzBE,WAAoBC,UAAU;AAAA;AAK9B,IAAMC,QAAO,CAACC,UAAyCD,KAAKZ,KAAKa,KAAAA;AAIjE,IAAMC,WAAW,CAAC,EAAEZ,OAAOa,EAAC,GAAS,EAAEb,OAAOc,EAAC,MAAYD,EAAEE,cAAcD,CAAAA;AAE3E,IAAME,gBAAgB,CAACC,SAC5BC,OAAOC,QAAQF,IAAAA,EACZG,IAAI,CAAC,CAACC,IAAIC,GAAAA,OAAU;EAAE,GAAGA;EAAKD;AAAG,EAAA,EACjCE,KAAKX,QAAAA;AAEH,IAAMY,iBAAiB,CAACP,MAAuBQ,SAAAA;AACpD,QAAMC,QAAQR,OAAOC,QAAQF,QAAQ,CAAC,CAAA,EAAGU,KAAK,CAAC,CAACC,GAAGN,GAAAA,MAASA,IAAItB,MAAM6B,YAAW,MAAOJ,KAAKI,YAAW,CAAA;AACxG,SAAOH,QAAQ;IAAE,GAAGA,MAAM,CAAA;IAAIL,IAAIK,MAAM,CAAA;EAAG,IAAII;AACjD;AAWO,IAAMC,eAAe,OAC1BC,IACAC,YAAAA;AAEA,QAAM,EAAEjC,OAAOE,KAAKgC,IAAG,IAAKD;AAC5B,QAAME,UAAUjC,MAAM;IAAEA;EAAI,IAAI,CAAC;AACjC,MAAIgC,KAAK;AACP,UAAM,CAACE,SAAAA,IAAY,MAAMJ,GAAGK,MAAaC,YAAYxC,KAAK;MAACoC;KAAI,CAAA,EAAGK,IAAG;AACrE,QAAIH,WAAU;AAGZ,UAAIA,UAASpC,UAAUA,SAAUE,QAAQ4B,UAAaM,UAASlC,QAAQA,KAAM;AAC3EsC,QAAIC,OAAOL,WAAU,CAACA,cAAAA;AACpBA,UAAAA,UAASpC,QAAQA;AACjB,cAAIE,QAAQ4B,QAAW;AACrBM,YAAAA,UAASlC,MAAMA;UACjB;QACF,CAAA;MACF;AACA,aAAOkC;IACT;AACA,WAAOJ,GAAGU,IAAQhC,KAAKZ,KAAK;MAAE,CAAK6C,IAAI,GAAG;QAAEC,MAAM;UAACV;;MAAK;MAAGlC;MAAO,GAAGmC;IAAQ,CAAA,CAAA;EAC/E;AAEA,QAAMU,UAAU7C,MAAM6B,YAAW;AACjC,QAAMiB,aAAa,MAAMd,GAAGK,MAAaU,KAAKjD,GAAAA,CAAAA,EAAMyC,IAAG;AACvD,QAAMH,WAAWU,WAAWnB,KAC1B,CAACL,QAAQA,IAAItB,MAAM6B,YAAW,MAAOgB,YAAgBG,QAAQ1B,GAAAA,EAAKsB,QAAQ,CAAA,GAAIK,WAAW,CAAA;AAE3F,SAAOb,YAAYJ,GAAGU,IAAIhC,MAAK;IAAEV;IAAO,GAAGmC;EAAQ,CAAA,CAAA;AACrD;",
6
+ "names": ["make", "Schema", "Tag", "Struct", "label", "String", "hue", "optional", "pipe", "LabelAnnotation", "set", "HiddenAnnotation", "makeObject", "TagTypeDXN", "make", "props", "sortTags", "a", "b", "localeCompare", "createTagList", "tags", "Object", "entries", "map", "id", "tag", "sort", "findTagByLabel", "name", "entry", "find", "_", "toLowerCase", "undefined", "findOrCreate", "db", "options", "key", "withHue", "existing", "query", "foreignKeys", "run", "Obj", "update", "add", "Meta", "keys", "lowered", "candidates", "type", "getMeta", "length"]
7
+ }
@@ -3,13 +3,35 @@ import * as Schema from "effect/Schema";
3
3
  var KindId = "~@dxos/echo/Kind";
4
4
  var SchemaKindId = "~@dxos/echo/SchemaKind";
5
5
  var SnapshotKindId = "~@dxos/echo/SnapshotKind";
6
+ var StaticTypeSchemaSlot = "~@dxos/echo/Type.StaticSchema";
7
+ var getStaticTypeSchema = (value) => {
8
+ if (value == null || typeof value !== "object") {
9
+ return void 0;
10
+ }
11
+ return value[StaticTypeSchemaSlot];
12
+ };
13
+ var getSchemaKind = (value) => {
14
+ if (value == null || typeof value !== "object") {
15
+ return void 0;
16
+ }
17
+ return value[SchemaKindId];
18
+ };
19
+ var getEntityKindBrand = (value) => {
20
+ if (value == null || typeof value !== "object") {
21
+ return void 0;
22
+ }
23
+ return value[KindId];
24
+ };
25
+ var InstancePhantomId = "~@dxos/echo/Type.Instance";
26
+ var UnknownTypeSchemaBrandId = "~@dxos/echo/UnknownTypeSchemaBrand";
6
27
  var EntityKind = /* @__PURE__ */ (function(EntityKind2) {
7
28
  EntityKind2["Object"] = "object";
8
29
  EntityKind2["Relation"] = "relation";
30
+ EntityKind2["Type"] = "type";
9
31
  return EntityKind2;
10
32
  })({});
11
33
  var EntityKindSchema = Schema.Enums(EntityKind);
12
- var ANY_OBJECT_TYPENAME = "org.dxos.schema.any-object";
34
+ var ANY_OBJECT_TYPENAME = "org.dxos.schema.anyObject";
13
35
  var ANY_OBJECT_VERSION = "0.0.0";
14
36
 
15
37
  // src/internal/Annotation/util.ts
@@ -35,8 +57,7 @@ var makeTypeJsonSchemaAnnotation = (options) => {
35
57
  assertArgument(!!options.relationSource === (options.kind === EntityKind.Relation), "relationSource");
36
58
  assertArgument(!!options.relationTarget === (options.kind === EntityKind.Relation), "relationTarget");
37
59
  const obj = {
38
- // TODO(dmaretskyi): Should this include the version?
39
- $id: options.identifier ?? DXN.fromTypename(options.typename).toString(),
60
+ $id: options.identifier ?? DXN.make(options.typename, options.version),
40
61
  entityKind: options.kind,
41
62
  version: options.version,
42
63
  typename: options.typename
@@ -56,6 +77,12 @@ export {
56
77
  KindId,
57
78
  SchemaKindId,
58
79
  SnapshotKindId,
80
+ StaticTypeSchemaSlot,
81
+ getStaticTypeSchema,
82
+ getSchemaKind,
83
+ getEntityKindBrand,
84
+ InstancePhantomId,
85
+ UnknownTypeSchemaBrandId,
59
86
  EntityKind,
60
87
  EntityKindSchema,
61
88
  ANY_OBJECT_TYPENAME,
@@ -64,4 +91,4 @@ export {
64
91
  unwrapOptional,
65
92
  makeTypeJsonSchemaAnnotation
66
93
  };
67
- //# sourceMappingURL=chunk-WYOKA6AE.mjs.map
94
+ //# sourceMappingURL=chunk-O6BH7EPN.mjs.map