@dxos/echo 0.8.4-main.d05539e30a → 0.8.4-main.d9fc60f731

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 (378) hide show
  1. package/README.md +4 -4
  2. package/dist/lib/neutral/Annotation.mjs +27 -6
  3. package/dist/lib/neutral/Database.mjs +6 -11
  4. package/dist/lib/neutral/Entity.mjs +25 -16
  5. package/dist/lib/neutral/Err.mjs +3 -3
  6. package/dist/lib/neutral/Feed.mjs +19 -17
  7. package/dist/lib/neutral/Filter.mjs +13 -13
  8. package/dist/lib/neutral/Format.mjs +23 -3
  9. package/dist/lib/neutral/JsonSchema.mjs +7 -8
  10. package/dist/lib/neutral/Key.mjs +9 -5
  11. package/dist/lib/neutral/Migration.mjs +11 -10
  12. package/dist/lib/neutral/Obj.mjs +21 -18
  13. package/dist/lib/neutral/Query.mjs +17 -17
  14. package/dist/lib/neutral/QueryResult.mjs +1 -1
  15. package/dist/lib/neutral/Ref.mjs +10 -11
  16. package/dist/lib/neutral/Registry.mjs +14 -0
  17. package/dist/lib/neutral/Relation.mjs +24 -23
  18. package/dist/lib/neutral/Scope.mjs +12 -0
  19. package/dist/lib/neutral/Tag.mjs +17 -14
  20. package/dist/lib/neutral/Type.mjs +52 -26
  21. package/dist/lib/neutral/chunk-3DKP2EIN.mjs +31 -0
  22. package/dist/lib/neutral/chunk-3DKP2EIN.mjs.map +7 -0
  23. package/dist/lib/neutral/chunk-4BB4MFCN.mjs +154 -0
  24. package/dist/lib/neutral/chunk-4BB4MFCN.mjs.map +7 -0
  25. package/dist/lib/neutral/{chunk-PT37DG2F.mjs → chunk-4SFPZJVA.mjs} +82 -74
  26. package/dist/lib/neutral/chunk-4SFPZJVA.mjs.map +7 -0
  27. package/dist/lib/neutral/{chunk-APHSOTIX.mjs → chunk-4Z6GET2X.mjs} +3 -3
  28. package/dist/lib/neutral/{chunk-APHSOTIX.mjs.map → chunk-4Z6GET2X.mjs.map} +2 -2
  29. package/dist/lib/neutral/{chunk-7RVZT53K.mjs → chunk-7LOUAPYZ.mjs} +9 -5
  30. package/dist/lib/neutral/chunk-7LOUAPYZ.mjs.map +7 -0
  31. package/dist/lib/neutral/{chunk-BMB7IHGB.mjs → chunk-7OAFN3OX.mjs} +70 -57
  32. package/dist/lib/neutral/chunk-7OAFN3OX.mjs.map +7 -0
  33. package/dist/lib/neutral/{chunk-MLS7U7AT.mjs → chunk-7PRCIDHH.mjs} +41 -28
  34. package/dist/lib/neutral/chunk-7PRCIDHH.mjs.map +7 -0
  35. package/dist/lib/neutral/{chunk-ZISMEVKD.mjs → chunk-BBFJWWAV.mjs} +6 -6
  36. package/dist/lib/neutral/chunk-BBFJWWAV.mjs.map +7 -0
  37. package/dist/lib/neutral/{chunk-ZFACXBY6.mjs → chunk-BDQGMDIX.mjs} +30 -34
  38. package/dist/lib/neutral/chunk-BDQGMDIX.mjs.map +7 -0
  39. package/dist/lib/neutral/chunk-CGTI5MXO.mjs +36 -0
  40. package/dist/lib/neutral/chunk-CGTI5MXO.mjs.map +7 -0
  41. package/dist/lib/neutral/{chunk-V72DY6LU.mjs → chunk-DKLUHO4T.mjs} +1 -1
  42. package/dist/lib/neutral/chunk-DKLUHO4T.mjs.map +7 -0
  43. package/dist/lib/neutral/chunk-DMN2CKPX.mjs +93 -0
  44. package/dist/lib/neutral/chunk-DMN2CKPX.mjs.map +7 -0
  45. package/dist/lib/neutral/{chunk-QRZ2I3ZM.mjs → chunk-G6CFWUYH.mjs} +2 -2
  46. package/dist/lib/neutral/chunk-H26LSXVJ.mjs +653 -0
  47. package/dist/lib/neutral/chunk-H26LSXVJ.mjs.map +7 -0
  48. package/dist/lib/neutral/{chunk-N7VOEPSV.mjs → chunk-J3MNM65T.mjs} +9 -9
  49. package/dist/lib/neutral/chunk-J3MNM65T.mjs.map +7 -0
  50. package/dist/lib/neutral/chunk-JE7AOSWF.mjs +247 -0
  51. package/dist/lib/neutral/chunk-JE7AOSWF.mjs.map +7 -0
  52. package/dist/lib/neutral/chunk-LAF3LSWI.mjs +379 -0
  53. package/dist/lib/neutral/chunk-LAF3LSWI.mjs.map +7 -0
  54. package/dist/lib/neutral/chunk-LMNRFOVB.mjs +108 -0
  55. package/dist/lib/neutral/chunk-LMNRFOVB.mjs.map +7 -0
  56. package/dist/lib/neutral/{chunk-N4B7FHQT.mjs → chunk-O6BH7EPN.mjs} +30 -3
  57. package/dist/lib/neutral/chunk-O6BH7EPN.mjs.map +7 -0
  58. package/dist/lib/neutral/{chunk-Q7ZL2P5H.mjs → chunk-OIYW7R2G.mjs} +62 -46
  59. package/dist/lib/neutral/chunk-OIYW7R2G.mjs.map +7 -0
  60. package/dist/lib/neutral/{chunk-G54OX4IX.mjs → chunk-OYUG4FHF.mjs} +527 -847
  61. package/dist/lib/neutral/chunk-OYUG4FHF.mjs.map +7 -0
  62. package/dist/lib/neutral/{chunk-J54QMAKF.mjs → chunk-Q5FKCVBC.mjs} +64 -59
  63. package/dist/lib/neutral/chunk-Q5FKCVBC.mjs.map +7 -0
  64. package/dist/lib/neutral/{chunk-FIWO2FZK.mjs → chunk-Q62IHV2N.mjs} +12 -7
  65. package/dist/lib/neutral/chunk-Q62IHV2N.mjs.map +7 -0
  66. package/dist/lib/neutral/{chunk-SCPFDS2E.mjs → chunk-QVJDDG44.mjs} +65 -34
  67. package/dist/lib/neutral/chunk-QVJDDG44.mjs.map +7 -0
  68. package/dist/lib/neutral/{chunk-TRPZU2HV.mjs → chunk-TFEWTY5A.mjs} +155 -129
  69. package/dist/lib/neutral/chunk-TFEWTY5A.mjs.map +7 -0
  70. package/dist/lib/neutral/{chunk-44HT3MEC.mjs → chunk-VKWOFXT2.mjs} +22 -2
  71. package/dist/lib/neutral/{chunk-44HT3MEC.mjs.map → chunk-VKWOFXT2.mjs.map} +1 -1
  72. package/dist/lib/neutral/{chunk-APJKDGFL.mjs → chunk-ZACMEAYV.mjs} +24 -24
  73. package/dist/lib/neutral/chunk-ZACMEAYV.mjs.map +7 -0
  74. package/dist/lib/neutral/index.mjs +50 -40
  75. package/dist/lib/neutral/internal/index.mjs +125 -64
  76. package/dist/lib/neutral/meta.json +1 -1
  77. package/dist/lib/neutral/testing/index.mjs +88 -99
  78. package/dist/lib/neutral/testing/index.mjs.map +3 -3
  79. package/dist/types/src/Annotation.d.ts +108 -4
  80. package/dist/types/src/Annotation.d.ts.map +1 -1
  81. package/dist/types/src/Annotation.test.d.ts +2 -0
  82. package/dist/types/src/Annotation.test.d.ts.map +1 -0
  83. package/dist/types/src/Collection.d.ts +2 -3
  84. package/dist/types/src/Collection.d.ts.map +1 -1
  85. package/dist/types/src/Database.d.ts +50 -30
  86. package/dist/types/src/Database.d.ts.map +1 -1
  87. package/dist/types/src/Dataset.d.ts +16 -6
  88. package/dist/types/src/Dataset.d.ts.map +1 -1
  89. package/dist/types/src/Entity.d.ts +89 -19
  90. package/dist/types/src/Entity.d.ts.map +1 -1
  91. package/dist/types/src/Err.d.ts +9 -9
  92. package/dist/types/src/Err.d.ts.map +1 -1
  93. package/dist/types/src/Feed.d.ts +35 -12
  94. package/dist/types/src/Feed.d.ts.map +1 -1
  95. package/dist/types/src/Filter.d.ts +21 -8
  96. package/dist/types/src/Filter.d.ts.map +1 -1
  97. package/dist/types/src/Hypergraph.d.ts +13 -8
  98. package/dist/types/src/Hypergraph.d.ts.map +1 -1
  99. package/dist/types/src/Json.d.ts.map +1 -1
  100. package/dist/types/src/JsonSchema.d.ts +1 -1
  101. package/dist/types/src/JsonSchema.d.ts.map +1 -1
  102. package/dist/types/src/Key.d.ts +1 -1
  103. package/dist/types/src/Key.d.ts.map +1 -1
  104. package/dist/types/src/Migration.d.ts +15 -12
  105. package/dist/types/src/Migration.d.ts.map +1 -1
  106. package/dist/types/src/Obj.d.ts +69 -40
  107. package/dist/types/src/Obj.d.ts.map +1 -1
  108. package/dist/types/src/Query.d.ts +24 -10
  109. package/dist/types/src/Query.d.ts.map +1 -1
  110. package/dist/types/src/QueryResult.d.ts +9 -0
  111. package/dist/types/src/QueryResult.d.ts.map +1 -1
  112. package/dist/types/src/Ref.d.ts +15 -8
  113. package/dist/types/src/Ref.d.ts.map +1 -1
  114. package/dist/types/src/Registry.d.ts +131 -0
  115. package/dist/types/src/Registry.d.ts.map +1 -0
  116. package/dist/types/src/Relation.d.ts +55 -26
  117. package/dist/types/src/Relation.d.ts.map +1 -1
  118. package/dist/types/src/Scope.d.ts +34 -0
  119. package/dist/types/src/Scope.d.ts.map +1 -0
  120. package/dist/types/src/StateMap.d.ts +32 -0
  121. package/dist/types/src/StateMap.d.ts.map +1 -0
  122. package/dist/types/src/StateMap.test.d.ts +2 -0
  123. package/dist/types/src/StateMap.test.d.ts.map +1 -0
  124. package/dist/types/src/Tag.d.ts +19 -3
  125. package/dist/types/src/Tag.d.ts.map +1 -1
  126. package/dist/types/src/TagIndex.d.ts +36 -0
  127. package/dist/types/src/TagIndex.d.ts.map +1 -0
  128. package/dist/types/src/TagIndex.test.d.ts +2 -0
  129. package/dist/types/src/TagIndex.test.d.ts.map +1 -0
  130. package/dist/types/src/Tagging.d.ts +31 -0
  131. package/dist/types/src/Tagging.d.ts.map +1 -0
  132. package/dist/types/src/Type.d.ts +356 -95
  133. package/dist/types/src/Type.d.ts.map +1 -1
  134. package/dist/types/src/View.d.ts +1 -4
  135. package/dist/types/src/View.d.ts.map +1 -1
  136. package/dist/types/src/index.d.ts +6 -3
  137. package/dist/types/src/index.d.ts.map +1 -1
  138. package/dist/types/src/internal/Annotation/annotations.d.ts +68 -36
  139. package/dist/types/src/internal/Annotation/annotations.d.ts.map +1 -1
  140. package/dist/types/src/internal/Annotation/dictionary.d.ts +24 -0
  141. package/dist/types/src/internal/Annotation/dictionary.d.ts.map +1 -0
  142. package/dist/types/src/internal/Annotation/entity-dictionary.d.ts +14 -0
  143. package/dist/types/src/internal/Annotation/entity-dictionary.d.ts.map +1 -0
  144. package/dist/types/src/internal/Annotation/index.d.ts +4 -2
  145. package/dist/types/src/internal/Annotation/index.d.ts.map +1 -1
  146. package/dist/types/src/internal/Annotation/util.d.ts +13 -4
  147. package/dist/types/src/internal/Annotation/util.d.ts.map +1 -1
  148. package/dist/types/src/internal/Entity/api.d.ts +3 -3
  149. package/dist/types/src/internal/Entity/api.d.ts.map +1 -1
  150. package/dist/types/src/internal/Entity/entity.d.ts +72 -8
  151. package/dist/types/src/internal/Entity/entity.d.ts.map +1 -1
  152. package/dist/types/src/internal/Entity/guard.d.ts +10 -0
  153. package/dist/types/src/internal/Entity/guard.d.ts.map +1 -0
  154. package/dist/types/src/internal/Entity/index.d.ts +2 -0
  155. package/dist/types/src/internal/Entity/index.d.ts.map +1 -1
  156. package/dist/types/src/internal/Entity/model.d.ts +18 -17
  157. package/dist/types/src/internal/Entity/model.d.ts.map +1 -1
  158. package/dist/types/src/internal/Entity/object.d.ts +3 -3
  159. package/dist/types/src/internal/Entity/object.d.ts.map +1 -1
  160. package/dist/types/src/internal/Entity/relation.d.ts +30 -7
  161. package/dist/types/src/internal/Entity/relation.d.ts.map +1 -1
  162. package/dist/types/src/internal/Entity/type-kind.d.ts +24 -0
  163. package/dist/types/src/internal/Entity/type-kind.d.ts.map +1 -0
  164. package/dist/types/src/internal/Entity/type-uri.d.ts +25 -0
  165. package/dist/types/src/internal/Entity/type-uri.d.ts.map +1 -0
  166. package/dist/types/src/internal/Format/date.d.ts.map +1 -1
  167. package/dist/types/src/internal/Format/format.d.ts +3 -2
  168. package/dist/types/src/internal/Format/format.d.ts.map +1 -1
  169. package/dist/types/src/internal/Format/index.d.ts +2 -2
  170. package/dist/types/src/internal/Format/index.d.ts.map +1 -1
  171. package/dist/types/src/internal/Format/object.d.ts +3 -1
  172. package/dist/types/src/internal/Format/object.d.ts.map +1 -1
  173. package/dist/types/src/internal/JsonSchema/json-schema.d.ts +2 -1
  174. package/dist/types/src/internal/JsonSchema/json-schema.d.ts.map +1 -1
  175. package/dist/types/src/internal/Obj/clone.d.ts.map +1 -1
  176. package/dist/types/src/internal/Obj/create-object.d.ts +11 -12
  177. package/dist/types/src/internal/Obj/create-object.d.ts.map +1 -1
  178. package/dist/types/src/internal/Obj/index.d.ts +0 -1
  179. package/dist/types/src/internal/Obj/index.d.ts.map +1 -1
  180. package/dist/types/src/internal/Obj/json-serializer.d.ts +8 -8
  181. package/dist/types/src/internal/Obj/json-serializer.d.ts.map +1 -1
  182. package/dist/types/src/internal/Obj/snapshot.d.ts.map +1 -1
  183. package/dist/types/src/internal/Obj/typed-object.d.ts +1 -1
  184. package/dist/types/src/internal/Query.d.ts.map +1 -1
  185. package/dist/types/src/internal/Ref/ref-array.d.ts +2 -2
  186. package/dist/types/src/internal/Ref/ref.d.ts +29 -19
  187. package/dist/types/src/internal/Ref/ref.d.ts.map +1 -1
  188. package/dist/types/src/internal/Type/index.d.ts +1 -2
  189. package/dist/types/src/internal/Type/index.d.ts.map +1 -1
  190. package/dist/types/src/internal/Type/manipulation.d.ts +0 -1
  191. package/dist/types/src/internal/Type/manipulation.d.ts.map +1 -1
  192. package/dist/types/src/internal/Type/type-schema.d.ts +52 -0
  193. package/dist/types/src/internal/Type/type-schema.d.ts.map +1 -0
  194. package/dist/types/src/internal/common/api/meta.d.ts +11 -8
  195. package/dist/types/src/internal/common/api/meta.d.ts.map +1 -1
  196. package/dist/types/src/internal/common/proxy/json-serializer.d.ts.map +1 -1
  197. package/dist/types/src/internal/common/proxy/make-object.d.ts +11 -5
  198. package/dist/types/src/internal/common/proxy/make-object.d.ts.map +1 -1
  199. package/dist/types/src/internal/common/proxy/typed-handler.d.ts +18 -2
  200. package/dist/types/src/internal/common/proxy/typed-handler.d.ts.map +1 -1
  201. package/dist/types/src/internal/common/types/base.d.ts +4 -4
  202. package/dist/types/src/internal/common/types/entity.d.ts +59 -2
  203. package/dist/types/src/internal/common/types/entity.d.ts.map +1 -1
  204. package/dist/types/src/internal/common/types/index.d.ts +1 -1
  205. package/dist/types/src/internal/common/types/index.d.ts.map +1 -1
  206. package/dist/types/src/internal/common/types/meta.d.ts +13 -7
  207. package/dist/types/src/internal/common/types/meta.d.ts.map +1 -1
  208. package/dist/types/src/internal/common/types/model-symbols.d.ts +8 -4
  209. package/dist/types/src/internal/common/types/model-symbols.d.ts.map +1 -1
  210. package/dist/types/src/internal/common/types/typename.d.ts +7 -0
  211. package/dist/types/src/internal/common/types/typename.d.ts.map +1 -1
  212. package/dist/types/src/internal/common/types/well-known-types.d.ts +11 -0
  213. package/dist/types/src/internal/common/types/well-known-types.d.ts.map +1 -0
  214. package/dist/types/src/internal/index.d.ts +1 -0
  215. package/dist/types/src/internal/index.d.ts.map +1 -1
  216. package/dist/types/src/testing/test-schema.d.ts +32 -38
  217. package/dist/types/src/testing/test-schema.d.ts.map +1 -1
  218. package/dist/types/src/testing/util.d.ts +5 -3
  219. package/dist/types/src/testing/util.d.ts.map +1 -1
  220. package/dist/types/tsconfig.tsbuildinfo +1 -1
  221. package/package.json +21 -23
  222. package/src/Annotation.test.ts +439 -0
  223. package/src/Annotation.ts +151 -4
  224. package/src/Collection.ts +5 -9
  225. package/src/Database.ts +86 -61
  226. package/src/Dataset.ts +10 -2
  227. package/src/Entity.test.ts +116 -6
  228. package/src/Entity.ts +116 -23
  229. package/src/Err.ts +4 -4
  230. package/src/Feed.ts +57 -40
  231. package/src/Filter.ts +49 -27
  232. package/src/Hypergraph.ts +13 -8
  233. package/src/Json.test.ts +4 -4
  234. package/src/Json.ts +7 -6
  235. package/src/Key.ts +1 -1
  236. package/src/Migration.ts +27 -19
  237. package/src/Obj.test.ts +19 -8
  238. package/src/Obj.ts +131 -70
  239. package/src/Query.test.ts +147 -151
  240. package/src/Query.ts +133 -75
  241. package/src/QueryResult.ts +11 -0
  242. package/src/Ref.ts +21 -5
  243. package/src/Registry.ts +155 -0
  244. package/src/Relation.test.ts +10 -10
  245. package/src/Relation.ts +89 -52
  246. package/src/Scope.ts +50 -0
  247. package/src/StateMap.test.ts +56 -0
  248. package/src/StateMap.ts +99 -0
  249. package/src/Tag.md +88 -0
  250. package/src/Tag.ts +49 -6
  251. package/src/TagIndex.test.ts +57 -0
  252. package/src/TagIndex.ts +110 -0
  253. package/src/Tagging.ts +83 -0
  254. package/src/Type.test.ts +223 -18
  255. package/src/Type.ts +601 -131
  256. package/src/View.ts +10 -19
  257. package/src/index.ts +6 -4
  258. package/src/internal/Annotation/annotations.test.ts +31 -11
  259. package/src/internal/Annotation/annotations.ts +122 -103
  260. package/src/internal/Annotation/dictionary.ts +47 -0
  261. package/src/internal/Annotation/entity-dictionary.ts +40 -0
  262. package/src/internal/Annotation/index.ts +4 -2
  263. package/src/internal/Annotation/util.ts +17 -8
  264. package/src/internal/Entity/api.ts +7 -7
  265. package/src/internal/Entity/entity.ts +196 -47
  266. package/src/internal/Entity/guard.ts +26 -0
  267. package/src/internal/Entity/index.ts +2 -0
  268. package/src/internal/Entity/model.ts +35 -28
  269. package/src/internal/Entity/object.ts +21 -5
  270. package/src/internal/Entity/relation.ts +68 -34
  271. package/src/internal/Entity/type-kind.ts +75 -0
  272. package/src/internal/Entity/type-uri.ts +87 -0
  273. package/src/internal/Entity/util.ts +10 -9
  274. package/src/internal/Format/date.ts +0 -4
  275. package/src/internal/Format/format.test.ts +21 -0
  276. package/src/internal/Format/index.ts +2 -3
  277. package/src/internal/Format/object.ts +21 -4
  278. package/src/internal/Format/types.ts +1 -1
  279. package/src/internal/JsonSchema/annotations.ts +1 -1
  280. package/src/internal/JsonSchema/json-schema.test.ts +54 -140
  281. package/src/internal/JsonSchema/json-schema.ts +44 -30
  282. package/src/internal/Obj/clone.ts +9 -4
  283. package/src/internal/Obj/create-object.test.ts +12 -10
  284. package/src/internal/Obj/create-object.ts +67 -22
  285. package/src/internal/Obj/index.ts +0 -1
  286. package/src/internal/Obj/inspect.ts +4 -3
  287. package/src/internal/Obj/json-serializer.test.ts +100 -21
  288. package/src/internal/Obj/json-serializer.ts +93 -38
  289. package/src/internal/Obj/set-value.test.ts +7 -30
  290. package/src/internal/Obj/snapshot.ts +11 -4
  291. package/src/internal/Obj/typed-object.test.ts +9 -11
  292. package/src/internal/Obj/typed-object.ts +1 -1
  293. package/src/internal/Query.ts +14 -11
  294. package/src/internal/Ref/ref-array.ts +3 -3
  295. package/src/internal/Ref/ref.test.ts +17 -26
  296. package/src/internal/Ref/ref.ts +107 -59
  297. package/src/internal/Type/compose.test.ts +3 -1
  298. package/src/internal/Type/index.ts +1 -2
  299. package/src/internal/Type/manipulation.ts +0 -25
  300. package/src/internal/Type/type-schema.ts +60 -0
  301. package/src/internal/common/README.md +1 -1
  302. package/src/internal/common/api/meta.ts +16 -14
  303. package/src/internal/common/proxy/change.test.ts +35 -27
  304. package/src/internal/common/proxy/handler.test.ts +1 -1
  305. package/src/internal/common/proxy/json-serializer.ts +26 -16
  306. package/src/internal/common/proxy/make-object.ts +43 -20
  307. package/src/internal/common/proxy/ownership.ts +2 -2
  308. package/src/internal/common/proxy/schema.test.ts +48 -86
  309. package/src/internal/common/proxy/typed-handler.test.ts +12 -11
  310. package/src/internal/common/proxy/typed-handler.ts +71 -9
  311. package/src/internal/common/proxy/typed-object.test.ts +15 -27
  312. package/src/internal/common/types/base.ts +4 -4
  313. package/src/internal/common/types/entity.ts +80 -1
  314. package/src/internal/common/types/index.ts +6 -1
  315. package/src/internal/common/types/meta.ts +37 -14
  316. package/src/internal/common/types/model-symbols.ts +16 -4
  317. package/src/internal/common/types/typename.ts +39 -3
  318. package/src/internal/common/types/well-known-types.ts +15 -0
  319. package/src/internal/index.ts +5 -0
  320. package/src/testing/api.test.ts +15 -9
  321. package/src/testing/test-data.ts +24 -24
  322. package/src/testing/test-schema.ts +22 -58
  323. package/src/testing/util.ts +14 -11
  324. package/dist/lib/neutral/Extension.mjs +0 -18
  325. package/dist/lib/neutral/SchemaRegistry.mjs +0 -2
  326. package/dist/lib/neutral/chunk-5SL5LDLD.mjs +0 -47
  327. package/dist/lib/neutral/chunk-5SL5LDLD.mjs.map +0 -7
  328. package/dist/lib/neutral/chunk-7RVZT53K.mjs.map +0 -7
  329. package/dist/lib/neutral/chunk-APJKDGFL.mjs.map +0 -7
  330. package/dist/lib/neutral/chunk-BICZKPQG.mjs +0 -7
  331. package/dist/lib/neutral/chunk-BICZKPQG.mjs.map +0 -7
  332. package/dist/lib/neutral/chunk-BMB7IHGB.mjs.map +0 -7
  333. package/dist/lib/neutral/chunk-FIWO2FZK.mjs.map +0 -7
  334. package/dist/lib/neutral/chunk-G54OX4IX.mjs.map +0 -7
  335. package/dist/lib/neutral/chunk-GWFFC34K.mjs +0 -50
  336. package/dist/lib/neutral/chunk-GWFFC34K.mjs.map +0 -7
  337. package/dist/lib/neutral/chunk-I2DARWPX.mjs +0 -128
  338. package/dist/lib/neutral/chunk-I2DARWPX.mjs.map +0 -7
  339. package/dist/lib/neutral/chunk-J54QMAKF.mjs.map +0 -7
  340. package/dist/lib/neutral/chunk-MGSQGHOD.mjs +0 -206
  341. package/dist/lib/neutral/chunk-MGSQGHOD.mjs.map +0 -7
  342. package/dist/lib/neutral/chunk-MLS7U7AT.mjs.map +0 -7
  343. package/dist/lib/neutral/chunk-N4B7FHQT.mjs.map +0 -7
  344. package/dist/lib/neutral/chunk-N7VOEPSV.mjs.map +0 -7
  345. package/dist/lib/neutral/chunk-PSZBLH53.mjs +0 -81
  346. package/dist/lib/neutral/chunk-PSZBLH53.mjs.map +0 -7
  347. package/dist/lib/neutral/chunk-PT37DG2F.mjs.map +0 -7
  348. package/dist/lib/neutral/chunk-Q2KKKJSV.mjs +0 -56
  349. package/dist/lib/neutral/chunk-Q2KKKJSV.mjs.map +0 -7
  350. package/dist/lib/neutral/chunk-Q7ZL2P5H.mjs.map +0 -7
  351. package/dist/lib/neutral/chunk-SCPFDS2E.mjs.map +0 -7
  352. package/dist/lib/neutral/chunk-TNBK56IN.mjs +0 -350
  353. package/dist/lib/neutral/chunk-TNBK56IN.mjs.map +0 -7
  354. package/dist/lib/neutral/chunk-TRPZU2HV.mjs.map +0 -7
  355. package/dist/lib/neutral/chunk-V72DY6LU.mjs.map +0 -7
  356. package/dist/lib/neutral/chunk-ZFACXBY6.mjs.map +0 -7
  357. package/dist/lib/neutral/chunk-ZISMEVKD.mjs.map +0 -7
  358. package/dist/types/src/Extension.d.ts +0 -80
  359. package/dist/types/src/Extension.d.ts.map +0 -1
  360. package/dist/types/src/Extension.test.d.ts +0 -2
  361. package/dist/types/src/Extension.test.d.ts.map +0 -1
  362. package/dist/types/src/SchemaRegistry.d.ts +0 -84
  363. package/dist/types/src/SchemaRegistry.d.ts.map +0 -1
  364. package/dist/types/src/internal/Obj/ids.d.ts +0 -6
  365. package/dist/types/src/internal/Obj/ids.d.ts.map +0 -1
  366. package/dist/types/src/internal/Type/echo-schema.d.ts +0 -181
  367. package/dist/types/src/internal/Type/echo-schema.d.ts.map +0 -1
  368. package/dist/types/src/internal/Type/persistent-schema.d.ts +0 -20
  369. package/dist/types/src/internal/Type/persistent-schema.d.ts.map +0 -1
  370. package/src/Extension.test.ts +0 -235
  371. package/src/Extension.ts +0 -122
  372. package/src/SchemaRegistry.ts +0 -106
  373. package/src/internal/Obj/ids.ts +0 -12
  374. package/src/internal/Type/echo-schema.ts +0 -423
  375. package/src/internal/Type/persistent-schema.ts +0 -33
  376. /package/dist/lib/neutral/{Extension.mjs.map → Registry.mjs.map} +0 -0
  377. /package/dist/lib/neutral/{SchemaRegistry.mjs.map → Scope.mjs.map} +0 -0
  378. /package/dist/lib/neutral/{chunk-QRZ2I3ZM.mjs.map → chunk-G6CFWUYH.mjs.map} +0 -0
@@ -3,44 +3,66 @@ import {
3
3
  JsonSchemaType,
4
4
  toEffectSchema,
5
5
  toJsonSchema
6
- } from "./chunk-MLS7U7AT.mjs";
6
+ } from "./chunk-7PRCIDHH.mjs";
7
+ import {
8
+ ATTR_META,
9
+ EntityMetaSchema,
10
+ MetaId,
11
+ getMeta
12
+ } from "./chunk-4BB4MFCN.mjs";
7
13
  import {
8
14
  Ref,
9
15
  refFromEncodedReference,
10
16
  setRefResolver
11
- } from "./chunk-BMB7IHGB.mjs";
17
+ } from "./chunk-7OAFN3OX.mjs";
12
18
  import {
19
+ ATTR_DELETED,
13
20
  ATTR_PARENT,
21
+ ATTR_RELATION_SOURCE,
22
+ ATTR_RELATION_TARGET,
23
+ ATTR_SELF_URI,
24
+ ATTR_SELF_URI_LEGACY,
14
25
  ATTR_TYPE,
15
26
  IconAnnotation,
16
27
  LabelAnnotation,
28
+ ObjectDatabaseId,
29
+ ObjectDeletedId,
30
+ ObjectVersionId,
17
31
  ParentId,
32
+ RelationSourceDXNId,
33
+ RelationSourceId,
34
+ RelationTargetDXNId,
35
+ RelationTargetId,
18
36
  SchemaId,
19
- SchemaMetaSymbol,
37
+ SelfURIId,
20
38
  TypeAnnotationId,
39
+ TypeEntityId,
21
40
  TypeId,
22
- TypeIdentifierAnnotationId,
23
- TypenameSchema,
24
- VersionSchema,
41
+ assertObjectModel,
25
42
  getEntityKind,
26
43
  getLabel,
44
+ getObjectEchoUri,
27
45
  getSchema,
28
- getSchemaDXN,
29
46
  getSchemaTypename,
47
+ getSchemaURI,
48
+ getType,
30
49
  getTypeAnnotation,
31
- getTypeDXN,
32
50
  getTypeIdentifierAnnotation,
51
+ getTypeURI,
33
52
  getTypename,
34
53
  setSchema,
54
+ setType,
35
55
  setTypename
36
- } from "./chunk-TNBK56IN.mjs";
56
+ } from "./chunk-H26LSXVJ.mjs";
37
57
  import {
38
58
  EntityKind,
39
59
  KindId,
40
60
  SchemaKindId,
41
61
  SnapshotKindId,
62
+ StaticTypeSchemaSlot,
63
+ getStaticTypeSchema,
42
64
  makeTypeJsonSchemaAnnotation
43
- } from "./chunk-N4B7FHQT.mjs";
65
+ } from "./chunk-O6BH7EPN.mjs";
44
66
 
45
67
  // src/internal/index.ts
46
68
  import { JsonPath, JsonProp, getValue, splitJsonPath } from "@dxos/effect";
@@ -54,62 +76,6 @@ var RawObject = (schema) => {
54
76
  ]));
55
77
  };
56
78
 
57
- // src/internal/common/types/meta.ts
58
- import * as Schema2 from "effect/Schema";
59
- import { ForeignKey } from "@dxos/echo-protocol";
60
- import { invariant } from "@dxos/invariant";
61
- import { intersection } from "@dxos/util";
62
- var __dxlog_file = "/__w/dxos/dxos/packages/core/echo/echo/src/internal/common/types/meta.ts";
63
- var ATTR_META = "@meta";
64
- var MetaId = /* @__PURE__ */ Symbol.for("@dxos/echo/Meta");
65
- var ObjectMetaSchema = Schema2.Struct({
66
- keys: Schema2.Array(ForeignKey),
67
- /**
68
- * A set of tags.
69
- * Tags are arbitrary application-defined strings.
70
- * ECHO makes no assumptions about the tag structure.
71
- */
72
- // TODO(dmaretskyi): Has to be optional for compatibility with old data.
73
- // Defaulting to an empty array is possible but requires a bit more work.
74
- // TODO(dmaretskyi): In automerge this should be a map of { [tag]: boolean } for uniqueness and conflict resolution.
75
- tags: Schema2.optional(Schema2.Array(Schema2.String)),
76
- /**
77
- * Fully-qualified registry key for the object (FQN format, e.g. `org.example.type.foo`).
78
- * Identifies the canonical registry entry the object instance was created from.
79
- */
80
- key: Schema2.optional(Schema2.String),
81
- /**
82
- * Semantic version of the registry entry the object was created from.
83
- * Must be a valid semver string (e.g. `1.2.3`).
84
- */
85
- version: Schema2.optional(Schema2.String)
86
- });
87
- var getMeta = (obj) => {
88
- const metadata = obj[MetaId];
89
- invariant(metadata, "ObjectMeta not found.", { "~LogMeta": "~LogMeta", F: __dxlog_file, L: 45, S: void 0, A: ["metadata", "'ObjectMeta not found.'"] });
90
- return metadata;
91
- };
92
- var foreignKey = (source, id) => ({
93
- source,
94
- id
95
- });
96
- var foreignKeyEquals = (a, b) => a.source === b.source && a.id === b.id;
97
- var compareForeignKeys = (a, b) => intersection(getMeta(a).keys, getMeta(b).keys, foreignKeyEquals).length > 0;
98
-
99
- // src/internal/common/types/model-symbols.ts
100
- var ATTR_SELF_DXN = "@dxn";
101
- var SelfDXNId = /* @__PURE__ */ Symbol.for("@dxos/echo/DXN");
102
- var ATTR_DELETED = "@deleted";
103
- var ObjectDeletedId = /* @__PURE__ */ Symbol.for("@dxos/echo/Deleted");
104
- var ObjectVersionId = /* @__PURE__ */ Symbol.for("@dxos/echo/Version");
105
- var ObjectDatabaseId = /* @__PURE__ */ Symbol.for("@dxos/echo/Database");
106
- var ATTR_RELATION_SOURCE = "@relationSource";
107
- var RelationSourceId = /* @__PURE__ */ Symbol.for("@dxos/echo/RelationSource");
108
- var RelationSourceDXNId = /* @__PURE__ */ Symbol.for("@dxos/echo/RelationSourceDXN");
109
- var ATTR_RELATION_TARGET = "@relationTarget";
110
- var RelationTargetId = /* @__PURE__ */ Symbol.for("@dxos/echo/RelationTarget");
111
- var RelationTargetDXNId = /* @__PURE__ */ Symbol.for("@dxos/echo/RelationTargetDXN");
112
-
113
79
  // src/internal/common/types/version.ts
114
80
  var VersionTypeId = "~@dxos/echo/VersionTypeId";
115
81
 
@@ -137,48 +103,6 @@ var sort = (...comparators) => {
137
103
  };
138
104
  };
139
105
 
140
- // src/internal/common/api/meta.ts
141
- import { assertArgument, invariant as invariant2 } from "@dxos/invariant";
142
- var __dxlog_file2 = "/__w/dxos/dxos/packages/core/echo/echo/src/internal/common/api/meta.ts";
143
- function getMetaChecked(entity) {
144
- assertArgument(entity, "entity", "Should be an entity.");
145
- const meta = getMeta(entity);
146
- invariant2(meta != null, "Invalid entity.", { "~LogMeta": "~LogMeta", F: __dxlog_file2, L: 9, S: this, A: ["meta != null", "'Invalid entity.'"] });
147
- return meta;
148
- }
149
- var getKeys = (entity, source) => {
150
- assertArgument(entity, "entity", "Should be an entity.");
151
- const meta = getMetaChecked(entity);
152
- invariant2(meta != null, "Invalid entity.", { "~LogMeta": "~LogMeta", F: __dxlog_file2, L: 18, S: void 0, A: ["meta != null", "'Invalid entity.'"] });
153
- return meta.keys.filter((key) => key.source === source);
154
- };
155
- var deleteKeys = (entity, source) => {
156
- const meta = getMetaChecked(entity);
157
- for (let i = 0; i < meta.keys.length; i++) {
158
- if (meta.keys[i].source === source) {
159
- meta.keys.splice(i, 1);
160
- i--;
161
- }
162
- }
163
- };
164
- var addTag = (entity, tag) => {
165
- const meta = getMetaChecked(entity);
166
- meta.tags ??= [];
167
- meta.tags.push(tag);
168
- };
169
- var removeTag = (entity, tag) => {
170
- const meta = getMetaChecked(entity);
171
- if (!meta.tags) {
172
- return;
173
- }
174
- for (let i = 0; i < meta.tags.length; i++) {
175
- if (meta.tags[i] === tag) {
176
- meta.tags.splice(i, 1);
177
- i--;
178
- }
179
- }
180
- };
181
-
182
106
  // src/internal/common/proxy/symbols.ts
183
107
  var EventId = /* @__PURE__ */ Symbol.for("@dxos/live-object/EventId");
184
108
  var ChangeId = /* @__PURE__ */ Symbol.for("@dxos/live-object/ChangeId");
@@ -283,10 +207,10 @@ var createArrayMethodError = (method) => {
283
207
  };
284
208
 
285
209
  // src/internal/common/proxy/json-serializer.ts
286
- import { invariant as invariant3 } from "@dxos/invariant";
287
- import { DXN } from "@dxos/keys";
288
- import { deepMapValues } from "@dxos/util";
289
- var __dxlog_file3 = "/__w/dxos/dxos/packages/core/echo/echo/src/internal/common/proxy/json-serializer.ts";
210
+ import { invariant } from "@dxos/invariant";
211
+ import { EID } from "@dxos/keys";
212
+ import { deepMapValues, encodeUint8ArrayToJson } from "@dxos/util";
213
+ var __dxlog_file = "/__w/dxos/dxos/packages/core/echo/echo/src/internal/common/proxy/json-serializer.ts";
290
214
  var attachTypedJsonSerializer = (obj) => {
291
215
  const descriptor = Object.getOwnPropertyDescriptor(obj, "toJSON");
292
216
  if (descriptor) {
@@ -306,23 +230,23 @@ var typedJsonSerializer = function() {
306
230
  id
307
231
  };
308
232
  if (this[TypeId]) {
309
- result[ATTR_TYPE] = this[TypeId].toString();
233
+ result[ATTR_TYPE] = this[TypeId];
310
234
  }
311
235
  if (this[MetaId]) {
312
236
  result[ATTR_META] = serializeMeta(this[MetaId]);
313
237
  }
314
- if (this[SelfDXNId]) {
315
- result[ATTR_SELF_DXN] = this[SelfDXNId].toString();
238
+ if (this[SelfURIId]) {
239
+ result[ATTR_SELF_URI] = this[SelfURIId];
316
240
  }
317
241
  if (this[RelationSourceDXNId]) {
318
242
  const sourceDXN = this[RelationSourceDXNId];
319
- invariant3(sourceDXN instanceof DXN, void 0, { "~LogMeta": "~LogMeta", F: __dxlog_file3, L: 42, S: this, A: ["sourceDXN instanceof DXN", ""] });
320
- result[ATTR_RELATION_SOURCE] = sourceDXN.toString();
243
+ invariant(EID.isEID(sourceDXN), void 0, { "~LogMeta": "~LogMeta", F: __dxlog_file, L: 43, S: this, A: ["EID.isEID(sourceDXN)", ""] });
244
+ result[ATTR_RELATION_SOURCE] = sourceDXN;
321
245
  }
322
246
  if (this[RelationTargetDXNId]) {
323
247
  const targetDXN = this[RelationTargetDXNId];
324
- invariant3(targetDXN instanceof DXN, void 0, { "~LogMeta": "~LogMeta", F: __dxlog_file3, L: 47, S: this, A: ["targetDXN instanceof DXN", ""] });
325
- result[ATTR_RELATION_TARGET] = targetDXN.toString();
248
+ invariant(EID.isEID(targetDXN), void 0, { "~LogMeta": "~LogMeta", F: __dxlog_file, L: 48, S: this, A: ["EID.isEID(targetDXN)", ""] });
249
+ result[ATTR_RELATION_TARGET] = targetDXN;
326
250
  }
327
251
  Object.assign(result, serializeData(rest));
328
252
  return result;
@@ -332,19 +256,32 @@ var serializeData = (data) => {
332
256
  if (Ref.isRef(value2)) {
333
257
  return value2.noInline().encode();
334
258
  }
259
+ if (value2 instanceof Uint8Array) {
260
+ return encodeUint8ArrayToJson(value2);
261
+ }
335
262
  return recurse(value2);
336
263
  });
337
264
  };
338
265
  var serializeMeta = (meta) => {
339
- return deepMapValues(meta, (value2, recurse) => recurse(value2));
266
+ const { tags, annotations: annotations5, ...rest } = meta;
267
+ const compact = {
268
+ ...rest,
269
+ ...tags != null && tags.length > 0 ? {
270
+ tags
271
+ } : {},
272
+ ...annotations5 != null && Object.keys(annotations5).length > 0 ? {
273
+ annotations: annotations5
274
+ } : {}
275
+ };
276
+ return serializeData(compact);
340
277
  };
341
278
 
342
279
  // src/internal/common/proxy/make-object.ts
343
- import { ObjectId } from "@dxos/keys";
280
+ import { EntityId } from "@dxos/keys";
344
281
 
345
282
  // src/internal/common/proxy/proxy-utils.ts
346
- import { invariant as invariant4 } from "@dxos/invariant";
347
- var __dxlog_file4 = "/__w/dxos/dxos/packages/core/echo/echo/src/internal/common/proxy/proxy-utils.ts";
283
+ import { invariant as invariant2 } from "@dxos/invariant";
284
+ var __dxlog_file2 = "/__w/dxos/dxos/packages/core/echo/echo/src/internal/common/proxy/proxy-utils.ts";
348
285
  var symbolIsProxy = /* @__PURE__ */ Symbol.for("@dxos/schema/Proxy");
349
286
  var isProxy = (value2) => !!value2?.[symbolIsProxy];
350
287
  var isValidProxyTarget = (value2) => {
@@ -358,7 +295,7 @@ var isValidProxyTarget = (value2) => {
358
295
  };
359
296
  var getProxySlot = (proxy) => {
360
297
  const value2 = proxy[symbolIsProxy];
361
- invariant4(value2 instanceof ProxyHandlerSlot, void 0, { "~LogMeta": "~LogMeta", F: __dxlog_file4, L: 22, S: void 0, A: ["value instanceof ProxyHandlerSlot", ""] });
298
+ invariant2(value2 instanceof ProxyHandlerSlot, void 0, { "~LogMeta": "~LogMeta", F: __dxlog_file2, L: 22, S: void 0, A: ["value instanceof ProxyHandlerSlot", ""] });
362
299
  return value2;
363
300
  };
364
301
  var getProxyTarget = (proxy) => {
@@ -392,7 +329,7 @@ var ProxyHandlerSlot = class {
392
329
  this._handler = _handler;
393
330
  }
394
331
  get handler() {
395
- invariant4(this._handler, void 0, { "~LogMeta": "~LogMeta", F: __dxlog_file4, L: 71, S: this, A: ["this._handler", ""] });
332
+ invariant2(this._handler, void 0, { "~LogMeta": "~LogMeta", F: __dxlog_file2, L: 71, S: this, A: ["this._handler", ""] });
396
333
  return this._handler;
397
334
  }
398
335
  // TODO(burdon): Requires comment.
@@ -445,15 +382,15 @@ var ProxyHandlerSlot = class {
445
382
  };
446
383
 
447
384
  // src/internal/common/proxy/typed-handler.ts
448
- import * as Schema4 from "effect/Schema";
385
+ import * as Schema3 from "effect/Schema";
449
386
  import * as SchemaAST3 from "effect/SchemaAST";
450
387
  import { Event } from "@dxos/async";
451
388
  import { inspectCustom } from "@dxos/debug";
452
- import { invariant as invariant7 } from "@dxos/invariant";
389
+ import { assertArgument, invariant as invariant5 } from "@dxos/invariant";
453
390
 
454
391
  // src/internal/common/proxy/ownership.ts
455
- import { invariant as invariant5 } from "@dxos/invariant";
456
- var __dxlog_file5 = "/__w/dxos/dxos/packages/core/echo/echo/src/internal/common/proxy/ownership.ts";
392
+ import { invariant as invariant3 } from "@dxos/invariant";
393
+ var __dxlog_file3 = "/__w/dxos/dxos/packages/core/echo/echo/src/internal/common/proxy/ownership.ts";
457
394
  var EchoOwner = /* @__PURE__ */ Symbol.for("@dxos/echo/Owner");
458
395
  var getRawTarget = (value2) => {
459
396
  return isProxy(value2) ? getProxyTarget(value2) : value2;
@@ -482,7 +419,7 @@ var setOwnerRecursive = (value2, owner, options = {}) => {
482
419
  }
483
420
  if (!isRootEchoObject) {
484
421
  const ownershipAllowed = existingOwner == null || existingOwner === owner || existingOwner === newAllowedPreviousOwner;
485
- invariant5(ownershipAllowed, "Cannot reassign ownership of a nested record to a different ECHO object. Use deep copy first.", { "~LogMeta": "~LogMeta", F: __dxlog_file5, L: 76, S: void 0, A: ["ownershipAllowed", "'Cannot reassign ownership of a nested record to a different ECHO object. Use deep copy first.'"] });
422
+ invariant3(ownershipAllowed, "Cannot reassign ownership of a nested record to a different ECHO object. Use deep copy first.", { "~LogMeta": "~LogMeta", F: __dxlog_file3, L: 76, S: void 0, A: ["ownershipAllowed", "'Cannot reassign ownership of a nested record to a different ECHO object. Use deep copy first.'"] });
486
423
  }
487
424
  defineHiddenProperty(actualValue, EchoOwner, owner);
488
425
  const recursiveOptions = {
@@ -549,7 +486,7 @@ var hasForeignOwner = (value2, target) => traverseObjectGraph(value2, (v) => {
549
486
  });
550
487
  var MAX_OWNER_DEPTH = 100;
551
488
  var getEchoRoot = (target, depth = 0) => {
552
- invariant5(depth < MAX_OWNER_DEPTH, "Owner chain too deep - possible circular ownership", { "~LogMeta": "~LogMeta", F: __dxlog_file5, L: 169, S: void 0, A: ["depth < MAX_OWNER_DEPTH", "'Owner chain too deep - possible circular ownership'"] });
489
+ invariant3(depth < MAX_OWNER_DEPTH, "Owner chain too deep - possible circular ownership", { "~LogMeta": "~LogMeta", F: __dxlog_file3, L: 169, S: void 0, A: ["depth < MAX_OWNER_DEPTH", "'Owner chain too deep - possible circular ownership'"] });
553
490
  if (KindId in target) {
554
491
  return target;
555
492
  }
@@ -613,18 +550,18 @@ var ReactiveArray = class extends Array {
613
550
  };
614
551
 
615
552
  // src/internal/common/proxy/schema-validator.ts
616
- import * as Schema3 from "effect/Schema";
553
+ import * as Schema2 from "effect/Schema";
617
554
  import * as SchemaAST2 from "effect/SchemaAST";
618
- import { invariant as invariant6 } from "@dxos/invariant";
555
+ import { invariant as invariant4 } from "@dxos/invariant";
619
556
  import { log } from "@dxos/log";
620
- var __dxlog_file6 = "/__w/dxos/dxos/packages/core/echo/echo/src/internal/common/proxy/schema-validator.ts";
557
+ var __dxlog_file4 = "/__w/dxos/dxos/packages/core/echo/echo/src/internal/common/proxy/schema-validator.ts";
621
558
  var SchemaValidator = class {
622
559
  /**
623
560
  * Recursively check that schema specifies constructions we can handle.
624
561
  * Validates there are no ambiguous discriminated union types.
625
562
  */
626
563
  static validateSchema(schema) {
627
- const visitAll = (nodes) => nodes.forEach((node) => this.validateSchema(Schema3.make(node)));
564
+ const visitAll = (nodes) => nodes.forEach((node) => this.validateSchema(Schema2.make(node)));
628
565
  if (SchemaAST2.isUnion(schema.ast)) {
629
566
  const typeAstList = schema.ast.types.filter((type) => SchemaAST2.isTypeLiteral(type));
630
567
  if (typeAstList.length > 1) {
@@ -671,41 +608,41 @@ var SchemaValidator = class {
671
608
  log.warn("unknown property", {
672
609
  path: propertyPath,
673
610
  property: propertyName
674
- }, { "~LogMeta": "~LogMeta", F: __dxlog_file6, L: 60, S: this });
611
+ }, { "~LogMeta": "~LogMeta", F: __dxlog_file4, L: 60, S: this });
675
612
  continue;
676
613
  }
677
- schema = Schema3.make(propertyType).annotations(propertyType.annotations);
614
+ schema = Schema2.make(propertyType).annotations(propertyType.annotations);
678
615
  }
679
616
  }
680
617
  return schema;
681
618
  }
682
619
  static getTargetPropertySchema(target, prop) {
683
620
  const schema = target[SchemaId];
684
- invariant6(schema, "target has no schema", { "~LogMeta": "~LogMeta", F: __dxlog_file6, L: 73, S: this, A: ["schema", "'target has no schema'"] });
621
+ invariant4(schema, "target has no schema", { "~LogMeta": "~LogMeta", F: __dxlog_file4, L: 73, S: this, A: ["schema", "'target has no schema'"] });
685
622
  const arrayAst = unwrapArray(schema.ast);
686
623
  if (arrayAst != null) {
687
624
  return getArrayElementSchema(arrayAst, prop);
688
625
  }
689
626
  const propertyType = getPropertyType(schema.ast, prop.toString(), (prop2) => target[prop2]);
690
627
  if (propertyType == null) {
691
- return Schema3.Any;
628
+ return Schema2.Any;
692
629
  }
693
- invariant6(propertyType, `invalid property: ${prop.toString()}`, { "~LogMeta": "~LogMeta", F: __dxlog_file6, L: 82, S: this, A: ["propertyType", "`invalid property: ${prop.toString()}`"] });
694
- return Schema3.make(propertyType);
630
+ invariant4(propertyType, `invalid property: ${prop.toString()}`, { "~LogMeta": "~LogMeta", F: __dxlog_file4, L: 82, S: this, A: ["propertyType", "`invalid property: ${prop.toString()}`"] });
631
+ return Schema2.make(propertyType);
695
632
  }
696
633
  };
697
634
  var getArrayElementSchema = (tupleAst, property) => {
698
635
  const elementIndex = typeof property === "string" ? parseInt(property, 10) : Number.NaN;
699
636
  if (Number.isNaN(elementIndex)) {
700
- invariant6(property === "length", `invalid array property: ${String(property)}`, { "~LogMeta": "~LogMeta", F: __dxlog_file6, L: 93, S: void 0, A: ["property === 'length'", "`invalid array property: ${String(property)}`"] });
701
- return Schema3.Number;
637
+ invariant4(property === "length", `invalid array property: ${String(property)}`, { "~LogMeta": "~LogMeta", F: __dxlog_file4, L: 93, S: void 0, A: ["property === 'length'", "`invalid array property: ${String(property)}`"] });
638
+ return Schema2.Number;
702
639
  }
703
640
  if (elementIndex < tupleAst.elements.length) {
704
641
  const elementType = tupleAst.elements[elementIndex].type;
705
- return Schema3.make(elementType).annotations(elementType.annotations);
642
+ return Schema2.make(elementType).annotations(elementType.annotations);
706
643
  }
707
644
  const restType = tupleAst.rest;
708
- return Schema3.make(restType[0].type).annotations(restType[0].annotations);
645
+ return Schema2.make(restType[0].type).annotations(restType[0].annotations);
709
646
  };
710
647
  var flattenUnion = (typeAst) => SchemaAST2.isUnion(typeAst) ? typeAst.types.flatMap(flattenUnion) : [
711
648
  typeAst
@@ -722,7 +659,7 @@ var getProperties = (typeAst, getTargetPropertyFn) => {
722
659
  const typeDiscriminators = getTypeDiscriminators(typeAstList);
723
660
  const targetPropertyValue = getTargetPropertyFn(String(typeDiscriminators[0].name));
724
661
  const typeIndex = typeDiscriminators.findIndex((p) => targetPropertyValue === p.type.literal);
725
- invariant6(typeIndex !== -1, "discriminator field not set on target", { "~LogMeta": "~LogMeta", F: __dxlog_file6, L: 118, S: void 0, A: ["typeIndex !== -1", "'discriminator field not set on target'"] });
662
+ invariant4(typeIndex !== -1, "discriminator field not set on target", { "~LogMeta": "~LogMeta", F: __dxlog_file4, L: 118, S: void 0, A: ["typeIndex !== -1", "'discriminator field not set on target'"] });
726
663
  return SchemaAST2.getPropertySignatures(typeAstList[typeIndex]);
727
664
  };
728
665
  var getPropertyType = (ast, propertyName, getTargetPropertyFn) => {
@@ -752,7 +689,7 @@ var getTypeDiscriminators = (typeAstList) => {
752
689
  const isValidDiscriminator = discriminatorPropCandidates.every((p) => p.name === propertyName && !p.isOptional);
753
690
  const everyTypeHasDiscriminator = discriminatorPropCandidates.length === typeAstList.length;
754
691
  const isDiscriminatedUnion = isValidDiscriminator && everyTypeHasDiscriminator;
755
- invariant6(isDiscriminatedUnion, "type ambiguity: every type in a union must have a single unique-literal field", { "~LogMeta": "~LogMeta", F: __dxlog_file6, L: 148, S: void 0, A: ["isDiscriminatedUnion", "'type ambiguity: every type in a union must have a single unique-literal field'"] });
692
+ invariant4(isDiscriminatedUnion, "type ambiguity: every type in a union must have a single unique-literal field", { "~LogMeta": "~LogMeta", F: __dxlog_file4, L: 148, S: void 0, A: ["isDiscriminatedUnion", "'type ambiguity: every type in a union must have a single unique-literal field'"] });
756
693
  return discriminatorPropCandidates;
757
694
  };
758
695
  var unwrapAst = (rootAst, predicate) => {
@@ -778,7 +715,7 @@ var unwrapAst = (rootAst, predicate) => {
778
715
  };
779
716
  var unwrapArray = (ast) => unwrapAst(ast, SchemaAST2.isTupleType);
780
717
  var checkIdNotPresentOnSchema = (schema) => {
781
- invariant6(SchemaAST2.isTypeLiteral(schema.ast), void 0, { "~LogMeta": "~LogMeta", F: __dxlog_file6, L: 184, S: void 0, A: ["SchemaAST.isTypeLiteral(schema.ast)", ""] });
718
+ invariant4(SchemaAST2.isTypeLiteral(schema.ast), void 0, { "~LogMeta": "~LogMeta", F: __dxlog_file4, L: 184, S: void 0, A: ["SchemaAST.isTypeLiteral(schema.ast)", ""] });
782
719
  const idProperty = SchemaAST2.getPropertySignatures(schema.ast).find((prop) => prop.name === "id");
783
720
  if (idProperty != null) {
784
721
  throw new Error('"id" property name is reserved');
@@ -786,7 +723,7 @@ var checkIdNotPresentOnSchema = (schema) => {
786
723
  };
787
724
 
788
725
  // src/internal/common/proxy/typed-handler.ts
789
- var __dxlog_file7 = "/__w/dxos/dxos/packages/core/echo/echo/src/internal/common/proxy/typed-handler.ts";
726
+ var __dxlog_file5 = "/__w/dxos/dxos/packages/core/echo/echo/src/internal/common/proxy/typed-handler.ts";
790
727
  var deepCopy = (value2, visited = /* @__PURE__ */ new Map()) => {
791
728
  if (value2 == null || typeof value2 !== "object") {
792
729
  return value2;
@@ -839,8 +776,8 @@ var TypedReactiveHandler = class _TypedReactiveHandler {
839
776
  constructor() {
840
777
  }
841
778
  init(target) {
842
- invariant7(typeof target === "object" && target !== null, void 0, { "~LogMeta": "~LogMeta", F: __dxlog_file7, L: 99, S: this, A: ["typeof target === 'object' && target !== null", ""] });
843
- invariant7(SchemaId in target, "Schema is not defined for the target", { "~LogMeta": "~LogMeta", F: __dxlog_file7, L: 100, S: this, A: ["SchemaId in target", "'Schema is not defined for the target'"] });
779
+ assertArgument(typeof target === "object" && target !== null, "target");
780
+ invariant5(SchemaId in target, "Schema is not defined for the target", { "~LogMeta": "~LogMeta", F: __dxlog_file5, L: 101, S: this, A: ["SchemaId in target", "'Schema is not defined for the target'"] });
844
781
  const hasOwner = !!getOwner(target);
845
782
  if (!(EventId in target) && !hasOwner) {
846
783
  defineHiddenProperty(target, EventId, new Event());
@@ -882,6 +819,22 @@ var TypedReactiveHandler = class _TypedReactiveHandler {
882
819
  }
883
820
  return (callback) => executeChange(target, target, receiver, callback);
884
821
  }
822
+ case TypeEntityId: {
823
+ return Reflect.get(target, prop, receiver);
824
+ }
825
+ case StaticTypeSchemaSlot: {
826
+ const existing = Reflect.get(target, prop, receiver);
827
+ if (existing !== void 0) {
828
+ return existing;
829
+ }
830
+ const jsonSchema = target.jsonSchema;
831
+ if (jsonSchema == null) {
832
+ return void 0;
833
+ }
834
+ const rebuilt = toEffectSchema(jsonSchema);
835
+ defineHiddenProperty(target, StaticTypeSchemaSlot, rebuilt);
836
+ return rebuilt;
837
+ }
885
838
  }
886
839
  if (Object.getOwnPropertyDescriptor(target, prop)?.get) {
887
840
  return Reflect.get(target, prop, receiver);
@@ -905,6 +858,9 @@ var TypedReactiveHandler = class _TypedReactiveHandler {
905
858
  batchEvents(() => {
906
859
  const { echoRoot: _, preparedValue } = this._prepareValueForAssignment(target, prop, value2);
907
860
  result = Reflect.set(target, prop, preparedValue, receiver);
861
+ if (prop === "jsonSchema") {
862
+ Reflect.deleteProperty(target, StaticTypeSchemaSlot);
863
+ }
908
864
  if (isInitialized) {
909
865
  queueNotification(echoRoot);
910
866
  notifyOwnerChain(target);
@@ -996,7 +952,7 @@ var TypedReactiveHandler = class _TypedReactiveHandler {
996
952
  return value2;
997
953
  }
998
954
  const schema = SchemaValidator.getTargetPropertySchema(target, prop);
999
- const _ = Schema4.asserts(schema)(value2);
955
+ const _ = Schema3.asserts(schema)(value2);
1000
956
  if (isValidProxyTarget(value2)) {
1001
957
  setSchemaProperties(value2, schema);
1002
958
  }
@@ -1017,12 +973,21 @@ var toJSON = (target) => {
1017
973
  ...target
1018
974
  };
1019
975
  };
1020
- var setSchemaProperties = (obj, schema) => {
1021
- const schemaType = getSchemaDXN(schema);
976
+ var setSchemaProperties = (obj, schema, typeSource) => {
977
+ const schemaType = getSchemaURI(schema);
1022
978
  if (schemaType != null) {
1023
979
  defineHiddenProperty(obj, TypeId, schemaType);
1024
980
  }
1025
- defineHiddenProperty(obj, SchemaId, schema);
981
+ if (typeSource != null) {
982
+ defineHiddenProperty(obj, TypeEntityId, typeSource);
983
+ Object.defineProperty(obj, SchemaId, {
984
+ get: () => typeSource[StaticTypeSchemaSlot] ?? schema,
985
+ enumerable: false,
986
+ configurable: true
987
+ });
988
+ } else {
989
+ defineHiddenProperty(obj, SchemaId, schema);
990
+ }
1026
991
  for (const key in obj) {
1027
992
  if (isValidProxyTarget(obj[key])) {
1028
993
  const elementSchema = SchemaValidator.getTargetPropertySchema(obj, key);
@@ -1032,14 +997,14 @@ var setSchemaProperties = (obj, schema) => {
1032
997
  }
1033
998
  }
1034
999
  };
1035
- var prepareTypedTarget = (target, schema) => {
1000
+ var prepareTypedTarget = (target, schema, typeSource) => {
1036
1001
  if (!SchemaAST3.isTypeLiteral(schema.ast)) {
1037
1002
  throw new Error("schema has to describe an object type");
1038
1003
  }
1039
1004
  SchemaValidator.validateSchema(schema);
1040
- const _ = Schema4.asserts(schema)(target);
1005
+ const _ = Schema3.asserts(schema)(target);
1041
1006
  makeArraysReactive(target);
1042
- setSchemaProperties(target, schema);
1007
+ setSchemaProperties(target, schema, typeSource);
1043
1008
  };
1044
1009
  var makeArraysReactive = (target) => {
1045
1010
  for (const key in target) {
@@ -1056,10 +1021,10 @@ var makeArraysReactive = (target) => {
1056
1021
  };
1057
1022
 
1058
1023
  // src/internal/common/proxy/make-object.ts
1059
- var makeObject = (schema, obj, meta) => {
1060
- return createReactiveObject(Object.assign({}, obj), meta, schema);
1024
+ var makeObject = (schema, obj, meta, typeSource) => {
1025
+ return createReactiveObject(Object.assign({}, obj), meta, schema, typeSource);
1061
1026
  };
1062
- var createReactiveObject = (obj, meta, schema) => {
1027
+ var createReactiveObject = (obj, meta, schema, typeSource) => {
1063
1028
  if (!isValidProxyTarget(obj)) {
1064
1029
  throw new Error("Value cannot be made into a reactive object.");
1065
1030
  }
@@ -1079,7 +1044,7 @@ var createReactiveObject = (obj, meta, schema) => {
1079
1044
  if (parent !== void 0) {
1080
1045
  defineHiddenProperty(obj, ParentId, parent);
1081
1046
  }
1082
- prepareTypedTarget(obj, schema);
1047
+ prepareTypedTarget(obj, schema, typeSource);
1083
1048
  attachTypedJsonSerializer(obj);
1084
1049
  const proxy = createProxy(obj, TypedReactiveHandler.instance);
1085
1050
  const metaProxy = obj[MetaId];
@@ -1093,18 +1058,22 @@ var createReactiveObject = (obj, meta, schema) => {
1093
1058
  };
1094
1059
  var setIdOnTarget = (target) => {
1095
1060
  if ("id" in target && target.id !== void 0 && target.id !== null) {
1096
- if (!ObjectId.isValid(target.id)) {
1061
+ if (!EntityId.isValid(target.id)) {
1097
1062
  throw new Error("Invalid object id format.");
1098
1063
  }
1099
1064
  } else {
1100
- target.id = ObjectId.random();
1065
+ target.id = EntityId.random();
1101
1066
  }
1102
1067
  };
1103
- var initMeta = (obj, meta = {
1104
- keys: []
1105
- }) => {
1106
- prepareTypedTarget(meta, ObjectMetaSchema);
1107
- defineHiddenProperty(obj, MetaId, createProxy(meta, TypedReactiveHandler.instance));
1068
+ var initMeta = (obj, meta) => {
1069
+ const fullMeta = {
1070
+ ...meta,
1071
+ keys: meta?.keys ?? [],
1072
+ tags: meta?.tags ?? [],
1073
+ annotations: meta?.annotations ?? {}
1074
+ };
1075
+ prepareTypedTarget(fullMeta, EntityMetaSchema);
1076
+ defineHiddenProperty(obj, MetaId, createProxy(fullMeta, TypedReactiveHandler.instance));
1108
1077
  };
1109
1078
 
1110
1079
  // src/internal/common/proxy/reactive.ts
@@ -1129,104 +1098,177 @@ var change = (obj, callback) => {
1129
1098
  }
1130
1099
  };
1131
1100
 
1132
- // src/internal/Entity/api.ts
1133
- import { invariant as invariant10 } from "@dxos/invariant";
1134
- import { assumeType as assumeType3 } from "@dxos/util";
1135
-
1136
- // src/internal/Entity/model.ts
1137
- import { invariant as invariant8 } from "@dxos/invariant";
1138
- import { DXN as DXN2, ObjectId as ObjectId2 } from "@dxos/keys";
1139
- import { assumeType } from "@dxos/util";
1140
- var __dxlog_file8 = "/__w/dxos/dxos/packages/core/echo/echo/src/internal/Entity/model.ts";
1141
- function assertObjectModel(obj) {
1142
- invariant8(typeof obj === "object" && obj !== null, "Invalid object model: not an object", { "~LogMeta": "~LogMeta", F: __dxlog_file8, L: 12, S: this, A: ["typeof obj === 'object' && obj !== null", "'Invalid object model: not an object'"] });
1143
- assumeType(obj);
1144
- invariant8(ObjectId2.isValid(obj.id), "Invalid object model: invalid id", { "~LogMeta": "~LogMeta", F: __dxlog_file8, L: 14, S: this, A: ["ObjectId.isValid(obj.id)", "'Invalid object model: invalid id'"] });
1145
- invariant8(obj[TypeId] === void 0 || obj[TypeId] instanceof DXN2, "Invalid object model: invalid type", { "~LogMeta": "~LogMeta", F: __dxlog_file8, L: 15, S: this, A: ["obj[TypeId] === undefined || obj[TypeId] instanceof DXN", "'Invalid object model: invalid type'"] });
1146
- invariant8(obj[KindId] === EntityKind.Object || obj[KindId] === EntityKind.Relation, "Invalid object model: invalid entity kind", { "~LogMeta": "~LogMeta", F: __dxlog_file8, L: 16, S: this, A: ["obj[KindId] === EntityKind.Object || obj[KindId] === EntityKind.Relation", "'Invalid object model: invalid entity kind'"] });
1147
- if (obj[KindId] === EntityKind.Relation) {
1148
- invariant8(obj[RelationSourceDXNId] instanceof DXN2, "Invalid object model: invalid relation source", { "~LogMeta": "~LogMeta", F: __dxlog_file8, L: 18, S: this, A: ["obj[RelationSourceDXNId] instanceof DXN", "'Invalid object model: invalid relation source'"] });
1149
- invariant8(obj[RelationTargetDXNId] instanceof DXN2, "Invalid object model: invalid relation target", { "~LogMeta": "~LogMeta", F: __dxlog_file8, L: 19, S: this, A: ["obj[RelationTargetDXNId] instanceof DXN", "'Invalid object model: invalid relation target'"] });
1150
- invariant8(!(obj[RelationSourceId] instanceof DXN2), "Invalid object model: source pointer is a DXN", { "~LogMeta": "~LogMeta", F: __dxlog_file8, L: 20, S: this, A: ["!(obj[RelationSourceId] instanceof DXN)", "'Invalid object model: source pointer is a DXN'"] });
1151
- invariant8(!(obj[RelationTargetId] instanceof DXN2), "Invalid object model: target pointer is a DXN", { "~LogMeta": "~LogMeta", F: __dxlog_file8, L: 21, S: this, A: ["!(obj[RelationTargetId] instanceof DXN)", "'Invalid object model: target pointer is a DXN'"] });
1152
- }
1153
- }
1101
+ // src/internal/Entity/entity.ts
1102
+ import * as Schema4 from "effect/Schema";
1103
+ import * as SchemaAST4 from "effect/SchemaAST";
1104
+ import { DXN, EntityId as EntityId2 } from "@dxos/keys";
1105
+ var TypeMetaSchemaDXN = DXN.make("org.dxos.type.schema", "0.1.0");
1106
+ var persistentEntitySchema = (() => {
1107
+ const typename = DXN.getName(TypeMetaSchemaDXN);
1108
+ const version2 = DXN.getVersion(TypeMetaSchemaDXN);
1109
+ const struct = Schema4.Struct({
1110
+ name: Schema4.optional(Schema4.String),
1111
+ jsonSchema: JsonSchemaType.pipe(Schema4.optional),
1112
+ id: EntityId2
1113
+ });
1114
+ const ast = SchemaAST4.annotations(struct.ast, {
1115
+ [TypeAnnotationId]: {
1116
+ kind: EntityKind.Type,
1117
+ typename,
1118
+ version: version2
1119
+ },
1120
+ [SchemaAST4.JSONSchemaAnnotationId]: makeTypeJsonSchemaAnnotation({
1121
+ kind: EntityKind.Type,
1122
+ typename,
1123
+ version: version2
1124
+ })
1125
+ });
1126
+ return Schema4.make(ast);
1127
+ })();
1128
+ var makeEchoTypeSchema = (fields, ast, typename, version2, kind, computeJsonSchema, explicitId) => {
1129
+ const sourceSchema = Schema4.make(ast);
1130
+ const meta = {
1131
+ keys: [],
1132
+ key: typename,
1133
+ version: version2
1134
+ };
1135
+ const id = explicitId ?? EntityId2.deterministic(typename, version2);
1136
+ const entity = makeObject(persistentEntitySchema, {
1137
+ id
1138
+ }, meta);
1139
+ const target = getProxyTarget(entity);
1140
+ let memoizedJsonSchema;
1141
+ Object.defineProperty(target, "jsonSchema", {
1142
+ configurable: true,
1143
+ enumerable: true,
1144
+ get() {
1145
+ return memoizedJsonSchema ??= computeJsonSchema();
1146
+ },
1147
+ set(value2) {
1148
+ memoizedJsonSchema = value2;
1149
+ }
1150
+ });
1151
+ defineHiddenProperty(target, StaticTypeSchemaSlot, sourceSchema);
1152
+ defineHiddenProperty(target, SchemaKindId, kind);
1153
+ Object.defineProperty(target, "fields", {
1154
+ configurable: true,
1155
+ enumerable: false,
1156
+ get: () => fields
1157
+ });
1158
+ return entity;
1159
+ };
1154
1160
 
1155
- // src/internal/Entity/util.ts
1161
+ // src/internal/Entity/object.ts
1156
1162
  import * as Schema5 from "effect/Schema";
1157
- import { assertArgument as assertArgument2, invariant as invariant9 } from "@dxos/invariant";
1158
- import { DXN as DXN3, ObjectId as ObjectId3 } from "@dxos/keys";
1159
- import { assumeType as assumeType2 } from "@dxos/util";
1160
- var __dxlog_file9 = "/__w/dxos/dxos/packages/core/echo/echo/src/internal/Entity/util.ts";
1161
- var getObjectDXN = (object) => {
1162
- invariant9(!Schema5.isSchema(object), "schema not allowed in this function", { "~LogMeta": "~LogMeta", F: __dxlog_file9, L: 14, S: void 0, A: ["!Schema.isSchema(object)", "'schema not allowed in this function'"] });
1163
- assertArgument2(typeof object === "object" && object != null, "object", "expected object");
1164
- assumeType2(object);
1165
- if (object[SelfDXNId]) {
1166
- invariant9(object[SelfDXNId] instanceof DXN3, "Invalid object model: invalid self dxn", { "~LogMeta": "~LogMeta", F: __dxlog_file9, L: 18, S: void 0, A: ["object[SelfDXNId] instanceof DXN", "'Invalid object model: invalid self dxn'"] });
1167
- return object[SelfDXNId];
1168
- }
1169
- if (!ObjectId3.isValid(object.id)) {
1170
- throw new TypeError("Object id is not valid.");
1171
- }
1172
- return DXN3.fromLocalObjectId(object.id);
1173
- };
1163
+ import * as SchemaAST5 from "effect/SchemaAST";
1164
+ import { invariant as invariant6 } from "@dxos/invariant";
1165
+ import { DXN as DXN2 } from "@dxos/keys";
1174
1166
 
1175
- // src/internal/Entity/api.ts
1176
- var __dxlog_file10 = "/__w/dxos/dxos/packages/core/echo/echo/src/internal/Entity/api.ts";
1177
- var getDXN = (entity) => {
1178
- const dxn = getObjectDXN(entity);
1179
- invariant10(dxn != null, "Invalid entity.", { "~LogMeta": "~LogMeta", F: __dxlog_file10, L: 13, S: void 0, A: ["dxn != null", "'Invalid entity.'"] });
1180
- return dxn;
1167
+ // src/internal/JsonSchema/json-schema-normalize.ts
1168
+ var normalizeSchema = (schema) => {
1169
+ const copy = structuredClone(schema);
1170
+ go(copy);
1171
+ return copy;
1181
1172
  };
1182
- var getDatabase = (entity) => {
1183
- assumeType3(entity);
1184
- return entity[ObjectDatabaseId];
1173
+ var go = (schema) => {
1174
+ if (typeof schema !== "object" || schema === null) {
1175
+ return;
1176
+ }
1177
+ if (schema.exclusiveMaximum === true) {
1178
+ schema.exclusiveMaximum = schema.maximum;
1179
+ delete schema.exclusiveMaximum;
1180
+ } else if (schema.exclusiveMaximum === false) {
1181
+ delete schema.exclusiveMaximum;
1182
+ }
1183
+ if (schema.exclusiveMinimum === true) {
1184
+ schema.exclusiveMinimum = schema.minimum;
1185
+ delete schema.exclusiveMinimum;
1186
+ } else if (schema.exclusiveMinimum === false) {
1187
+ delete schema.exclusiveMinimum;
1188
+ }
1189
+ for (const key of Object.keys(schema)) {
1190
+ if (!JsonSchemaFields.includes(key)) {
1191
+ delete schema[key];
1192
+ }
1193
+ }
1194
+ if (schema.properties) {
1195
+ goOnRecord(schema.properties);
1196
+ }
1197
+ if (schema.patternProperties) {
1198
+ goOnRecord(schema.patternProperties);
1199
+ }
1200
+ if (schema.propertyNames) {
1201
+ go(schema.propertyNames);
1202
+ }
1203
+ if (schema.definitions) {
1204
+ goOnRecord(schema.definitions);
1205
+ }
1206
+ if (schema.items) {
1207
+ maybeGoOnArray(schema.items);
1208
+ }
1209
+ if (schema.additionalItems) {
1210
+ maybeGoOnArray(schema.additionalItems);
1211
+ }
1212
+ if (schema.contains) {
1213
+ go(schema.contains);
1214
+ }
1215
+ if (schema.if) {
1216
+ go(schema.if);
1217
+ }
1218
+ if (schema.then) {
1219
+ go(schema.then);
1220
+ }
1221
+ if (schema.else) {
1222
+ go(schema.else);
1223
+ }
1224
+ if (schema.allOf) {
1225
+ maybeGoOnArray(schema.allOf);
1226
+ }
1227
+ if (schema.anyOf) {
1228
+ maybeGoOnArray(schema.anyOf);
1229
+ }
1230
+ if (schema.oneOf) {
1231
+ maybeGoOnArray(schema.oneOf);
1232
+ }
1233
+ if (schema.not) {
1234
+ go(schema.not);
1235
+ }
1236
+ if (schema.$defs) {
1237
+ goOnRecord(schema.$defs);
1238
+ }
1239
+ if (schema.reference) {
1240
+ go(schema.reference.schema);
1241
+ }
1185
1242
  };
1186
-
1187
- // src/internal/Entity/entity.ts
1188
- import * as Schema6 from "effect/Schema";
1189
- var makeEchoTypeSchema = (fields, ast, typename, version2, kind) => {
1190
- return class EchoObjectSchemaClass extends Schema6.make(ast) {
1191
- static typename = typename;
1192
- static version = version2;
1193
- static [SchemaKindId] = kind;
1194
- static fields = fields;
1195
- static annotations(annotations3) {
1196
- const schema = Schema6.make(ast).annotations(annotations3);
1197
- return makeEchoTypeSchema(fields, schema.ast, typename, version2, kind);
1198
- }
1199
- // static make(
1200
- // props: RequiredKeys<Schema.TypeLiteral.Constructor<Fields, []>> extends never
1201
- // ? void | Simplify<Schema.TypeLiteral.Constructor<Fields, []>>
1202
- // : Simplify<Schema.TypeLiteral.Constructor<Fields, []>>,
1203
- // options?: MakeProps,
1204
- // ): Simplify<Schema.TypeLiteral.Type<Fields, []>> {
1205
- // const propsWithDefaults: any = _lazilyMergeDefaults(fields, { ...(props as any) });
1206
- // return _getDisableValidationMakeOption(options)
1207
- // ? propsWithDefaults
1208
- // : ParseResult.validateSync(this)(propsWithDefaults);
1209
- // }
1210
- static instanceOf(value2) {
1211
- return Schema6.is(this)(value2);
1243
+ var maybeGoOnArray = (value2) => {
1244
+ if (Array.isArray(value2)) {
1245
+ for (const item of value2) {
1246
+ go(item);
1212
1247
  }
1213
- };
1248
+ } else if (typeof value2 === "object" && value2 !== null) {
1249
+ go(value2);
1250
+ }
1251
+ };
1252
+ var goOnRecord = (record) => {
1253
+ for (const key of Object.keys(record)) {
1254
+ go(record[key]);
1255
+ }
1214
1256
  };
1215
1257
 
1216
1258
  // src/internal/Entity/object.ts
1217
- import * as Schema7 from "effect/Schema";
1218
- import * as SchemaAST4 from "effect/SchemaAST";
1219
- import { invariant as invariant11 } from "@dxos/invariant";
1220
- var __dxlog_file11 = "/__w/dxos/dxos/packages/core/echo/echo/src/internal/Entity/object.ts";
1221
- var EchoObjectSchema = ({ typename, version: version2 }) => {
1259
+ var __dxlog_file6 = "/__w/dxos/dxos/packages/core/echo/echo/src/internal/Entity/object.ts";
1260
+ var EchoObjectSchema = (dxn, options) => {
1261
+ const typename = DXN2.getName(dxn);
1262
+ const version2 = DXN2.getVersion(dxn);
1263
+ invariant6(version2, `Type.makeObject requires a versioned DXN: ${dxn}`, { "~LogMeta": "~LogMeta", F: __dxlog_file6, L: 19, S: void 0, A: ["version", "`Type.makeObject requires a versioned DXN: ${dxn}`"] });
1222
1264
  return (self) => {
1223
- invariant11(typeof TypeAnnotationId === "symbol", "Sanity.", { "~LogMeta": "~LogMeta", F: __dxlog_file11, L: 15, S: void 0, A: ["typeof TypeAnnotationId === 'symbol'", "'Sanity.'"] });
1224
- invariant11(SchemaAST4.isTypeLiteral(self.ast), "Schema must be a TypeLiteral.", { "~LogMeta": "~LogMeta", F: __dxlog_file11, L: 16, S: void 0, A: ["SchemaAST.isTypeLiteral(self.ast)", "'Schema must be a TypeLiteral.'"] });
1265
+ invariant6(typeof TypeAnnotationId === "symbol", "Sanity.", { "~LogMeta": "~LogMeta", F: __dxlog_file6, L: 21, S: void 0, A: ["typeof TypeAnnotationId === 'symbol'", "'Sanity.'"] });
1266
+ invariant6(SchemaAST5.isTypeLiteral(self.ast), "Schema must be a TypeLiteral.", { "~LogMeta": "~LogMeta", F: __dxlog_file6, L: 22, S: void 0, A: ["SchemaAST.isTypeLiteral(self.ast)", "'Schema must be a TypeLiteral.'"] });
1225
1267
  const fields = self.fields ?? {};
1226
- const schemaWithId = Schema7.extend(self, Schema7.Struct({
1227
- id: Schema7.String
1268
+ const schemaWithId = Schema5.extend(self, Schema5.Struct({
1269
+ id: Schema5.String
1228
1270
  }));
1229
- const ast = SchemaAST4.annotations(schemaWithId.ast, {
1271
+ const ast = SchemaAST5.annotations(schemaWithId.ast, {
1230
1272
  // TODO(dmaretskyi): `extend` kills the annotations.
1231
1273
  ...self.ast.annotations,
1232
1274
  [TypeAnnotationId]: {
@@ -1235,41 +1277,46 @@ var EchoObjectSchema = ({ typename, version: version2 }) => {
1235
1277
  version: version2
1236
1278
  },
1237
1279
  // TODO(dmaretskyi): TypeIdentifierAnnotationId?
1238
- [SchemaAST4.JSONSchemaAnnotationId]: makeTypeJsonSchemaAnnotation({
1280
+ [SchemaAST5.JSONSchemaAnnotationId]: makeTypeJsonSchemaAnnotation({
1239
1281
  kind: EntityKind.Object,
1240
1282
  typename,
1241
1283
  version: version2
1242
1284
  })
1243
1285
  });
1244
- return makeEchoTypeSchema(fields, ast, typename, version2, EntityKind.Object);
1286
+ return makeEchoTypeSchema(fields, ast, typename, version2, EntityKind.Object, () => toJsonSchema(Schema5.make(ast)), options?.id);
1245
1287
  };
1246
1288
  };
1247
1289
 
1248
1290
  // src/internal/Entity/relation.ts
1249
- import * as Schema8 from "effect/Schema";
1250
- import * as SchemaAST5 from "effect/SchemaAST";
1291
+ import * as Schema6 from "effect/Schema";
1292
+ import * as SchemaAST6 from "effect/SchemaAST";
1251
1293
  import { raise } from "@dxos/debug";
1252
- import { assertArgument as assertArgument3, invariant as invariant12 } from "@dxos/invariant";
1253
- import { DXN as DXN4 } from "@dxos/keys";
1254
- var __dxlog_file12 = "/__w/dxos/dxos/packages/core/echo/echo/src/internal/Entity/relation.ts";
1255
- var EchoRelationSchema = ({ source, target, typename, version: version2 }) => {
1256
- assertArgument3(Schema8.isSchema(source), "source");
1257
- assertArgument3(Schema8.isSchema(target), "target");
1258
- const sourceDXN = getDXNForRelationSchemaRef(source);
1259
- const targetDXN = getDXNForRelationSchemaRef(target);
1260
- if (getEntityKind(source) !== EntityKind.Object) {
1294
+ import { assertArgument as assertArgument2, invariant as invariant7 } from "@dxos/invariant";
1295
+ import { DXN as DXN3 } from "@dxos/keys";
1296
+ var __dxlog_file7 = "/__w/dxos/dxos/packages/core/echo/echo/src/internal/Entity/relation.ts";
1297
+ var EchoRelationSchema = ({ dxn, source, target, id: explicitId }) => {
1298
+ const sourceSchema = source != null ? getStaticTypeSchema(source) ?? source : source;
1299
+ const targetSchema = target != null ? getStaticTypeSchema(target) ?? target : target;
1300
+ assertArgument2(Schema6.isSchema(sourceSchema), "source");
1301
+ assertArgument2(Schema6.isSchema(targetSchema), "target");
1302
+ const typename = DXN3.getName(dxn);
1303
+ const version2 = DXN3.getVersion(dxn);
1304
+ invariant7(version2, `Type.makeRelation requires a versioned DXN: ${dxn}`, { "~LogMeta": "~LogMeta", F: __dxlog_file7, L: 27, S: void 0, A: ["version", "`Type.makeRelation requires a versioned DXN: ${dxn}`"] });
1305
+ const sourceDXN = getDXNForRelationSchemaRef(sourceSchema);
1306
+ const targetDXN = getDXNForRelationSchemaRef(targetSchema);
1307
+ if (getEntityKind(sourceSchema) !== EntityKind.Object) {
1261
1308
  raise(new Error("Source schema must be an echo object schema."));
1262
1309
  }
1263
- if (getEntityKind(target) !== EntityKind.Object) {
1310
+ if (getEntityKind(targetSchema) !== EntityKind.Object) {
1264
1311
  raise(new Error("Target schema must be an echo object schema."));
1265
1312
  }
1266
1313
  return (self) => {
1267
- invariant12(SchemaAST5.isTypeLiteral(self.ast), "Schema must be a TypeLiteral.", { "~LogMeta": "~LogMeta", F: __dxlog_file12, L: 27, S: void 0, A: ["SchemaAST.isTypeLiteral(self.ast)", "'Schema must be a TypeLiteral.'"] });
1314
+ invariant7(SchemaAST6.isTypeLiteral(self.ast), "Schema must be a TypeLiteral.", { "~LogMeta": "~LogMeta", F: __dxlog_file7, L: 37, S: void 0, A: ["SchemaAST.isTypeLiteral(self.ast)", "'Schema must be a TypeLiteral.'"] });
1268
1315
  const fields = self.fields ?? {};
1269
- const schemaWithId = Schema8.extend(self, Schema8.Struct({
1270
- id: Schema8.String
1316
+ const schemaWithId = Schema6.extend(self, Schema6.Struct({
1317
+ id: Schema6.String
1271
1318
  }));
1272
- const ast = SchemaAST5.annotations(schemaWithId.ast, {
1319
+ const ast = SchemaAST6.annotations(schemaWithId.ast, {
1273
1320
  // TODO(dmaretskyi): `extend` kills the annotations.
1274
1321
  ...self.ast.annotations,
1275
1322
  [TypeAnnotationId]: {
@@ -1280,7 +1327,7 @@ var EchoRelationSchema = ({ source, target, typename, version: version2 }) => {
1280
1327
  targetSchema: targetDXN
1281
1328
  },
1282
1329
  // TODO(dmaretskyi): TypeIdentifierAnnotationId?
1283
- [SchemaAST5.JSONSchemaAnnotationId]: makeTypeJsonSchemaAnnotation({
1330
+ [SchemaAST6.JSONSchemaAnnotationId]: makeTypeJsonSchemaAnnotation({
1284
1331
  kind: EntityKind.Relation,
1285
1332
  typename,
1286
1333
  version: version2,
@@ -1288,24 +1335,57 @@ var EchoRelationSchema = ({ source, target, typename, version: version2 }) => {
1288
1335
  relationTarget: targetDXN
1289
1336
  })
1290
1337
  });
1291
- return makeEchoTypeSchema(fields, ast, typename, version2, EntityKind.Relation);
1338
+ return makeEchoTypeSchema(fields, ast, typename, version2, EntityKind.Relation, () => toJsonSchema(Schema6.make(ast)), explicitId);
1292
1339
  };
1293
1340
  };
1294
1341
  var getDXNForRelationSchemaRef = (schema) => {
1295
- assertArgument3(Schema8.isSchema(schema), "schema");
1342
+ assertArgument2(Schema6.isSchema(schema), "schema");
1296
1343
  const identifier = getTypeIdentifierAnnotation(schema);
1297
1344
  if (identifier) {
1298
- return identifier;
1345
+ return DXN3.tryMake(identifier) ?? raise(new Error(`Invalid schema identifier: ${identifier}`));
1299
1346
  }
1300
1347
  const typename = getSchemaTypename(schema);
1301
1348
  if (!typename) {
1302
1349
  throw new Error("Schema must have a typename");
1303
1350
  }
1304
- return DXN4.fromTypename(typename).toString();
1351
+ return DXN3.make(typename);
1352
+ };
1353
+
1354
+ // src/internal/Entity/type-kind.ts
1355
+ import * as Schema7 from "effect/Schema";
1356
+ import * as SchemaAST7 from "effect/SchemaAST";
1357
+ import { invariant as invariant8 } from "@dxos/invariant";
1358
+ import { DXN as DXN4 } from "@dxos/keys";
1359
+ var __dxlog_file8 = "/__w/dxos/dxos/packages/core/echo/echo/src/internal/Entity/type-kind.ts";
1360
+ var EchoTypeKindSchema = (dxn, options) => {
1361
+ const typename = DXN4.getName(dxn);
1362
+ const version2 = DXN4.getVersion(dxn);
1363
+ invariant8(version2, `Type-kind schemas require a versioned DXN: ${dxn}`, { "~LogMeta": "~LogMeta", F: __dxlog_file8, L: 22, S: void 0, A: ["version", "`Type-kind schemas require a versioned DXN: ${dxn}`"] });
1364
+ return (self) => {
1365
+ invariant8(SchemaAST7.isTypeLiteral(self.ast), "Schema must be a TypeLiteral.", { "~LogMeta": "~LogMeta", F: __dxlog_file8, L: 24, S: void 0, A: ["SchemaAST.isTypeLiteral(self.ast)", "'Schema must be a TypeLiteral.'"] });
1366
+ const fields = self.fields ?? {};
1367
+ const schemaWithId = Schema7.extend(self, Schema7.Struct({
1368
+ id: Schema7.String
1369
+ }));
1370
+ const ast = SchemaAST7.annotations(schemaWithId.ast, {
1371
+ ...self.ast.annotations,
1372
+ [TypeAnnotationId]: {
1373
+ kind: EntityKind.Type,
1374
+ typename,
1375
+ version: version2
1376
+ },
1377
+ [SchemaAST7.JSONSchemaAnnotationId]: makeTypeJsonSchemaAnnotation({
1378
+ kind: EntityKind.Type,
1379
+ typename,
1380
+ version: version2
1381
+ })
1382
+ });
1383
+ return makeEchoTypeSchema(fields, ast, typename, version2, EntityKind.Type, () => toJsonSchema(Schema7.make(ast)), options?.id);
1384
+ };
1305
1385
  };
1306
1386
 
1307
1387
  // src/internal/Entity/version.ts
1308
- import { assertArgument as assertArgument4 } from "@dxos/invariant";
1388
+ import { assertArgument as assertArgument3 } from "@dxos/invariant";
1309
1389
  var unversioned = {
1310
1390
  [VersionTypeId]: {},
1311
1391
  versioned: false
@@ -1321,12 +1401,12 @@ var version = (entity) => {
1321
1401
  return ver;
1322
1402
  };
1323
1403
  var versionValid = (ver) => {
1324
- assertArgument4(isVersion(ver), "version", "Invalid version object");
1404
+ assertArgument3(isVersion(ver), "version", "Invalid version object");
1325
1405
  return !!ver.versioned;
1326
1406
  };
1327
1407
  var compareVersions = (version1, version2) => {
1328
- assertArgument4(isVersion(version1), "version1", "Invalid version object");
1329
- assertArgument4(isVersion(version2), "version2", "Invalid version object");
1408
+ assertArgument3(isVersion(version1), "version1", "Invalid version object");
1409
+ assertArgument3(isVersion(version2), "version2", "Invalid version object");
1330
1410
  if (!versionValid(version1) || !versionValid(version2)) {
1331
1411
  return "unversioned";
1332
1412
  }
@@ -1347,99 +1427,8 @@ var decodeVersion = (ver) => {
1347
1427
  return parsed;
1348
1428
  };
1349
1429
 
1350
- // src/internal/JsonSchema/json-schema-normalize.ts
1351
- var normalizeSchema = (schema) => {
1352
- const copy = structuredClone(schema);
1353
- go(copy);
1354
- return copy;
1355
- };
1356
- var go = (schema) => {
1357
- if (typeof schema !== "object" || schema === null) {
1358
- return;
1359
- }
1360
- if (schema.exclusiveMaximum === true) {
1361
- schema.exclusiveMaximum = schema.maximum;
1362
- delete schema.exclusiveMaximum;
1363
- } else if (schema.exclusiveMaximum === false) {
1364
- delete schema.exclusiveMaximum;
1365
- }
1366
- if (schema.exclusiveMinimum === true) {
1367
- schema.exclusiveMinimum = schema.minimum;
1368
- delete schema.exclusiveMinimum;
1369
- } else if (schema.exclusiveMinimum === false) {
1370
- delete schema.exclusiveMinimum;
1371
- }
1372
- for (const key of Object.keys(schema)) {
1373
- if (!JsonSchemaFields.includes(key)) {
1374
- delete schema[key];
1375
- }
1376
- }
1377
- if (schema.properties) {
1378
- goOnRecord(schema.properties);
1379
- }
1380
- if (schema.patternProperties) {
1381
- goOnRecord(schema.patternProperties);
1382
- }
1383
- if (schema.propertyNames) {
1384
- go(schema.propertyNames);
1385
- }
1386
- if (schema.definitions) {
1387
- goOnRecord(schema.definitions);
1388
- }
1389
- if (schema.items) {
1390
- maybeGoOnArray(schema.items);
1391
- }
1392
- if (schema.additionalItems) {
1393
- maybeGoOnArray(schema.additionalItems);
1394
- }
1395
- if (schema.contains) {
1396
- go(schema.contains);
1397
- }
1398
- if (schema.if) {
1399
- go(schema.if);
1400
- }
1401
- if (schema.then) {
1402
- go(schema.then);
1403
- }
1404
- if (schema.else) {
1405
- go(schema.else);
1406
- }
1407
- if (schema.allOf) {
1408
- maybeGoOnArray(schema.allOf);
1409
- }
1410
- if (schema.anyOf) {
1411
- maybeGoOnArray(schema.anyOf);
1412
- }
1413
- if (schema.oneOf) {
1414
- maybeGoOnArray(schema.oneOf);
1415
- }
1416
- if (schema.not) {
1417
- go(schema.not);
1418
- }
1419
- if (schema.$defs) {
1420
- goOnRecord(schema.$defs);
1421
- }
1422
- if (schema.reference) {
1423
- go(schema.reference.schema);
1424
- }
1425
- };
1426
- var maybeGoOnArray = (value2) => {
1427
- if (Array.isArray(value2)) {
1428
- for (const item of value2) {
1429
- go(item);
1430
- }
1431
- } else if (typeof value2 === "object" && value2 !== null) {
1432
- go(value2);
1433
- }
1434
- };
1435
- var goOnRecord = (record) => {
1436
- for (const key of Object.keys(record)) {
1437
- go(record[key]);
1438
- }
1439
- };
1440
-
1441
1430
  // src/internal/Obj/common.ts
1442
- import * as Schema9 from "effect/Schema";
1431
+ import * as Schema8 from "effect/Schema";
1443
1432
  var makeTypedEntityClass = (typename, version2, baseSchema) => {
1444
1433
  return class {
1445
1434
  // Implement TypedObject properties.
@@ -1447,7 +1436,7 @@ var makeTypedEntityClass = (typename, version2, baseSchema) => {
1447
1436
  static version = version2;
1448
1437
  // Implement Schema.Schema properties.
1449
1438
  // TODO(burdon): Comment required.
1450
- static [Schema9.TypeId] = schemaVariance;
1439
+ static [Schema8.TypeId] = schemaVariance;
1451
1440
  static ast = baseSchema.ast;
1452
1441
  static annotations = baseSchema.annotations.bind(baseSchema);
1453
1442
  static pipe = baseSchema.pipe.bind(baseSchema);
@@ -1469,8 +1458,8 @@ var schemaVariance = {
1469
1458
 
1470
1459
  // src/internal/Obj/create-object.ts
1471
1460
  import { raise as raise3 } from "@dxos/debug";
1472
- import { assertArgument as assertArgument6, failedInvariant } from "@dxos/invariant";
1473
- import { ObjectId as ObjectId5 } from "@dxos/keys";
1461
+ import { assertArgument as assertArgument5, failedInvariant } from "@dxos/invariant";
1462
+ import { EntityId as EntityId4 } from "@dxos/keys";
1474
1463
 
1475
1464
  // src/internal/Obj/inspect.ts
1476
1465
  import { inspectCustom as inspectCustom2 } from "@dxos/debug";
@@ -1490,37 +1479,37 @@ var typedObjectInspectFunction = function(depth, options, inspect) {
1490
1479
  const { id, ...props } = this;
1491
1480
  return inspect({
1492
1481
  id,
1493
- [ATTR_TYPE]: getTypeDXN(this),
1482
+ [ATTR_TYPE]: getTypeURI(this),
1494
1483
  ...props,
1495
1484
  [ATTR_META]: this[MetaId]
1496
1485
  }, options);
1497
1486
  };
1498
1487
 
1499
1488
  // src/internal/Obj/json-serializer.ts
1500
- import * as Schema10 from "effect/Schema";
1489
+ import * as Schema9 from "effect/Schema";
1501
1490
  import { raise as raise2 } from "@dxos/debug";
1502
- import { ObjectStructure, isEncodedReference } from "@dxos/echo-protocol";
1503
- import { assertArgument as assertArgument5, invariant as invariant13 } from "@dxos/invariant";
1504
- import { DXN as DXN5, ObjectId as ObjectId4 } from "@dxos/keys";
1505
- import { assumeType as assumeType4, deepMapValues as deepMapValues2, visitValues } from "@dxos/util";
1506
- var __dxlog_file13 = "/__w/dxos/dxos/packages/core/echo/echo/src/internal/Obj/json-serializer.ts";
1491
+ import { EntityStructure, isEncodedReference } from "@dxos/echo-protocol";
1492
+ import { assertArgument as assertArgument4, invariant as invariant9 } from "@dxos/invariant";
1493
+ import { EID as EID2, EntityId as EntityId3, URI } from "@dxos/keys";
1494
+ import { assumeType, decodeUint8ArrayFromJson, deepMapValues as deepMapValues2, isEncodedUint8Array, visitValues } from "@dxos/util";
1495
+ var __dxlog_file9 = "/__w/dxos/dxos/packages/core/echo/echo/src/internal/Obj/json-serializer.ts";
1507
1496
  var objectToJSON = (obj) => {
1508
- const typename = getTypeDXN(obj)?.toString();
1509
- invariant13(typename && typeof typename === "string", void 0, { "~LogMeta": "~LogMeta", F: __dxlog_file13, L: 21, S: void 0, A: ["typename && typeof typename === 'string'", ""] });
1497
+ const typename = getTypeURI(obj);
1498
+ invariant9(typename && typeof typename === "string", void 0, { "~LogMeta": "~LogMeta", F: __dxlog_file9, L: 22, S: void 0, A: ["typename && typeof typename === 'string'", ""] });
1510
1499
  return typedJsonSerializer.call(obj);
1511
1500
  };
1512
- var objectFromJSON = async (jsonData, { refResolver, dxn, database, parent } = {}) => {
1513
- assumeType4(jsonData);
1514
- assertArgument5(typeof jsonData === "object" && jsonData !== null, "jsonData", "expect object");
1515
- assertArgument5(typeof jsonData[ATTR_TYPE] === "string", "jsonData[ATTR_TYPE]", "expected object to have a type");
1516
- assertArgument5(typeof jsonData.id === "string", "jsonData.id", "expected object to have an id");
1517
- const type = DXN5.parse(jsonData[ATTR_TYPE]);
1501
+ var objectFromJSON = async (jsonData, { refResolver, uri, database, parent } = {}) => {
1502
+ assumeType(jsonData);
1503
+ assertArgument4(typeof jsonData === "object" && jsonData !== null, "jsonData", "expect object");
1504
+ assertArgument4(typeof jsonData[ATTR_TYPE] === "string", "jsonData[ATTR_TYPE]", "expected object to have a type");
1505
+ assertArgument4(typeof jsonData.id === "string", "jsonData.id", "expected object to have an id");
1506
+ const type = URI.make(jsonData[ATTR_TYPE]);
1518
1507
  const schema = await refResolver?.resolveSchema(type);
1519
- invariant13(schema === void 0 || Schema10.isSchema(schema), void 0, { "~LogMeta": "~LogMeta", F: __dxlog_file13, L: 41, S: void 0, A: ["schema === undefined || Schema.isSchema(schema)", ""] });
1520
- const decodedInput = stripInternalJsonKeys(jsonData);
1508
+ invariant9(schema === void 0 || Schema9.isSchema(schema), void 0, { "~LogMeta": "~LogMeta", F: __dxlog_file9, L: 42, S: void 0, A: ["schema === undefined || Schema.isSchema(schema)", ""] });
1509
+ const decodedInput = restoreUint8Arrays(stripInternalJsonKeys(jsonData));
1521
1510
  let obj;
1522
1511
  if (schema != null) {
1523
- obj = await schema.pipe(Schema10.decodeUnknownPromise)(decodedInput);
1512
+ obj = await schema.pipe(Schema9.decodeUnknownPromise)(decodedInput);
1524
1513
  if (refResolver) {
1525
1514
  setRefResolverOnData(obj, refResolver);
1526
1515
  }
@@ -1529,67 +1518,97 @@ var objectFromJSON = async (jsonData, { refResolver, dxn, database, parent } = {
1529
1518
  refResolver
1530
1519
  });
1531
1520
  }
1532
- invariant13(ObjectId4.isValid(obj.id), "Invalid object id", { "~LogMeta": "~LogMeta", F: __dxlog_file13, L: 54, S: void 0, A: ["ObjectId.isValid(obj.id)", "'Invalid object id'"] });
1521
+ invariant9(EntityId3.isValid(obj.id), "Invalid object id", { "~LogMeta": "~LogMeta", F: __dxlog_file9, L: 55, S: void 0, A: ["EntityId.isValid(obj.id)", "'Invalid object id'"] });
1533
1522
  setTypename(obj, type);
1534
1523
  if (schema) {
1535
1524
  setSchema(obj, schema);
1536
1525
  }
1526
+ if (refResolver?.resolveType) {
1527
+ const typeEntity = await refResolver.resolveType(type);
1528
+ if (typeEntity != null) {
1529
+ setType(obj, typeEntity);
1530
+ }
1531
+ }
1537
1532
  const isRelation = typeof jsonData[ATTR_RELATION_SOURCE] === "string" || typeof jsonData[ATTR_RELATION_TARGET] === "string";
1538
1533
  if (isRelation) {
1539
- const sourceDXN = DXN5.parse(jsonData[ATTR_RELATION_SOURCE] ?? raise2(new TypeError("Missing relation source")));
1540
- const targetDXN = DXN5.parse(jsonData[ATTR_RELATION_TARGET] ?? raise2(new TypeError("Missing relation target")));
1541
- const source = await refResolver?.resolve(sourceDXN);
1542
- const target = await refResolver?.resolve(targetDXN);
1534
+ const sourceDxn = jsonData[ATTR_RELATION_SOURCE] ?? raise2(new TypeError("Missing relation source"));
1535
+ const targetDxn = jsonData[ATTR_RELATION_TARGET] ?? raise2(new TypeError("Missing relation target"));
1536
+ const source = await refResolver?.resolve(sourceDxn);
1537
+ const target = await refResolver?.resolve(targetDxn);
1543
1538
  defineHiddenProperty(obj, KindId, EntityKind.Relation);
1544
- defineHiddenProperty(obj, RelationSourceDXNId, sourceDXN);
1545
- defineHiddenProperty(obj, RelationTargetDXNId, targetDXN);
1539
+ defineHiddenProperty(obj, RelationSourceDXNId, sourceDxn);
1540
+ defineHiddenProperty(obj, RelationTargetDXNId, targetDxn);
1546
1541
  defineHiddenProperty(obj, RelationSourceId, source);
1547
1542
  defineHiddenProperty(obj, RelationTargetId, target);
1548
1543
  } else {
1549
- defineHiddenProperty(obj, KindId, EntityKind.Object);
1544
+ const annotationKind = schema != null ? getTypeAnnotation(schema)?.kind : void 0;
1545
+ defineHiddenProperty(obj, KindId, annotationKind === EntityKind.Type ? EntityKind.Type : EntityKind.Object);
1550
1546
  }
1551
1547
  if (typeof jsonData[ATTR_META] === "object") {
1552
- const meta = await ObjectMetaSchema.pipe(Schema10.decodeUnknownPromise)(jsonData[ATTR_META]);
1553
- invariant13(Array.isArray(meta.keys), void 0, { "~LogMeta": "~LogMeta", F: __dxlog_file13, L: 75, S: void 0, A: ["Array.isArray(meta.keys)", ""] });
1548
+ const meta = await EntityMetaSchema.pipe(Schema9.decodeUnknownPromise)(normalizeMeta(jsonData[ATTR_META]));
1549
+ invariant9(Array.isArray(meta.keys), void 0, { "~LogMeta": "~LogMeta", F: __dxlog_file9, L: 91, S: void 0, A: ["Array.isArray(meta.keys)", ""] });
1554
1550
  defineHiddenProperty(obj, MetaId, meta);
1555
1551
  } else {
1556
1552
  defineHiddenProperty(obj, MetaId, {
1557
- keys: []
1553
+ keys: [],
1554
+ tags: [],
1555
+ annotations: {}
1558
1556
  });
1559
1557
  }
1560
1558
  if (jsonData[ATTR_PARENT]) {
1561
- const parentDXN = DXN5.parse(jsonData[ATTR_PARENT]);
1562
- const resolvedParent = await refResolver?.resolve(parentDXN);
1559
+ const parentDxn = jsonData[ATTR_PARENT];
1560
+ const resolvedParent = await refResolver?.resolve(parentDxn);
1563
1561
  defineHiddenProperty(obj, ParentId, resolvedParent);
1564
1562
  } else if (parent) {
1565
1563
  defineHiddenProperty(obj, ParentId, parent);
1566
1564
  }
1567
- if (dxn) {
1568
- defineHiddenProperty(obj, SelfDXNId, dxn);
1565
+ if (uri) {
1566
+ defineHiddenProperty(obj, SelfURIId, uri);
1569
1567
  }
1570
1568
  if (database) {
1571
1569
  defineHiddenProperty(obj, ObjectDatabaseId, database);
1572
1570
  }
1573
1571
  assertObjectModel(obj);
1574
- invariant13(obj[ATTR_TYPE] === void 0, "Invalid object model", { "~LogMeta": "~LogMeta", F: __dxlog_file13, L: 96, S: void 0, A: ["obj[ATTR_TYPE] === undefined", "'Invalid object model'"] });
1575
- invariant13(obj[ATTR_META] === void 0, "Invalid object model", { "~LogMeta": "~LogMeta", F: __dxlog_file13, L: 97, S: void 0, A: ["obj[ATTR_META] === undefined", "'Invalid object model'"] });
1576
- invariant13(obj[ATTR_DELETED] === void 0, "Invalid object model", { "~LogMeta": "~LogMeta", F: __dxlog_file13, L: 98, S: void 0, A: ["obj[ATTR_DELETED] === undefined", "'Invalid object model'"] });
1577
- invariant13(obj[ATTR_SELF_DXN] === void 0, "Invalid object model", { "~LogMeta": "~LogMeta", F: __dxlog_file13, L: 99, S: void 0, A: ["obj[ATTR_SELF_DXN] === undefined", "'Invalid object model'"] });
1578
- invariant13(obj[ATTR_RELATION_SOURCE] === void 0, "Invalid object model", { "~LogMeta": "~LogMeta", F: __dxlog_file13, L: 100, S: void 0, A: ["obj[ATTR_RELATION_SOURCE] === undefined", "'Invalid object model'"] });
1579
- invariant13(obj[ATTR_RELATION_TARGET] === void 0, "Invalid object model", { "~LogMeta": "~LogMeta", F: __dxlog_file13, L: 101, S: void 0, A: ["obj[ATTR_RELATION_TARGET] === undefined", "'Invalid object model'"] });
1572
+ invariant9(obj[ATTR_TYPE] === void 0, "Invalid object model", { "~LogMeta": "~LogMeta", F: __dxlog_file9, L: 114, S: void 0, A: ["obj[ATTR_TYPE] === undefined", "'Invalid object model'"] });
1573
+ invariant9(obj[ATTR_META] === void 0, "Invalid object model", { "~LogMeta": "~LogMeta", F: __dxlog_file9, L: 115, S: void 0, A: ["obj[ATTR_META] === undefined", "'Invalid object model'"] });
1574
+ invariant9(obj[ATTR_DELETED] === void 0, "Invalid object model", { "~LogMeta": "~LogMeta", F: __dxlog_file9, L: 116, S: void 0, A: ["obj[ATTR_DELETED] === undefined", "'Invalid object model'"] });
1575
+ invariant9(obj[ATTR_SELF_URI] === void 0, "Invalid object model", { "~LogMeta": "~LogMeta", F: __dxlog_file9, L: 117, S: void 0, A: ["obj[ATTR_SELF_URI] === undefined", "'Invalid object model'"] });
1576
+ invariant9(obj[ATTR_SELF_URI_LEGACY] === void 0, "Invalid object model", { "~LogMeta": "~LogMeta", F: __dxlog_file9, L: 118, S: void 0, A: ["obj[ATTR_SELF_URI_LEGACY] === undefined", "'Invalid object model'"] });
1577
+ invariant9(obj[ATTR_RELATION_SOURCE] === void 0, "Invalid object model", { "~LogMeta": "~LogMeta", F: __dxlog_file9, L: 119, S: void 0, A: ["obj[ATTR_RELATION_SOURCE] === undefined", "'Invalid object model'"] });
1578
+ invariant9(obj[ATTR_RELATION_TARGET] === void 0, "Invalid object model", { "~LogMeta": "~LogMeta", F: __dxlog_file9, L: 120, S: void 0, A: ["obj[ATTR_RELATION_TARGET] === undefined", "'Invalid object model'"] });
1580
1579
  return obj;
1581
1580
  };
1581
+ var normalizeMeta = (meta) => {
1582
+ const tags = Array.isArray(meta?.tags) ? meta.tags.map((tag) => typeof tag === "string" ? {
1583
+ "/": URI.make(tag)
1584
+ } : tag) : [];
1585
+ return {
1586
+ ...meta,
1587
+ keys: Array.isArray(meta?.keys) ? meta.keys : [],
1588
+ tags,
1589
+ annotations: meta?.annotations ?? {}
1590
+ };
1591
+ };
1582
1592
  var decodeGeneric = (jsonData, options) => {
1583
1593
  const props = stripInternalJsonKeys(jsonData);
1584
1594
  return deepMapValues2(props, (value2, visitor) => {
1585
1595
  if (isEncodedReference(value2)) {
1586
1596
  return refFromEncodedReference(value2, options.refResolver);
1587
1597
  }
1598
+ if (isEncodedUint8Array(value2)) {
1599
+ return decodeUint8ArrayFromJson(value2);
1600
+ }
1588
1601
  return visitor(value2);
1589
1602
  });
1590
1603
  };
1604
+ var restoreUint8Arrays = (data) => deepMapValues2(data, (value2, recurse) => {
1605
+ if (isEncodedUint8Array(value2)) {
1606
+ return decodeUint8ArrayFromJson(value2);
1607
+ }
1608
+ return recurse(value2);
1609
+ });
1591
1610
  var stripInternalJsonKeys = (jsonData) => {
1592
- const { [ATTR_TYPE]: _type, [ATTR_META]: _meta, [ATTR_DELETED]: _deleted, [ATTR_SELF_DXN]: _selfDXN, [ATTR_RELATION_SOURCE]: _relationSource, [ATTR_RELATION_TARGET]: _relationTarget, ...props } = jsonData;
1611
+ const { [ATTR_TYPE]: _type, [ATTR_META]: _meta, [ATTR_DELETED]: _deleted, [ATTR_SELF_URI]: _selfUri, [ATTR_SELF_URI_LEGACY]: _legacySelfUri, [ATTR_RELATION_SOURCE]: _relationSource, [ATTR_RELATION_TARGET]: _relationTarget, ...props } = jsonData;
1593
1612
  return props;
1594
1613
  };
1595
1614
  var setRefResolverOnData = (obj, refResolver) => {
@@ -1603,43 +1622,58 @@ var setRefResolverOnData = (obj, refResolver) => {
1603
1622
  visitor(obj);
1604
1623
  };
1605
1624
  var objectStructureToJson = (objectId, structure) => {
1625
+ const typeRef = EntityStructure.getTypeReference(structure)?.["/"];
1626
+ const parent = EntityStructure.getParent(structure)?.["/"];
1627
+ const source = EntityStructure.getRelationSource(structure)?.["/"];
1628
+ const target = EntityStructure.getRelationTarget(structure)?.["/"];
1606
1629
  return {
1607
1630
  ...structure.data,
1608
1631
  id: objectId,
1609
- [ATTR_TYPE]: ObjectStructure.getTypeReference(structure)?.["/"] ?? "",
1610
- [ATTR_DELETED]: ObjectStructure.isDeleted(structure),
1611
- [ATTR_PARENT]: ObjectStructure.getParent(structure)?.["/"],
1612
- [ATTR_RELATION_SOURCE]: ObjectStructure.getRelationSource(structure)?.["/"],
1613
- [ATTR_RELATION_TARGET]: ObjectStructure.getRelationTarget(structure)?.["/"]
1632
+ [ATTR_TYPE]: typeRef ? URI.make(typeRef) : void 0,
1633
+ [ATTR_DELETED]: EntityStructure.isDeleted(structure),
1634
+ [ATTR_PARENT]: parent !== void 0 ? EID2.tryParse(parent) : void 0,
1635
+ [ATTR_RELATION_SOURCE]: source !== void 0 ? EID2.tryParse(source) : void 0,
1636
+ [ATTR_RELATION_TARGET]: target !== void 0 ? EID2.tryParse(target) : void 0
1614
1637
  };
1615
1638
  };
1616
1639
 
1617
1640
  // src/internal/Obj/create-object.ts
1618
- var createObject = (schema, props) => {
1641
+ var createObject = (input, props) => {
1642
+ const schema = getStaticTypeSchema(input) ?? failedInvariant("Type entity is missing its source schema");
1619
1643
  const annotation = getTypeAnnotation(schema);
1620
1644
  if (!annotation) {
1621
1645
  throw new Error("Schema is not an ECHO schema");
1622
1646
  }
1623
- assertArgument6(!("@type" in props), "data", "@type is not allowed");
1624
- assertArgument6(!(RelationSourceDXNId in props), "data", "Relation source DXN is not allowed in the constructor");
1625
- assertArgument6(!(RelationTargetDXNId in props), "data", "Relation target DXN is not allowed in the constructor");
1626
- assertArgument6(RelationSourceId in props === RelationTargetId in props, "data", "Relation source and target must be provided together");
1647
+ assertArgument5(!("@type" in props), "data", "@type is not allowed");
1648
+ assertArgument5(!(RelationSourceDXNId in props), "data", "Relation source DXN is not allowed in the constructor");
1649
+ assertArgument5(!(RelationTargetDXNId in props), "data", "Relation target DXN is not allowed in the constructor");
1650
+ assertArgument5(RelationSourceId in props === RelationTargetId in props, "data", "Relation source and target must be provided together");
1651
+ const metaOverride = props[MetaId];
1652
+ if (metaOverride !== void 0) {
1653
+ delete props[MetaId];
1654
+ }
1627
1655
  const obj = {
1628
1656
  ...props,
1629
- id: props.id ?? ObjectId5.random()
1657
+ id: props.id ?? EntityId4.random()
1630
1658
  };
1631
- const kind = RelationSourceId in props ? EntityKind.Relation : EntityKind.Object;
1659
+ const kind = annotation.kind === EntityKind.Type ? EntityKind.Type : annotation.kind === EntityKind.Relation || RelationSourceId in props ? EntityKind.Relation : EntityKind.Object;
1632
1660
  defineHiddenProperty(obj, KindId, kind);
1633
1661
  defineHiddenProperty(obj, MetaId, {
1634
- keys: []
1662
+ ...metaOverride,
1663
+ keys: metaOverride?.keys ?? [],
1664
+ tags: metaOverride?.tags ?? [],
1665
+ annotations: metaOverride?.annotations ?? {}
1635
1666
  });
1636
1667
  setSchema(obj, schema);
1637
- setTypename(obj, getSchemaDXN(schema) ?? failedInvariant("Missing schema DXN"));
1668
+ if (input !== schema) {
1669
+ setType(obj, input);
1670
+ }
1671
+ setTypename(obj, getSchemaURI(schema) ?? failedInvariant("Missing schema URI"));
1638
1672
  attachTypedJsonSerializer(obj);
1639
1673
  attachedTypedObjectInspector(obj);
1640
1674
  if (kind === EntityKind.Relation) {
1641
- const sourceDXN = getObjectDXN(props[RelationSourceId]) ?? raise3(new Error("Unresolved relation source"));
1642
- const targetDXN = getObjectDXN(props[RelationTargetId]) ?? raise3(new Error("Unresolved relation target"));
1675
+ const sourceDXN = getObjectEchoUri(props[RelationSourceId]) ?? raise3(new Error("Unresolved relation source"));
1676
+ const targetDXN = getObjectEchoUri(props[RelationTargetId]) ?? raise3(new Error("Unresolved relation target"));
1643
1677
  defineHiddenProperty(obj, RelationSourceDXNId, sourceDXN);
1644
1678
  defineHiddenProperty(obj, RelationTargetDXNId, targetDXN);
1645
1679
  }
@@ -1655,25 +1689,17 @@ var isDeleted = (obj) => {
1655
1689
  return obj[ObjectDeletedId] ?? false;
1656
1690
  };
1657
1691
 
1658
- // src/internal/Obj/ids.ts
1659
- import { DXN as DXN6, ObjectId as ObjectId6, QueueSubspaceTags, SpaceId } from "@dxos/keys";
1660
- var createQueueDXN = (spaceId = SpaceId.random(), queueId = ObjectId6.random()) => new DXN6(DXN6.kind.QUEUE, [
1661
- QueueSubspaceTags.DATA,
1662
- spaceId,
1663
- queueId
1664
- ]);
1665
-
1666
1692
  // src/internal/Obj/set-value.ts
1667
1693
  import * as Match from "effect/Match";
1668
1694
  import * as Option from "effect/Option";
1669
- import * as SchemaAST6 from "effect/SchemaAST";
1695
+ import * as SchemaAST8 from "effect/SchemaAST";
1670
1696
  import { getArrayElementType, getBaseType, getProperties as getProperties2, isArrayType, isNestedType } from "@dxos/effect";
1671
- import { invariant as invariant14 } from "@dxos/invariant";
1672
- var __dxlog_file14 = "/__w/dxos/dxos/packages/core/echo/echo/src/internal/Obj/set-value.ts";
1697
+ import { invariant as invariant10 } from "@dxos/invariant";
1698
+ var __dxlog_file10 = "/__w/dxos/dxos/packages/core/echo/echo/src/internal/Obj/set-value.ts";
1673
1699
  var setValue = (obj, path, value2) => {
1674
- invariant14(path.length > 0, "Path must not be empty", { "~LogMeta": "~LogMeta", F: __dxlog_file14, L: 14, S: void 0, A: ["path.length > 0", "'Path must not be empty'"] });
1700
+ invariant10(path.length > 0, "Path must not be empty", { "~LogMeta": "~LogMeta", F: __dxlog_file10, L: 14, S: void 0, A: ["path.length > 0", "'Path must not be empty'"] });
1675
1701
  const schema = getSchema(obj);
1676
- invariant14(schema != null, "Object must have a schema", { "~LogMeta": "~LogMeta", F: __dxlog_file14, L: 16, S: void 0, A: ["schema != null", "'Object must have a schema'"] });
1702
+ invariant10(schema != null, "Object must have a schema", { "~LogMeta": "~LogMeta", F: __dxlog_file10, L: 16, S: void 0, A: ["schema != null", "'Object must have a schema'"] });
1677
1703
  let parent = obj;
1678
1704
  let currentAST = schema.ast;
1679
1705
  for (let i = 0; i < path.length - 1; i++) {
@@ -1727,7 +1753,7 @@ var getDefaultValueForType = (ast) => {
1727
1753
  if (!ast) {
1728
1754
  return void 0;
1729
1755
  }
1730
- const defaultValue = SchemaAST6.getDefaultAnnotation(ast);
1756
+ const defaultValue = SchemaAST8.getDefaultAnnotation(ast);
1731
1757
  if (Option.isSome(defaultValue)) {
1732
1758
  return defaultValue.value;
1733
1759
  }
@@ -1757,7 +1783,7 @@ var createObjectWithDefaults = (ast) => {
1757
1783
  };
1758
1784
 
1759
1785
  // src/internal/Obj/snapshot.ts
1760
- import { assertArgument as assertArgument7 } from "@dxos/invariant";
1786
+ import { assertArgument as assertArgument6 } from "@dxos/invariant";
1761
1787
  import { deepMapValues as deepMapValues3 } from "@dxos/util";
1762
1788
  var copySymbolProperty = (source, target, symbol, transform) => {
1763
1789
  let value2;
@@ -1777,7 +1803,7 @@ var copySymbolProperty = (source, target, symbol, transform) => {
1777
1803
  }
1778
1804
  };
1779
1805
  var getSnapshot = (obj) => {
1780
- assertArgument7(typeof obj === "object" && obj !== null && KindId in obj, "obj", "must be an entity");
1806
+ assertArgument6(typeof obj === "object" && obj !== null && KindId in obj, "obj", "must be an entity");
1781
1807
  const snapshot = deepMapValues3(obj, (value2, recurse) => {
1782
1808
  if (typeof value2 === "object" && value2 !== null && Object.getPrototypeOf(value2) !== Object.prototype && !Array.isArray(value2)) {
1783
1809
  return value2;
@@ -1790,16 +1816,23 @@ var getSnapshot = (obj) => {
1790
1816
  const source = obj;
1791
1817
  copySymbolProperty(source, snapshot, TypeId);
1792
1818
  copySymbolProperty(source, snapshot, SchemaId);
1793
- copySymbolProperty(source, snapshot, SelfDXNId);
1819
+ copySymbolProperty(source, snapshot, TypeEntityId);
1820
+ copySymbolProperty(source, snapshot, SelfURIId);
1794
1821
  copySymbolProperty(source, snapshot, ObjectDatabaseId);
1795
1822
  copySymbolProperty(source, snapshot, ObjectDeletedId);
1823
+ copySymbolProperty(source, snapshot, ParentId);
1796
1824
  copySymbolProperty(source, snapshot, MetaId, (meta) => ({
1797
1825
  keys: [
1798
1826
  ...meta?.keys ?? []
1799
1827
  ],
1800
1828
  tags: [
1801
1829
  ...meta?.tags ?? []
1802
- ]
1830
+ ],
1831
+ ...meta?.annotations ? {
1832
+ annotations: {
1833
+ ...meta.annotations
1834
+ }
1835
+ } : {}
1803
1836
  }));
1804
1837
  copySymbolProperty(source, snapshot, RelationSourceDXNId);
1805
1838
  copySymbolProperty(source, snapshot, RelationTargetDXNId);
@@ -1809,13 +1842,14 @@ var getSnapshot = (obj) => {
1809
1842
  };
1810
1843
 
1811
1844
  // src/internal/Obj/clone.ts
1812
- import { invariant as invariant15 } from "@dxos/invariant";
1845
+ import { invariant as invariant11 } from "@dxos/invariant";
1813
1846
  import { deepMapValues as deepMapValues4 } from "@dxos/util";
1814
- var __dxlog_file15 = "/__w/dxos/dxos/packages/core/echo/echo/src/internal/Obj/clone.ts";
1847
+ var __dxlog_file11 = "/__w/dxos/dxos/packages/core/echo/echo/src/internal/Obj/clone.ts";
1815
1848
  var clone = (obj, opts) => {
1816
1849
  const { id, ...data } = obj;
1817
- const schema = getSchema(obj);
1818
- invariant15(schema != null, "Object should have a schema", { "~LogMeta": "~LogMeta", F: __dxlog_file15, L: 16, S: void 0, A: ["schema != null", "'Object should have a schema'"] });
1850
+ const typeEntity = getType(obj);
1851
+ const schema = typeEntity != null ? getStaticTypeSchema(typeEntity) : getSchema(obj);
1852
+ invariant11(schema != null, "Object should have a type or schema", { "~LogMeta": "~LogMeta", F: __dxlog_file11, L: 21, S: void 0, A: ["schema != null", "'Object should have a type or schema'"] });
1819
1853
  const props = deepMapValues4(data, (value2, recurse) => {
1820
1854
  if (Ref.isRef(value2)) {
1821
1855
  if (opts?.deep) {
@@ -1837,7 +1871,7 @@ var clone = (obj, opts) => {
1837
1871
  }
1838
1872
  return recurse(value2);
1839
1873
  });
1840
- return makeObject(schema, props, meta);
1874
+ return makeObject(schema, props, meta, typeEntity);
1841
1875
  };
1842
1876
 
1843
1877
  // src/internal/Query.ts
@@ -1947,18 +1981,19 @@ var prettyQuery = (query) => {
1947
1981
  }
1948
1982
  case "from": {
1949
1983
  if (query.from._tag === "scope") {
1950
- const scope = query.from.scope;
1951
- const parts = [];
1952
- if (scope.spaceIds !== void 0) {
1953
- parts.push(`spaceIds: [${scope.spaceIds.map((s) => JSON.stringify(s)).join(", ")}]`);
1954
- }
1955
- if (scope.feeds !== void 0) {
1956
- parts.push(`feeds: [${scope.feeds.map(String).join(", ")}]`);
1984
+ if (query.from.scopes.length === 0) {
1985
+ return `${prettyQuery(query.query)}.from('all-accessible-spaces')`;
1957
1986
  }
1958
- if (scope.allFeedsFromSpaces !== void 0) {
1959
- parts.push(`allFeedsFromSpaces: ${scope.allFeedsFromSpaces}`);
1960
- }
1961
- return `${prettyQuery(query.query)}.from({ ${parts.join(", ")} })`;
1987
+ const scopeStrs = query.from.scopes.map((scope) => {
1988
+ if (scope._tag === "space") {
1989
+ return scope.includeAllFeeds ? `{ space: ${JSON.stringify(scope.spaceId)}, includeAllFeeds: true }` : `{ space: ${JSON.stringify(scope.spaceId)} }`;
1990
+ }
1991
+ if (scope._tag === "feed") {
1992
+ return `{ feed: ${JSON.stringify(String(scope.feedUri))} }`;
1993
+ }
1994
+ return `{ registry: ${JSON.stringify(scope.location)} }`;
1995
+ });
1996
+ return `${prettyQuery(query.query)}.from([${scopeStrs.join(", ")}])`;
1962
1997
  }
1963
1998
  return `${prettyQuery(query.query)}.from(${prettyQuery(query.from.query)})`;
1964
1999
  }
@@ -1967,28 +2002,22 @@ var prettyQuery = (query) => {
1967
2002
  }
1968
2003
  };
1969
2004
 
1970
- // src/internal/Type/echo-schema.ts
1971
- import * as Schema13 from "effect/Schema";
1972
- import * as SchemaAST8 from "effect/SchemaAST";
1973
- import { invariant as invariant17 } from "@dxos/invariant";
1974
-
1975
2005
  // src/internal/Type/manipulation.ts
1976
- import * as Schema11 from "effect/Schema";
1977
- import * as SchemaAST7 from "effect/SchemaAST";
1978
- import { invariant as invariant16 } from "@dxos/invariant";
1979
- import { DXN as DXN7 } from "@dxos/keys";
1980
- var __dxlog_file16 = "/__w/dxos/dxos/packages/core/echo/echo/src/internal/Type/manipulation.ts";
2006
+ import * as Schema10 from "effect/Schema";
2007
+ import * as SchemaAST9 from "effect/SchemaAST";
2008
+ import { invariant as invariant12 } from "@dxos/invariant";
2009
+ var __dxlog_file12 = "/__w/dxos/dxos/packages/core/echo/echo/src/internal/Type/manipulation.ts";
1981
2010
  var addFieldsToSchema = (schema, fields) => {
1982
- const schemaExtension = Schema11.partial(Schema11.Struct(fields));
1983
- return Schema11.extend(schema, schemaExtension).annotations(schema.ast.annotations);
2011
+ const schemaExtension = Schema10.partial(Schema10.Struct(fields));
2012
+ return Schema10.extend(schema, schemaExtension).annotations(schema.ast.annotations);
1984
2013
  };
1985
2014
  var updateFieldsInSchema = (schema, fields) => {
1986
2015
  const ast = schema.ast;
1987
- invariant16(SchemaAST7.isTypeLiteral(ast), void 0, { "~LogMeta": "~LogMeta", F: __dxlog_file16, L: 16, S: void 0, A: ["SchemaAST.isTypeLiteral(ast)", ""] });
2016
+ invariant12(SchemaAST9.isTypeLiteral(ast), void 0, { "~LogMeta": "~LogMeta", F: __dxlog_file12, L: 14, S: void 0, A: ["SchemaAST.isTypeLiteral(ast)", ""] });
1988
2017
  const updatedProperties = [
1989
2018
  ...ast.propertySignatures
1990
2019
  ];
1991
- const propertiesToUpdate = Schema11.partial(Schema11.Struct(fields)).ast.propertySignatures;
2020
+ const propertiesToUpdate = Schema10.partial(Schema10.Struct(fields)).ast.propertySignatures;
1992
2021
  for (const property of propertiesToUpdate) {
1993
2022
  const index = updatedProperties.findIndex((p) => p.name === property.name);
1994
2023
  if (index !== -1) {
@@ -1997,380 +2026,37 @@ var updateFieldsInSchema = (schema, fields) => {
1997
2026
  updatedProperties.push(property);
1998
2027
  }
1999
2028
  }
2000
- return Schema11.make(new SchemaAST7.TypeLiteral(updatedProperties, ast.indexSignatures, ast.annotations));
2029
+ return Schema10.make(new SchemaAST9.TypeLiteral(updatedProperties, ast.indexSignatures, ast.annotations));
2001
2030
  };
2002
2031
  var removeFieldsFromSchema = (schema, fieldNames) => {
2003
- return Schema11.make(SchemaAST7.omit(schema.ast, fieldNames)).annotations(schema.ast.annotations);
2032
+ return Schema10.make(SchemaAST9.omit(schema.ast, fieldNames)).annotations(schema.ast.annotations);
2004
2033
  };
2005
2034
  var updateFieldNameInSchema = (schema, { before, after }) => {
2006
2035
  const ast = schema.ast;
2007
- invariant16(SchemaAST7.isTypeLiteral(ast), void 0, { "~LogMeta": "~LogMeta", F: __dxlog_file16, L: 36, S: void 0, A: ["SchemaAST.isTypeLiteral(ast)", ""] });
2008
- return Schema11.make(new SchemaAST7.TypeLiteral(ast.propertySignatures.map((p) => p.name === before ? new SchemaAST7.PropertySignature(after, p.type, p.isOptional, p.isReadonly, p.annotations) : p), ast.indexSignatures, ast.annotations));
2009
- };
2010
- var setTypenameInSchema = (schema, typename) => {
2011
- const existingAnnotation = schema.ast.annotations[TypeAnnotationId];
2012
- invariant16(existingAnnotation, `Missing ${String(TypeAnnotationId)}`, { "~LogMeta": "~LogMeta", F: __dxlog_file16, L: 41, S: void 0, A: ["existingAnnotation", "`Missing ${String(TypeAnnotationId)}`"] });
2013
- return schema.annotations({
2014
- ...schema.ast.annotations,
2015
- [TypeAnnotationId]: {
2016
- kind: existingAnnotation.kind,
2017
- typename,
2018
- version: existingAnnotation.version
2019
- },
2020
- [SchemaAST7.JSONSchemaAnnotationId]: {
2021
- ...schema.ast.annotations[SchemaAST7.JSONSchemaAnnotationId] ?? {},
2022
- $id: schema.ast.annotations[TypeIdentifierAnnotationId] ?? DXN7.fromTypename(typename).toString(),
2023
- typename
2024
- }
2025
- });
2036
+ invariant12(SchemaAST9.isTypeLiteral(ast), void 0, { "~LogMeta": "~LogMeta", F: __dxlog_file12, L: 34, S: void 0, A: ["SchemaAST.isTypeLiteral(ast)", ""] });
2037
+ return Schema10.make(new SchemaAST9.TypeLiteral(ast.propertySignatures.map((p) => p.name === before ? new SchemaAST9.PropertySignature(after, p.type, p.isOptional, p.isReadonly, p.annotations) : p), ast.indexSignatures, ast.annotations));
2026
2038
  };
2027
2039
 
2028
- // src/internal/Type/persistent-schema.ts
2029
- import * as Schema12 from "effect/Schema";
2030
- var PersistentSchema = Schema12.Struct({
2031
- name: Schema12.optional(Schema12.String),
2032
- typename: TypenameSchema,
2033
- version: VersionSchema,
2040
+ // src/internal/Type/type-schema.ts
2041
+ import * as Schema11 from "effect/Schema";
2042
+ var TypeSchemaStruct = Schema11.Struct({
2043
+ name: Schema11.optional(Schema11.String),
2034
2044
  jsonSchema: JsonSchemaType
2035
- }).pipe(EchoObjectSchema({
2036
- typename: "org.dxos.type.schema",
2037
- version: "0.1.0"
2038
- }), LabelAnnotation.set([
2045
+ });
2046
+ var TypeSchema = TypeSchemaStruct.pipe(LabelAnnotation.set([
2039
2047
  "name"
2040
2048
  ]), IconAnnotation.set({
2041
2049
  icon: "ph--database--regular",
2042
2050
  hue: "green"
2043
- }));
2044
-
2045
- // src/internal/Type/echo-schema.ts
2046
- var __dxlog_file17 = "/__w/dxos/dxos/packages/core/echo/echo/src/internal/Type/echo-schema.ts";
2047
- var ImmutableSchema = class {
2048
- _schema;
2049
- _objectAnnotation;
2050
- constructor(_schema) {
2051
- this._schema = _schema;
2052
- this._objectAnnotation = getTypeAnnotation(this._schema);
2053
- invariant17(this._objectAnnotation, void 0, { "~LogMeta": "~LogMeta", F: __dxlog_file17, L: 24, S: this, A: ["this._objectAnnotation", ""] });
2054
- }
2055
- //
2056
- // Effect Schema (push to abstract base class).
2057
- //
2058
- get [Schema13.TypeId]() {
2059
- return schemaVariance2;
2060
- }
2061
- get Type() {
2062
- return this._schema.Type;
2063
- }
2064
- get Encoded() {
2065
- return this._schema.Encoded;
2066
- }
2067
- get Context() {
2068
- return this._schema.Context;
2069
- }
2070
- get ast() {
2071
- return this._schema.ast;
2072
- }
2073
- get annotations() {
2074
- return this._schema.annotations;
2075
- }
2076
- get pipe() {
2077
- return this._schema.pipe;
2078
- }
2079
- //
2080
- // TypedObject
2081
- //
2082
- get kind() {
2083
- return this._objectAnnotation.kind;
2084
- }
2085
- get typename() {
2086
- return this._objectAnnotation.typename;
2087
- }
2088
- get version() {
2089
- return this._objectAnnotation.version;
2090
- }
2091
- //
2092
- // BaseSchema
2093
- //
2094
- get readonly() {
2095
- return true;
2096
- }
2097
- get snapshot() {
2098
- return this._schema;
2099
- }
2100
- // TODO(burdon): Change from getter since this is expensive.
2101
- get jsonSchema() {
2102
- return toJsonSchema(this._schema);
2103
- }
2104
- get mutable() {
2105
- throw new Error("Schema is readonly.");
2106
- }
2107
- };
2108
- var EchoSchemaConstructor = () => {
2109
- return class {
2110
- static get _schema() {
2111
- return Schema13.Union(PersistentSchema, Schema13.instanceOf(EchoSchema)).annotations(PersistentSchema.ast.annotations);
2112
- }
2113
- static [Schema13.TypeId] = schemaVariance2;
2114
- static get ast() {
2115
- const schema = this._schema;
2116
- return schema.ast;
2117
- }
2118
- static get annotations() {
2119
- const schema = this._schema;
2120
- return schema.annotations.bind(schema);
2121
- }
2122
- static get pipe() {
2123
- const schema = this._schema;
2124
- return schema.pipe.bind(schema);
2125
- }
2126
- };
2127
- };
2128
- var isMutable = (schema) => {
2129
- return schema instanceof EchoSchema;
2130
- };
2131
- var schemaVariance2 = {
2132
- _A: (_) => _,
2133
- _I: (_) => _,
2134
- _R: (_) => _
2135
- };
2136
- var EchoSchema = class extends EchoSchemaConstructor() {
2137
- _persistentSchema;
2138
- _schema;
2139
- _isDirty = true;
2140
- /**
2141
- * Schema kind key that marks this as an ECHO schema.
2142
- * Makes EchoSchema satisfy the Type.AnyObj type.
2143
- */
2144
- [SchemaKindId] = EntityKind.Object;
2145
- constructor(_persistentSchema) {
2146
- super(), this._persistentSchema = _persistentSchema;
2147
- }
2148
- //
2149
- // Effect Schema (push to abstract base class).
2150
- //
2151
- get [Schema13.TypeId]() {
2152
- return schemaVariance2;
2153
- }
2154
- get Type() {
2155
- return this._persistentSchema;
2156
- }
2157
- get Encoded() {
2158
- return this._persistentSchema;
2159
- }
2160
- get Context() {
2161
- const schema = this._getSchema();
2162
- return schema.Context;
2163
- }
2164
- get ast() {
2165
- const schema = this._getSchema();
2166
- return schema.ast;
2167
- }
2168
- get annotations() {
2169
- const schema = this._getSchema();
2170
- return schema.annotations.bind(schema);
2171
- }
2172
- get pipe() {
2173
- const schema = this._getSchema();
2174
- return schema.pipe.bind(schema);
2175
- }
2176
- //
2177
- // BaseSchema
2178
- //
2179
- get kind() {
2180
- return EntityKind.Object;
2181
- }
2182
- get typename() {
2183
- return this._persistentSchema.typename;
2184
- }
2185
- get version() {
2186
- return this._persistentSchema.version;
2187
- }
2188
- get readonly() {
2189
- return false;
2190
- }
2191
- /**
2192
- * Returns an immutable schema snapshot of the current state of the schema.
2193
- */
2194
- get snapshot() {
2195
- return this._getSchema();
2196
- }
2197
- /**
2198
- * Returns the JSON schema for the schema.
2199
- */
2200
- get jsonSchema() {
2201
- return this._persistentSchema.jsonSchema;
2202
- }
2203
- /**
2204
- * Returns a mutable schema.
2205
- */
2206
- get mutable() {
2207
- invariant17(!this.readonly, "Schema is not mutable", { "~LogMeta": "~LogMeta", F: __dxlog_file17, L: 203, S: this, A: ["!this.readonly", "'Schema is not mutable'"] });
2208
- return this;
2209
- }
2210
- //
2211
- // Mutable Schema
2212
- //
2213
- /**
2214
- * Id of the ECHO object containing the schema.
2215
- */
2216
- get id() {
2217
- return this._persistentSchema.id;
2218
- }
2219
- /**
2220
- * Short name of the schema.
2221
- */
2222
- get name() {
2223
- return this._persistentSchema.name;
2224
- }
2225
- get [SchemaMetaSymbol]() {
2226
- return {
2227
- id: this.id,
2228
- typename: this.typename,
2229
- version: this._persistentSchema.version
2230
- };
2231
- }
2232
- /**
2233
- * Reference to the underlying persistent schema object.
2234
- */
2235
- get persistentSchema() {
2236
- return this._persistentSchema;
2237
- }
2238
- getProperties() {
2239
- const ast = this._getSchema().ast;
2240
- invariant17(SchemaAST8.isTypeLiteral(ast), void 0, { "~LogMeta": "~LogMeta", F: __dxlog_file17, L: 233, S: this, A: ["SchemaAST.isTypeLiteral(ast)", ""] });
2241
- return [
2242
- ...ast.propertySignatures
2243
- ].filter((p) => p.name !== "id").map(unwrapOptionality);
2244
- }
2245
- //
2246
- // Mutation methods.
2247
- // TODO(burdon): Create separate interface for dynamic schema.
2248
- // TODO(burdon): Deprecate direct manipulation? Use JSONSchema directly.
2249
- //
2250
- /**
2251
- * @throws Error if the schema is readonly.
2252
- */
2253
- updateTypename(typename) {
2254
- const updated = setTypenameInSchema(this._getSchema(), typename);
2255
- this._change((schema) => {
2256
- schema.typename = typename;
2257
- schema.jsonSchema = toJsonSchema(updated);
2258
- });
2259
- }
2260
- /**
2261
- * @throws Error if the schema is readonly.
2262
- */
2263
- addFields(fields) {
2264
- const extended = addFieldsToSchema(this._getSchema(), fields);
2265
- this._change((schema) => {
2266
- schema.jsonSchema = toJsonSchema(extended);
2267
- });
2268
- }
2269
- /**
2270
- * @throws Error if the schema is readonly.
2271
- */
2272
- updateFields(fields) {
2273
- const updated = updateFieldsInSchema(this._getSchema(), fields);
2274
- this._change((schema) => {
2275
- schema.jsonSchema = toJsonSchema(updated);
2276
- });
2277
- }
2278
- /**
2279
- * @throws Error if the schema is readonly.
2280
- */
2281
- updateFieldPropertyName({ before, after }) {
2282
- const renamed = updateFieldNameInSchema(this._getSchema(), {
2283
- before,
2284
- after
2285
- });
2286
- this._change((schema) => {
2287
- schema.jsonSchema = toJsonSchema(renamed);
2288
- });
2289
- }
2290
- /**
2291
- * @throws Error if the schema is readonly.
2292
- */
2293
- removeFields(fieldNames) {
2294
- const removed = removeFieldsFromSchema(this._getSchema(), fieldNames);
2295
- this._change((schema) => {
2296
- schema.jsonSchema = toJsonSchema(removed);
2297
- });
2298
- }
2299
- /**
2300
- * Wrapper for Obj.update that handles the change context for the persistent schema.
2301
- */
2302
- _change(callback) {
2303
- const changeFn = this._persistentSchema[ChangeId];
2304
- if (changeFn) {
2305
- changeFn(callback);
2306
- } else {
2307
- callback(this._persistentSchema);
2308
- }
2309
- }
2310
- //
2311
- // Internals
2312
- //
2313
- /**
2314
- * Called by DatabaseSchemaRegistry on update.
2315
- */
2316
- _invalidate() {
2317
- this._isDirty = true;
2318
- }
2319
- /**
2320
- * Rebuilds this schema if it is dirty.
2321
- */
2322
- _rebuild() {
2323
- if (this._isDirty || this._schema == null) {
2324
- this._schema = toEffectSchema(getSnapshot(this._persistentSchema).jsonSchema);
2325
- this._isDirty = false;
2326
- }
2327
- }
2328
- _getSchema() {
2329
- this._rebuild();
2330
- return this._schema;
2331
- }
2332
- };
2333
- var unwrapOptionality = (property) => {
2334
- if (!SchemaAST8.isUnion(property.type)) {
2335
- return property;
2336
- }
2337
- return {
2338
- ...property,
2339
- type: property.type.types.find((type) => !SchemaAST8.isUndefinedKeyword(type))
2340
- };
2341
- };
2051
+ }), EchoTypeKindSchema(TypeMetaSchemaDXN));
2342
2052
 
2343
2053
  export {
2344
2054
  RawObject,
2345
- ATTR_META,
2346
- MetaId,
2347
- ObjectMetaSchema,
2348
- getMeta,
2349
- foreignKey,
2350
- foreignKeyEquals,
2351
- compareForeignKeys,
2352
- ATTR_SELF_DXN,
2353
- SelfDXNId,
2354
- ATTR_DELETED,
2355
- ObjectDeletedId,
2356
- ObjectVersionId,
2357
- ObjectDatabaseId,
2358
- ATTR_RELATION_SOURCE,
2359
- RelationSourceId,
2360
- RelationSourceDXNId,
2361
- ATTR_RELATION_TARGET,
2362
- RelationTargetId,
2363
- RelationTargetDXNId,
2364
2055
  VersionTypeId,
2365
2056
  compare,
2366
2057
  sortByLabel,
2367
2058
  sortByTypename,
2368
2059
  sort,
2369
- getMetaChecked,
2370
- getKeys,
2371
- deleteKeys,
2372
- addTag,
2373
- removeTag,
2374
2060
  EventId,
2375
2061
  ChangeId,
2376
2062
  batchEvents,
@@ -2408,20 +2094,19 @@ export {
2408
2094
  makeObject,
2409
2095
  subscribe,
2410
2096
  change,
2411
- assertObjectModel,
2412
- getObjectDXN,
2413
- getDXN,
2414
- getDatabase,
2097
+ TypeMetaSchemaDXN,
2415
2098
  makeEchoTypeSchema,
2099
+ normalizeSchema,
2416
2100
  EchoObjectSchema,
2417
2101
  EchoRelationSchema,
2102
+ getDXNForRelationSchemaRef,
2103
+ EchoTypeKindSchema,
2418
2104
  isVersion,
2419
2105
  version,
2420
2106
  versionValid,
2421
2107
  compareVersions,
2422
2108
  encodeVersion,
2423
2109
  decodeVersion,
2424
- normalizeSchema,
2425
2110
  makeTypedEntityClass,
2426
2111
  objectToJSON,
2427
2112
  objectFromJSON,
@@ -2429,7 +2114,6 @@ export {
2429
2114
  objectStructureToJson,
2430
2115
  createObject,
2431
2116
  isDeleted,
2432
- createQueueDXN,
2433
2117
  setValue,
2434
2118
  getSnapshot,
2435
2119
  clone,
@@ -2439,14 +2123,10 @@ export {
2439
2123
  updateFieldsInSchema,
2440
2124
  removeFieldsFromSchema,
2441
2125
  updateFieldNameInSchema,
2442
- setTypenameInSchema,
2443
- PersistentSchema,
2444
- ImmutableSchema,
2445
- isMutable,
2446
- EchoSchema,
2126
+ TypeSchema,
2447
2127
  JsonPath,
2448
2128
  JsonProp,
2449
2129
  getValue,
2450
2130
  splitJsonPath
2451
2131
  };
2452
- //# sourceMappingURL=chunk-G54OX4IX.mjs.map
2132
+ //# sourceMappingURL=chunk-OYUG4FHF.mjs.map