@dxos/echo 0.8.4-main.ead640a → 0.8.4-main.effb148878

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 (703) hide show
  1. package/LICENSE +102 -5
  2. package/README.md +10 -11
  3. package/dist/lib/neutral/Annotation.mjs +39 -0
  4. package/dist/lib/neutral/Database.mjs +49 -0
  5. package/dist/lib/neutral/Entity.mjs +68 -0
  6. package/dist/lib/neutral/Err.mjs +12 -0
  7. package/dist/lib/neutral/Extension.mjs +18 -0
  8. package/dist/lib/neutral/Feed.mjs +54 -0
  9. package/dist/lib/neutral/Filter.mjs +74 -0
  10. package/dist/lib/neutral/Filter.mjs.map +7 -0
  11. package/dist/lib/neutral/Format.mjs +86 -0
  12. package/dist/lib/neutral/Format.mjs.map +7 -0
  13. package/dist/lib/neutral/JsonSchema.mjs +19 -0
  14. package/dist/lib/neutral/JsonSchema.mjs.map +7 -0
  15. package/dist/lib/neutral/Key.mjs +16 -0
  16. package/dist/lib/neutral/Key.mjs.map +7 -0
  17. package/dist/lib/neutral/Migration.mjs +18 -0
  18. package/dist/lib/neutral/Migration.mjs.map +7 -0
  19. package/dist/lib/neutral/Obj.mjs +114 -0
  20. package/dist/lib/neutral/Obj.mjs.map +7 -0
  21. package/dist/lib/neutral/Order.mjs +12 -0
  22. package/dist/lib/neutral/Order.mjs.map +7 -0
  23. package/dist/lib/neutral/Query.mjs +38 -0
  24. package/dist/lib/neutral/Query.mjs.map +7 -0
  25. package/dist/lib/neutral/QueryResult.mjs +2 -0
  26. package/dist/lib/neutral/QueryResult.mjs.map +7 -0
  27. package/dist/lib/neutral/Ref.mjs +26 -0
  28. package/dist/lib/neutral/Ref.mjs.map +7 -0
  29. package/dist/lib/neutral/Relation.mjs +95 -0
  30. package/dist/lib/neutral/Relation.mjs.map +7 -0
  31. package/dist/lib/neutral/SchemaRegistry.mjs +2 -0
  32. package/dist/lib/neutral/SchemaRegistry.mjs.map +7 -0
  33. package/dist/lib/neutral/Tag.mjs +29 -0
  34. package/dist/lib/neutral/Tag.mjs.map +7 -0
  35. package/dist/lib/neutral/Type.mjs +63 -0
  36. package/dist/lib/neutral/Type.mjs.map +7 -0
  37. package/dist/lib/neutral/chunk-4SYHDOQA.mjs +48 -0
  38. package/dist/lib/neutral/chunk-4SYHDOQA.mjs.map +7 -0
  39. package/dist/lib/neutral/chunk-4U7OD55H.mjs +47 -0
  40. package/dist/lib/neutral/chunk-4U7OD55H.mjs.map +7 -0
  41. package/dist/lib/neutral/chunk-52NG2XEE.mjs +34 -0
  42. package/dist/lib/neutral/chunk-52NG2XEE.mjs.map +7 -0
  43. package/dist/lib/neutral/chunk-A5HDDVKS.mjs +94 -0
  44. package/dist/lib/neutral/chunk-A5HDDVKS.mjs.map +7 -0
  45. package/dist/lib/neutral/chunk-EZ4XJFHJ.mjs +54 -0
  46. package/dist/lib/neutral/chunk-EZ4XJFHJ.mjs.map +7 -0
  47. package/dist/lib/neutral/chunk-F625JEZB.mjs +365 -0
  48. package/dist/lib/neutral/chunk-F625JEZB.mjs.map +7 -0
  49. package/dist/lib/neutral/chunk-FFCN66OF.mjs +420 -0
  50. package/dist/lib/neutral/chunk-FFCN66OF.mjs.map +7 -0
  51. package/dist/lib/neutral/chunk-GOHDOJE3.mjs +51 -0
  52. package/dist/lib/neutral/chunk-GOHDOJE3.mjs.map +7 -0
  53. package/dist/lib/neutral/chunk-GWFFC34K.mjs +50 -0
  54. package/dist/lib/neutral/chunk-GWFFC34K.mjs.map +7 -0
  55. package/dist/lib/neutral/chunk-J5LGTIGS.mjs +10 -0
  56. package/dist/lib/neutral/chunk-J5LGTIGS.mjs.map +7 -0
  57. package/dist/lib/neutral/chunk-J7QWJQQV.mjs +318 -0
  58. package/dist/lib/neutral/chunk-J7QWJQQV.mjs.map +7 -0
  59. package/dist/lib/neutral/chunk-JTHNDGAR.mjs +27 -0
  60. package/dist/lib/neutral/chunk-JTHNDGAR.mjs.map +7 -0
  61. package/dist/lib/neutral/chunk-K5RH2PBH.mjs +361 -0
  62. package/dist/lib/neutral/chunk-K5RH2PBH.mjs.map +7 -0
  63. package/dist/lib/neutral/chunk-KHRAQDYX.mjs +343 -0
  64. package/dist/lib/neutral/chunk-KHRAQDYX.mjs.map +7 -0
  65. package/dist/lib/neutral/chunk-L65CW5EI.mjs +156 -0
  66. package/dist/lib/neutral/chunk-L65CW5EI.mjs.map +7 -0
  67. package/dist/lib/neutral/chunk-LNZIPZX6.mjs +2186 -0
  68. package/dist/lib/neutral/chunk-LNZIPZX6.mjs.map +7 -0
  69. package/dist/lib/neutral/chunk-MPXUNTME.mjs +41 -0
  70. package/dist/lib/neutral/chunk-MPXUNTME.mjs.map +7 -0
  71. package/dist/lib/neutral/chunk-O2EOH7XQ.mjs +420 -0
  72. package/dist/lib/neutral/chunk-O2EOH7XQ.mjs.map +7 -0
  73. package/dist/lib/neutral/chunk-Q7ID37KF.mjs +278 -0
  74. package/dist/lib/neutral/chunk-Q7ID37KF.mjs.map +7 -0
  75. package/dist/lib/neutral/chunk-QLYEQ5VA.mjs +205 -0
  76. package/dist/lib/neutral/chunk-QLYEQ5VA.mjs.map +7 -0
  77. package/dist/lib/neutral/chunk-SSDGRJ3A.mjs +747 -0
  78. package/dist/lib/neutral/chunk-SSDGRJ3A.mjs.map +7 -0
  79. package/dist/lib/neutral/chunk-TTCSATUD.mjs +42 -0
  80. package/dist/lib/neutral/chunk-TTCSATUD.mjs.map +7 -0
  81. package/dist/lib/neutral/chunk-UEFRFUYC.mjs +25 -0
  82. package/dist/lib/neutral/chunk-UEFRFUYC.mjs.map +7 -0
  83. package/dist/lib/neutral/chunk-UN7K472Q.mjs +132 -0
  84. package/dist/lib/neutral/chunk-UN7K472Q.mjs.map +7 -0
  85. package/dist/lib/neutral/chunk-UQAMAXDU.mjs +243 -0
  86. package/dist/lib/neutral/chunk-UQAMAXDU.mjs.map +7 -0
  87. package/dist/lib/neutral/chunk-V5NE2X7Y.mjs +7 -0
  88. package/dist/lib/neutral/chunk-V5NE2X7Y.mjs.map +7 -0
  89. package/dist/lib/neutral/chunk-V72DY6LU.mjs +7 -0
  90. package/dist/lib/neutral/chunk-V72DY6LU.mjs.map +7 -0
  91. package/dist/lib/neutral/chunk-ZII2BGPM.mjs +269 -0
  92. package/dist/lib/neutral/chunk-ZII2BGPM.mjs.map +7 -0
  93. package/dist/lib/neutral/chunk-ZM7VFIS2.mjs +93 -0
  94. package/dist/lib/neutral/chunk-ZM7VFIS2.mjs.map +7 -0
  95. package/dist/lib/neutral/index.mjs +111 -0
  96. package/dist/lib/neutral/index.mjs.map +7 -0
  97. package/dist/lib/neutral/internal/index.mjs +513 -0
  98. package/dist/lib/neutral/internal/index.mjs.map +7 -0
  99. package/dist/lib/neutral/meta.json +1 -0
  100. package/dist/lib/neutral/testing/index.mjs +418 -0
  101. package/dist/lib/neutral/testing/index.mjs.map +7 -0
  102. package/dist/types/src/Annotation.d.ts +24 -0
  103. package/dist/types/src/Annotation.d.ts.map +1 -0
  104. package/dist/types/src/Collection.d.ts +15 -0
  105. package/dist/types/src/Collection.d.ts.map +1 -0
  106. package/dist/types/src/Database.d.ts +201 -0
  107. package/dist/types/src/Database.d.ts.map +1 -0
  108. package/dist/types/src/Dataset.d.ts +29 -0
  109. package/dist/types/src/Dataset.d.ts.map +1 -0
  110. package/dist/types/src/Entity.d.ts +236 -0
  111. package/dist/types/src/Entity.d.ts.map +1 -0
  112. package/dist/types/src/Entity.test.d.ts +2 -0
  113. package/dist/types/src/Entity.test.d.ts.map +1 -0
  114. package/dist/types/src/Err.d.ts +107 -0
  115. package/dist/types/src/Err.d.ts.map +1 -0
  116. package/dist/types/src/Extension.d.ts +80 -0
  117. package/dist/types/src/Extension.d.ts.map +1 -0
  118. package/dist/types/src/Extension.test.d.ts +2 -0
  119. package/dist/types/src/Extension.test.d.ts.map +1 -0
  120. package/dist/types/src/Feed.d.ts +229 -0
  121. package/dist/types/src/Feed.d.ts.map +1 -0
  122. package/dist/types/src/Filter.d.ts +183 -0
  123. package/dist/types/src/Filter.d.ts.map +1 -0
  124. package/dist/types/src/Filter.test.d.ts +2 -0
  125. package/dist/types/src/Filter.test.d.ts.map +1 -0
  126. package/dist/types/src/Format.d.ts +4 -0
  127. package/dist/types/src/Format.d.ts.map +1 -0
  128. package/dist/types/src/Hypergraph.d.ts +65 -0
  129. package/dist/types/src/Hypergraph.d.ts.map +1 -0
  130. package/dist/types/src/Json.d.ts +33 -0
  131. package/dist/types/src/Json.d.ts.map +1 -0
  132. package/dist/types/src/Json.test.d.ts +2 -0
  133. package/dist/types/src/Json.test.d.ts.map +1 -0
  134. package/dist/types/src/JsonSchema.d.ts +16 -0
  135. package/dist/types/src/JsonSchema.d.ts.map +1 -0
  136. package/dist/types/src/Key.d.ts +2 -1
  137. package/dist/types/src/Key.d.ts.map +1 -1
  138. package/dist/types/src/Migration.d.ts +72 -0
  139. package/dist/types/src/Migration.d.ts.map +1 -0
  140. package/dist/types/src/Obj.d.ts +459 -107
  141. package/dist/types/src/Obj.d.ts.map +1 -1
  142. package/dist/types/src/Obj.test.d.ts +2 -0
  143. package/dist/types/src/Obj.test.d.ts.map +1 -0
  144. package/dist/types/src/Order.d.ts +16 -0
  145. package/dist/types/src/Order.d.ts.map +1 -0
  146. package/dist/types/src/Query.d.ts +225 -0
  147. package/dist/types/src/Query.d.ts.map +1 -0
  148. package/dist/types/src/Query.test.d.ts +2 -0
  149. package/dist/types/src/Query.test.d.ts.map +1 -0
  150. package/dist/types/src/QueryResult.d.ts +80 -0
  151. package/dist/types/src/QueryResult.d.ts.map +1 -0
  152. package/dist/types/src/Ref.d.ts +69 -11
  153. package/dist/types/src/Ref.d.ts.map +1 -1
  154. package/dist/types/src/Relation.d.ts +316 -23
  155. package/dist/types/src/Relation.d.ts.map +1 -1
  156. package/dist/types/src/Relation.test.d.ts +2 -0
  157. package/dist/types/src/Relation.test.d.ts.map +1 -0
  158. package/dist/types/src/SchemaRegistry.d.ts +83 -0
  159. package/dist/types/src/SchemaRegistry.d.ts.map +1 -0
  160. package/dist/types/src/Tag.d.ts +18 -0
  161. package/dist/types/src/Tag.d.ts.map +1 -0
  162. package/dist/types/src/Type.d.ts +378 -106
  163. package/dist/types/src/Type.d.ts.map +1 -1
  164. package/dist/types/src/Type.test.d.ts +2 -0
  165. package/dist/types/src/Type.test.d.ts.map +1 -0
  166. package/dist/types/src/View.d.ts +65 -0
  167. package/dist/types/src/View.d.ts.map +1 -0
  168. package/dist/types/src/exemplars.test.d.ts +2 -0
  169. package/dist/types/src/exemplars.test.d.ts.map +1 -0
  170. package/dist/types/src/hierarchy.test.d.ts +2 -0
  171. package/dist/types/src/hierarchy.test.d.ts.map +1 -0
  172. package/dist/types/src/index.d.ts +22 -5
  173. package/dist/types/src/index.d.ts.map +1 -1
  174. package/dist/types/src/internal/Annotation/annotations.d.ts +251 -0
  175. package/dist/types/src/internal/Annotation/annotations.d.ts.map +1 -0
  176. package/dist/types/src/internal/Annotation/annotations.test.d.ts.map +1 -0
  177. package/dist/types/src/internal/Annotation/index.d.ts +4 -0
  178. package/dist/types/src/internal/Annotation/index.d.ts.map +1 -0
  179. package/dist/types/src/internal/Annotation/sorting.d.ts +24 -0
  180. package/dist/types/src/internal/Annotation/sorting.d.ts.map +1 -0
  181. package/dist/types/src/internal/Annotation/util.d.ts +48 -0
  182. package/dist/types/src/internal/Annotation/util.d.ts.map +1 -0
  183. package/dist/types/src/internal/Entity/api.d.ts +13 -0
  184. package/dist/types/src/internal/Entity/api.d.ts.map +1 -0
  185. package/dist/types/src/internal/Entity/entity.d.ts +67 -0
  186. package/dist/types/src/internal/Entity/entity.d.ts.map +1 -0
  187. package/dist/types/src/internal/Entity/index.d.ts +10 -0
  188. package/dist/types/src/internal/Entity/index.d.ts.map +1 -0
  189. package/dist/types/src/internal/Entity/model.d.ts +57 -0
  190. package/dist/types/src/internal/Entity/model.d.ts.map +1 -0
  191. package/dist/types/src/internal/Entity/object.d.ts +18 -0
  192. package/dist/types/src/internal/Entity/object.d.ts.map +1 -0
  193. package/dist/types/src/internal/Entity/relation.d.ts +51 -0
  194. package/dist/types/src/internal/Entity/relation.d.ts.map +1 -0
  195. package/dist/types/src/internal/Entity/type-kind.d.ts +24 -0
  196. package/dist/types/src/internal/Entity/type-kind.d.ts.map +1 -0
  197. package/dist/types/src/internal/Entity/type-uri.d.ts +25 -0
  198. package/dist/types/src/internal/Entity/type-uri.d.ts.map +1 -0
  199. package/dist/types/src/internal/Entity/util.d.ts +2 -0
  200. package/dist/types/src/internal/Entity/util.d.ts.map +1 -0
  201. package/dist/types/src/internal/Entity/version.d.ts +42 -0
  202. package/dist/types/src/internal/Entity/version.d.ts.map +1 -0
  203. package/dist/types/src/internal/Format/date.d.ts.map +1 -0
  204. package/dist/types/src/internal/Format/date.test.d.ts.map +1 -0
  205. package/dist/types/src/internal/{formats → Format}/format.d.ts +6 -3
  206. package/dist/types/src/internal/Format/format.d.ts.map +1 -0
  207. package/dist/types/src/internal/Format/format.test.d.ts.map +1 -0
  208. package/dist/types/src/internal/{formats → Format}/index.d.ts +2 -2
  209. package/dist/types/src/internal/Format/index.d.ts.map +1 -0
  210. package/dist/types/src/internal/Format/number.d.ts.map +1 -0
  211. package/dist/types/src/internal/Format/object.d.ts.map +1 -0
  212. package/dist/types/src/internal/{formats → Format}/select.d.ts +6 -4
  213. package/dist/types/src/internal/Format/select.d.ts.map +1 -0
  214. package/dist/types/src/internal/{formats → Format}/string.d.ts +4 -0
  215. package/dist/types/src/internal/Format/string.d.ts.map +1 -0
  216. package/dist/types/src/internal/{formats → Format}/types.d.ts +14 -10
  217. package/dist/types/src/internal/Format/types.d.ts.map +1 -0
  218. package/dist/types/src/internal/{json → JsonSchema}/annotations.d.ts +1 -1
  219. package/dist/types/src/internal/JsonSchema/annotations.d.ts.map +1 -0
  220. package/dist/types/src/internal/JsonSchema/effect-schema.test.d.ts.map +1 -0
  221. package/dist/types/src/internal/JsonSchema/index.d.ts +5 -0
  222. package/dist/types/src/internal/JsonSchema/index.d.ts.map +1 -0
  223. package/dist/types/src/internal/JsonSchema/json-schema-normalize.d.ts.map +1 -0
  224. package/dist/types/src/internal/{json-schema → JsonSchema}/json-schema-type.d.ts +131 -30
  225. package/dist/types/src/internal/JsonSchema/json-schema-type.d.ts.map +1 -0
  226. package/dist/types/src/internal/{json → JsonSchema}/json-schema.d.ts +6 -3
  227. package/dist/types/src/internal/JsonSchema/json-schema.d.ts.map +1 -0
  228. package/dist/types/src/internal/JsonSchema/json-schema.test.d.ts.map +1 -0
  229. package/dist/types/src/internal/Obj/clone.d.ts +8 -0
  230. package/dist/types/src/internal/Obj/clone.d.ts.map +1 -0
  231. package/dist/types/src/internal/Obj/common.d.ts.map +1 -0
  232. package/dist/types/src/internal/{object/create.d.ts → Obj/create-object.d.ts} +13 -16
  233. package/dist/types/src/internal/Obj/create-object.d.ts.map +1 -0
  234. package/dist/types/src/internal/Obj/create-object.test.d.ts +2 -0
  235. package/dist/types/src/internal/Obj/create-object.test.d.ts.map +1 -0
  236. package/dist/types/src/internal/Obj/deleted.d.ts +6 -0
  237. package/dist/types/src/internal/Obj/deleted.d.ts.map +1 -0
  238. package/dist/types/src/internal/Obj/index.d.ts +10 -0
  239. package/dist/types/src/internal/Obj/index.d.ts.map +1 -0
  240. package/dist/types/src/internal/Obj/inspect.d.ts.map +1 -0
  241. package/dist/types/src/internal/Obj/json-serializer.d.ts +45 -0
  242. package/dist/types/src/internal/Obj/json-serializer.d.ts.map +1 -0
  243. package/dist/types/src/internal/Obj/json-serializer.test.d.ts.map +1 -0
  244. package/dist/types/src/internal/Obj/schema-validator.d.ts +2 -0
  245. package/dist/types/src/internal/Obj/schema-validator.d.ts.map +1 -0
  246. package/dist/types/src/internal/Obj/schema-validator.test.d.ts.map +1 -0
  247. package/dist/types/src/internal/Obj/set-value.d.ts +7 -0
  248. package/dist/types/src/internal/Obj/set-value.d.ts.map +1 -0
  249. package/dist/types/src/internal/Obj/set-value.test.d.ts +2 -0
  250. package/dist/types/src/internal/Obj/set-value.test.d.ts.map +1 -0
  251. package/dist/types/src/internal/Obj/snapshot.d.ts +6 -0
  252. package/dist/types/src/internal/Obj/snapshot.d.ts.map +1 -0
  253. package/dist/types/src/internal/Obj/typed-object.d.ts +25 -0
  254. package/dist/types/src/internal/Obj/typed-object.d.ts.map +1 -0
  255. package/dist/types/src/internal/Obj/typed-object.test.d.ts.map +1 -0
  256. package/dist/types/src/internal/Query.d.ts +10 -0
  257. package/dist/types/src/internal/Query.d.ts.map +1 -0
  258. package/dist/types/src/internal/Ref/index.d.ts.map +1 -0
  259. package/dist/types/src/internal/{ref → Ref}/ref-array.d.ts +4 -4
  260. package/dist/types/src/internal/Ref/ref-array.d.ts.map +1 -0
  261. package/dist/types/src/internal/{ref → Ref}/ref.d.ts +79 -31
  262. package/dist/types/src/internal/Ref/ref.d.ts.map +1 -0
  263. package/dist/types/src/internal/Ref/ref.test.d.ts.map +1 -0
  264. package/dist/types/src/internal/Type/compose.d.ts +7 -0
  265. package/dist/types/src/internal/Type/compose.d.ts.map +1 -0
  266. package/dist/types/src/internal/Type/compose.test.d.ts.map +1 -0
  267. package/dist/types/src/internal/Type/index.d.ts +3 -0
  268. package/dist/types/src/internal/Type/index.d.ts.map +1 -0
  269. package/dist/types/src/internal/{schema → Type}/manipulation.d.ts +0 -1
  270. package/dist/types/src/internal/Type/manipulation.d.ts.map +1 -0
  271. package/dist/types/src/internal/Type/type-schema.d.ts +52 -0
  272. package/dist/types/src/internal/Type/type-schema.d.ts.map +1 -0
  273. package/dist/types/src/internal/common/api/index.d.ts +11 -0
  274. package/dist/types/src/internal/common/api/index.d.ts.map +1 -0
  275. package/dist/types/src/internal/common/api/meta.d.ts +42 -0
  276. package/dist/types/src/internal/common/api/meta.d.ts.map +1 -0
  277. package/dist/types/src/internal/common/index.d.ts +4 -0
  278. package/dist/types/src/internal/common/index.d.ts.map +1 -0
  279. package/dist/types/src/internal/common/proxy/change-context.d.ts +55 -0
  280. package/dist/types/src/internal/common/proxy/change-context.d.ts.map +1 -0
  281. package/dist/types/src/internal/common/proxy/change.test.d.ts +2 -0
  282. package/dist/types/src/internal/common/proxy/change.test.d.ts.map +1 -0
  283. package/dist/types/src/internal/common/proxy/define-hidden-property.d.ts +5 -0
  284. package/dist/types/src/internal/common/proxy/define-hidden-property.d.ts.map +1 -0
  285. package/dist/types/src/internal/common/proxy/errors.d.ts +19 -0
  286. package/dist/types/src/internal/common/proxy/errors.d.ts.map +1 -0
  287. package/dist/types/src/internal/common/proxy/event-batch.d.ts +10 -0
  288. package/dist/types/src/internal/common/proxy/event-batch.d.ts.map +1 -0
  289. package/dist/types/src/internal/common/proxy/handler.test.d.ts.map +1 -0
  290. package/dist/types/src/internal/common/proxy/index.d.ts +14 -0
  291. package/dist/types/src/internal/common/proxy/index.d.ts.map +1 -0
  292. package/dist/types/src/internal/common/proxy/json-serializer.d.ts +6 -0
  293. package/dist/types/src/internal/common/proxy/json-serializer.d.ts.map +1 -0
  294. package/dist/types/src/internal/common/proxy/make-object.d.ts +19 -0
  295. package/dist/types/src/internal/common/proxy/make-object.d.ts.map +1 -0
  296. package/dist/types/src/internal/common/proxy/ownership.d.ts +57 -0
  297. package/dist/types/src/internal/common/proxy/ownership.d.ts.map +1 -0
  298. package/dist/types/src/internal/common/proxy/proxy-types.d.ts +18 -0
  299. package/dist/types/src/internal/common/proxy/proxy-types.d.ts.map +1 -0
  300. package/dist/types/src/internal/common/proxy/proxy-utils.d.ts +47 -0
  301. package/dist/types/src/internal/common/proxy/proxy-utils.d.ts.map +1 -0
  302. package/dist/types/src/internal/common/proxy/reactive-array.d.ts +8 -0
  303. package/dist/types/src/internal/common/proxy/reactive-array.d.ts.map +1 -0
  304. package/dist/types/src/internal/common/proxy/reactive.d.ts +39 -0
  305. package/dist/types/src/internal/common/proxy/reactive.d.ts.map +1 -0
  306. package/dist/types/src/internal/common/proxy/reactive.test.d.ts +2 -0
  307. package/dist/types/src/internal/common/proxy/reactive.test.d.ts.map +1 -0
  308. package/dist/types/src/internal/common/proxy/schema-validator.d.ts.map +1 -0
  309. package/dist/types/src/internal/common/proxy/schema.test.d.ts.map +1 -0
  310. package/dist/types/src/internal/common/proxy/symbols.d.ts +3 -0
  311. package/dist/types/src/internal/common/proxy/symbols.d.ts.map +1 -0
  312. package/dist/types/src/internal/common/proxy/typed-handler.d.ts +64 -0
  313. package/dist/types/src/internal/common/proxy/typed-handler.d.ts.map +1 -0
  314. package/dist/types/src/internal/common/proxy/typed-handler.test.d.ts.map +1 -0
  315. package/dist/types/src/internal/common/proxy/typed-object.test.d.ts.map +1 -0
  316. package/dist/types/src/internal/common/types/base.d.ts +27 -0
  317. package/dist/types/src/internal/common/types/base.d.ts.map +1 -0
  318. package/dist/types/src/internal/common/types/entity.d.ts +94 -0
  319. package/dist/types/src/internal/common/types/entity.d.ts.map +1 -0
  320. package/dist/types/src/internal/common/types/index.d.ts +7 -0
  321. package/dist/types/src/internal/common/types/index.d.ts.map +1 -0
  322. package/dist/types/src/internal/common/types/meta.d.ts +43 -0
  323. package/dist/types/src/internal/common/types/meta.d.ts.map +1 -0
  324. package/dist/types/src/internal/common/types/model-symbols.d.ts +58 -0
  325. package/dist/types/src/internal/common/types/model-symbols.d.ts.map +1 -0
  326. package/dist/types/src/internal/common/types/typename.d.ts +28 -0
  327. package/dist/types/src/internal/common/types/typename.d.ts.map +1 -0
  328. package/dist/types/src/internal/common/types/version.d.ts +15 -0
  329. package/dist/types/src/internal/common/types/version.d.ts.map +1 -0
  330. package/dist/types/src/internal/index.d.ts +10 -14
  331. package/dist/types/src/internal/index.d.ts.map +1 -1
  332. package/dist/types/src/{test → testing}/api.test.d.ts.map +1 -1
  333. package/dist/types/src/testing/index.d.ts +3 -3
  334. package/dist/types/src/testing/index.d.ts.map +1 -1
  335. package/dist/types/src/testing/test-data.d.ts +18 -0
  336. package/dist/types/src/testing/test-data.d.ts.map +1 -0
  337. package/dist/types/src/testing/test-schema.d.ts +298 -0
  338. package/dist/types/src/testing/test-schema.d.ts.map +1 -0
  339. package/dist/types/src/testing/util.d.ts +23 -0
  340. package/dist/types/src/testing/util.d.ts.map +1 -0
  341. package/dist/types/tsconfig.tsbuildinfo +1 -1
  342. package/package.json +117 -66
  343. package/src/Annotation.ts +49 -0
  344. package/src/Collection.ts +36 -0
  345. package/src/Database.ts +356 -0
  346. package/src/Dataset.ts +34 -0
  347. package/src/Entity.test.ts +132 -0
  348. package/src/Entity.ts +332 -0
  349. package/src/Err.ts +40 -0
  350. package/src/Extension.test.ts +235 -0
  351. package/src/Extension.ts +122 -0
  352. package/src/Feed.ts +356 -0
  353. package/src/Filter.test.ts +90 -0
  354. package/src/Filter.ts +507 -0
  355. package/src/Format.ts +9 -0
  356. package/src/Hypergraph.ts +79 -0
  357. package/src/Json.test.ts +175 -0
  358. package/src/Json.ts +103 -0
  359. package/src/JsonSchema.ts +26 -0
  360. package/src/Key.ts +4 -1
  361. package/src/Migration.ts +114 -0
  362. package/src/Obj.test.ts +550 -0
  363. package/src/Obj.ts +754 -267
  364. package/src/Order.ts +46 -0
  365. package/src/Query.test.ts +822 -0
  366. package/src/Query.ts +589 -0
  367. package/src/QueryResult.ts +106 -0
  368. package/src/Ref.ts +98 -10
  369. package/src/Relation.test.ts +88 -0
  370. package/src/Relation.ts +491 -67
  371. package/src/SchemaRegistry.ts +101 -0
  372. package/src/{query/tag.ts → Tag.ts} +15 -12
  373. package/src/Type.test.ts +197 -0
  374. package/src/Type.ts +605 -151
  375. package/src/View.ts +101 -0
  376. package/src/exemplars.test.ts +21 -0
  377. package/src/hierarchy.test.ts +33 -0
  378. package/src/index.ts +23 -6
  379. package/src/internal/Annotation/annotations.test.ts +165 -0
  380. package/src/internal/Annotation/annotations.ts +567 -0
  381. package/src/internal/Annotation/index.ts +7 -0
  382. package/src/internal/Annotation/sorting.ts +51 -0
  383. package/src/internal/Annotation/util.ts +93 -0
  384. package/src/internal/Entity/api.ts +30 -0
  385. package/src/internal/Entity/entity.ts +246 -0
  386. package/src/internal/Entity/index.ts +13 -0
  387. package/src/internal/Entity/model.ts +120 -0
  388. package/src/internal/Entity/object.ts +65 -0
  389. package/src/internal/Entity/relation.ts +179 -0
  390. package/src/internal/Entity/type-kind.ts +67 -0
  391. package/src/internal/Entity/type-uri.ts +87 -0
  392. package/src/internal/Entity/util.ts +34 -0
  393. package/src/internal/Entity/version.ts +96 -0
  394. package/src/internal/{formats → Format}/date.test.ts +1 -2
  395. package/src/internal/{formats → Format}/date.ts +5 -9
  396. package/src/internal/{formats → Format}/format.test.ts +6 -7
  397. package/src/internal/{formats → Format}/format.ts +8 -6
  398. package/src/internal/{formats → Format}/index.ts +2 -3
  399. package/src/internal/{formats → Format}/number.ts +5 -5
  400. package/src/internal/{formats → Format}/object.ts +4 -4
  401. package/src/internal/{formats → Format}/select.ts +6 -4
  402. package/src/internal/{formats → Format}/string.ts +14 -9
  403. package/src/internal/{formats → Format}/types.ts +54 -43
  404. package/src/internal/{json → JsonSchema}/annotations.ts +3 -3
  405. package/src/internal/{json-schema → JsonSchema}/index.ts +2 -0
  406. package/src/internal/{json-schema → JsonSchema}/json-schema-normalize.ts +4 -2
  407. package/src/internal/{json-schema → JsonSchema}/json-schema-type.ts +36 -36
  408. package/src/internal/{json → JsonSchema}/json-schema.test.ts +92 -175
  409. package/src/internal/{json → JsonSchema}/json-schema.ts +69 -37
  410. package/src/internal/Obj/clone.ts +52 -0
  411. package/src/internal/{object → Obj}/common.ts +3 -4
  412. package/src/internal/{object/create.test.ts → Obj/create-object.test.ts} +34 -37
  413. package/src/internal/Obj/create-object.ts +135 -0
  414. package/src/internal/Obj/deleted.ts +19 -0
  415. package/src/internal/Obj/index.ts +13 -0
  416. package/src/internal/{object → Obj}/inspect.ts +5 -7
  417. package/src/internal/Obj/json-serializer.test.ts +185 -0
  418. package/src/internal/Obj/json-serializer.ts +260 -0
  419. package/src/internal/{object → Obj}/schema-validator.test.ts +3 -7
  420. package/src/internal/Obj/schema-validator.ts +6 -0
  421. package/src/internal/Obj/set-value.test.ts +258 -0
  422. package/src/internal/Obj/set-value.ts +165 -0
  423. package/src/internal/Obj/snapshot.ts +111 -0
  424. package/src/internal/Obj/typed-object.test.ts +32 -0
  425. package/src/internal/Obj/typed-object.ts +30 -0
  426. package/src/internal/Query.ts +156 -0
  427. package/src/internal/{ref → Ref}/ref-array.ts +4 -5
  428. package/src/internal/{ref → Ref}/ref.test.ts +21 -30
  429. package/src/internal/{ref → Ref}/ref.ts +209 -98
  430. package/src/internal/{projection → Type}/compose.test.ts +9 -9
  431. package/src/internal/{projection → Type}/compose.ts +14 -9
  432. package/src/internal/Type/index.ts +6 -0
  433. package/src/internal/{schema → Type}/manipulation.ts +0 -25
  434. package/src/internal/Type/type-schema.ts +60 -0
  435. package/src/internal/common/README.md +102 -0
  436. package/src/internal/common/api/index.ts +15 -0
  437. package/src/internal/common/api/meta.ts +88 -0
  438. package/src/internal/{testing → common}/index.ts +2 -1
  439. package/src/internal/common/proxy/change-context.ts +138 -0
  440. package/src/internal/common/proxy/change.test.ts +519 -0
  441. package/src/internal/common/proxy/define-hidden-property.ts +14 -0
  442. package/src/internal/common/proxy/errors.ts +42 -0
  443. package/src/internal/common/proxy/event-batch.ts +44 -0
  444. package/src/internal/common/proxy/handler.test.ts +121 -0
  445. package/src/internal/common/proxy/index.ts +17 -0
  446. package/src/internal/common/proxy/json-serializer.ts +93 -0
  447. package/src/internal/common/proxy/make-object.ts +128 -0
  448. package/src/internal/common/proxy/ownership.ts +252 -0
  449. package/src/internal/common/proxy/proxy-types.ts +23 -0
  450. package/src/internal/common/proxy/proxy-utils.ts +150 -0
  451. package/src/internal/common/proxy/reactive-array.ts +71 -0
  452. package/src/internal/common/proxy/reactive.test.ts +54 -0
  453. package/src/internal/common/proxy/reactive.ts +77 -0
  454. package/src/internal/{object → common/proxy}/schema-validator.ts +6 -3
  455. package/src/internal/common/proxy/schema.test.ts +107 -0
  456. package/src/internal/common/proxy/symbols.ts +7 -0
  457. package/src/internal/common/proxy/typed-handler.test.ts +314 -0
  458. package/src/internal/common/proxy/typed-handler.ts +507 -0
  459. package/src/internal/common/proxy/typed-object.test.ts +103 -0
  460. package/src/internal/common/types/base.ts +43 -0
  461. package/src/internal/common/types/entity.ts +133 -0
  462. package/src/internal/common/types/index.ts +10 -0
  463. package/src/internal/common/types/meta.ts +79 -0
  464. package/src/internal/common/types/model-symbols.ts +74 -0
  465. package/src/internal/common/types/typename.ts +91 -0
  466. package/src/internal/common/types/version.ts +19 -0
  467. package/src/internal/index.ts +12 -17
  468. package/src/testing/api.test.ts +129 -0
  469. package/src/testing/index.ts +3 -3
  470. package/src/testing/test-data.ts +189 -0
  471. package/src/testing/test-schema.ts +204 -0
  472. package/src/testing/util.ts +88 -0
  473. package/dist/lib/browser/chunk-HKFCK2GL.mjs +0 -175
  474. package/dist/lib/browser/chunk-HKFCK2GL.mjs.map +0 -7
  475. package/dist/lib/browser/chunk-MAAYELT7.mjs +0 -830
  476. package/dist/lib/browser/chunk-MAAYELT7.mjs.map +0 -7
  477. package/dist/lib/browser/chunk-MB6MMNFP.mjs +0 -3857
  478. package/dist/lib/browser/chunk-MB6MMNFP.mjs.map +0 -7
  479. package/dist/lib/browser/index.mjs +0 -35
  480. package/dist/lib/browser/internal/index.mjs +0 -332
  481. package/dist/lib/browser/meta.json +0 -1
  482. package/dist/lib/browser/query/index.mjs +0 -15
  483. package/dist/lib/browser/testing/index.mjs +0 -298
  484. package/dist/lib/browser/testing/index.mjs.map +0 -7
  485. package/dist/lib/node-esm/chunk-5NWDGIBT.mjs +0 -830
  486. package/dist/lib/node-esm/chunk-5NWDGIBT.mjs.map +0 -7
  487. package/dist/lib/node-esm/chunk-AUAH4E2J.mjs +0 -175
  488. package/dist/lib/node-esm/chunk-AUAH4E2J.mjs.map +0 -7
  489. package/dist/lib/node-esm/chunk-BQRA4VLX.mjs +0 -3857
  490. package/dist/lib/node-esm/chunk-BQRA4VLX.mjs.map +0 -7
  491. package/dist/lib/node-esm/index.mjs +0 -35
  492. package/dist/lib/node-esm/internal/index.mjs +0 -332
  493. package/dist/lib/node-esm/meta.json +0 -1
  494. package/dist/lib/node-esm/query/index.mjs +0 -15
  495. package/dist/lib/node-esm/testing/index.mjs +0 -298
  496. package/dist/lib/node-esm/testing/index.mjs.map +0 -7
  497. package/dist/types/src/errors.d.ts +0 -72
  498. package/dist/types/src/errors.d.ts.map +0 -1
  499. package/dist/types/src/internal/ast/annotation-helper.d.ts +0 -8
  500. package/dist/types/src/internal/ast/annotation-helper.d.ts.map +0 -1
  501. package/dist/types/src/internal/ast/annotations.d.ts +0 -125
  502. package/dist/types/src/internal/ast/annotations.d.ts.map +0 -1
  503. package/dist/types/src/internal/ast/annotations.test.d.ts.map +0 -1
  504. package/dist/types/src/internal/ast/entity-kind.d.ts +0 -10
  505. package/dist/types/src/internal/ast/entity-kind.d.ts.map +0 -1
  506. package/dist/types/src/internal/ast/index.d.ts +0 -5
  507. package/dist/types/src/internal/ast/index.d.ts.map +0 -1
  508. package/dist/types/src/internal/ast/types.d.ts +0 -6
  509. package/dist/types/src/internal/ast/types.d.ts.map +0 -1
  510. package/dist/types/src/internal/formats/date.d.ts.map +0 -1
  511. package/dist/types/src/internal/formats/date.test.d.ts.map +0 -1
  512. package/dist/types/src/internal/formats/format.d.ts.map +0 -1
  513. package/dist/types/src/internal/formats/format.test.d.ts.map +0 -1
  514. package/dist/types/src/internal/formats/index.d.ts.map +0 -1
  515. package/dist/types/src/internal/formats/number.d.ts.map +0 -1
  516. package/dist/types/src/internal/formats/object.d.ts.map +0 -1
  517. package/dist/types/src/internal/formats/select.d.ts.map +0 -1
  518. package/dist/types/src/internal/formats/string.d.ts.map +0 -1
  519. package/dist/types/src/internal/formats/types.d.ts.map +0 -1
  520. package/dist/types/src/internal/json/annotations.d.ts.map +0 -1
  521. package/dist/types/src/internal/json/effect-schema.test.d.ts.map +0 -1
  522. package/dist/types/src/internal/json/index.d.ts +0 -2
  523. package/dist/types/src/internal/json/index.d.ts.map +0 -1
  524. package/dist/types/src/internal/json/json-schema.d.ts.map +0 -1
  525. package/dist/types/src/internal/json/json-schema.test.d.ts.map +0 -1
  526. package/dist/types/src/internal/json-schema/index.d.ts +0 -3
  527. package/dist/types/src/internal/json-schema/index.d.ts.map +0 -1
  528. package/dist/types/src/internal/json-schema/json-schema-normalize.d.ts.map +0 -1
  529. package/dist/types/src/internal/json-schema/json-schema-type.d.ts.map +0 -1
  530. package/dist/types/src/internal/object/accessors.d.ts +0 -37
  531. package/dist/types/src/internal/object/accessors.d.ts.map +0 -1
  532. package/dist/types/src/internal/object/common.d.ts.map +0 -1
  533. package/dist/types/src/internal/object/create.d.ts.map +0 -1
  534. package/dist/types/src/internal/object/create.test.d.ts +0 -2
  535. package/dist/types/src/internal/object/create.test.d.ts.map +0 -1
  536. package/dist/types/src/internal/object/deleted.d.ts +0 -6
  537. package/dist/types/src/internal/object/deleted.d.ts.map +0 -1
  538. package/dist/types/src/internal/object/entity.d.ts +0 -33
  539. package/dist/types/src/internal/object/entity.d.ts.map +0 -1
  540. package/dist/types/src/internal/object/expando.d.ts +0 -14
  541. package/dist/types/src/internal/object/expando.d.ts.map +0 -1
  542. package/dist/types/src/internal/object/ids.d.ts +0 -6
  543. package/dist/types/src/internal/object/ids.d.ts.map +0 -1
  544. package/dist/types/src/internal/object/index.d.ts +0 -16
  545. package/dist/types/src/internal/object/index.d.ts.map +0 -1
  546. package/dist/types/src/internal/object/inspect.d.ts.map +0 -1
  547. package/dist/types/src/internal/object/json-serializer.d.ts +0 -32
  548. package/dist/types/src/internal/object/json-serializer.d.ts.map +0 -1
  549. package/dist/types/src/internal/object/json-serializer.test.d.ts.map +0 -1
  550. package/dist/types/src/internal/object/meta.d.ts +0 -31
  551. package/dist/types/src/internal/object/meta.d.ts.map +0 -1
  552. package/dist/types/src/internal/object/model.d.ts +0 -117
  553. package/dist/types/src/internal/object/model.d.ts.map +0 -1
  554. package/dist/types/src/internal/object/relation.d.ts +0 -17
  555. package/dist/types/src/internal/object/relation.d.ts.map +0 -1
  556. package/dist/types/src/internal/object/schema-validator.d.ts.map +0 -1
  557. package/dist/types/src/internal/object/schema-validator.test.d.ts.map +0 -1
  558. package/dist/types/src/internal/object/typed-object.d.ts +0 -31
  559. package/dist/types/src/internal/object/typed-object.d.ts.map +0 -1
  560. package/dist/types/src/internal/object/typed-object.test.d.ts.map +0 -1
  561. package/dist/types/src/internal/object/typename.d.ts +0 -15
  562. package/dist/types/src/internal/object/typename.d.ts.map +0 -1
  563. package/dist/types/src/internal/object/version.d.ts +0 -14
  564. package/dist/types/src/internal/object/version.d.ts.map +0 -1
  565. package/dist/types/src/internal/projection/compose.d.ts +0 -6
  566. package/dist/types/src/internal/projection/compose.d.ts.map +0 -1
  567. package/dist/types/src/internal/projection/compose.test.d.ts.map +0 -1
  568. package/dist/types/src/internal/projection/index.d.ts +0 -2
  569. package/dist/types/src/internal/projection/index.d.ts.map +0 -1
  570. package/dist/types/src/internal/proxy/handler.test.d.ts.map +0 -1
  571. package/dist/types/src/internal/proxy/reactive-object.d.ts +0 -15
  572. package/dist/types/src/internal/proxy/reactive-object.d.ts.map +0 -1
  573. package/dist/types/src/internal/proxy/schema.test.d.ts.map +0 -1
  574. package/dist/types/src/internal/proxy/typed-handler.d.ts +0 -44
  575. package/dist/types/src/internal/proxy/typed-handler.d.ts.map +0 -1
  576. package/dist/types/src/internal/proxy/typed-handler.test.d.ts.map +0 -1
  577. package/dist/types/src/internal/proxy/typed-object.test.d.ts.map +0 -1
  578. package/dist/types/src/internal/query/index.d.ts +0 -2
  579. package/dist/types/src/internal/query/index.d.ts.map +0 -1
  580. package/dist/types/src/internal/query/query.d.ts +0 -17
  581. package/dist/types/src/internal/query/query.d.ts.map +0 -1
  582. package/dist/types/src/internal/ref/index.d.ts.map +0 -1
  583. package/dist/types/src/internal/ref/ref-array.d.ts.map +0 -1
  584. package/dist/types/src/internal/ref/ref.d.ts.map +0 -1
  585. package/dist/types/src/internal/ref/ref.test.d.ts.map +0 -1
  586. package/dist/types/src/internal/schema/echo-schema.d.ts +0 -168
  587. package/dist/types/src/internal/schema/echo-schema.d.ts.map +0 -1
  588. package/dist/types/src/internal/schema/index.d.ts +0 -7
  589. package/dist/types/src/internal/schema/index.d.ts.map +0 -1
  590. package/dist/types/src/internal/schema/manipulation.d.ts.map +0 -1
  591. package/dist/types/src/internal/schema/runtime-schema-registry.d.ts +0 -18
  592. package/dist/types/src/internal/schema/runtime-schema-registry.d.ts.map +0 -1
  593. package/dist/types/src/internal/schema/snapshot.d.ts +0 -6
  594. package/dist/types/src/internal/schema/snapshot.d.ts.map +0 -1
  595. package/dist/types/src/internal/schema/stored-schema.d.ts +0 -13
  596. package/dist/types/src/internal/schema/stored-schema.d.ts.map +0 -1
  597. package/dist/types/src/internal/testing/index.d.ts +0 -3
  598. package/dist/types/src/internal/testing/index.d.ts.map +0 -1
  599. package/dist/types/src/internal/testing/types.d.ts +0 -455
  600. package/dist/types/src/internal/testing/types.d.ts.map +0 -1
  601. package/dist/types/src/internal/testing/utils.d.ts +0 -10
  602. package/dist/types/src/internal/testing/utils.d.ts.map +0 -1
  603. package/dist/types/src/internal/types/index.d.ts +0 -3
  604. package/dist/types/src/internal/types/index.d.ts.map +0 -1
  605. package/dist/types/src/internal/types/types.d.ts +0 -79
  606. package/dist/types/src/internal/types/types.d.ts.map +0 -1
  607. package/dist/types/src/internal/types/types.test.d.ts +0 -2
  608. package/dist/types/src/internal/types/types.test.d.ts.map +0 -1
  609. package/dist/types/src/internal/types/util.d.ts +0 -5
  610. package/dist/types/src/internal/types/util.d.ts.map +0 -1
  611. package/dist/types/src/query/index.d.ts +0 -3
  612. package/dist/types/src/query/index.d.ts.map +0 -1
  613. package/dist/types/src/query/query.d.ts +0 -248
  614. package/dist/types/src/query/query.d.ts.map +0 -1
  615. package/dist/types/src/query/query.test.d.ts +0 -2
  616. package/dist/types/src/query/query.test.d.ts.map +0 -1
  617. package/dist/types/src/query/tag.d.ts +0 -17
  618. package/dist/types/src/query/tag.d.ts.map +0 -1
  619. package/dist/types/src/testing/echo-schema.d.ts +0 -7
  620. package/dist/types/src/testing/echo-schema.d.ts.map +0 -1
  621. package/dist/types/src/testing/types.d.ts +0 -113
  622. package/dist/types/src/testing/types.d.ts.map +0 -1
  623. package/src/errors.ts +0 -18
  624. package/src/internal/ast/annotation-helper.ts +0 -22
  625. package/src/internal/ast/annotations.test.ts +0 -98
  626. package/src/internal/ast/annotations.ts +0 -219
  627. package/src/internal/ast/entity-kind.ts +0 -15
  628. package/src/internal/ast/index.ts +0 -8
  629. package/src/internal/ast/types.ts +0 -17
  630. package/src/internal/json/index.ts +0 -5
  631. package/src/internal/object/accessors.ts +0 -153
  632. package/src/internal/object/create.ts +0 -96
  633. package/src/internal/object/deleted.ts +0 -19
  634. package/src/internal/object/entity.ts +0 -248
  635. package/src/internal/object/expando.ts +0 -21
  636. package/src/internal/object/ids.ts +0 -12
  637. package/src/internal/object/index.ts +0 -19
  638. package/src/internal/object/json-serializer.test.ts +0 -99
  639. package/src/internal/object/json-serializer.ts +0 -225
  640. package/src/internal/object/meta.ts +0 -61
  641. package/src/internal/object/model.ts +0 -170
  642. package/src/internal/object/relation.ts +0 -24
  643. package/src/internal/object/typed-object.test.ts +0 -34
  644. package/src/internal/object/typed-object.ts +0 -88
  645. package/src/internal/object/typename.ts +0 -61
  646. package/src/internal/object/version.ts +0 -22
  647. package/src/internal/projection/index.ts +0 -5
  648. package/src/internal/proxy/handler.test.ts +0 -163
  649. package/src/internal/proxy/reactive-object.ts +0 -108
  650. package/src/internal/proxy/schema.test.ts +0 -136
  651. package/src/internal/proxy/typed-handler.test.ts +0 -102
  652. package/src/internal/proxy/typed-handler.ts +0 -228
  653. package/src/internal/proxy/typed-object.test.ts +0 -100
  654. package/src/internal/query/index.ts +0 -5
  655. package/src/internal/query/query.ts +0 -23
  656. package/src/internal/schema/echo-schema.ts +0 -383
  657. package/src/internal/schema/index.ts +0 -10
  658. package/src/internal/schema/runtime-schema-registry.ts +0 -78
  659. package/src/internal/schema/snapshot.ts +0 -25
  660. package/src/internal/schema/stored-schema.ts +0 -26
  661. package/src/internal/testing/types.ts +0 -211
  662. package/src/internal/testing/utils.ts +0 -54
  663. package/src/internal/types/index.ts +0 -6
  664. package/src/internal/types/types.test.ts +0 -48
  665. package/src/internal/types/types.ts +0 -176
  666. package/src/internal/types/util.ts +0 -9
  667. package/src/query/index.ts +0 -6
  668. package/src/query/query.test.ts +0 -401
  669. package/src/query/query.ts +0 -789
  670. package/src/test/api.test.ts +0 -180
  671. package/src/testing/echo-schema.ts +0 -39
  672. package/src/testing/types.ts +0 -91
  673. /package/dist/lib/{browser/index.mjs.map → neutral/Annotation.mjs.map} +0 -0
  674. /package/dist/lib/{browser/internal/index.mjs.map → neutral/Database.mjs.map} +0 -0
  675. /package/dist/lib/{browser/query/index.mjs.map → neutral/Entity.mjs.map} +0 -0
  676. /package/dist/lib/{node-esm/index.mjs.map → neutral/Err.mjs.map} +0 -0
  677. /package/dist/lib/{node-esm/internal/index.mjs.map → neutral/Extension.mjs.map} +0 -0
  678. /package/dist/lib/{node-esm/query/index.mjs.map → neutral/Feed.mjs.map} +0 -0
  679. /package/dist/types/src/internal/{ast → Annotation}/annotations.test.d.ts +0 -0
  680. /package/dist/types/src/internal/{formats → Format}/date.d.ts +0 -0
  681. /package/dist/types/src/internal/{formats → Format}/date.test.d.ts +0 -0
  682. /package/dist/types/src/internal/{formats → Format}/format.test.d.ts +0 -0
  683. /package/dist/types/src/internal/{formats → Format}/number.d.ts +0 -0
  684. /package/dist/types/src/internal/{formats → Format}/object.d.ts +0 -0
  685. /package/dist/types/src/internal/{json → JsonSchema}/effect-schema.test.d.ts +0 -0
  686. /package/dist/types/src/internal/{json-schema → JsonSchema}/json-schema-normalize.d.ts +0 -0
  687. /package/dist/types/src/internal/{json → JsonSchema}/json-schema.test.d.ts +0 -0
  688. /package/dist/types/src/internal/{object → Obj}/common.d.ts +0 -0
  689. /package/dist/types/src/internal/{object → Obj}/inspect.d.ts +0 -0
  690. /package/dist/types/src/internal/{object → Obj}/json-serializer.test.d.ts +0 -0
  691. /package/dist/types/src/internal/{object → Obj}/schema-validator.test.d.ts +0 -0
  692. /package/dist/types/src/internal/{object → Obj}/typed-object.test.d.ts +0 -0
  693. /package/dist/types/src/internal/{ref → Ref}/index.d.ts +0 -0
  694. /package/dist/types/src/internal/{ref → Ref}/ref.test.d.ts +0 -0
  695. /package/dist/types/src/internal/{projection → Type}/compose.test.d.ts +0 -0
  696. /package/dist/types/src/internal/{proxy → common/proxy}/handler.test.d.ts +0 -0
  697. /package/dist/types/src/internal/{object → common/proxy}/schema-validator.d.ts +0 -0
  698. /package/dist/types/src/internal/{proxy → common/proxy}/schema.test.d.ts +0 -0
  699. /package/dist/types/src/internal/{proxy → common/proxy}/typed-handler.test.d.ts +0 -0
  700. /package/dist/types/src/internal/{proxy → common/proxy}/typed-object.test.d.ts +0 -0
  701. /package/dist/types/src/{test → testing}/api.test.d.ts +0 -0
  702. /package/src/internal/{json → JsonSchema}/effect-schema.test.ts +0 -0
  703. /package/src/internal/{ref → Ref}/index.ts +0 -0
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/internal/index.ts", "../../../src/internal/common/types/base.ts", "../../../src/internal/common/types/meta.ts", "../../../src/internal/common/types/version.ts", "../../../src/internal/Annotation/sorting.ts", "../../../src/internal/common/api/meta.ts", "../../../src/internal/common/proxy/symbols.ts", "../../../src/internal/common/proxy/event-batch.ts", "../../../src/internal/common/proxy/change-context.ts", "../../../src/internal/common/proxy/define-hidden-property.ts", "../../../src/internal/common/proxy/errors.ts", "../../../src/internal/common/proxy/json-serializer.ts", "../../../src/internal/common/proxy/make-object.ts", "../../../src/internal/common/proxy/proxy-utils.ts", "../../../src/internal/common/proxy/typed-handler.ts", "../../../src/internal/common/proxy/ownership.ts", "../../../src/internal/common/proxy/proxy-types.ts", "../../../src/internal/common/proxy/reactive-array.ts", "../../../src/internal/common/proxy/schema-validator.ts", "../../../src/internal/common/proxy/reactive.ts", "../../../src/internal/Entity/entity.ts", "../../../src/internal/JsonSchema/json-schema-normalize.ts", "../../../src/internal/Entity/object.ts", "../../../src/internal/Entity/relation.ts", "../../../src/internal/Entity/type-kind.ts", "../../../src/internal/Entity/version.ts", "../../../src/internal/Obj/common.ts", "../../../src/internal/Obj/create-object.ts", "../../../src/internal/Obj/inspect.ts", "../../../src/internal/Obj/json-serializer.ts", "../../../src/internal/Obj/deleted.ts", "../../../src/internal/Obj/set-value.ts", "../../../src/internal/Obj/snapshot.ts", "../../../src/internal/Obj/clone.ts", "../../../src/internal/Query.ts", "../../../src/internal/Type/manipulation.ts", "../../../src/internal/Type/type-schema.ts"],
4
+ "sourcesContent": ["//\n// Copyright 2024 DXOS.org\n//\n\n// TODO(burdon): Import directly (not part of ECHO API).\nexport { JsonPath, JsonProp, getValue, splitJsonPath } from '@dxos/effect';\n\nexport * from './Annotation';\nexport * from './common';\nexport * from './Entity';\nexport * from './Format';\nexport * from './JsonSchema';\n// TODO(wittjosiah): Required to ensure types are portable (need to export all types required for downstream inference).\nexport * from './Obj';\nexport * from './Query';\nexport * from './Ref';\nexport * from './Type';\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport * as Schema from 'effect/Schema';\nimport * as SchemaAST from 'effect/SchemaAST';\n\nimport { type ObjectId } from '@dxos/keys';\n\nimport { type ATTR_META, type ObjectMeta } from './meta';\n\n/**\n * Base type for all data objects (reactive, ECHO, and other raw objects).\n * NOTE: This describes the base type for all database objects.\n * It is stricter than `T extends {}` or `T extends object`.\n */\n// TODO(burdon): Prefer Record<string, unknown>.\nexport type AnyProperties = Record<string, any>;\n\n/**\n * Canonical type for all ECHO entities (objects and relations).\n * @depreacted Remove, use Entity.Unknown instead.\n */\n// TODO(wittjosiah): Remove. Prefer higher level types (e.g. Entity.Unknown).\nexport interface AnyEntity {\n readonly id: ObjectId;\n}\n\nexport type ExcludeId<T extends AnyProperties> = Omit<T, 'id'>;\n\nexport type PropertyKey<T extends AnyProperties> = Extract<keyof ExcludeId<T>, string>;\n\n// TODO(dmaretskyi): Remove. This should be using the symbol type.\ntype WithMeta = { [ATTR_META]?: ObjectMeta };\n\n/**\n * The raw object should not include the ECHO id, but may include metadata.\n */\nexport const RawObject = <S extends Schema.Schema.AnyNoContext>(\n schema: S,\n): Schema.Schema<ExcludeId<Schema.Schema.Type<S>> & WithMeta, Schema.Schema.Encoded<S>> => {\n return Schema.make(SchemaAST.omit(schema.ast, ['id']));\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport * as Schema from 'effect/Schema';\n\nimport { ForeignKey } from '@dxos/echo-protocol';\nimport { invariant } from '@dxos/invariant';\nimport { type Comparator, intersection } from '@dxos/util';\n\nimport type * as Entity from '../../../Entity';\nimport { type AnyProperties } from './base';\n\n/**\n * Property name for meta when object is serialized to JSON.\n */\nexport const ATTR_META = '@meta';\n\n/**\n * Metadata section.\n */\nexport const MetaId: Entity.Meta = Symbol.for('@dxos/echo/Meta') as any;\n\n//\n// ObjectMeta\n//\n\n// TODO(dmaretskyi): Rename to ObjectMeta\nexport const ObjectMetaSchema = Schema.Struct({\n keys: Schema.Array(ForeignKey),\n\n /**\n * A set of tags.\n * Tags are arbitrary application-defined strings.\n * ECHO makes no assumptions about the tag structure.\n */\n // TODO(dmaretskyi): Has to be optional for compatibility with old data.\n // Defaulting to an empty array is possible but requires a bit more work.\n // TODO(dmaretskyi): In automerge this should be a map of { [tag]: boolean } for uniqueness and conflict resolution.\n tags: Schema.optional(Schema.Array(Schema.String)),\n\n /**\n * Fully-qualified registry key for the object (FQN format, e.g. `org.example.type.foo`).\n * Identifies the canonical registry entry the object instance was created from.\n */\n key: Schema.optional(Schema.String),\n\n /**\n * Semantic version of the registry entry the object was created from.\n * Must be a valid semver string (e.g. `1.2.3`).\n */\n version: Schema.optional(Schema.String),\n});\n\nexport type ObjectMeta = Schema.Schema.Type<typeof ObjectMetaSchema>;\n\n/*\n * Get metadata from object.\n * Only callable on the object root.\n *\n * @internal (use Obj.getMeta or Relation.getMeta)\n */\n// TODO(burdon): Refine type to BaseObj.\nexport const getMeta = (obj: AnyProperties): ObjectMeta => {\n const metadata = (obj as any)[MetaId];\n invariant(metadata, 'ObjectMeta not found.');\n return metadata;\n};\n\n//\n// Foreign keys\n//\n\nexport const foreignKey = (source: string, id: string): ForeignKey => ({ source, id });\nexport const foreignKeyEquals = (a: ForeignKey, b: ForeignKey) => a.source === b.source && a.id === b.id;\n\n// TODO(dmaretskyi): Move to echo-schema.\nexport const compareForeignKeys: Comparator<AnyProperties> = (a: AnyProperties, b: AnyProperties) =>\n intersection(getMeta(a).keys, getMeta(b).keys, foreignKeyEquals).length > 0;\n", "//\n// Copyright 2025 DXOS.org\n//\n\n/**\n * Version type identifier.\n */\nexport const VersionTypeId = '~@dxos/echo/VersionTypeId' as const;\nexport type VersionTypeId = typeof VersionTypeId;\n\n/**\n * Represents the object version.\n * May be backed by Automerge.\n * Objects with no history are not versioned.\n */\nexport interface Version {\n [VersionTypeId]: {};\n automergeHeads?: string[];\n}\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport type { AnyEntity } from '../common/types';\nimport { getLabel, getTypename } from './annotations';\n\n/**\n * String comparison helper for sorting.\n */\nexport const compare = (a?: string, b?: string): number => {\n if (a == null) {\n return b == null ? 0 : 1;\n }\n if (b == null) {\n return -1;\n }\n return a.localeCompare(b);\n};\n\n/**\n * Comparator function type for sorting entities.\n * Accepts both reactive entities and snapshots.\n */\nexport type Comparator<T extends AnyEntity = AnyEntity> = (a: T, b: T) => number;\n\n/**\n * Sort entities by label.\n */\nexport const sortByLabel: Comparator = (a: AnyEntity, b: AnyEntity) => compare(getLabel(a), getLabel(b));\n\n/**\n * Sort entities by typename.\n */\nexport const sortByTypename: Comparator = (a: AnyEntity, b: AnyEntity) => compare(getTypename(a), getTypename(b));\n\n/**\n * Compose multiple comparators into one.\n * Applies comparators in order until one returns non-zero.\n */\nexport const sort = <T extends AnyEntity>(...comparators: Comparator<T>[]): Comparator<T> => {\n return (a: T, b: T) => {\n for (const comparator of comparators) {\n const result = comparator(a, b);\n if (result !== 0) {\n return result;\n }\n }\n return 0;\n };\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport type { ForeignKey } from '@dxos/echo-protocol';\nimport { assertArgument, invariant } from '@dxos/invariant';\nimport type { DeepReadonly } from '@dxos/util';\n\nimport { type Mutable } from '../proxy';\nimport { type AnyProperties, type ObjectMeta, getMeta as getMeta$ } from '../types';\n\n/**\n * Deeply read-only version of ObjectMeta.\n */\nexport type ReadonlyMeta = DeepReadonly<ObjectMeta>;\n\n/**\n * Mutable meta type received in meta mutation callbacks.\n */\nexport type Meta = Mutable<ObjectMeta>;\n\n/**\n * Get the metadata for an entity with validation.\n * Returns mutable meta when passed a mutable entity (inside change callback).\n * Returns read-only meta when passed a regular entity or snapshot.\n *\n * TODO(burdon): When passed a Snapshot, should return a snapshot of meta, not the live meta proxy.\n */\nexport function getMetaChecked(entity: Mutable<AnyProperties>): Meta;\nexport function getMetaChecked(entity: AnyProperties): ReadonlyMeta;\nexport function getMetaChecked(entity: AnyProperties): Meta | ReadonlyMeta {\n assertArgument(entity, 'entity', 'Should be an entity.');\n const meta = getMeta$(entity);\n invariant(meta != null, 'Invalid entity.');\n return meta;\n}\n\n/**\n * @returns Foreign keys for the entity from the specified source.\n * Accepts both reactive entities and snapshots.\n */\nexport const getKeys = (entity: AnyProperties, source: string): ForeignKey[] => {\n assertArgument(entity, 'entity', 'Should be an entity.');\n const meta = getMetaChecked(entity);\n invariant(meta != null, 'Invalid entity.');\n return meta.keys.filter((key) => key.source === source);\n};\n\n/**\n * Delete all keys from the entity for the specified source.\n * Must be called within an Obj.update or Relation.update callback.\n */\nexport const deleteKeys = (entity: Mutable<AnyProperties>, source: string) => {\n const meta = getMetaChecked(entity);\n for (let i = 0; i < meta.keys.length; i++) {\n if (meta.keys[i].source === source) {\n meta.keys.splice(i, 1);\n i--;\n }\n }\n};\n\n/**\n * Add a tag to the entity.\n * Must be called within an Obj.update or Relation.update callback.\n */\nexport const addTag = (entity: Mutable<AnyProperties>, tag: string) => {\n const meta = getMetaChecked(entity);\n meta.tags ??= [];\n meta.tags.push(tag);\n};\n\n/**\n * Remove a tag from the entity.\n * Must be called within an Obj.update or Relation.update callback.\n */\nexport const removeTag = (entity: Mutable<AnyProperties>, tag: string) => {\n const meta = getMetaChecked(entity);\n if (!meta.tags) {\n return;\n }\n for (let i = 0; i < meta.tags.length; i++) {\n if (meta.tags[i] === tag) {\n meta.tags.splice(i, 1);\n i--;\n }\n }\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\n// TODO(dmaretskyi): Rename all symbols that are props to end with *Key.\nexport const EventId = Symbol.for('@dxos/live-object/EventId');\nexport const ChangeId = Symbol.for('@dxos/live-object/ChangeId');\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { EventId } from './symbols';\n\n/**\n * Simple batching mechanism for EventId emissions.\n * When batch depth > 0, events are collected instead of emitted immediately.\n * When batch depth returns to 0, pending events are emitted.\n */\nlet eventBatchDepth = 0;\nconst pendingEventTargets = new Set<object>();\n\n/**\n * Run a callback in a batched context for EventId emissions.\n * Multiple mutations within the batch will only emit one event per target.\n */\nexport const batchEvents = (callback: () => void): void => {\n eventBatchDepth++;\n try {\n callback();\n } finally {\n eventBatchDepth--;\n if (eventBatchDepth === 0) {\n // Emit pending events.\n for (const target of pendingEventTargets) {\n (target as any)[EventId]?.emit();\n }\n pendingEventTargets.clear();\n }\n }\n};\n\n/**\n * Emit an event on a target, respecting batching.\n */\nexport const emitEvent = (target: object): void => {\n if (eventBatchDepth > 0) {\n pendingEventTargets.add(target);\n } else {\n (target as any)[EventId]?.emit();\n }\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { batchEvents } from './event-batch';\nimport { EventId } from './symbols';\n\n/**\n * Generic change context tracking.\n * Only one object can be in a change context at a time (synchronous changes).\n *\n * This module provides a unified change context mechanism used by both:\n * - TypedReactiveHandler (for non-database objects, using target as key)\n * - EchoReactiveHandler (for database objects, using ObjectCore as key)\n */\n\n/**\n * The object currently in a change context.\n * Can be a target object (for typed reactive) or ObjectCore (for database objects).\n */\nlet currentChangeContext: object | null = null;\n\n/**\n * The primary object that has pending notifications, if any.\n * This uses the contextKey (target or ObjectCore).\n */\nlet pendingNotificationKey: object | null = null;\n\n/**\n * Additional objects (owner chain) that need notifications.\n * These are separate from the primary notification because they use EventId directly.\n */\nconst pendingOwnerNotifications = new Set<object>();\n\n/**\n * Enter a change context for the given key.\n * While in a change context, mutations are allowed on the associated object.\n * Nested Obj.update calls are not supported.\n *\n * @param key - The key to enter the change context for (target object or ObjectCore).\n * @returns A cleanup function that exits the change context.\n */\nexport const enterChangeContext = (key: object): (() => void) => {\n currentChangeContext = key;\n return () => {\n currentChangeContext = null;\n };\n};\n\n/**\n * Check if the given key is currently in a change context.\n *\n * @param key - The key to check (target object or ObjectCore).\n * @returns True if the key is in a change context, false otherwise.\n */\nexport const isInChangeContext = (key: object): boolean => {\n return currentChangeContext === key;\n};\n\n/**\n * Queue a notification for the given key to be fired when the change context exits.\n *\n * @param key - The key to queue a notification for.\n */\nexport const queueNotification = (key: object): void => {\n if (currentChangeContext === key) {\n pendingNotificationKey = key;\n }\n};\n\n/**\n * Queue an owner notification. Owner notifications are for objects in the ownership\n * chain that should be notified when a nested object changes.\n * These objects have EventId and emit directly.\n * Skip if the target is already the current change context (to avoid duplicate notifications).\n *\n * @param target - The owner target that has EventId.\n */\nexport const queueOwnerNotification = (target: object): void => {\n // Skip if this is the object already being changed (primary notification handles it).\n if (currentChangeContext !== null && target !== currentChangeContext) {\n pendingOwnerNotifications.add(target);\n }\n};\n\n/**\n * Check if there are any pending notifications for the given key.\n *\n * @param key - The key to check.\n * @returns True if there are pending notifications, false otherwise.\n */\nexport const hasPendingNotifications = (key: object): boolean => {\n return pendingNotificationKey === key;\n};\n\n/**\n * Clear any pending notifications for the given key.\n *\n * @param key - The key to clear notifications for.\n */\nexport const clearPendingNotifications = (key: object): void => {\n if (pendingNotificationKey === key) {\n pendingNotificationKey = null;\n }\n};\n\n/**\n * Execute a callback within a change context.\n * This is the shared implementation used by both TypedReactiveHandler and EchoReactiveHandler.\n *\n * @param contextKey - The key for the change context (target for typed, ObjectCore for db).\n * @param eventTarget - The object that has the EventId for notifications.\n * @param proxy - The proxy object to pass to the callback.\n * @param callback - The callback to execute with mutations allowed.\n */\nexport const executeChange = (\n contextKey: object,\n eventTarget: object,\n proxy: any,\n callback: (proxy: any) => void,\n): void => {\n const exitContext = enterChangeContext(contextKey);\n try {\n batchEvents(() => callback(proxy));\n } finally {\n exitContext();\n // Fire primary notification.\n if (hasPendingNotifications(contextKey)) {\n clearPendingNotifications(contextKey);\n (eventTarget as any)[EventId]?.emit();\n }\n // Fire owner chain notifications.\n for (const ownerTarget of pendingOwnerNotifications) {\n (ownerTarget as any)[EventId]?.emit();\n }\n pendingOwnerNotifications.clear();\n }\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\n/**\n * Define a non-enumerable property on an object.\n */\nexport const defineHiddenProperty = (object: any, key: string | symbol, value: any) => {\n Object.defineProperty(object, key, {\n enumerable: false,\n configurable: true,\n value,\n });\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\n/**\n * Error thrown when attempting to mutate an object outside of an Obj.update() context.\n */\nexport class MutationOutsideChangeContextError extends Error {\n constructor(operation: string, suggestion: string) {\n super(\n `Cannot ${operation} outside of Obj.update(). Use Obj.update(obj, (mutableObj) => { ${suggestion} }) instead.`,\n );\n this.name = 'MutationOutsideChangeContextError';\n }\n}\n\n/**\n * Create an error for attempting to set a property outside of a change context.\n */\nexport const createPropertySetError = (prop: string | symbol): MutationOutsideChangeContextError => {\n return new MutationOutsideChangeContextError(\n `modify object property \"${String(prop)}\"`,\n `mutableObj.${String(prop)} = value;`,\n );\n};\n\n/**\n * Create an error for attempting to delete a property outside of a change context.\n */\nexport const createPropertyDeleteError = (prop: string | symbol): MutationOutsideChangeContextError => {\n return new MutationOutsideChangeContextError(\n `delete object property \"${String(prop)}\"`,\n `delete mutableObj.${String(prop)};`,\n );\n};\n\n/**\n * Create an error for attempting to call an array method outside of a change context.\n */\nexport const createArrayMethodError = (method: string): MutationOutsideChangeContextError => {\n return new MutationOutsideChangeContextError(`call array.${method}()`, `mutableObj.array.${method}(...);`);\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { type ObjectMeta } from '@dxos/echo-protocol';\nimport { invariant } from '@dxos/invariant';\nimport { EchoURI } from '@dxos/keys';\nimport { deepMapValues, encodeUint8ArrayToJson } from '@dxos/util';\n\nimport { Ref } from '../../Ref';\nimport {\n ATTR_META,\n ATTR_RELATION_SOURCE,\n ATTR_RELATION_TARGET,\n ATTR_SELF_URI,\n ATTR_TYPE,\n MetaId,\n RelationSourceDXNId,\n RelationTargetDXNId,\n SelfURIId,\n TypeId,\n} from '../types';\n\n/**\n * Attaches a toJSON method to the object for typed serialization.\n */\nexport const attachTypedJsonSerializer = (obj: any) => {\n const descriptor = Object.getOwnPropertyDescriptor(obj, 'toJSON');\n if (descriptor) {\n return;\n }\n\n Object.defineProperty(obj, 'toJSON', {\n value: typedJsonSerializer,\n writable: false,\n enumerable: false,\n // Setting `configurable` to false breaks proxy invariants, should be fixable.\n configurable: true,\n });\n};\n\n// NOTE: KEEP as function.\n// Exported for use in objectToJSON.\nexport const typedJsonSerializer = function (this: any) {\n const { id, ...rest } = this;\n const result: any = {\n id,\n };\n\n if (this[TypeId]) {\n result[ATTR_TYPE] = this[TypeId];\n }\n\n if (this[MetaId]) {\n result[ATTR_META] = serializeMeta(this[MetaId]);\n }\n\n if (this[SelfURIId]) {\n result[ATTR_SELF_URI] = this[SelfURIId];\n }\n\n if (this[RelationSourceDXNId]) {\n const sourceDXN = this[RelationSourceDXNId];\n invariant(EchoURI.isEchoURI(sourceDXN));\n result[ATTR_RELATION_SOURCE] = sourceDXN;\n }\n if (this[RelationTargetDXNId]) {\n const targetDXN = this[RelationTargetDXNId];\n invariant(EchoURI.isEchoURI(targetDXN));\n result[ATTR_RELATION_TARGET] = targetDXN;\n }\n\n Object.assign(result, serializeData(rest));\n return result;\n};\n\nconst serializeData = (data: unknown) => {\n return deepMapValues(data, (value, recurse) => {\n if (Ref.isRef(value)) {\n // TODO(dmaretskyi): Should this be configurable?\n return value.noInline().encode();\n }\n if (value instanceof Uint8Array) {\n return encodeUint8ArrayToJson(value);\n }\n\n return recurse(value);\n });\n};\n\nconst serializeMeta = (meta: ObjectMeta) => {\n return deepMapValues(meta, (value, recurse) => recurse(value));\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport type * as Schema from 'effect/Schema';\n\nimport { ObjectId } from '@dxos/keys';\n\nimport { getTypeAnnotation } from '../../Annotation';\nimport {\n type AnyProperties,\n KindId,\n MetaId,\n type ObjectMeta,\n ObjectMetaSchema,\n ParentId,\n SchemaKindId,\n StaticTypeSchemaSlot,\n} from '../types';\nimport { defineHiddenProperty } from './define-hidden-property';\nimport { attachTypedJsonSerializer } from './json-serializer';\nimport { createProxy, getProxyTarget, isValidProxyTarget } from './proxy-utils';\nimport { TypeSource, TypedReactiveHandler, prepareTypedTarget, setMetaOwner } from './typed-handler';\n\n/**\n *\n */\n// TODO(burdon): Make internal\n// Omits the brand slots — those get stamped on the instance by the entity\n// handler (KindId via setKind, SchemaKindId derived in the proxy `get` trap\n// from kind + jsonSchema.entityKind, StaticTypeSchemaSlot lazily via the\n// proxy), not supplied by the caller.\nexport type MakeObjectProps<T extends AnyProperties> = Omit<T, 'id' | KindId | SchemaKindId | StaticTypeSchemaSlot>;\n\n/**\n * Creates a reactive object from a plain Javascript object.\n * Requires a TS-effect schema.\n *\n * Callers that have a `Type.Type` entity (not a raw schema) must unwrap it\n * themselves — `Obj.make` / `Relation.make` do this via `Type.getSchema(...)`\n * and pass the entity through as `typeSource` so the instance carries a\n * back-reference for `Obj.getType` and resolves the live source schema\n * uniformly via the entity's `[StaticTypeSchemaSlot]`.\n */\n// TODO(burdon): Make internal\n// TODO(dmaretskyi): Deep mutability.\n// TODO(dmaretskyi): Invert generics (generic over schema) to have better error messages.\n// TODO(dmaretskyi): Could mutate original object making it unusable.\nexport const makeObject = <T extends AnyProperties>(\n schema: Schema.Schema<T, any, never>,\n obj: NoInfer<MakeObjectProps<T>>,\n meta?: ObjectMeta,\n typeSource?: TypeSource,\n): T => {\n // Use Object.assign to copy symbol properties (like ParentId) that spread operator doesn't copy.\n return createReactiveObject<T>(Object.assign({}, obj) as T, meta, schema as Schema.Schema<T, any>, typeSource);\n};\n\nconst createReactiveObject = <T extends AnyProperties>(\n obj: T,\n meta?: ObjectMeta,\n schema?: Schema.Schema<T>,\n typeSource?: TypeSource,\n): T => {\n if (!isValidProxyTarget(obj)) {\n throw new Error('Value cannot be made into a reactive object.');\n }\n\n if (!schema) {\n throw new Error('Schema is required for reactive objects. Use Atom for untyped reactive state.');\n }\n\n // Extract parent from props (can be set via [Obj.Parent]).\n const parent = (obj as any)[ParentId];\n if (parent !== undefined) {\n delete (obj as any)[ParentId];\n }\n\n const annotation = getTypeAnnotation(schema);\n if (annotation) {\n setIdOnTarget(obj);\n defineHiddenProperty(obj, KindId, annotation.kind);\n }\n initMeta(obj, meta);\n if (parent !== undefined) {\n defineHiddenProperty(obj, ParentId, parent);\n }\n prepareTypedTarget(obj, schema, typeSource);\n attachTypedJsonSerializer(obj);\n const proxy = createProxy<T>(obj, TypedReactiveHandler.instance);\n\n // Set meta's owner to the main object so meta mutations respect the parent's change context.\n // For non-database objects using TypedReactiveHandler, this links the meta to the main object's\n // change context. For database objects, meta is handled by EchoReactiveHandler.getMeta().\n const metaProxy = (obj as any)[MetaId];\n if (metaProxy) {\n const metaTarget = getProxyTarget(metaProxy);\n if (metaTarget) {\n setMetaOwner(metaTarget, obj);\n }\n }\n\n return proxy;\n};\n\n/**\n * Set ID on ECHO object targets during creation.\n * Used for objects with schema and the ones explicitly marked as Expando.\n */\nconst setIdOnTarget = (target: any) => {\n // invariant(!('id' in target), 'Object already has an `id` field, which is reserved.');\n if ('id' in target && target.id !== undefined && target.id !== null) {\n if (!ObjectId.isValid(target.id)) {\n throw new Error('Invalid object id format.');\n }\n } else {\n target.id = ObjectId.random();\n }\n};\n\n/**\n * Set metadata on object.\n */\n// TODO(dmaretskyi): Move to echo-schema.\nconst initMeta = <T>(obj: T, meta: ObjectMeta = { keys: [] }) => {\n prepareTypedTarget(meta, ObjectMetaSchema);\n defineHiddenProperty(obj, MetaId, createProxy(meta, TypedReactiveHandler.instance as any));\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { invariant } from '@dxos/invariant';\n\nimport { type ReactiveHandler } from './proxy-types';\n\nexport const symbolIsProxy = Symbol.for('@dxos/schema/Proxy');\n\n/**\n * Internal api.\n */\nexport const isProxy = (value: unknown) => !!(value as any)?.[symbolIsProxy];\n\nexport const isValidProxyTarget = (value: any): value is object => {\n if (value == null || value[symbolIsProxy]) {\n return false;\n }\n if (Array.isArray(value)) {\n return true;\n }\n\n return typeof value === 'object' && Object.getPrototypeOf(value) === Object.prototype;\n};\n\n/**\n * @deprecated\n */\nexport const getProxySlot = <T extends object>(proxy: any): ProxyHandlerSlot<T> => {\n const value = (proxy as any)[symbolIsProxy];\n invariant(value instanceof ProxyHandlerSlot);\n return value;\n};\n\nexport const getProxyTarget = <T extends object>(proxy: any): T => {\n return getProxySlot<T>(proxy).target;\n};\n\nexport const getProxyHandler = <T extends object>(proxy: any): ReactiveHandler<T> => {\n return getProxySlot<T>(proxy).handler;\n};\n\n/**\n * Unsafe method to override id for debugging/testing and migration purposes.\n * @deprecated\n */\nexport const dangerouslySetProxyId = <T>(obj: T, id: string) => {\n (getProxySlot(obj).target as any).id = id;\n};\n\n/**\n * Create a reactive proxy object.\n * https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Proxy\n *\n * @param target Object or array. Passing in array will enable array methods.\n * @param handler ReactiveHandler instance.\n */\n// TODO(burdon): Document.\n// TODO(burdon): Tests for low-level functions.\nexport const createProxy = <T extends object>(target: T, handler: ReactiveHandler<T>): T => {\n const existingProxy = handler._proxyMap.get(target);\n if (existingProxy) {\n return existingProxy;\n }\n\n // TODO(dmaretskyi): In the future this should be mutable to allow replacing the handler on-the-fly while maintaining the proxy identity.\n const proxy = new Proxy(target, new ProxyHandlerSlot<T>(target, handler));\n handler.init(target);\n\n // TODO(dmaretskyi): Check if this will actually work; maybe a global WeakMap is better?\n handler._proxyMap.set(target, proxy);\n return proxy;\n};\n\n/**\n * Passed as the handler to the Proxy constructor.\n * Maintains a mutable slot for the actual handler.\n */\nclass ProxyHandlerSlot<T extends object> implements ProxyHandler<T> {\n /**\n * @param target Original object.\n * @param _handler Handles intercepted operations.\n */\n constructor(\n readonly target: T,\n private _handler: ReactiveHandler<T>,\n ) {}\n\n get handler() {\n invariant(this._handler);\n return this._handler;\n }\n\n // TODO(burdon): Requires comment.\n setHandler(handler: ReactiveHandler<T>): void {\n this._handler = handler;\n }\n\n /**\n * Get value.\n */\n get(target: T, prop: string | symbol, receiver: any): any {\n if (prop === symbolIsProxy) {\n return this;\n }\n\n if (!this._handler || !this._handler.get) {\n return Reflect.get(target, prop, receiver);\n }\n\n return this._handler.get(target, prop, receiver);\n }\n\n static {\n const TRAPS: (keyof ProxyHandler<any>)[] = [\n 'apply',\n 'construct',\n 'defineProperty',\n 'deleteProperty',\n 'get',\n 'getOwnPropertyDescriptor',\n 'getPrototypeOf',\n 'has',\n 'isExtensible',\n 'ownKeys',\n 'preventExtensions',\n 'set',\n 'setPrototypeOf',\n ];\n\n for (const trap of TRAPS) {\n if (trap === 'get') {\n continue;\n }\n\n Object.defineProperty(this.prototype, trap, {\n enumerable: false,\n value: function (this: ProxyHandlerSlot<any>, ...args: any[]) {\n // log.info('trap', { trap, args });\n if (!this._handler || !this._handler[trap]) {\n return (Reflect[trap] as Function)(...args);\n }\n\n return (this._handler[trap] as Function).apply(this._handler, args);\n },\n });\n }\n }\n}\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport * as Schema from 'effect/Schema';\nimport * as SchemaAST from 'effect/SchemaAST';\nimport { type InspectOptionsStylized } from 'node:util';\n\nimport { Event } from '@dxos/async';\nimport { inspectCustom } from '@dxos/debug';\nimport { invariant } from '@dxos/invariant';\n\nimport { getSchemaURI } from '../../Annotation';\nimport { toEffectSchema } from '../../JsonSchema/json-schema';\nimport { ObjectDeletedId, ParentId, SchemaId, StaticTypeSchemaSlot, TypeEntityId, TypeId } from '../types';\nimport { executeChange, isInChangeContext, queueNotification } from './change-context';\nimport { defineHiddenProperty } from './define-hidden-property';\nimport { createPropertyDeleteError } from './errors';\nimport { batchEvents } from './event-batch';\nimport {\n getEchoRoot,\n getOwner,\n getRawTarget,\n hasForeignOwner,\n notifyOwnerChain,\n setOwnerRecursive,\n wouldCreateCycle,\n} from './ownership';\nimport { type ReactiveHandler, objectData } from './proxy-types';\nimport { createProxy, isProxy, isValidProxyTarget, symbolIsProxy } from './proxy-utils';\nimport { ReactiveArray } from './reactive-array';\nimport { SchemaValidator } from './schema-validator';\nimport { ChangeId, EventId } from './symbols';\n\n// Re-export for external consumers.\nexport { getEchoRoot, setMetaOwner } from './ownership';\n\ntype ProxyTarget = {\n /**\n * Typename or type DXN.\n */\n [TypeId]: string;\n\n /**\n * Schema for the root.\n */\n [SchemaId]: Schema.Schema.AnyNoContext;\n [ParentId]?: any;\n\n /**\n * For modifications.\n */\n [EventId]: Event<void>;\n} & ({ [key: keyof any]: any } | any[]);\n\n/**\n * Deep copy a value, handling arrays and nested objects.\n * Preserves ReactiveArray type and hidden properties (SchemaId, TypeId).\n * Does not copy class instances or functions (except ReactiveArray).\n *\n * Note: Cannot use structuredClone because we need to:\n * - Unwrap proxies\n * - Preserve ReactiveArray instances\n * - Copy Symbol-keyed hidden properties (SchemaId, TypeId)\n * - Convert plain arrays to ReactiveArray\n *\n * Performance: O(n) where n is the total number of nested objects/arrays.\n * For large structures, consider using Refs for frequently reassigned subtrees.\n */\nconst deepCopy = <T>(value: T, visited = new Map<object, object>()): T => {\n if (value == null || typeof value !== 'object') {\n return value;\n }\n\n // Handle proxies - get the underlying target.\n const actualValue = getRawTarget(value);\n\n // Check for circular references in the copy.\n if (visited.has(actualValue)) {\n return visited.get(actualValue) as T;\n }\n\n // Handle ReactiveArray specially to preserve reactivity.\n if (actualValue instanceof ReactiveArray) {\n const copy = new ReactiveArray<any>();\n visited.set(actualValue, copy);\n for (const item of actualValue) {\n copy.push(deepCopy(item, visited));\n }\n // Copy hidden properties.\n copyHiddenProperties(actualValue, copy);\n return copy as T;\n }\n\n // Don't copy other class instances (objects with non-Object prototype).\n const proto = Object.getPrototypeOf(actualValue);\n if (proto !== Object.prototype && proto !== Array.prototype && proto !== null) {\n return value; // Return as-is, don't copy class instances.\n }\n\n if (Array.isArray(actualValue)) {\n // Plain arrays become ReactiveArrays.\n const copy = new ReactiveArray<any>();\n visited.set(actualValue, copy);\n for (const item of actualValue) {\n copy.push(deepCopy(item, visited));\n }\n return copy as T;\n }\n\n const copy: Record<string, any> = {};\n visited.set(actualValue, copy);\n for (const key of Object.keys(actualValue)) {\n copy[key] = deepCopy((actualValue as any)[key], visited);\n }\n // Copy hidden properties (SchemaId, TypeId).\n copyHiddenProperties(actualValue, copy);\n return copy as T;\n};\n\n/**\n * Copy hidden properties (SchemaId, TypeId) from source to target.\n */\nconst copyHiddenProperties = (source: any, target: any): void => {\n if (SchemaId in source) {\n defineHiddenProperty(target, SchemaId, source[SchemaId]);\n }\n if (TypeId in source) {\n defineHiddenProperty(target, TypeId, source[TypeId]);\n }\n};\n\n/**\n * Typed in-memory reactive store (with Schema).\n * Reactivity is based on Event subscriptions, not signals.\n */\nexport class TypedReactiveHandler implements ReactiveHandler<ProxyTarget> {\n public static readonly instance: ReactiveHandler<any> = new TypedReactiveHandler();\n\n readonly _proxyMap = new WeakMap<object, any>();\n private _inSet = false;\n\n private constructor() {}\n\n init(target: ProxyTarget): void {\n invariant(typeof target === 'object' && target !== null);\n invariant(SchemaId in target, 'Schema is not defined for the target');\n\n // Only set EventId on root objects (those without an owner).\n // Nested objects share their root's EventId for centralized reactivity.\n const hasOwner = !!getOwner(target);\n if (!(EventId in target) && !hasOwner) {\n defineHiddenProperty(target, EventId, new Event());\n }\n\n defineHiddenProperty(target, ObjectDeletedId, false);\n\n // Mark root objects as having a change handler.\n // The actual handler is returned dynamically in get() to have access to the proxy.\n if (!hasOwner && !(ChangeId in target)) {\n defineHiddenProperty(target, ChangeId, true);\n }\n\n // Only set owners if this is a root object (no existing owner).\n // Nested objects already have owners set by their root's initialization.\n // If we re-set owners here for nested objects, we'd incorrectly point\n // array elements to the array instead of the true root ECHO object.\n if (!hasOwner) {\n // Set owner on all nested objects to this root ECHO object.\n // All nested records point directly to this root for centralized reactivity.\n for (const key in target) {\n if ((target as any)[symbolIsProxy]) {\n continue;\n }\n let value = (target as any)[key];\n if (isValidProxyTarget(value) || isProxy(value)) {\n // Deep copy values that have foreign owners (owned by a different object,\n // or are root ECHO objects whose nested structures would be owned by them).\n // This recursively checks all nested objects.\n if (hasForeignOwner(value, target)) {\n value = deepCopy(value);\n (target as any)[key] = value;\n }\n setOwnerRecursive(value, target);\n }\n }\n }\n\n // Maybe have been set by `create`.\n Object.defineProperty(target, inspectCustom, {\n enumerable: false,\n configurable: true,\n value: this._inspect.bind(target),\n });\n }\n\n get(target: ProxyTarget, prop: string | symbol, receiver: any): any {\n switch (prop) {\n // TODO(burdon): Remove?\n case objectData: {\n return toJSON(target);\n }\n case ChangeId: {\n // Return change handler only for root objects that have been marked with ChangeId.\n if ((target as any)[ChangeId] !== true) {\n return undefined;\n }\n // Return a function that allows mutations within a controlled context.\n // Uses target as both the context key and event target for non-database objects.\n return (callback: (obj: any) => void) => executeChange(target, target, receiver, callback);\n }\n case TypeEntityId: {\n // The back-reference to the type entity is metadata — return the raw\n // value so we don't re-wrap an already-reactive `Type.Type` entity in\n // another proxy (which would fail the SchemaId-in-target invariant).\n return Reflect.get(target, prop, receiver);\n }\n case StaticTypeSchemaSlot: {\n // Lazily rebuild the source Effect Schema from `jsonSchema` and cache it on\n // the slot; the set-trap invalidates the cache when `jsonSchema` is mutated.\n const existing = Reflect.get(target, prop, receiver);\n if (existing !== undefined) {\n return existing;\n }\n const jsonSchema = (target as any).jsonSchema;\n if (jsonSchema == null) {\n return undefined;\n }\n const rebuilt = toEffectSchema(jsonSchema);\n defineHiddenProperty(target, StaticTypeSchemaSlot, rebuilt);\n return rebuilt;\n }\n }\n\n // Handle getter properties.\n if (Object.getOwnPropertyDescriptor(target, prop)?.get) {\n return Reflect.get(target, prop, receiver);\n }\n\n const value = Reflect.get(target, prop, receiver);\n if (isValidProxyTarget(value)) {\n return createProxy(value, this);\n }\n\n return value;\n }\n\n set(target: ProxyTarget, prop: string | symbol, value: any, receiver: any): boolean {\n const echoRoot = getEchoRoot(target);\n\n // Check readonly enforcement - mutations only allowed within Obj.update().\n // Skip check if the object is still being initialized (no ChangeId handler yet).\n // Also skip for non-initialized root objects (those without EventId).\n // Skip for symbol properties (internal infrastructure, not user data).\n const isInitialized = ChangeId in echoRoot || EventId in echoRoot;\n const isSymbolProp = typeof prop === 'symbol';\n if (isInitialized && !isSymbolProp && !isInChangeContext(echoRoot)) {\n throw new Error(\n `Cannot modify object property \"${String(prop)}\" outside of Obj.update(). ` +\n 'Use Obj.update(obj, (mutableObj) => { mutableObj.property = value; }) instead.',\n );\n }\n\n let result: boolean = false;\n this._inSet = true;\n try {\n batchEvents(() => {\n const { echoRoot: _, preparedValue } = this._prepareValueForAssignment(target, prop, value);\n result = Reflect.set(target, prop, preparedValue, receiver);\n // Invalidate the cached source Effect Schema when `jsonSchema` changes\n // (e.g. `Type.addFields`) so `Type.getSchema` rebuilds from the new shape.\n if (prop === 'jsonSchema') {\n Reflect.deleteProperty(target, StaticTypeSchemaSlot);\n }\n // Queue notification instead of emitting immediately (batched).\n if (isInitialized) {\n queueNotification(echoRoot);\n // Also notify the owner chain so parent objects are updated when nested objects change.\n notifyOwnerChain(target);\n }\n });\n } finally {\n this._inSet = false;\n }\n return result;\n }\n\n ownKeys(target: ProxyTarget): ArrayLike<string | symbol> {\n return Reflect.ownKeys(target);\n }\n\n deleteProperty(target: ProxyTarget, property: string | symbol): boolean {\n const echoRoot = getEchoRoot(target);\n\n // Check readonly enforcement - mutations only allowed within Obj.update().\n // Skip for symbol properties (internal infrastructure, not user data).\n const isInitialized = (echoRoot as any)[ChangeId] === true || EventId in echoRoot;\n const isSymbolProp = typeof property === 'symbol';\n if (isInitialized && !isSymbolProp && !isInChangeContext(echoRoot)) {\n throw createPropertyDeleteError(property);\n }\n\n const result = Reflect.deleteProperty(target, property);\n if (isInitialized) {\n queueNotification(echoRoot);\n }\n return result;\n }\n\n defineProperty(target: ProxyTarget, property: string | symbol, attributes: PropertyDescriptor): boolean {\n const echoRoot = getEchoRoot(target);\n\n // Check readonly enforcement - mutations only allowed within Obj.update().\n // Skip check if the object is still being initialized (no ChangeId handler yet).\n // Skip for symbol properties (internal infrastructure, not user data).\n const isInitialized = ChangeId in echoRoot || EventId in echoRoot;\n const isSymbolProp = typeof property === 'symbol';\n if (isInitialized && !isSymbolProp && !isInChangeContext(echoRoot)) {\n throw new Error(\n `Cannot modify object property \"${String(property)}\" outside of Obj.update(). ` +\n 'Use Obj.update(obj, (mutableObj) => { mutableObj.property = value; }) instead.',\n );\n }\n\n const { echoRoot: _, preparedValue } = this._prepareValueForAssignment(target, property, attributes.value);\n const result = Reflect.defineProperty(target, property, {\n ...attributes,\n value: preparedValue,\n });\n if (!this._inSet && isInitialized) {\n // Queue notification instead of emitting immediately (batched).\n queueNotification(echoRoot);\n }\n return result;\n }\n\n /**\n * Prepare a value for assignment to a typed object property.\n * Handles cycle detection, copy-on-assign, array conversion, validation, and ownership.\n */\n private _prepareValueForAssignment(\n target: ProxyTarget,\n prop: string | symbol,\n value: any,\n ): { echoRoot: object; preparedValue: any } {\n const echoRoot = getEchoRoot(target);\n\n if (prop === ParentId) {\n return { echoRoot, preparedValue: value }; // Short-circuit for parent assignment.\n }\n\n // Check for cycles before assignment.\n if (isValidProxyTarget(value) || isProxy(value)) {\n if (wouldCreateCycle(echoRoot, value)) {\n throw new Error('Cannot create cycles in typed object graph. Consider using Ref for circular references.');\n }\n }\n\n // Prevent direct assignment of root ECHO objects (those created with Obj.make/Relation.make).\n // These must be wrapped with Ref.make for proper reference handling.\n // This matches database object behavior for consistency.\n if (isValidProxyTarget(value) || isProxy(value)) {\n const actualValue = getRawTarget(value);\n const isRootEchoObject = EventId in actualValue;\n if (isRootEchoObject) {\n throw new Error('Object references must be wrapped with `Ref.make`');\n }\n }\n\n // Copy-on-assign: If the value is a nested record owned by a different ECHO object, deep copy it.\n if (isValidProxyTarget(value) || isProxy(value)) {\n const actualValue = getRawTarget(value);\n const existingOwner = getOwner(actualValue);\n if (existingOwner != null && existingOwner !== echoRoot) {\n value = deepCopy(value);\n }\n }\n\n // Convert arrays to reactive arrays.\n if (Array.isArray(value) && !(value instanceof ReactiveArray)) {\n value = ReactiveArray.from(value);\n }\n\n const validatedValue = this._validateValue(target, prop, value);\n\n // Set owner on new value to the root ECHO object.\n if (isValidProxyTarget(validatedValue) || isProxy(validatedValue)) {\n setOwnerRecursive(validatedValue, echoRoot);\n }\n\n return { echoRoot, preparedValue: validatedValue };\n }\n\n private _validateValue(target: any, prop: string | symbol, value: any) {\n if (prop === ParentId) {\n return value;\n }\n const schema = SchemaValidator.getTargetPropertySchema(target, prop);\n const _ = Schema.asserts(schema)(value);\n if (isValidProxyTarget(value)) {\n setSchemaProperties(value, schema);\n }\n\n return value;\n }\n\n private _inspect(\n _: number,\n options: InspectOptionsStylized,\n inspectFn: (value: any, options?: InspectOptionsStylized) => string,\n ): string {\n const inspected = inspectFn(this, {\n ...options,\n showHidden: false,\n customInspect: false,\n });\n\n return `Typed ${inspected}`;\n }\n}\n\n/**\n * @deprecated Use `Obj.toJSON` instead.\n */\n// TODO(burdon): Remove?\nconst toJSON = (target: ProxyTarget): any => {\n return { '@type': 'TypedReactiveObject', ...target };\n};\n\n/**\n * Pointer to a `Type.Type` entity, stamped as the back-reference (`TypeEntityId`)\n * on instances and read by the `SchemaId` getter installed below.\n *\n * Structural shape (not `Type.AnyEntity`) because `internal/common/proxy/`\n * can't import the top-level `Type` module without a cycle. Every kind of\n * `Type.Type` entity satisfies this shape:\n * - Static (`Type.makeObject(dxn)` pipe) — slot set directly on the object.\n * - Persisted (echo-handler-wrapped) — slot exposed via that handler's\n * `get` trap (rebuilds from `data.jsonSchema`).\n * - In-memory pre-persist (`Type.makeObjectFromJsonSchema`) — slot exposed\n * via the `case StaticTypeSchemaSlot:` arm in this file's `get` trap.\n */\nexport type TypeSource = { readonly [StaticTypeSchemaSlot]?: Schema.Schema.AnyNoContext };\n\n/**\n * Recursively set AST on all potential proxy targets.\n */\nconst setSchemaProperties = (obj: any, schema: Schema.Schema.AnyNoContext, typeSource?: TypeSource) => {\n const schemaType = getSchemaURI(schema);\n if (schemaType != null) {\n defineHiddenProperty(obj, TypeId, schemaType);\n }\n\n if (typeSource != null) {\n // Keep a back-reference to the type entity so `Obj.getType` /\n // `Relation.getType` / `Entity.getType` can return it.\n defineHiddenProperty(obj, TypeEntityId, typeSource);\n\n // Install `SchemaId` as a getter that reads through the entity's static\n // schema slot. The three entity shapes (static / persisted / in-memory\n // pre-persist) each populate the slot via their own get-trap path, so\n // `Type.update` / `Type.addFields` mutations propagate into validation\n // for objects created via `Obj.make(typeEntity, ...)` without this file\n // having to rebuild from `jsonSchema` itself.\n Object.defineProperty(obj, SchemaId, {\n get: () => typeSource[StaticTypeSchemaSlot] ?? schema,\n enumerable: false,\n configurable: true,\n });\n } else {\n defineHiddenProperty(obj, SchemaId, schema);\n }\n for (const key in obj) {\n if (isValidProxyTarget(obj[key])) {\n const elementSchema = SchemaValidator.getTargetPropertySchema(obj, key);\n if (elementSchema != null) {\n setSchemaProperties(obj[key], elementSchema);\n }\n }\n }\n};\n\nexport const prepareTypedTarget = <T>(target: T, schema: Schema.Schema<T>, typeSource?: TypeSource) => {\n // log.info('prepareTypedTarget', { target, schema });\n if (!SchemaAST.isTypeLiteral(schema.ast)) {\n throw new Error('schema has to describe an object type');\n }\n\n SchemaValidator.validateSchema(schema);\n const _ = Schema.asserts(schema)(target);\n makeArraysReactive(target);\n setSchemaProperties(target, schema, typeSource);\n};\n\nconst makeArraysReactive = (target: any) => {\n for (const key in target) {\n if (target[symbolIsProxy]) {\n continue;\n }\n if (Array.isArray(target[key])) {\n target[key] = ReactiveArray.from(target[key]);\n }\n if (typeof target[key] === 'object') {\n makeArraysReactive(target[key]);\n }\n }\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { invariant } from '@dxos/invariant';\n\nimport { KindId } from '../types';\nimport { queueOwnerNotification } from './change-context';\nimport { defineHiddenProperty } from './define-hidden-property';\nimport { getProxyTarget, isProxy, isValidProxyTarget } from './proxy-utils';\nimport { EventId } from './symbols';\n\n/**\n * Symbol to store the owning ECHO object reference on nested JS objects (records).\n * Every nested record is attributed to exactly one ECHO object.\n * This achieves:\n * - No cycles in the object graph (cyclical Refs are still allowed).\n * - No multiple inbound pointers to one record.\n * - Centralized reactivity for entire ECHO object.\n */\nconst EchoOwner = Symbol.for('@dxos/echo/Owner');\n\n/**\n * Get the raw target from a value, unwrapping proxy if needed.\n */\nexport const getRawTarget = (value: any): any => {\n return isProxy(value) ? getProxyTarget(value) : value;\n};\n\n/**\n * Get the ECHO object that owns this nested record.\n *\n * The owner is always the raw target object (not a proxy) of the root ECHO object.\n * For example, if you have `echoObject.nested.deep`, both `nested` and `deep`\n * will have their owner set to the raw target of `echoObject`.\n *\n * @param value - The nested record to check (can be a proxy or raw target).\n * @returns The raw target of the owning root ECHO object, or undefined if not owned.\n */\nexport const getOwner = (value: object | null | undefined): object | undefined => {\n return (value as any)?.[EchoOwner];\n};\n\n/**\n * Set the owner of a meta object to its parent.\n * This allows meta mutations to respect the parent's change context.\n * @internal\n */\nexport const setMetaOwner = (metaTarget: object, parent: object): void => {\n defineHiddenProperty(metaTarget, EchoOwner, parent);\n};\n\n/**\n * Set the ECHO object owner on a value and all its nested records.\n * All nested JS objects point directly to the root ECHO object.\n *\n * @param value - The value to set ownership on (can be a proxy or raw target).\n * @param owner - The raw target of the root ECHO object that will own this value.\n * @param options.visited - Set of already-visited objects to avoid infinite loops.\n * @param options.depth - Current recursion depth (unused, kept for debugging).\n * @param options.allowedPreviousOwner - When reassigning a root ECHO object, its nested structures\n * are allowed to have this as their previous owner without triggering the invariant.\n */\nexport const setOwnerRecursive = (\n value: any,\n owner: object,\n options: {\n visited?: Set<object>;\n depth?: number;\n allowedPreviousOwner?: object;\n } = {},\n): void => {\n const { visited = new Set<object>(), depth = 0, allowedPreviousOwner } = options;\n if (value == null || typeof value !== 'object') {\n return;\n }\n\n const actualValue = getRawTarget(value);\n if (visited.has(actualValue)) {\n return;\n }\n visited.add(actualValue);\n\n // Check that we're not stealing a nested record owned by a different ECHO object.\n // Root ECHO objects (those with EventId) can be reassigned - they maintain their own\n // identity and choosing to embed them in another object is a valid operation.\n // When reassigning a root, its nested records (owned by that root) are also allowed.\n const existingOwner = getOwner(actualValue);\n const isRootEchoObject = EventId in actualValue;\n\n // Track if this is a root being assigned - its nested structures are allowed to transfer.\n let newAllowedPreviousOwner = allowedPreviousOwner;\n if (isRootEchoObject && depth === 0) {\n // This is the top-level root being assigned; allow its nested structures to transfer.\n newAllowedPreviousOwner = actualValue;\n }\n\n if (!isRootEchoObject) {\n const ownershipAllowed =\n existingOwner == null || existingOwner === owner || existingOwner === newAllowedPreviousOwner;\n invariant(\n ownershipAllowed,\n 'Cannot reassign ownership of a nested record to a different ECHO object. Use deep copy first.',\n );\n }\n\n // Set owner directly to the root ECHO object.\n defineHiddenProperty(actualValue, EchoOwner, owner);\n\n // Recursively set owner on nested objects and array elements.\n const recursiveOptions = {\n visited,\n depth: depth + 1,\n allowedPreviousOwner: newAllowedPreviousOwner,\n };\n if (Array.isArray(actualValue)) {\n for (const item of actualValue) {\n if (isValidProxyTarget(item) || isProxy(item)) {\n setOwnerRecursive(item, owner, recursiveOptions);\n }\n }\n } else {\n for (const key in actualValue) {\n if (Object.prototype.hasOwnProperty.call(actualValue, key)) {\n const nested = actualValue[key];\n if (isValidProxyTarget(nested) || isProxy(nested)) {\n setOwnerRecursive(nested, owner, recursiveOptions);\n }\n }\n }\n }\n};\n\n/**\n * Traverse an object graph, calling the visitor on each object.\n * Handles proxy unwrapping and cycle detection.\n *\n * @param value - The value to traverse (can be a proxy or raw target).\n * @param visitor - Called for each object. Return true to stop traversal (early exit).\n * @returns true if the visitor returns true for any object.\n */\nexport const traverseObjectGraph = (\n value: any,\n visitor: (actualValue: any) => boolean,\n visited = new Set<object>(),\n): boolean => {\n if (value == null || typeof value !== 'object') {\n return false;\n }\n\n const actualValue = getRawTarget(value);\n\n if (visited.has(actualValue)) {\n return false;\n }\n visited.add(actualValue);\n\n if (visitor(actualValue)) {\n return true;\n }\n\n if (Array.isArray(actualValue)) {\n for (const item of actualValue) {\n if (traverseObjectGraph(item, visitor, visited)) {\n return true;\n }\n }\n } else {\n for (const key in actualValue) {\n if (Object.prototype.hasOwnProperty.call(actualValue, key)) {\n if (traverseObjectGraph(actualValue[key], visitor, visited)) {\n return true;\n }\n }\n }\n }\n\n return false;\n};\n\n/**\n * Check if a value would create a cycle when assigned to a target ECHO object.\n * Returns true if the value (or any nested object) IS the target root.\n */\nexport const wouldCreateCycle = (targetRoot: object, value: any): boolean =>\n traverseObjectGraph(value, (v) => v === targetRoot);\n\n/**\n * Check if a value or any of its nested objects has an owner different from the target.\n * Used to determine if deep copy is needed during init.\n */\nexport const hasForeignOwner = (value: any, target: object): boolean =>\n traverseObjectGraph(value, (v) => {\n const owner = getOwner(v);\n if (owner != null && owner !== target) {\n return true;\n }\n // Root ECHO objects (with EventId) have their nested structures owned by them.\n if (EventId in v && v !== target) {\n return true;\n }\n return false;\n });\n\n/**\n * Maximum depth for owner chain traversal.\n * This is a defensive measure against malformed circular ownership.\n * Primary cycle detection is handled by wouldCreateCycle() before assignment.\n */\nconst MAX_OWNER_DEPTH = 100;\n\n/**\n * Get the root ECHO object for a target.\n * Follows the owner chain to find the ultimate root.\n * An object may have EventId (from being created standalone) but if it now\n * has an owner, it's nested and we should use its owner's root instead.\n * @internal\n */\nexport const getEchoRoot = (target: object, depth = 0): object => {\n invariant(depth < MAX_OWNER_DEPTH, 'Owner chain too deep - possible circular ownership');\n\n // Root ECHO objects (those created with Obj.make or Relation.make) have KindId set.\n // They maintain their own change context identity even when nested inside another object.\n // Nested helper objects like ObjectMeta don't have KindId and should follow their owner.\n if (KindId in target) {\n return target;\n }\n\n // For non-root objects (nested records, ObjectMeta, etc.), follow the owner chain.\n const owner = getOwner(target);\n if (owner) {\n return getEchoRoot(owner, depth + 1);\n }\n\n // No owner means this is an unowned object (e.g., during initialization).\n return target;\n};\n\n/**\n * Notify all owners in the ownership chain.\n * When a nested object changes, its parent should also be notified.\n * This handles the case where a root ECHO object is nested inside another object.\n */\nexport const notifyOwnerChain = (target: object): void => {\n const owner = getOwner(target);\n if (owner) {\n // Queue notification for the owner's root (which has EventId).\n queueOwnerNotification(getEchoRoot(owner));\n // Continue up the chain (owner might also be nested).\n notifyOwnerChain(owner);\n }\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\n/**\n * Reactive object proxy.\n */\nexport interface ReactiveHandler<T extends object> extends ProxyHandler<T> {\n /**\n * Target to Proxy mapping.\n */\n readonly _proxyMap: WeakMap<object, any>;\n\n /**\n * Called when a proxy is created for this target.\n */\n init(target: T): void;\n}\n\n/**\n * For debug-dumping the data of the object.\n */\nexport const objectData = Symbol.for('@dxos/live-object/objectData');\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { isInChangeContext } from './change-context';\nimport { createArrayMethodError } from './errors';\nimport { batchEvents } from './event-batch';\nimport { getEchoRoot } from './ownership';\nimport { getProxyTarget, isProxy } from './proxy-utils';\nimport { ChangeId, EventId } from './symbols';\n\n/**\n * Check if array mutation is allowed (inside a change context).\n * Throws a descriptive error if not.\n */\nconst checkArrayMutationAllowed = (arr: any, method: string): void => {\n // Get the raw target - if arr is a proxy, get its underlying target.\n const target = isProxy(arr) ? getProxyTarget(arr) : arr;\n\n // Find the root ECHO object.\n const echoRoot = getEchoRoot(target);\n\n // Check if initialized (has ChangeId marker or EventId).\n const isInitialized = (echoRoot as any)[ChangeId] === true || EventId in echoRoot;\n if (!isInitialized) {\n // Array is still being initialized, allow mutations.\n return;\n }\n\n if (!isInChangeContext(echoRoot)) {\n throw createArrayMethodError(method);\n }\n};\n\n/**\n * Extends the native array to make sure that arrays methods are correctly reactive.\n * Enforces that mutations only happen within Obj.update() context.\n */\nexport class ReactiveArray<T> extends Array<T> {\n static override get [Symbol.species]() {\n return Array;\n }\n\n static {\n /**\n * These methods will trigger proxy traps like `set` and `defineProperty` and emit event notifications.\n * We wrap them in a batch to avoid unnecessary event notifications.\n * Change context is checked before allowing mutations.\n *\n * Note: When called on a proxy, `this` will be the proxy, so array mutations\n * go through the proxy's set trap which handles event emission.\n */\n const BATCHED_METHODS = ['push', 'pop', 'shift', 'unshift', 'splice', 'sort', 'reverse'] as const;\n\n for (const method of BATCHED_METHODS) {\n Object.defineProperty(this.prototype, method, {\n enumerable: false,\n value: function (this: ReactiveArray<any>, ...args: any[]) {\n // Check change context before allowing mutation.\n checkArrayMutationAllowed(this, method);\n\n let result!: any;\n batchEvents(() => {\n result = Array.prototype[method].apply(this, args);\n });\n return result;\n },\n });\n }\n }\n}\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport * as Schema from 'effect/Schema';\nimport * as SchemaAST from 'effect/SchemaAST';\n\nimport { invariant } from '@dxos/invariant';\nimport { log } from '@dxos/log';\n\nimport { SchemaId } from '../types';\n\n// TODO(burdon): Reconcile with @dxos/effect visit().\n\nexport class SchemaValidator {\n /**\n * Recursively check that schema specifies constructions we can handle.\n * Validates there are no ambiguous discriminated union types.\n */\n public static validateSchema(schema: Schema.Schema.AnyNoContext): void {\n const visitAll = (nodes: SchemaAST.AST[]) => nodes.forEach((node) => this.validateSchema(Schema.make(node)));\n if (SchemaAST.isUnion(schema.ast)) {\n const typeAstList = schema.ast.types.filter((type) => SchemaAST.isTypeLiteral(type)) as SchemaAST.TypeLiteral[];\n // Check we can handle a discriminated union.\n if (typeAstList.length > 1) {\n getTypeDiscriminators(typeAstList);\n }\n visitAll(typeAstList);\n } else if (SchemaAST.isTupleType(schema.ast)) {\n const positionalTypes = schema.ast.elements.map((t) => t.type);\n const allTypes = positionalTypes.concat(schema.ast.rest.map((t) => t.type));\n visitAll(allTypes);\n } else if (SchemaAST.isTypeLiteral(schema.ast)) {\n visitAll(SchemaAST.getPropertySignatures(schema.ast).map((p) => p.type));\n }\n }\n\n public static hasTypeAnnotation(\n rootObjectSchema: Schema.Schema.AnyNoContext,\n property: string,\n annotation: symbol,\n ): boolean {\n try {\n let type = this.getPropertySchema(rootObjectSchema, [property]);\n if (SchemaAST.isTupleType(type.ast)) {\n type = this.getPropertySchema(rootObjectSchema, [property, '0']);\n }\n\n return type.ast.annotations[annotation] != null;\n } catch {\n return false;\n }\n }\n\n public static getPropertySchema(\n rootObjectSchema: Schema.Schema.AnyNoContext,\n propertyPath: KeyPath,\n getProperty: (path: KeyPath) => any = () => null,\n ): Schema.Schema.AnyNoContext {\n let schema: Schema.Schema.AnyNoContext = rootObjectSchema;\n for (let i = 0; i < propertyPath.length; i++) {\n const propertyName = propertyPath[i];\n const tupleAst = unwrapArray(schema.ast);\n if (tupleAst != null) {\n schema = getArrayElementSchema(tupleAst, propertyName);\n } else {\n const propertyType = getPropertyType(schema.ast, propertyName.toString(), (propertyName) =>\n getProperty([...propertyPath.slice(0, i), propertyName]),\n );\n if (propertyType == null) {\n log.warn('unknown property', { path: propertyPath, property: propertyName });\n continue;\n }\n\n schema = Schema.make(propertyType).annotations(propertyType.annotations);\n }\n }\n\n return schema;\n }\n\n public static getTargetPropertySchema(target: any, prop: string | symbol): Schema.Schema.AnyNoContext {\n const schema: Schema.Schema.AnyNoContext | undefined = (target as any)[SchemaId];\n invariant(schema, 'target has no schema');\n const arrayAst = unwrapArray(schema.ast);\n if (arrayAst != null) {\n return getArrayElementSchema(arrayAst, prop);\n }\n\n const propertyType = getPropertyType(schema.ast, prop.toString(), (prop) => target[prop]);\n if (propertyType == null) {\n return Schema.Any; // TODO(burdon): HACK.\n }\n\n invariant(propertyType, `invalid property: ${prop.toString()}`);\n return Schema.make(propertyType);\n }\n}\n\n/**\n * Tuple AST is used both for:\n * fixed-length tuples ([string, number]) in which case AST will be { elements: [Schema.String, Schema.Number] }\n * variable-length arrays (Array<string | number>) in which case AST will be { rest: [Schema.Union(Schema.String, Schema.Number)] }\n */\nconst getArrayElementSchema = (\n tupleAst: SchemaAST.TupleType,\n property: string | symbol | number,\n): Schema.Schema.AnyNoContext => {\n const elementIndex = typeof property === 'string' ? parseInt(property, 10) : Number.NaN;\n if (Number.isNaN(elementIndex)) {\n invariant(property === 'length', `invalid array property: ${String(property)}`);\n return Schema.Number;\n }\n if (elementIndex < tupleAst.elements.length) {\n const elementType = tupleAst.elements[elementIndex].type;\n return Schema.make(elementType).annotations(elementType.annotations);\n }\n\n const restType = tupleAst.rest;\n return Schema.make(restType[0].type).annotations(restType[0].annotations);\n};\n\nconst flattenUnion = (typeAst: SchemaAST.AST): SchemaAST.AST[] =>\n SchemaAST.isUnion(typeAst) ? typeAst.types.flatMap(flattenUnion) : [typeAst];\n\nconst getProperties = (\n typeAst: SchemaAST.AST,\n getTargetPropertyFn: (propertyName: string) => any,\n): SchemaAST.PropertySignature[] => {\n const astCandidates = flattenUnion(typeAst);\n const typeAstList = astCandidates.filter((type) => SchemaAST.isTypeLiteral(type)) as SchemaAST.TypeLiteral[];\n if (typeAstList.length === 0) {\n return [];\n }\n if (typeAstList.length === 1) {\n return SchemaAST.getPropertySignatures(typeAstList[0]);\n }\n\n const typeDiscriminators = getTypeDiscriminators(typeAstList);\n const targetPropertyValue = getTargetPropertyFn(String(typeDiscriminators[0].name));\n const typeIndex = typeDiscriminators.findIndex((p) => targetPropertyValue === (p.type as SchemaAST.Literal).literal);\n invariant(typeIndex !== -1, 'discriminator field not set on target');\n return SchemaAST.getPropertySignatures(typeAstList[typeIndex]);\n};\n\nconst getPropertyType = (\n ast: SchemaAST.AST,\n propertyName: string,\n getTargetPropertyFn: (propertyName: string) => any,\n): SchemaAST.AST | null => {\n const anyOrObject = unwrapAst(\n ast,\n (candidate) => SchemaAST.isAnyKeyword(candidate) || SchemaAST.isObjectKeyword(candidate),\n );\n if (anyOrObject != null) {\n return ast;\n }\n\n const typeOrDiscriminatedUnion = unwrapAst(ast, (t) => {\n return SchemaAST.isTypeLiteral(t) || (SchemaAST.isUnion(t) && t.types.some((t) => SchemaAST.isTypeLiteral(t)));\n });\n if (typeOrDiscriminatedUnion == null) {\n return null;\n }\n\n const targetProperty = getProperties(typeOrDiscriminatedUnion, getTargetPropertyFn).find(\n (p) => p.name === propertyName,\n );\n if (targetProperty != null) {\n return unwrapAst(targetProperty.type);\n }\n\n const indexSignatureType = unwrapAst(ast, SchemaAST.isTypeLiteral);\n if (\n indexSignatureType &&\n SchemaAST.isTypeLiteral(indexSignatureType) &&\n indexSignatureType.indexSignatures.length > 0\n ) {\n return unwrapAst(indexSignatureType.indexSignatures[0].type);\n }\n\n return null;\n};\n\nconst getTypeDiscriminators = (typeAstList: SchemaAST.TypeLiteral[]): SchemaAST.PropertySignature[] => {\n const discriminatorPropCandidates = typeAstList\n .flatMap(SchemaAST.getPropertySignatures)\n .filter((p) => SchemaAST.isLiteral(p.type));\n const propertyName = discriminatorPropCandidates[0].name;\n const isValidDiscriminator = discriminatorPropCandidates.every((p) => p.name === propertyName && !p.isOptional);\n const everyTypeHasDiscriminator = discriminatorPropCandidates.length === typeAstList.length;\n const isDiscriminatedUnion = isValidDiscriminator && everyTypeHasDiscriminator;\n invariant(isDiscriminatedUnion, 'type ambiguity: every type in a union must have a single unique-literal field');\n return discriminatorPropCandidates;\n};\n\n/**\n * Used to check that rootAst is for a type matching the provided predicate.\n * That's not always straightforward because types of optionality and recursive types.\n * const Task = Schema.Struct({\n * ...,\n * previous?: Schema.optional(Schema.suspend(() => Task)),\n * });\n * Here the AST for `previous` field is going to be Union(Suspend(Type), Undefined).\n * SchemaAST.isTypeLiteral(field) will return false, but unwrapAst(field, (ast) => SchemaAST.isTypeLiteral(ast))\n * will return true.\n */\nconst unwrapAst = (rootAst: SchemaAST.AST, predicate?: (ast: SchemaAST.AST) => boolean): SchemaAST.AST | null => {\n let ast: SchemaAST.AST | undefined = rootAst;\n while (ast != null) {\n if (predicate?.(ast)) {\n return ast;\n }\n\n if (SchemaAST.isUnion(ast)) {\n const next: any = ast.types.find((t) => (predicate != null && predicate(t)) || SchemaAST.isSuspend(t));\n if (next != null) {\n ast = next;\n continue;\n }\n }\n\n if (SchemaAST.isSuspend(ast)) {\n ast = ast.f();\n } else {\n return predicate == null ? ast : null;\n }\n }\n\n return null;\n};\n\nconst unwrapArray = (ast: SchemaAST.AST) => unwrapAst(ast, SchemaAST.isTupleType) as SchemaAST.TupleType | null;\n\nexport const checkIdNotPresentOnSchema = (schema: Schema.Schema<any, any, any>) => {\n invariant(SchemaAST.isTypeLiteral(schema.ast));\n const idProperty = SchemaAST.getPropertySignatures(schema.ast).find((prop) => prop.name === 'id');\n if (idProperty != null) {\n throw new Error('\"id\" property name is reserved');\n }\n};\n\n// TODO(burdon): Reconcile with JsonPath.\ntype KeyPath = readonly (string | number)[];\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { type RefTypeId } from '../../Ref/ref';\nimport { getProxyTarget, isProxy } from './proxy-utils';\nimport { ChangeId, EventId } from './symbols';\n\n/**\n * Subscribe to changes on a reactive object.\n * @param obj - The reactive object to subscribe to.\n * @param callback - Called when the object changes.\n * @returns Unsubscribe function.\n */\n// TODO(wittjosiah): Consider throwing if obj doesn't have EventId instead of returning no-op.\nexport const subscribe = (obj: unknown, callback: () => void): (() => void) => {\n // Guard against non-reactive inputs (queue-stored typed objects, snapshots, plain shapes\n // with branded symbols) before `getProxyTarget`'s `ProxyHandlerSlot` invariant kicks in.\n // `Obj.isObject` (KindId-based) is satisfied by these inputs, so callers like\n // `Atom.family((obj) => Atom.make((get) => Obj.subscribe(obj, ...)))` legitimately reach\n // here with a non-proxy. Falling back to a no-op preserves the documented contract that\n // values without subscription support get a no-op unsubscribe.\n if (!isProxy(obj)) {\n return () => {};\n }\n const target = getProxyTarget(obj as any);\n if (target && EventId in target) {\n return (target as any)[EventId].on(callback);\n }\n return () => {};\n};\n\n/**\n * Deeply removes readonly modifiers from all properties of T.\n * Inside Obj.update, all properties are fully mutable regardless of schema definition.\n * Ref types are preserved as-is since they are value-like objects that are replaced, not mutated.\n * Primitive types (including branded primitives) are preserved as-is.\n */\nexport type Mutable<T> = T extends string | number | boolean | bigint | symbol | null | undefined\n ? T // Primitives (including branded primitives like JsonPath) stay as-is.\n : T extends { [RefTypeId]: any }\n ? T // Keep Ref types as-is (they're value-like, not mutated in place).\n : T extends object\n ? T extends readonly (infer U)[]\n ? Mutable<U>[]\n : { -readonly [K in keyof T]: Mutable<T[K]> }\n : T;\n\n/**\n * Callback type for the change function.\n */\nexport type ChangeCallback<T> = (mutableObj: Mutable<T>) => void;\n\n/**\n * Perform mutations on a reactive object within a change context.\n *\n * If the object has a change handler (via ChangeId), it will be called with the callback.\n * This allows handlers to implement features like:\n * - Readonly enforcement (mutations only allowed within change context)\n * - Batched notifications (single notification for all mutations in the callback)\n * - Transaction semantics\n *\n * If the object doesn't have a change handler, the callback is called directly.\n *\n * @param obj - The reactive object to mutate.\n * @param callback - Callback that receives a mutable view of the object.\n */\nexport const change = <T>(obj: T, callback: ChangeCallback<T>): void => {\n // Check proxy first (allows handler to intercept), then fall back to target.\n // This order is important for EchoReactiveHandler which handles ChangeId in the proxy trap.\n const changeFn = (obj as any)[ChangeId];\n if (changeFn) {\n changeFn(callback);\n } else {\n callback(obj as Mutable<T>);\n }\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport * as Schema from 'effect/Schema';\nimport * as SchemaAST from 'effect/SchemaAST';\nimport type * as Types from 'effect/Types';\n\nimport { DXN, ObjectId } from '@dxos/keys';\nimport { type ToMutable } from '@dxos/util';\n\nimport { type TypeAnnotation, TypeAnnotationId, makeTypeJsonSchemaAnnotation } from '../Annotation';\nimport { defineHiddenProperty } from '../common/proxy/define-hidden-property';\nimport { makeObject } from '../common/proxy/make-object';\nimport { getProxyTarget } from '../common/proxy/proxy-utils';\nimport {\n type AnyEntity,\n EntityKind,\n InstancePhantomId,\n KindId,\n type ObjectMeta,\n SchemaKindId,\n StaticTypeSchemaSlot,\n} from '../common/types';\nimport { JsonSchemaType } from '../JsonSchema';\n\n// TODO(burdon): Define Schema type for `typename` and use consistently for all DXN-like properties.\n\n// type RequiredKeys<T> = { [K in keyof T]-?: {} extends Pick<T, K> ? never : K }[keyof T];\nexport type EchoTypeSchemaProps<T, ExtraFields = {}> = Types.Simplify<AnyEntity & ToMutable<T> & ExtraFields>;\n\n/**\n * In-memory `Type.Type` entity shape produced by `Type.makeObject(dxn)` /\n * `Type.makeRelation({...})`. A live reactive `TypeSchema` instance —\n * identical to a persisted `Type.Type` except for database attachment.\n *\n * NOT a `Schema.Schema`. The underlying Effect Schema is cached on the hidden\n * `StaticTypeSchemaSlot` slot — retrieve it via `Type.getSchema(...)`.\n */\n// TODO(burdon): Rename EchoEntitySchema.\nexport interface EchoTypeSchema<\n Self extends Schema.Schema.Any,\n ExtraFields = {},\n K extends EntityKind = EntityKind,\n Fields extends Schema.Struct.Fields = Schema.Struct.Fields,\n> {\n /**\n * Entity-kind brand. Type entities are their own kind (`Type`) regardless of\n * the kind of instance they describe — `[SchemaKindId]` carries the latter.\n * This lets predicates like `Obj.isObject` / `Relation.isRelation` cleanly\n * reject type entities without also having to inspect `[SchemaKindId]`.\n */\n readonly [KindId]: EntityKind.Type;\n\n /** Schema-kind brand indicating what kind of instance this type describes. */\n readonly [SchemaKindId]: K;\n\n /**\n * Entity id. Always present — stamped at construction — but NOT the type's\n * identity while in-memory: an unattached type resolves its URI to the typename\n * DXN, switching to `echo:/<id>` only once attached to a database (see\n * `getTypeURIFromSpecifier`, which discriminates by database attachment).\n */\n readonly id: ObjectId;\n\n /** Source Effect Schema (kept on a hidden slot for `Type.getSchema`). */\n readonly [StaticTypeSchemaSlot]: Schema.Schema.AnyNoContext;\n\n // NOTE: `typename` / `version` are intentionally NOT fields. They live in\n // `ObjectMeta` (`key` / `version`); read via `Type.getTypename(self)` /\n // `Type.getVersion(self)`.\n readonly jsonSchema: JsonSchemaType;\n\n /** Struct fields for introspection. */\n readonly fields: Fields;\n\n /** Phantom — instance type produced by `Obj.make(self, ...)`. */\n readonly _instance?: EchoTypeSchemaProps<Schema.Schema.Type<Self>, ExtraFields>;\n\n /**\n * Phantom slot mirroring `Type<A>` so internal helpers (`makeObject`,\n * `createObject`, `Ref.make`) infer the instance type uniformly whether\n * the caller passes an `EchoTypeSchema` or a top-level `Type.Type` entity.\n *\n * Includes the instance-kind brand (`[KindId]`) so the phantom is assignable\n * to the matching public-side interface in `Type.ts` (`Type.Obj` /\n * `Type.Relation` / `Type.Type`). Each kind projects identity: instances of\n * an object-kind schema are object-kind entities, type-kind schemas produce\n * type-kind (persisted Type.Type) entities — the latter additionally carry\n * the `[SchemaKindId]` / `[StaticTypeSchemaSlot]` brands the echo-handler\n * proxy exposes on persisted Type entities.\n */\n readonly [InstancePhantomId]?: EchoTypeSchemaProps<Schema.Schema.Type<Self>, ExtraFields> & {\n readonly [KindId]: K;\n } & (K extends EntityKind.Type\n ? {\n readonly [SchemaKindId]: EntityKind.Type;\n readonly [StaticTypeSchemaSlot]: Schema.Schema.AnyNoContext;\n }\n : {});\n}\n\n// type MakeProps =\n// | boolean\n// | {\n// readonly disableValidation?: boolean;\n// };\n\n// NOTE: Utils copied from Effect `Schema.ts`.\n// const _ownKeys = (o: object): Array<PropertyKey> =>\n// (Object.keys(o) as Array<PropertyKey>).concat(Object.getOwnPropertySymbols(o));\n\n// const _lazilyMergeDefaults = (\n// fields: Schema.Struct.Fields,\n// out: Record<PropertyKey, unknown>,\n// ): { [x: string | symbol]: unknown } => {\n// const ownKeys = _ownKeys(fields);\n// for (const key of ownKeys) {\n// const field = fields[key];\n// if (out[key] === undefined && Schema.isPropertySignature(field)) {\n// const ast = field.ast;\n// const defaultValue = ast._tag === 'PropertySignatureDeclaration' ? ast.defaultValue : ast.to.defaultValue;\n// if (defaultValue !== undefined) {\n// out[key] = defaultValue();\n// }\n// }\n// }\n// return out;\n// };\n\n// const _getDisableValidationMakeOption = (options: MakeProps | undefined): boolean =>\n// Predicate.isBoolean(options) ? options : options?.disableValidation ?? false;\n\n/**\n * Identity (typename + version) of the type meta-schema — the `Type.Type` that\n * every ECHO type entity is itself an instance of. Shared by the materialisation\n * vehicle ({@link persistentEntitySchema}) and `TypeSchema` so the two cannot\n * drift on identity.\n */\nexport const TypeMetaSchemaDXN = DXN.make('org.dxos.type.schema', '0.1.0');\n\n/**\n * Effect Schema that every `Type.Type` entity is an instance of: the meta-schema\n * struct `{ name?, jsonSchema, id }` branded as a type-kind ECHO entity. This is\n * the materialisation vehicle for `makeObject` below — the canonical user-facing\n * entity is `Type/type-schema.ts`'s `TypeSchema`, which carries the same shape\n * plus UI annotations.\n *\n * Kept self-contained (no import of `TypeSchema`) to avoid a bootstrap cycle:\n * `TypeSchema` is itself produced via `makeEchoTypeSchema`, so this builder must\n * not depend on it. `jsonSchema` is declared optional here (only on the\n * materialisation vehicle — the canonical `TypeSchema` keeps it required) so the\n * construction-time `Schema.asserts` does not force the field before it is\n * attached; it is populated immediately after via a lazy accessor (see\n * `makeEchoTypeSchema`).\n */\n// TODO(wittjosiah): Reconcile with `TypeSchema` (`Type/type-schema.ts`).\n// Both describe the same `org.dxos.type.schema` shape.\nconst persistentEntitySchema: Schema.Schema.AnyNoContext = (() => {\n const typename = DXN.getName(TypeMetaSchemaDXN);\n const version = DXN.getVersion(TypeMetaSchemaDXN)!;\n const struct = Schema.Struct({\n name: Schema.optional(Schema.String),\n jsonSchema: JsonSchemaType.pipe(Schema.optional),\n id: ObjectId,\n });\n const ast = SchemaAST.annotations(struct.ast, {\n [TypeAnnotationId]: { kind: EntityKind.Type, typename, version } satisfies TypeAnnotation,\n [SchemaAST.JSONSchemaAnnotationId]: makeTypeJsonSchemaAnnotation({ kind: EntityKind.Type, typename, version }),\n });\n return Schema.make(ast);\n})();\n\n/**\n * @internal\n *\n * Build an in-memory `Type.Type` entity (the value returned by `Type.makeObject`\n * / `Type.makeRelation`). The result is a LIVE reactive `TypeSchema`\n * instance — identical in every respect to a persisted `Type.Type` except that\n * it is not yet attached to a database. It is mutable via `Type.update`, can be\n * passed to `db.add(...)` (which keeps the same proxy and swaps the handler),\n * and round-trips through `jsonSchema`.\n *\n * The source Effect Schema describing the user's type is cached on\n * `[StaticTypeSchemaSlot]` so `Type.getSchema(...)` returns it without a\n * jsonSchema round-trip; the cache is invalidated by the proxy set-trap when\n * `jsonSchema` is mutated (see `typed-handler.ts`).\n */\nexport const makeEchoTypeSchema = <\n Self extends Schema.Schema.Any,\n K extends EntityKind = EntityKind,\n // TODO(wittjosiah): Can this be inferred from the schema?\n Fields extends Schema.Struct.Fields = Schema.Struct.Fields,\n>(\n fields: Fields,\n ast: SchemaAST.AST,\n typename: string,\n version: string,\n kind: K,\n computeJsonSchema: () => JsonSchemaType,\n): EchoTypeSchema<Self, {}, K, Fields> => {\n // Source Effect Schema describing the user's type — cached for `Type.getSchema`.\n const sourceSchema = Schema.make<\n EchoTypeSchemaProps<Schema.Schema.Type<Self>>,\n EchoTypeSchemaProps<Schema.Schema.Encoded<Self>>,\n Schema.Schema.Context<Self>\n >(ast);\n\n // `typename` / `version` route through `ObjectMeta` (`key` / `version`) — the\n // canonical registry-provenance pair — not data fields. `keys` is empty for\n // in-memory declarations until persisted.\n const meta: ObjectMeta = { keys: [], key: typename, version };\n\n // Materialise as a live reactive meta-schema instance. `jsonSchema` is attached\n // below as a getter (not passed here as data) for two reasons; see that accessor.\n const entity = makeObject(persistentEntitySchema, {} as any, meta);\n\n const target = getProxyTarget(entity)!;\n // `jsonSchema` is always available, but computed once on first read rather than at\n // construction: serializing the AST walks `Schema.suspend(...)` thunks, and for a\n // self-referential type (`Schema.suspend(() => Self)`) that thunk hits `Self`'s TDZ\n // while we're still inside its `const` initializer. A getter also lets reads return\n // the raw object instead of a child reactive proxy.\n let memoizedJsonSchema: JsonSchemaType | undefined;\n Object.defineProperty(target, 'jsonSchema', {\n configurable: true,\n enumerable: true,\n get() {\n return (memoizedJsonSchema ??= computeJsonSchema());\n },\n set(value: JsonSchemaType) {\n memoizedJsonSchema = value;\n },\n });\n // Cache the source Effect Schema (read by `Type.getSchema` via the proxy's\n // `[StaticTypeSchemaSlot]` get-trap; invalidated on `jsonSchema` mutation).\n defineHiddenProperty(target, StaticTypeSchemaSlot, sourceSchema);\n // Schema-kind brand: what kind of instance this type describes. There is no\n // database handler to derive it for in-memory entities, so stamp it directly.\n defineHiddenProperty(target, SchemaKindId, kind);\n // Struct fields for introspection. A getter (not a data property) so reads return\n // the raw fields object rather than a child reactive proxy.\n Object.defineProperty(target, 'fields', { configurable: true, enumerable: false, get: () => fields });\n\n return entity as unknown as EchoTypeSchema<Self, {}, K, Fields>;\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport type * as Types from 'effect/Types';\n\nimport { JsonSchemaFields, type JsonSchemaType } from './json-schema-type';\n\n/**\n * Normalize schema to to draft-07 format.\n * Note: the input type does not necessarily match the {@link JsonSchemaType} type.\n */\nexport const normalizeSchema = (schema: JsonSchemaType): JsonSchemaType => {\n const copy = structuredClone(schema) as Types.DeepMutable<JsonSchemaType>;\n go(copy);\n return copy;\n};\n\nconst go = (schema: Types.DeepMutable<JsonSchemaType>) => {\n if (typeof schema !== 'object' || schema === null) {\n return;\n }\n\n if ((schema as any).exclusiveMaximum === true) {\n schema.exclusiveMaximum = schema.maximum;\n delete (schema as any).exclusiveMaximum;\n } else if ((schema as any).exclusiveMaximum === false) {\n delete (schema as any).exclusiveMaximum;\n }\n\n if ((schema as any).exclusiveMinimum === true) {\n schema.exclusiveMinimum = schema.minimum;\n delete (schema as any).exclusiveMinimum;\n } else if ((schema as any).exclusiveMinimum === false) {\n delete (schema as any).exclusiveMinimum;\n }\n\n // Delete all properties that are not in the JsonSchemaFields.\n for (const key of Object.keys(schema)) {\n if (!JsonSchemaFields.includes(key)) {\n delete (schema as any)[key];\n }\n }\n\n // Recursively normalize the schema.\n // Recursively normalize the schema.\n if (schema.properties) {\n goOnRecord(schema.properties);\n }\n if (schema.patternProperties) {\n goOnRecord(schema.patternProperties);\n }\n if (schema.propertyNames) {\n go(schema.propertyNames);\n }\n if (schema.definitions) {\n goOnRecord(schema.definitions);\n }\n if (schema.items) {\n maybeGoOnArray(schema.items);\n }\n if (schema.additionalItems) {\n maybeGoOnArray(schema.additionalItems);\n }\n if (schema.contains) {\n go(schema.contains);\n }\n if (schema.if) {\n go(schema.if);\n }\n if (schema.then) {\n go(schema.then);\n }\n if (schema.else) {\n go(schema.else);\n }\n if (schema.allOf) {\n maybeGoOnArray(schema.allOf);\n }\n if (schema.anyOf) {\n maybeGoOnArray(schema.anyOf);\n }\n if (schema.oneOf) {\n maybeGoOnArray(schema.oneOf);\n }\n if (schema.not) {\n go(schema.not);\n }\n if (schema.$defs) {\n goOnRecord(schema.$defs);\n }\n if (schema.reference) {\n go(schema.reference.schema);\n }\n};\n\nconst maybeGoOnArray = (value: any) => {\n if (Array.isArray(value)) {\n for (const item of value) {\n go(item);\n }\n } else if (typeof value === 'object' && value !== null) {\n go(value);\n }\n};\n\nconst goOnRecord = (record: Record<string, any>) => {\n for (const key of Object.keys(record)) {\n go(record[key]);\n }\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport * as Schema from 'effect/Schema';\nimport * as SchemaAST from 'effect/SchemaAST';\n\nimport { invariant } from '@dxos/invariant';\nimport { DXN } from '@dxos/keys';\n\nimport { type TypeAnnotation, TypeAnnotationId, makeTypeJsonSchemaAnnotation } from '../Annotation';\nimport { EntityKind } from '../common/types';\nimport { toJsonSchema } from '../JsonSchema';\nimport { type EchoTypeSchema, makeEchoTypeSchema } from './entity';\n\n/**\n * Object schema type with kind marker.\n */\nexport type EchoObjectSchema<\n Self extends Schema.Schema.Any,\n Fields extends Schema.Struct.Fields = Schema.Struct.Fields,\n> = EchoTypeSchema<Self, {}, EntityKind.Object, Fields>;\n\n/**\n * Schema for Obj entity types.\n * Pipeable function to add ECHO object annotations to a schema.\n */\nexport const EchoObjectSchema: {\n (\n dxn: DXN.DXN,\n ): <Self extends Schema.Schema.Any, Fields extends Schema.Struct.Fields = Schema.Struct.Fields>(\n self: Self & { fields?: Fields },\n ) => EchoObjectSchema<Self, Fields>;\n} = (dxn) => {\n const typename = DXN.getName(dxn);\n const version = DXN.getVersion(dxn);\n invariant(version, `Type.makeObject requires a versioned DXN: ${dxn}`);\n\n return <Self extends Schema.Schema.Any, Fields extends Schema.Struct.Fields = Schema.Struct.Fields>(\n self: Self & { fields?: Fields },\n ): EchoObjectSchema<Self, Fields> => {\n invariant(typeof TypeAnnotationId === 'symbol', 'Sanity.');\n invariant(SchemaAST.isTypeLiteral(self.ast), 'Schema must be a TypeLiteral.');\n\n // Extract fields from the schema if available (Struct schemas have .fields).\n const fields = ((self as any).fields ?? {}) as Fields;\n\n const schemaWithId = Schema.extend(self, Schema.Struct({ id: Schema.String }));\n const ast = SchemaAST.annotations(schemaWithId.ast, {\n // TODO(dmaretskyi): `extend` kills the annotations.\n ...self.ast.annotations,\n [TypeAnnotationId]: { kind: EntityKind.Object, typename, version } satisfies TypeAnnotation,\n // TODO(dmaretskyi): TypeIdentifierAnnotationId?\n [SchemaAST.JSONSchemaAnnotationId]: makeTypeJsonSchemaAnnotation({\n kind: EntityKind.Object,\n typename,\n version,\n }),\n });\n\n return makeEchoTypeSchema<Self, EntityKind.Object, Fields>(fields, ast, typename, version, EntityKind.Object, () =>\n toJsonSchema(Schema.make(ast)),\n );\n };\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport * as Schema from 'effect/Schema';\nimport * as SchemaAST from 'effect/SchemaAST';\n\nimport { raise } from '@dxos/debug';\nimport { assertArgument, invariant } from '@dxos/invariant';\nimport { DXN } from '@dxos/keys';\n\n// Type-only imports (erased at runtime — no import cycle); `internal` may depend\n// on the top-level `Obj` / `Type` API at the type level only.\nimport type * as Obj from '../../Obj';\nimport type * as Type from '../../Type';\nimport {\n type TypeAnnotation,\n TypeAnnotationId,\n getEntityKind,\n getSchemaTypename,\n getTypeIdentifierAnnotation,\n makeTypeJsonSchemaAnnotation,\n} from '../Annotation';\nimport {\n ATTR_RELATION_SOURCE,\n ATTR_RELATION_TARGET,\n EntityKind,\n RelationSourceDXNId,\n RelationSourceId,\n RelationTargetDXNId,\n RelationTargetId,\n type UnknownTypeSchema,\n getStaticTypeSchema,\n} from '../common/types';\n\nexport {\n ATTR_RELATION_SOURCE,\n ATTR_RELATION_TARGET,\n RelationSourceDXNId,\n RelationSourceId,\n RelationTargetDXNId,\n RelationTargetId,\n};\n\nimport { toJsonSchema } from '../JsonSchema';\nimport { type EchoTypeSchema, makeEchoTypeSchema } from './entity';\n\n/**\n * Source and target props on relations.\n */\n// TODO(burdon): any?\nexport type RelationSourceTargetRefs<Source = any, Target = any> = {\n /**\n * Source ECHO live object.\n */\n [RelationSourceId]: Source;\n\n /**\n * Target ECHO live object.\n */\n [RelationTargetId]: Target;\n};\n\nexport type RelationSource<R> = R extends RelationSourceTargetRefs<infer Source, infer _Target> ? Source : never;\nexport type RelationTarget<R> = R extends RelationSourceTargetRefs<infer _Source, infer Target> ? Target : never;\n\n/**\n * Accepted relation endpoint: an object-kind `Type.Type` entity (slot-backed)\n * or the branded `Obj.Unknown` schema. Source/target are constrained to these\n * — relations only connect object-kind entities.\n */\nexport type RelationEndpoint = Type.AnyObj | UnknownTypeSchema<any, EntityKind.Object>;\n\n/**\n * Resolves a relation endpoint to the instance type it describes — the source /\n * target instance recorded on the relation's `RelationSourceTargetRefs`.\n */\nexport type RelationEndpointInstance<S> =\n S extends UnknownTypeSchema<infer A, any> ? A : S extends Type.AnyObj ? Type.InstanceType<S> : unknown;\n\nexport type EchoRelationSchemaOptions<TSource extends RelationEndpoint, TTarget extends RelationEndpoint> = {\n dxn: DXN.DXN;\n source: TSource;\n target: TTarget;\n};\n\n/**\n * Relation schema type with kind marker. `SourceInstance` / `TargetInstance`\n * are the resolved endpoint instance types (see {@link RelationEndpointInstance}).\n */\nexport type EchoRelationSchema<\n Self extends Schema.Schema.Any,\n SourceInstance extends Obj.Unknown,\n TargetInstance extends Obj.Unknown,\n Fields extends Schema.Struct.Fields = Schema.Struct.Fields,\n> = EchoTypeSchema<Self, RelationSourceTargetRefs<SourceInstance, TargetInstance>, EntityKind.Relation, Fields>;\n\n/**\n * Schema for Relation entity types.\n */\nexport const EchoRelationSchema = <Source extends RelationEndpoint, Target extends RelationEndpoint>({\n dxn,\n source,\n target,\n}: EchoRelationSchemaOptions<Source, Target>) => {\n // `source` / `target` are `Type.Type` entities (slot-backed) or the branded\n // `Obj.Unknown` schema (used directly); resolve each to its Effect Schema for\n // the schema-side machinery (DXN ref + entity-kind checks).\n const sourceSchema = source != null ? (getStaticTypeSchema(source) ?? source) : source;\n const targetSchema = target != null ? (getStaticTypeSchema(target) ?? target) : target;\n assertArgument(Schema.isSchema(sourceSchema), 'source');\n assertArgument(Schema.isSchema(targetSchema), 'target');\n const typename = DXN.getName(dxn);\n const version = DXN.getVersion(dxn);\n invariant(version, `Type.makeRelation requires a versioned DXN: ${dxn}`);\n const sourceDXN = getDXNForRelationSchemaRef(sourceSchema);\n const targetDXN = getDXNForRelationSchemaRef(targetSchema);\n if (getEntityKind(sourceSchema) !== EntityKind.Object) {\n raise(new Error('Source schema must be an echo object schema.'));\n }\n if (getEntityKind(targetSchema) !== EntityKind.Object) {\n raise(new Error('Target schema must be an echo object schema.'));\n }\n\n return <Self extends Schema.Schema.Any, Fields extends Schema.Struct.Fields = Schema.Struct.Fields>(\n self: Self & { fields?: Fields },\n ): EchoRelationSchema<Self, RelationEndpointInstance<Source>, RelationEndpointInstance<Target>, Fields> => {\n invariant(SchemaAST.isTypeLiteral(self.ast), 'Schema must be a TypeLiteral.');\n\n // Extract fields from the schema if available (Struct schemas have .fields).\n const fields = ((self as any).fields ?? {}) as Fields;\n\n const schemaWithId = Schema.extend(self, Schema.Struct({ id: Schema.String }));\n const ast = SchemaAST.annotations(schemaWithId.ast, {\n // TODO(dmaretskyi): `extend` kills the annotations.\n ...self.ast.annotations,\n [TypeAnnotationId]: {\n kind: EntityKind.Relation,\n typename,\n version,\n sourceSchema: sourceDXN,\n targetSchema: targetDXN,\n } satisfies TypeAnnotation,\n // TODO(dmaretskyi): TypeIdentifierAnnotationId?\n\n [SchemaAST.JSONSchemaAnnotationId]: makeTypeJsonSchemaAnnotation({\n kind: EntityKind.Relation,\n typename,\n version,\n relationSource: sourceDXN,\n relationTarget: targetDXN,\n }),\n });\n\n return makeEchoTypeSchema<Self, EntityKind.Relation, Fields>(\n fields,\n ast,\n typename,\n version,\n EntityKind.Relation,\n () => toJsonSchema(Schema.make(ast)),\n );\n };\n};\n\nexport const getDXNForRelationSchemaRef = (schema: Schema.Schema.Any): DXN.DXN => {\n assertArgument(Schema.isSchema(schema), 'schema');\n const identifier = getTypeIdentifierAnnotation(schema);\n if (identifier) {\n return DXN.tryMake(identifier) ?? raise(new Error(`Invalid schema identifier: ${identifier}`));\n }\n\n const typename = getSchemaTypename(schema);\n if (!typename) {\n throw new Error('Schema must have a typename');\n }\n\n return DXN.make(typename);\n};\n", "//\n// Copyright 2026 DXOS.org\n//\n\nimport * as Schema from 'effect/Schema';\nimport * as SchemaAST from 'effect/SchemaAST';\n\nimport { invariant } from '@dxos/invariant';\nimport { DXN } from '@dxos/keys';\n\nimport { type TypeAnnotation, TypeAnnotationId, makeTypeJsonSchemaAnnotation } from '../Annotation';\nimport { EntityKind } from '../common/types';\nimport { toJsonSchema } from '../JsonSchema';\nimport { type EchoTypeSchema, makeEchoTypeSchema } from './entity';\n\n/**\n * Type-kind schema marker — produced by {@link EchoTypeKindSchema}.\n *\n * Distinguishes meta-schemas (entities of `EntityKind.Type`, such as the\n * built-in `Type.Type` TypeSchema) from object and relation types.\n */\nexport type EchoTypeKindSchema<\n Self extends Schema.Schema.Any,\n Fields extends Schema.Struct.Fields = Schema.Struct.Fields,\n> = EchoTypeSchema<Self, {}, EntityKind.Type, Fields>;\n\n/**\n * Pipeable that brands a schema as a type-kind ECHO entity. Mirrors\n * {@link EchoObjectSchema} / {@link EchoRelationSchema}, but stamps the\n * resulting entity with `[SchemaKindId]: EntityKind.Type` and a matching\n * `TypeAnnotation.kind = 'type'` so meta-schemas surface uniformly through\n * `Type.isTypeKindSchema`, `Filter.type`, etc.\n */\nexport const EchoTypeKindSchema: {\n (\n dxn: DXN.DXN,\n ): <Self extends Schema.Schema.Any, Fields extends Schema.Struct.Fields = Schema.Struct.Fields>(\n self: Self & { fields?: Fields },\n ) => EchoTypeKindSchema<Self, Fields>;\n} = (dxn) => {\n const typename = DXN.getName(dxn);\n const version = DXN.getVersion(dxn);\n invariant(version, `Type-kind schemas require a versioned DXN: ${dxn}`);\n\n return <Self extends Schema.Schema.Any, Fields extends Schema.Struct.Fields = Schema.Struct.Fields>(\n self: Self & { fields?: Fields },\n ): EchoTypeKindSchema<Self, Fields> => {\n invariant(SchemaAST.isTypeLiteral(self.ast), 'Schema must be a TypeLiteral.');\n\n const fields = ((self as any).fields ?? {}) as Fields;\n\n const schemaWithId = Schema.extend(self, Schema.Struct({ id: Schema.String }));\n const ast = SchemaAST.annotations(schemaWithId.ast, {\n ...self.ast.annotations,\n [TypeAnnotationId]: { kind: EntityKind.Type, typename, version } satisfies TypeAnnotation,\n [SchemaAST.JSONSchemaAnnotationId]: makeTypeJsonSchemaAnnotation({\n kind: EntityKind.Type,\n typename,\n version,\n }),\n });\n\n return makeEchoTypeSchema<Self, EntityKind.Type, Fields>(fields, ast, typename, version, EntityKind.Type, () =>\n toJsonSchema(Schema.make(ast)),\n );\n };\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { assertArgument } from '@dxos/invariant';\n\nimport { type AnyEntity, VersionTypeId } from '../common/types';\nimport { ObjectVersionId } from './model';\n\n/**\n * Represent entity version.\n * May be backed by Automerge.\n * Entities with no history are not versioned.\n * Named EntityVersion to avoid conflict with types/version.ts.\n */\nexport interface EntityVersion {\n [VersionTypeId]: {};\n\n /**\n * Whether the entity is versioned.\n */\n versioned: boolean;\n\n /**\n * Automerge heads.\n */\n automergeHeads?: string[];\n}\n\nconst unversioned: EntityVersion = {\n [VersionTypeId]: {},\n versioned: false,\n};\n\n/**\n * Checks that `obj` is a version object.\n */\nexport const isVersion = (entity: unknown): entity is EntityVersion => {\n return entity != null && typeof entity === 'object' && VersionTypeId in entity;\n};\n\n/**\n * Returns the version of an entity.\n * Accepts both reactive entities and snapshots.\n */\nexport const version = (entity: AnyEntity): EntityVersion => {\n const ver = (entity as any)[ObjectVersionId];\n if (ver === undefined) {\n return unversioned;\n }\n return ver;\n};\n\n/**\n * Checks that `version` is a valid version object.\n */\nexport const versionValid = (ver: EntityVersion): boolean => {\n assertArgument(isVersion(ver), 'version', 'Invalid version object');\n return !!ver.versioned;\n};\n\nexport type VersionCompareResult = 'unversioned' | 'equal' | 'different';\n\n/**\n * Compares two versions.\n * @param version1\n * @param version2\n * @returns 'unversioned' if either entity is unversioned, 'equal' if the versions are equal, 'different' if the versions are different.\n */\nexport const compareVersions = (version1: EntityVersion, version2: EntityVersion): VersionCompareResult => {\n assertArgument(isVersion(version1), 'version1', 'Invalid version object');\n assertArgument(isVersion(version2), 'version2', 'Invalid version object');\n\n if (!versionValid(version1) || !versionValid(version2)) {\n return 'unversioned';\n }\n\n if (version1.automergeHeads?.length !== version2.automergeHeads?.length) {\n return 'different';\n }\n if (version1.automergeHeads?.some((head) => !version2.automergeHeads?.includes(head))) {\n return 'different';\n }\n\n return 'equal';\n};\n\nexport const encodeVersion = (ver: EntityVersion): string => {\n return JSON.stringify(ver);\n};\n\nexport const decodeVersion = (ver: string): EntityVersion => {\n const parsed = JSON.parse(ver);\n parsed[VersionTypeId] = {};\n return parsed;\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport * as Schema from 'effect/Schema';\n\nimport { getTypename } from '../Annotation';\nimport { type AnyProperties } from '../common/types';\n\n// TODO(dmaretskyi): Rename to represent commonality between objects and relations (e.g. `entity`).\nexport type TypedObjectOptions = {\n // TODO(burdon): Document.\n partial?: true;\n // TODO(burdon): Document.\n record?: true;\n};\n\n/**\n *\n */\n// TODO(burdon): Comment required.\n// TODO(dmaretskyi): Rename to represent commonality between objects and relations (e.g. `entity`).\ntype SimplifiedSchemaFields<\n SchemaFields extends Schema.Struct.Fields,\n Options extends TypedObjectOptions,\n> = Options['partial'] extends boolean\n ? Schema.SimplifyMutable<Partial<Schema.Struct.Type<SchemaFields>>>\n : Schema.SimplifyMutable<Schema.Struct.Type<SchemaFields>>;\n\n/**\n *\n */\n// TODO(burdon): Comment required.\n// TODO(dmaretskyi): Rename to represent commonality between objects and relations (e.g. `entity`).\nexport type TypedObjectFields<\n SchemaFields extends Schema.Struct.Fields,\n Options extends TypedObjectOptions,\n> = SimplifiedSchemaFields<SchemaFields, Options> & { id: string } & (Options['record'] extends boolean\n ? Schema.SimplifyMutable<Schema.IndexSignature.Type<Schema.IndexSignature.Records>>\n : {});\n\nexport const makeTypedEntityClass = (\n typename: string,\n version: string,\n baseSchema: Schema.Schema.AnyNoContext,\n): Schema.SchemaClass<any> => {\n return class {\n // Implement TypedObject properties.\n static readonly typename = typename;\n static readonly version = version;\n\n // Implement Schema.Schema properties.\n // TODO(burdon): Comment required.\n static readonly [Schema.TypeId] = schemaVariance;\n static readonly ast = baseSchema.ast;\n static readonly annotations = baseSchema.annotations.bind(baseSchema);\n static readonly pipe = baseSchema.pipe.bind(baseSchema);\n\n // TODO(burdon): Comment required.\n static [Symbol.hasInstance](obj: AnyProperties) {\n return obj != null && getTypename(obj) === typename;\n }\n\n // TODO(burdon): Throw APIError.\n private constructor() {\n throw new Error('Use live(Typename, { ...fields }) to instantiate an object.');\n }\n } as any;\n};\n\nconst schemaVariance = {\n _A: (_: any) => _,\n _I: (_: any) => _,\n _R: (_: never) => _,\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { raise } from '@dxos/debug';\nimport { assertArgument, failedInvariant } from '@dxos/invariant';\nimport { ObjectId } from '@dxos/keys';\n\nimport type * as Type from '../../Type';\nimport { getSchemaURI, getTypeAnnotation, setTypename } from '../Annotation';\nimport { defineHiddenProperty } from '../common/proxy';\nimport {\n EntityKind,\n KindId,\n MetaId,\n type ObjectMeta,\n SchemaKindId,\n StaticTypeSchemaSlot,\n getStaticTypeSchema,\n setSchema,\n setType,\n} from '../common/types';\nimport {\n RelationSourceDXNId,\n RelationSourceId,\n RelationTargetDXNId,\n RelationTargetId,\n assertObjectModel,\n getObjectEchoUri,\n} from '../Entity';\nimport { attachedTypedObjectInspector } from './inspect';\nimport { attachTypedJsonSerializer } from './json-serializer';\n\n// Omits the brand slots — those get stamped on the instance by the entity\n// handler (KindId via setKind, SchemaKindId derived in the proxy `get` trap\n// from kind + jsonSchema.entityKind, StaticTypeSchemaSlot lazily via the\n// proxy), not supplied by the caller. Allows `[Obj.Meta]` (MetaId symbol) for\n// seeding registry-provenance meta at construction (mirrors `Obj.make`).\nexport type CreateObjectProps<T> = (T extends { id: string }\n ? Omit<T, 'id' | KindId | SchemaKindId | StaticTypeSchemaSlot> & { id?: string }\n : Omit<T, KindId | SchemaKindId | StaticTypeSchemaSlot>) & {\n readonly [MetaId]?: Partial<ObjectMeta>;\n};\n\n/**\n * Creates a new object instance from a schema and data, without signal reactivity.\n * This static version creates plain JavaScript objects that are not reactive/observable.\n * For reactive objects that automatically update UI when changed, use the regular live() function.\n *\n * @param schema - The Effect schema that defines the object's structure and type, piped into EchoObjectSchema\n * @param data - The data to initialize the object with. The id and @type fields are handled automatically.\n * @returns A new non-reactive object instance conforming to the schema\n * @throws {Error} If the schema is not an object schema\n * @throws {TypeError} If data contains an @type field\n *\n * @example\n * ```ts\n * const Contact = Schema.Struct({\n * name: Schema.String,\n * email: Schema.String,\n * }).pipe(Type.makeObject(DXN.make('com.example.type.person', '0.1.0')))\n *\n * const contact = createObject(Contact, {\n * name: \"John\",\n * email: \"john@example.com\",\n * })\n * ```\n */\n// TODO(burdon): Make internal.\nexport const createObject: {\n <T extends Type.AnyEntity>(input: T, props: NoInfer<CreateObjectProps<Type.InstanceType<T>>>): Type.InstanceType<T>;\n} = (input: any, props: any): any => {\n // `Type.Type` entities aren't `Schema.Schema` themselves; read the source\n // schema off the hidden slot (persisted entities synthesize it lazily via\n // the proxy `get` trap).\n const schema = getStaticTypeSchema(input) ?? failedInvariant('Type entity is missing its source schema');\n const annotation = getTypeAnnotation(schema);\n if (!annotation) {\n throw new Error('Schema is not an ECHO schema');\n }\n assertArgument(!('@type' in props), 'data', '@type is not allowed');\n assertArgument(!(RelationSourceDXNId in props), 'data', 'Relation source DXN is not allowed in the constructor');\n assertArgument(!(RelationTargetDXNId in props), 'data', 'Relation target DXN is not allowed in the constructor');\n assertArgument(\n RelationSourceId in props === RelationTargetId in props,\n 'data',\n 'Relation source and target must be provided together',\n );\n\n // Pull `[Obj.Meta]` (MetaId-symbol) off props before spreading so it doesn't\n // leak into data. Callers use this to seed registry-provenance meta fields\n // (`key`, `version`) and foreign keys / tags at construction time, mirroring\n // `Obj.make`'s symbol-keyed meta convention.\n const metaOverride = props[MetaId];\n if (metaOverride !== undefined) {\n delete props[MetaId];\n }\n\n // Raw object.\n const obj = { ...props, id: props.id ?? ObjectId.random() };\n\n // Metadata. Instance-kind is read from the schema's TypeAnnotation (set by\n // EchoObjectSchema / EchoRelationSchema / EchoTypeKindSchema): instances of\n // a type-kind meta-schema are themselves type-kind entities, etc. The\n // RelationSourceId-in-props check covers the legacy path where the schema\n // annotation isn't authoritative.\n const kind =\n annotation.kind === EntityKind.Type\n ? EntityKind.Type\n : annotation.kind === EntityKind.Relation || RelationSourceId in props\n ? EntityKind.Relation\n : EntityKind.Object;\n defineHiddenProperty(obj, KindId, kind);\n defineHiddenProperty(obj, MetaId, { keys: [], ...metaOverride });\n setSchema(obj, schema);\n // If the caller passed a type entity (recognised via the schema slot), keep\n // a reference to it on the instance for `Obj.getType` / `Relation.getType`.\n if (input !== schema) {\n setType(obj, input);\n }\n setTypename(obj, getSchemaURI(schema) ?? failedInvariant('Missing schema URI'));\n attachTypedJsonSerializer(obj);\n attachedTypedObjectInspector(obj);\n\n // Relation.\n if (kind === EntityKind.Relation) {\n const sourceDXN = getObjectEchoUri(props[RelationSourceId]) ?? raise(new Error('Unresolved relation source'));\n const targetDXN = getObjectEchoUri(props[RelationTargetId]) ?? raise(new Error('Unresolved relation target'));\n defineHiddenProperty(obj, RelationSourceDXNId, sourceDXN);\n defineHiddenProperty(obj, RelationTargetDXNId, targetDXN);\n }\n\n assertObjectModel(obj);\n return obj;\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport type { InspectOptionsStylized, inspect as inspectFn } from 'node:util';\n\nimport { type CustomInspectFunction, inspectCustom } from '@dxos/debug';\n\nimport { getTypeURI } from '../Annotation';\nimport { ATTR_META, ATTR_TYPE, type AnyEntity, MetaId } from '../common/types';\n\n/*\n * @internal\n */\nexport const attachedTypedObjectInspector = (obj: any) => {\n const descriptor = Object.getOwnPropertyDescriptor(obj, inspectCustom);\n if (descriptor) {\n return;\n }\n\n Object.defineProperty(obj, inspectCustom, {\n value: typedObjectInspectFunction,\n writable: false,\n enumerable: false,\n configurable: true,\n });\n};\n\n// NOTE: KEEP as function.\nconst typedObjectInspectFunction: CustomInspectFunction<AnyEntity> = function (\n this: AnyEntity,\n depth: number,\n options: InspectOptionsStylized,\n inspect: typeof inspectFn,\n) {\n const { id, ...props } = this;\n return inspect(\n {\n id,\n [ATTR_TYPE]: getTypeURI(this),\n ...props,\n [ATTR_META]: (this as any)[MetaId], // TODO(dmaretskyi): Couldn't use getMeta since that throw's if the object has no meta.\n },\n options,\n );\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport * as Schema from 'effect/Schema';\n\nimport { raise } from '@dxos/debug';\nimport { type EncodedReference, ObjectStructure, isEncodedReference } from '@dxos/echo-protocol';\nimport { assertArgument, invariant } from '@dxos/invariant';\nimport { EchoURI, ObjectId, URI } from '@dxos/keys';\nimport { assumeType, decodeUint8ArrayFromJson, deepMapValues, isEncodedUint8Array, visitValues } from '@dxos/util';\n\nimport type * as Database from '../../Database';\nimport type * as Obj from '../../Obj';\nimport { getTypeAnnotation, getTypeURI, setTypename } from '../Annotation';\nimport { attachTypedJsonSerializer, defineHiddenProperty, typedJsonSerializer } from '../common/proxy';\nimport {\n ATTR_META,\n ATTR_PARENT,\n ATTR_TYPE,\n type AnyEntity,\n EntityKind,\n KindId,\n MetaId,\n ObjectMetaSchema,\n ParentId,\n setSchema,\n setType,\n} from '../common/types';\nimport {\n ATTR_DELETED,\n ATTR_RELATION_SOURCE,\n ATTR_RELATION_TARGET,\n ATTR_SELF_URI,\n ATTR_SELF_URI_LEGACY,\n ObjectDatabaseId,\n type ObjectJSON,\n RelationSourceDXNId,\n RelationSourceId,\n RelationTargetDXNId,\n RelationTargetId,\n SelfURIId,\n assertObjectModel,\n} from '../Entity';\nimport { Ref, type RefResolver, refFromEncodedReference, setRefResolver } from '../Ref';\n\n// Re-export for backward compatibility.\nexport { attachTypedJsonSerializer };\n\ntype DeepReplaceRef<T> =\n T extends Ref<any>\n ? EncodedReference\n : T extends object\n ? {\n [K in keyof T]: DeepReplaceRef<T[K]>;\n }\n : T;\n\ntype SerializedObject<T extends { id: string }> = {\n [K in keyof T]: DeepReplaceRef<T[K]>;\n} & ObjectJSON;\n\n/**\n * Converts object to it's JSON representation.\n */\nexport const objectToJSON = <T extends AnyEntity>(obj: T): SerializedObject<T> => {\n const typename = getTypeURI(obj);\n invariant(typename && typeof typename === 'string');\n return typedJsonSerializer.call(obj);\n};\n\n/**\n * Creates an object from it's json representation.\n * Performs schema validation.\n * References and schema will be resolvable if the `refResolver` is provided.\n * The function need to be async to support resolving the schema as well as the relation endpoints.\n *\n * @param jsonData - JSON representation of the object.\n * @param options.refResolver - Resolver for references.\n * @param options.uri - Override object URI.\n * @param options.database - Database to associate with the object.\n */\nexport const objectFromJSON = async (\n jsonData: unknown,\n {\n refResolver,\n uri,\n database,\n parent,\n }: { refResolver?: RefResolver; uri?: URI.URI; database?: Database.Database; parent?: Obj.Unknown } = {},\n): Promise<AnyEntity> => {\n assumeType<ObjectJSON>(jsonData);\n assertArgument(typeof jsonData === 'object' && jsonData !== null, 'jsonData', 'expect object');\n assertArgument(typeof jsonData[ATTR_TYPE] === 'string', 'jsonData[ATTR_TYPE]', 'expected object to have a type');\n assertArgument(typeof jsonData.id === 'string', 'jsonData.id', 'expected object to have an id');\n\n const type = URI.make(jsonData[ATTR_TYPE]);\n const schema = await refResolver?.resolveSchema(type);\n invariant(schema === undefined || Schema.isSchema(schema));\n const decodedInput = restoreUint8Arrays(stripInternalJsonKeys(jsonData));\n\n let obj: any;\n if (schema != null) {\n obj = await schema.pipe(Schema.decodeUnknownPromise)(decodedInput);\n if (refResolver) {\n setRefResolverOnData(obj, refResolver);\n }\n } else {\n obj = decodeGeneric(decodedInput, { refResolver });\n }\n\n invariant(ObjectId.isValid(obj.id), 'Invalid object id');\n setTypename(obj, type);\n if (schema) {\n setSchema(obj, schema);\n }\n // Resolve and stamp the source type entity, if the resolver provides one.\n // Lets `Obj.getType` / `Entity.getType` return a stable entity for objects\n // loaded via `Obj.fromJSON` (serializer / queue paths).\n if (refResolver?.resolveType) {\n const typeEntity = await refResolver.resolveType(type);\n if (typeEntity != null) {\n setType(obj, typeEntity);\n }\n }\n\n const isRelation =\n typeof jsonData[ATTR_RELATION_SOURCE] === 'string' || typeof jsonData[ATTR_RELATION_TARGET] === 'string';\n if (isRelation) {\n const sourceDxn = jsonData[ATTR_RELATION_SOURCE] ?? raise(new TypeError('Missing relation source'));\n const targetDxn = jsonData[ATTR_RELATION_TARGET] ?? raise(new TypeError('Missing relation target'));\n\n const source = (await refResolver?.resolve(sourceDxn)) as AnyEntity | undefined;\n const target = (await refResolver?.resolve(targetDxn)) as AnyEntity | undefined;\n\n defineHiddenProperty(obj, KindId, EntityKind.Relation);\n defineHiddenProperty(obj, RelationSourceDXNId, sourceDxn);\n defineHiddenProperty(obj, RelationTargetDXNId, targetDxn);\n defineHiddenProperty(obj, RelationSourceId, source);\n defineHiddenProperty(obj, RelationTargetId, target);\n } else {\n // Honour the schema's TypeAnnotation kind — persisted `Type.Type` entities\n // (e.g. dynamic schemas loaded from a snapshot import) must brand as\n // `KindId = Type`, not Object, otherwise `Filter.type(Type.Type)` /\n // `Type.isType` skip them and the schema registry never picks them up.\n // Mirrors the kind resolution in `createObject` (the in-memory path).\n const annotationKind = schema != null ? getTypeAnnotation(schema)?.kind : undefined;\n defineHiddenProperty(obj, KindId, annotationKind === EntityKind.Type ? EntityKind.Type : EntityKind.Object);\n }\n\n if (typeof jsonData[ATTR_META] === 'object') {\n const meta = await ObjectMetaSchema.pipe(Schema.decodeUnknownPromise)(jsonData[ATTR_META]);\n invariant(Array.isArray(meta.keys));\n defineHiddenProperty(obj, MetaId, meta);\n } else {\n defineHiddenProperty(obj, MetaId, {\n keys: [],\n });\n }\n\n if (jsonData[ATTR_PARENT]) {\n const parentDxn = jsonData[ATTR_PARENT];\n const resolvedParent = (await refResolver?.resolve(parentDxn)) as Obj.Unknown | undefined;\n defineHiddenProperty(obj, ParentId, resolvedParent);\n } else if (parent) {\n defineHiddenProperty(obj, ParentId, parent);\n }\n\n if (uri) {\n defineHiddenProperty(obj, SelfURIId, uri);\n }\n\n if (database) {\n defineHiddenProperty(obj, ObjectDatabaseId, database);\n }\n\n assertObjectModel(obj);\n invariant((obj as any)[ATTR_TYPE] === undefined, 'Invalid object model');\n invariant((obj as any)[ATTR_META] === undefined, 'Invalid object model');\n invariant((obj as any)[ATTR_DELETED] === undefined, 'Invalid object model');\n invariant((obj as any)[ATTR_SELF_URI] === undefined, 'Invalid object model');\n invariant((obj as any)[ATTR_SELF_URI_LEGACY] === undefined, 'Invalid object model');\n invariant((obj as any)[ATTR_RELATION_SOURCE] === undefined, 'Invalid object model');\n invariant((obj as any)[ATTR_RELATION_TARGET] === undefined, 'Invalid object model');\n return obj;\n};\n\nconst decodeGeneric = (jsonData: unknown, options: { refResolver?: RefResolver }) => {\n const props = stripInternalJsonKeys(jsonData);\n\n return deepMapValues(props, (value, visitor) => {\n if (isEncodedReference(value)) {\n return refFromEncodedReference(value, options.refResolver);\n }\n if (isEncodedUint8Array(value)) {\n return decodeUint8ArrayFromJson(value);\n }\n\n return visitor(value);\n });\n};\n\n/**\n * Recursively replaces encoded `Uint8Array` JSON markers with actual `Uint8Array` instances.\n * Runs before schema decoding so `Schema.Uint8ArrayFromSelf` sees real bytes.\n */\nconst restoreUint8Arrays = (data: unknown): any =>\n deepMapValues(data, (value, recurse) => {\n if (isEncodedUint8Array(value)) {\n return decodeUint8ArrayFromJson(value);\n }\n return recurse(value);\n });\n\nconst stripInternalJsonKeys = (jsonData: unknown) => {\n const {\n [ATTR_TYPE]: _type,\n [ATTR_META]: _meta,\n [ATTR_DELETED]: _deleted,\n [ATTR_SELF_URI]: _selfUri,\n [ATTR_SELF_URI_LEGACY]: _legacySelfUri,\n [ATTR_RELATION_SOURCE]: _relationSource,\n [ATTR_RELATION_TARGET]: _relationTarget,\n ...props\n } = jsonData as any;\n\n return props;\n};\n\nexport const setRefResolverOnData = (obj: AnyEntity, refResolver: RefResolver) => {\n const visitor = (value: unknown) => {\n if (Ref.isRef(value)) {\n setRefResolver(value, refResolver);\n } else {\n visitValues(value, visitor);\n }\n };\n\n visitor(obj);\n};\n\n/**\n * Convert ObjectStructure to JSON data for indexing.\n * Different from {@link objectToJSON} as it takes the internal {@link ObjectStructure} representation directly\n */\nexport const objectStructureToJson = (objectId: ObjectId, structure: ObjectStructure): Obj.JSON => {\n const typeRef = ObjectStructure.getTypeReference(structure)?.['/'];\n const parent = ObjectStructure.getParent(structure)?.['/'];\n const source = ObjectStructure.getRelationSource(structure)?.['/'];\n const target = ObjectStructure.getRelationTarget(structure)?.['/'];\n return {\n ...structure.data,\n id: objectId,\n [ATTR_TYPE]: typeRef ? URI.make(typeRef) : undefined,\n [ATTR_DELETED]: ObjectStructure.isDeleted(structure),\n [ATTR_PARENT]: parent !== undefined ? EchoURI.tryParse(parent) : undefined,\n [ATTR_RELATION_SOURCE]: source !== undefined ? EchoURI.tryParse(source) : undefined,\n [ATTR_RELATION_TARGET]: target !== undefined ? EchoURI.tryParse(target) : undefined,\n };\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { type AnyProperties } from '../common/types';\nimport { ObjectDeletedId } from '../Entity';\n\n/**\n * @returns `true` if the object has been marked as deleted.\n */\nexport const isDeleted = (obj: AnyProperties): boolean => {\n if ((obj as any)[ObjectDeletedId] === undefined) {\n // TODO(dmaretskyi): Return to prior behavior of throwing.\n // throw new Error('Object does not support deletion marker');\n return false;\n }\n\n return (obj as any)[ObjectDeletedId] ?? false;\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport * as Match from 'effect/Match';\nimport * as Option from 'effect/Option';\nimport * as SchemaAST from 'effect/SchemaAST';\n\nimport {\n type SchemaProperty,\n getArrayElementType,\n getBaseType,\n getProperties,\n isArrayType,\n isNestedType,\n} from '@dxos/effect';\nimport { invariant } from '@dxos/invariant';\n\nimport { type Mutable } from '../common/proxy';\nimport { getSchema } from '../common/types';\n\n/**\n * Set a deeply nested property on an object.\n * Must be called within an Obj.update or Relation.update callback.\n */\nexport const setValue = (obj: Mutable<any>, path: readonly (string | number)[], value: any): void => {\n invariant(path.length > 0, 'Path must not be empty');\n\n const schema = getSchema(obj);\n invariant(schema != null, 'Object must have a schema');\n\n let parent = obj;\n let currentAST: SchemaAST.AST | undefined = schema.ast;\n\n // Navigate to the parent of the target property.\n for (let i = 0; i < path.length - 1; i++) {\n const part = path[i];\n const key = typeof part === 'number' ? part : String(part);\n if (parent[key] === undefined) {\n const propertyAST = getPropertyAST(currentAST, String(part));\n const shouldBeArray = propertyAST ? isArrayType(propertyAST) : false;\n\n if (shouldBeArray) {\n // Create array.\n parent[key] = [];\n } else {\n // TODO(wittjosiah): Is there a better way to handle this than creating an object with defaults?\n // Perhaps properties on objects should be optional by default?\n // Create object with defaults for required fields.\n const objWithDefaults = createObjectWithDefaults(propertyAST);\n parent[key] = objWithDefaults;\n }\n }\n\n parent = parent[key];\n currentAST = getPropertyAST(currentAST, String(part));\n }\n\n const finalKey = path[path.length - 1];\n parent[finalKey] = value;\n\n return value;\n};\n\n/**\n * Helper to get the AST of a nested property.\n * @param ast - Current schema AST.\n * @param propertyName - Name of the property to get.\n * @returns The AST of the nested property, or undefined if not found.\n */\nconst getPropertyAST = (ast: SchemaAST.AST | undefined, propertyName: string): SchemaAST.AST | undefined => {\n if (!ast) {\n return undefined;\n }\n\n if (isNestedType(ast)) {\n const properties = getProperties(ast);\n const property = properties.find((p) => p.name.toString() === propertyName);\n if (property) {\n return getBaseType(property).type;\n }\n }\n\n if (isArrayType(ast)) {\n const elementType = getArrayElementType(ast);\n return elementType;\n }\n\n return undefined;\n};\n\n/**\n * Get all required properties from a schema AST.\n * A property is required if it's not optional.\n *\n * @param ast - Schema AST to inspect.\n * @returns Array of required properties with their types.\n */\nconst getRequiredProperties = (ast: SchemaAST.AST | undefined): SchemaProperty[] => {\n if (!ast) {\n return [];\n }\n\n // Only objects/structs have properties with optional/required distinction.\n if (!isNestedType(ast)) {\n return [];\n }\n\n const properties = getProperties(ast);\n\n // Filter to only required properties (where isOptional === false).\n return properties.filter((p) => !p.isOptional);\n};\n\n/**\n * Get the default value for a primitive type.\n * Returns undefined for non-primitive or unsupported types.\n *\n * @param ast - Type AST.\n * @returns Default value for the type, or undefined.\n */\nconst getDefaultValueForType = (ast: SchemaAST.AST | undefined): any => {\n if (!ast) {\n return undefined;\n }\n\n const defaultValue = SchemaAST.getDefaultAnnotation(ast);\n if (Option.isSome(defaultValue)) {\n return defaultValue.value;\n }\n\n return Match.value(ast).pipe(\n Match.when({ _tag: 'StringKeyword' }, () => ''),\n Match.when({ _tag: 'NumberKeyword' }, () => 0),\n Match.when({ _tag: 'BooleanKeyword' }, () => false),\n Match.orElse(() => undefined),\n );\n};\n\n/**\n * Create an object with default values for all required properties.\n * Handles primitive types (String, Number, Boolean) and recursively initializes required nested objects.\n *\n * @param ast - Schema AST describing the object structure.\n * @returns Object with required fields populated with defaults.\n */\nconst createObjectWithDefaults = (ast: SchemaAST.AST | undefined): any => {\n if (!ast) {\n return {};\n }\n\n const requiredProps = getRequiredProperties(ast);\n const obj: any = {};\n\n for (const prop of requiredProps) {\n const defaultValue = getDefaultValueForType(prop.type);\n if (defaultValue !== undefined) {\n obj[prop.name] = defaultValue;\n } else if (isNestedType(prop.type)) {\n obj[prop.name] = createObjectWithDefaults(prop.type);\n }\n }\n\n return obj;\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { assertArgument } from '@dxos/invariant';\nimport { deepMapValues } from '@dxos/util';\n\nimport {\n KindId,\n MetaId,\n ObjectDatabaseId,\n ObjectDeletedId,\n ParentId,\n RelationSourceDXNId,\n RelationSourceId,\n RelationTargetDXNId,\n RelationTargetId,\n SchemaId,\n SelfURIId,\n SnapshotKindId,\n TypeEntityId,\n TypeId,\n} from '../common/types';\n\n/**\n * Copy a Symbol-keyed property from source to target if it has a defined value.\n * Handles both plain objects (symbol in source) and proxies where get returns a value\n * but has/in returns false (e.g. ObjectDatabaseId on echo-db proxies).\n * Optional transform clones or mutates the value before assignment (e.g. for MetaId).\n */\nconst copySymbolProperty = (\n source: any,\n target: any,\n symbol: symbol,\n transform?: (value: unknown) => unknown,\n): void => {\n let value: unknown;\n // Echo-db proxy getters (e.g. RelationSourceId, RelationTargetId) can throw in certain states.\n try {\n value = source[symbol];\n } catch {\n return;\n }\n if (value !== undefined) {\n const finalValue = transform ? transform(value) : value;\n Object.defineProperty(target, symbol, {\n value: finalValue,\n writable: false,\n enumerable: false,\n configurable: false,\n });\n }\n};\n\n/**\n * Returns an immutable snapshot of the reactive object.\n * The snapshot is branded with SnapshotKindId (not KindId).\n */\nexport const getSnapshot = <T extends object>(obj: T): T => {\n assertArgument(typeof obj === 'object' && obj !== null && KindId in obj, 'obj', 'must be an entity');\n\n const snapshot = deepMapValues(obj, (value, recurse) => {\n // Do not recurse on references (but do recurse on arrays).\n if (\n typeof value === 'object' &&\n value !== null &&\n Object.getPrototypeOf(value) !== Object.prototype &&\n !Array.isArray(value)\n ) {\n return value;\n }\n\n return recurse(value);\n }) as any;\n\n // Add SnapshotKindId brand based on original KindId.\n if (obj != null && typeof obj === 'object' && KindId in obj) {\n snapshot[SnapshotKindId] = (obj as any)[KindId];\n }\n\n // Preserve Symbol-keyed properties that are important for type introspection.\n // These are not copied by deepMapValues since Object.keys() doesn't include symbols.\n const source = obj as any;\n\n // Type introspection symbols.\n copySymbolProperty(source, snapshot, TypeId);\n copySymbolProperty(source, snapshot, SchemaId);\n copySymbolProperty(source, snapshot, TypeEntityId);\n copySymbolProperty(source, snapshot, SelfURIId);\n\n // Database reference (required for Obj.getDatabase to work on snapshots).\n copySymbolProperty(source, snapshot, ObjectDatabaseId);\n copySymbolProperty(source, snapshot, ObjectDeletedId);\n\n // Parent reference (required for Obj.getParent to work on snapshots).\n copySymbolProperty(source, snapshot, ParentId);\n\n // Metadata symbol. Copy arrays so the snapshot is not affected by mutations to the live meta's keys/tags.\n copySymbolProperty(source, snapshot, MetaId, (meta: any) => ({\n keys: [...(meta?.keys ?? [])],\n tags: [...(meta?.tags ?? [])],\n }));\n\n // Relation endpoint symbols.\n copySymbolProperty(source, snapshot, RelationSourceDXNId);\n copySymbolProperty(source, snapshot, RelationTargetDXNId);\n copySymbolProperty(source, snapshot, RelationSourceId);\n copySymbolProperty(source, snapshot, RelationTargetId);\n\n return Object.freeze(snapshot) as T;\n};\n", "//\n// Copyright 2026 DXOS.org\n//\n\nimport { invariant } from '@dxos/invariant';\nimport { deepMapValues } from '@dxos/util';\n\nimport type * as Obj from '../../Obj';\nimport { makeObject } from '../common/proxy';\nimport { getMeta, getSchema, getStaticTypeSchema, getType } from '../common/types';\nimport { Ref } from '../Ref';\n\n/**\n * Clones an object or relation.\n * This does not clone referenced objects, only the properties in the object.\n * @returns A new object with the same schema and properties.\n */\nexport const clone = <T extends Obj.Any>(obj: T, opts?: Obj.CloneOptions): T => {\n const { id, ...data } = obj;\n // Prefer cloning through the type entity so the cloned instance preserves\n // `Obj.getType` identity. Falls back to the raw schema for older instances\n // that don't have a type-entity back-reference set (e.g. deserialized).\n const typeEntity = getType(obj);\n const schema = typeEntity != null ? getStaticTypeSchema(typeEntity) : getSchema(obj);\n invariant(schema != null, 'Object should have a type or schema');\n const props: any = deepMapValues(data, (value, recurse) => {\n if (Ref.isRef(value)) {\n if (opts?.deep) {\n // TODO(dmaretskyi): Will break on circular references.\n return Ref.make(clone(value.target!, opts));\n }\n return value;\n }\n return recurse(value);\n });\n\n if (opts?.retainId) {\n props.id = id;\n }\n const meta = deepMapValues(getMeta(obj), (value, recurse) => {\n if (Ref.isRef(value)) {\n if (opts?.deep) {\n // TODO(dmaretskyi): Will break on circular references.\n return Ref.make(clone(value.target!, opts));\n }\n return value;\n }\n return recurse(value);\n });\n\n return makeObject(schema, props, meta, typeEntity as object | undefined);\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { type QueryAST } from '@dxos/echo-protocol';\n\n/**\n * Returns a human-readable string representation of a Filter AST.\n */\nexport const prettyFilter = (filter: QueryAST.Filter): string => {\n switch (filter.type) {\n case 'object': {\n // A type-less object filter with only a meta-key constraint is `Filter.key(...)`.\n if (\n filter.typename === null &&\n (filter.id === undefined || filter.id.length === 0) &&\n Object.keys(filter.props).length === 0 &&\n (filter.foreignKeys === undefined || filter.foreignKeys.length === 0) &&\n filter.metaKey !== undefined\n ) {\n return filter.metaVersion !== undefined\n ? `Filter.key(${JSON.stringify(filter.metaKey)}, { version: ${JSON.stringify(filter.metaVersion)} })`\n : `Filter.key(${JSON.stringify(filter.metaKey)})`;\n }\n const parts: string[] = [];\n if (filter.typename !== null) {\n parts.push(String(filter.typename));\n }\n if (filter.id !== undefined && filter.id.length > 0) {\n parts.push(`id: [${filter.id.join(', ')}]`);\n }\n const propEntries = Object.entries(filter.props);\n if (propEntries.length > 0) {\n const propsStr = propEntries.map(([k, v]) => `${k}: ${prettyFilter(v)}`).join(', ');\n parts.push(`{ ${propsStr} }`);\n }\n if (filter.foreignKeys !== undefined && filter.foreignKeys.length > 0) {\n parts.push(`foreignKeys: [${filter.foreignKeys.map((fk) => JSON.stringify(fk)).join(', ')}]`);\n }\n if (filter.metaKey !== undefined) {\n parts.push(\n filter.metaVersion !== undefined\n ? `metaKey: ${JSON.stringify(filter.metaKey)} (${filter.metaVersion})`\n : `metaKey: ${JSON.stringify(filter.metaKey)}`,\n );\n }\n return parts.length > 0 ? `Filter.type(${parts.join(', ')})` : 'Filter.everything()';\n }\n case 'compare':\n return `Filter.${filter.operator}(${JSON.stringify(filter.value)})`;\n case 'in':\n return `Filter.in([${filter.values.map((v) => JSON.stringify(v)).join(', ')}])`;\n case 'contains':\n return `Filter.contains(${JSON.stringify(filter.value)})`;\n case 'tag':\n return `Filter.tag(${JSON.stringify(filter.tag)})`;\n case 'range':\n return `Filter.range(${JSON.stringify(filter.from)}, ${JSON.stringify(filter.to)})`;\n case 'text-search':\n return filter.searchKind\n ? `Filter.textSearch(${JSON.stringify(filter.text)}, ${JSON.stringify(filter.searchKind)})`\n : `Filter.textSearch(${JSON.stringify(filter.text)})`;\n case 'timestamp':\n return `Filter.${filter.field}.${filter.operator}(${filter.value})`;\n case 'child-of':\n return `Filter.childOf([${filter.parents.map((p) => JSON.stringify(p)).join(', ')}], { transitive: ${filter.transitive} })`;\n case 'not':\n return `Filter.not(${prettyFilter(filter.filter)})`;\n case 'and':\n return `Filter.and(${filter.filters.map(prettyFilter).join(', ')})`;\n case 'or':\n return `Filter.or(${filter.filters.map(prettyFilter).join(', ')})`;\n }\n};\n\n/**\n * Returns a human-readable string representation of a Query AST.\n */\nexport const prettyQuery = (query: QueryAST.Query): string => {\n switch (query.type) {\n case 'select':\n return `Query.select(${prettyFilter(query.filter)})`;\n case 'filter':\n return `${prettyQuery(query.selection)}.select(${prettyFilter(query.filter)})`;\n case 'reference-traversal':\n return `${prettyQuery(query.anchor)}.reference(${JSON.stringify(query.property)})`;\n case 'incoming-references': {\n const args: string[] = [];\n if (query.typename !== null) {\n args.push(String(query.typename));\n }\n if (query.property !== null) {\n args.push(JSON.stringify(query.property));\n }\n return `${prettyQuery(query.anchor)}.referencedBy(${args.join(', ')})`;\n }\n case 'relation': {\n const method =\n query.direction === 'outgoing' ? 'sourceOf' : query.direction === 'incoming' ? 'targetOf' : 'relationOf';\n const filterStr = query.filter !== undefined ? prettyFilter(query.filter) : '';\n return `${prettyQuery(query.anchor)}.${method}(${filterStr})`;\n }\n case 'relation-traversal':\n return `${prettyQuery(query.anchor)}.${query.direction}()`;\n case 'hierarchy-traversal':\n return query.direction === 'to-parent'\n ? `${prettyQuery(query.anchor)}.parent()`\n : `${prettyQuery(query.anchor)}.children()`;\n case 'union':\n return `Query.all(${query.queries.map(prettyQuery).join(', ')})`;\n case 'set-difference':\n return `Query.without(${prettyQuery(query.source)}, ${prettyQuery(query.exclude)})`;\n case 'order': {\n const orders = query.order.map((o) => {\n if (o.kind === 'natural') {\n return 'Order.natural()';\n } else if (o.kind === 'rank') {\n return `Order.rank(${JSON.stringify(o.direction)})`;\n } else {\n return `Order.property(${JSON.stringify(o.property)}, ${JSON.stringify(o.direction)})`;\n }\n });\n return `${prettyQuery(query.query)}.orderBy(${orders.join(', ')})`;\n }\n case 'options': {\n const opts = query.options;\n const parts: string[] = [];\n if (opts.deleted !== undefined) {\n parts.push(`deleted: ${JSON.stringify(opts.deleted)}`);\n }\n if (opts.debugLabel !== undefined) {\n parts.push(`debugLabel: ${JSON.stringify(opts.debugLabel)}`);\n }\n return `${prettyQuery(query.query)}.options({ ${parts.join(', ')} })`;\n }\n case 'from': {\n if (query.from._tag === 'scope') {\n const scope = query.from.scope;\n const parts: string[] = [];\n if (scope.spaceIds !== undefined) {\n parts.push(`spaceIds: [${scope.spaceIds.map((s) => JSON.stringify(s)).join(', ')}]`);\n }\n if (scope.feeds !== undefined) {\n parts.push(`feeds: [${scope.feeds.map(String).join(', ')}]`);\n }\n if (scope.allFeedsFromSpaces !== undefined) {\n parts.push(`allFeedsFromSpaces: ${scope.allFeedsFromSpaces}`);\n }\n return `${prettyQuery(query.query)}.from({ ${parts.join(', ')} })`;\n }\n return `${prettyQuery(query.query)}.from(${prettyQuery(query.from.query)})`;\n }\n case 'limit':\n return `${prettyQuery(query.query)}.limit(${query.limit})`;\n }\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport * as Schema from 'effect/Schema';\nimport * as SchemaAST from 'effect/SchemaAST';\n\nimport { invariant } from '@dxos/invariant';\n\n// TODO(ZaymonFC): Do this one at a time. This might be dangerous.\nexport const addFieldsToSchema = (\n schema: Schema.Schema.AnyNoContext,\n fields: Schema.Struct.Fields,\n): Schema.Schema.AnyNoContext => {\n const schemaExtension = Schema.partial(Schema.Struct(fields));\n return Schema.extend(schema, schemaExtension).annotations(\n schema.ast.annotations,\n ) as any as Schema.Schema.AnyNoContext;\n};\n\nexport const updateFieldsInSchema = (\n schema: Schema.Schema.AnyNoContext,\n fields: Schema.Struct.Fields,\n): Schema.Schema.AnyNoContext => {\n const ast = schema.ast as SchemaAST.TypeLiteral;\n invariant(SchemaAST.isTypeLiteral(ast));\n\n const updatedProperties = [...ast.propertySignatures];\n const propertiesToUpdate = (Schema.partial(Schema.Struct(fields)).ast as SchemaAST.TypeLiteral).propertySignatures;\n for (const property of propertiesToUpdate) {\n const index = updatedProperties.findIndex((p) => p.name === property.name);\n if (index !== -1) {\n updatedProperties[index] = property;\n } else {\n updatedProperties.push(property);\n }\n }\n\n return Schema.make(new SchemaAST.TypeLiteral(updatedProperties, ast.indexSignatures, ast.annotations));\n};\n\nexport const removeFieldsFromSchema = (\n schema: Schema.Schema.AnyNoContext,\n fieldNames: string[],\n): Schema.Schema.AnyNoContext => {\n return Schema.make(SchemaAST.omit(schema.ast, fieldNames)).annotations(schema.ast.annotations);\n};\n\nexport const updateFieldNameInSchema = (\n schema: Schema.Schema.AnyNoContext,\n { before, after }: { before: PropertyKey; after: PropertyKey },\n): Schema.Schema.AnyNoContext => {\n const ast = schema.ast as SchemaAST.TypeLiteral;\n invariant(SchemaAST.isTypeLiteral(ast));\n\n return Schema.make(\n new SchemaAST.TypeLiteral(\n ast.propertySignatures.map((p) =>\n p.name === before\n ? new SchemaAST.PropertySignature(after, p.type, p.isOptional, p.isReadonly, p.annotations)\n : p,\n ),\n ast.indexSignatures,\n ast.annotations,\n ),\n );\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport * as Schema from 'effect/Schema';\n\nimport { IconAnnotation, LabelAnnotation } from '../Annotation';\nimport { EntityKind, KindId, SchemaKindId, StaticTypeSchemaSlot } from '../common/types';\nimport { EchoTypeKindSchema, TypeMetaSchemaDXN } from '../Entity';\nimport { JsonSchemaType } from '../JsonSchema';\n\n/**\n * Raw struct backing {@link TypeSchema}. Exposed only so `TypeSchema`\n * (the TS type) can derive its data fields via `Schema.Schema.Type<typeof ...>`;\n * runtime callers should use {@link TypeSchema} (the piped, branded entity).\n *\n * `typename` and `version` are NOT data fields — they live in `ObjectMeta.key` /\n * `ObjectMeta.version` (the canonical registry-provenance pair, queryable via\n * `Filter.key(...)`). The same `jsonSchema` payload also embeds them so a\n * standalone JSON-Schema export remains self-describing, but the schema-registry\n * reads/writes them through meta.\n */\nconst TypeSchemaStruct = Schema.Struct({\n name: Schema.optional(Schema.String),\n jsonSchema: JsonSchemaType,\n});\n\n/**\n * Persistent representation of a schema.\n */\nexport const TypeSchema = TypeSchemaStruct.pipe(\n LabelAnnotation.set(['name']),\n IconAnnotation.set({\n icon: 'ph--database--regular',\n hue: 'green',\n }),\n EchoTypeKindSchema(TypeMetaSchemaDXN),\n);\n\n/**\n * Persistent representation of a schema — the runtime shape that\n * `db.add(Type.makeObjectFromJsonSchema(...))` / `db.schemaRegistry.register([...])` produces\n * and `Filter.type(Type.Type).run()` returns.\n *\n * Structurally identical to a static `Type.Type` entity: the entity-handler's\n * `get` trap exposes `[SchemaKindId]` (derived from `system.kind` and\n * `data.jsonSchema.entityKind`) and rebuilds `[StaticTypeSchemaSlot]` lazily\n * from `jsonSchema`, so a persisted instance satisfies the public `Type<A>`\n * interface without casting.\n */\nexport type TypeSchema = Schema.Schema.Type<typeof TypeSchemaStruct> & {\n /** Object identifier — injected by `EchoTypeKindSchema` and stamped at construction. */\n readonly id: string;\n /** Entity-kind discriminator (object/relation/type) carried on every entity instance. */\n readonly [KindId]: EntityKind.Type;\n /** Kind of schema described by this meta-instance — always `EntityKind.Type` for `Type.Type` itself. */\n readonly [SchemaKindId]: EntityKind.Type;\n /** Effect Schema rebuilt lazily from `jsonSchema`; satisfies `Type.getSchema(...)` without an extra cast. */\n readonly [StaticTypeSchemaSlot]: Schema.Schema.AnyNoContext;\n};\n"],
5
+ "mappings": "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",
6
+ "names": ["JsonPath", "JsonProp", "getValue", "splitJsonPath", "Schema", "SchemaAST", "RawObject", "schema", "make", "omit", "ast", "Schema", "ForeignKey", "invariant", "intersection", "metadata", "id", "compareForeignKeys", "a", "b", "getMeta", "keys", "VersionTypeId", "compare", "a", "b", "localeCompare", "sortByLabel", "getLabel", "sortByTypename", "getTypename", "sort", "comparators", "comparator", "result", "assertArgument", "invariant", "__dxlog_file", "getMetaChecked", "meta", "entity", "invariant", "keys", "key", "source", "splice", "i", "tags", "push", "tag", "EventId", "Symbol", "for", "ChangeId", "eventBatchDepth", "pendingEventTargets", "Set", "batchEvents", "callback", "target", "EventId", "emit", "clear", "emitEvent", "add", "currentChangeContext", "pendingNotificationKey", "pendingOwnerNotifications", "Set", "enterChangeContext", "key", "isInChangeContext", "queueNotification", "queueOwnerNotification", "target", "add", "hasPendingNotifications", "clearPendingNotifications", "executeChange", "contextKey", "eventTarget", "proxy", "callback", "exitContext", "batchEvents", "EventId", "emit", "ownerTarget", "clear", "defineHiddenProperty", "object", "key", "value", "Object", "defineProperty", "enumerable", "configurable", "MutationOutsideChangeContextError", "Error", "operation", "suggestion", "name", "createPropertySetError", "prop", "String", "createPropertyDeleteError", "createArrayMethodError", "method", "invariant", "EchoURI", "deepMapValues", "encodeUint8ArrayToJson", "__dxlog_file", "descriptor", "Object", "writable", "enumerable", "configurable", "result", "id", "MetaId", "SelfURIId", "RelationSourceDXNId", "invariant", "isEchoURI", "ATTR_RELATION_SOURCE", "sourceDXN", "RelationTargetDXNId", "ATTR_RELATION_TARGET", "targetDXN", "assign", "serializeData", "value", "noInline", "Uint8Array", "recurse", "ObjectId", "invariant", "__dxlog_file", "symbolIsProxy", "value", "Array", "isArray", "ProxyHandlerSlot", "getProxyHandler", "existingProxy", "handler", "_proxyMap", "set", "_handler", "setHandler", "get", "target", "prop", "receiver", "Object", "trap", "apply", "Schema", "SchemaAST", "Event", "inspectCustom", "invariant", "invariant", "__dxlog_file", "value", "visited", "newAllowedPreviousOwner", "allowedPreviousOwner", "actualValue", "invariant", "ownershipAllowed", "defineHiddenProperty", "recursiveOptions", "depth", "Array", "isValidProxyTarget", "item", "setOwnerRecursive", "nested", "isProxy", "owner", "isArray", "traverseObjectGraph", "target", "getEchoRoot", "queueOwnerNotification", "notifyOwnerChain", "objectData", "Symbol", "for", "checkArrayMutationAllowed", "arr", "method", "target", "isProxy", "getProxyTarget", "echoRoot", "getEchoRoot", "isInitialized", "ChangeId", "EventId", "isInChangeContext", "createArrayMethodError", "ReactiveArray", "Array", "Symbol", "species", "BATCHED_METHODS", "Object", "defineProperty", "prototype", "enumerable", "value", "args", "result", "batchEvents", "apply", "Schema", "SchemaAST", "invariant", "log", "__dxlog_file", "SchemaAST", "isUnion", "schema", "typeAstList", "ast", "filter", "type", "isTypeLiteral", "length", "visitAll", "positionalTypes", "concat", "allTypes", "getPropertySchema", "rootObjectSchema", "property", "propertyPath", "propertyName", "tupleAst", "unwrapArray", "getArrayElementSchema", "propertyType", "getPropertyType", "log", "getTargetPropertySchema", "invariant", "arrayAst", "prop", "Number", "elementIndex", "Schema", "make", "elementType", "annotations", "flattenUnion", "typeAst", "flatMap", "getProperties", "astCandidates", "typeDiscriminators", "getTypeDiscriminators", "typeIndex", "p", "targetPropertyValue", "getPropertySignatures", "getTargetPropertyFn", "typeOrDiscriminatedUnion", "t", "targetProperty", "indexSignatureType", "unwrapAst", "indexSignatures", "discriminatorPropCandidates", "isValidDiscriminator", "everyTypeHasDiscriminator", "isDiscriminatedUnion", "predicate", "next", "idProperty", "__dxlog_file", "value", "visited", "actualValue", "copy", "item", "push", "copyHiddenProperties", "Array", "isArray", "ReactiveArray", "key", "defineHiddenProperty", "target", "SchemaId", "source", "TypeId", "_proxyMap", "_inSet", "init", "invariant", "EventId", "ObjectDeletedId", "setOwnerRecursive", "Object", "configurable", "_inspect", "objectData", "ChangeId", "TypeEntityId", "StaticTypeSchemaSlot", "existing", "jsonSchema", "undefined", "rebuilt", "Reflect", "get", "prop", "receiver", "createProxy", "isInitialized", "isSymbolProp", "isInChangeContext", "echoRoot", "result", "batchEvents", "notifyOwnerChain", "ownKeys", "deleteProperty", "property", "createPropertyDeleteError", "queueNotification", "defineProperty", "_prepareValueForAssignment", "attributes", "preparedValue", "Error", "isRootEchoObject", "existingOwner", "getOwner", "validatedValue", "_validateValue", "isValidProxyTarget", "isProxy", "schema", "setSchemaProperties", "options", "showHidden", "customInspect", "inspected", "schemaType", "typeSource", "enumerable", "elementSchema", "SchemaAST", "SchemaValidator", "validateSchema", "makeArraysReactive", "symbolIsProxy", "makeObject", "schema", "obj", "meta", "typeSource", "createReactiveObject", "Object", "assign", "isValidProxyTarget", "Error", "parent", "ParentId", "undefined", "annotation", "getTypeAnnotation", "setIdOnTarget", "defineHiddenProperty", "KindId", "kind", "initMeta", "prepareTypedTarget", "attachTypedJsonSerializer", "proxy", "createProxy", "TypedReactiveHandler", "instance", "metaProxy", "MetaId", "metaTarget", "getProxyTarget", "setMetaOwner", "target", "id", "ObjectId", "isValid", "random", "keys", "ObjectMetaSchema", "subscribe", "obj", "callback", "isProxy", "target", "getProxyTarget", "EventId", "on", "change", "changeFn", "ChangeId", "Schema", "SchemaAST", "DXN", "ObjectId", "normalizeSchema", "schema", "copy", "structuredClone", "go", "exclusiveMaximum", "maximum", "exclusiveMinimum", "minimum", "key", "Object", "keys", "JsonSchemaFields", "includes", "properties", "goOnRecord", "patternProperties", "propertyNames", "definitions", "items", "maybeGoOnArray", "additionalItems", "contains", "if", "then", "else", "allOf", "anyOf", "oneOf", "not", "$defs", "reference", "value", "Array", "isArray", "item", "record", "TypeMetaSchemaDXN", "DXN", "make", "persistentEntitySchema", "typename", "getName", "version", "getVersion", "struct", "Struct", "name", "optional", "String", "jsonSchema", "JsonSchemaType", "pipe", "id", "ObjectId", "ast", "annotations", "TypeAnnotationId", "kind", "EntityKind", "Type", "JSONSchemaAnnotationId", "makeTypeJsonSchemaAnnotation", "makeEchoTypeSchema", "fields", "computeJsonSchema", "sourceSchema", "meta", "keys", "key", "entity", "makeObject", "target", "getProxyTarget", "memoizedJsonSchema", "Object", "defineProperty", "configurable", "enumerable", "get", "set", "value", "defineHiddenProperty", "StaticTypeSchemaSlot", "SchemaKindId", "Schema", "SchemaAST", "invariant", "DXN", "__dxlog_file", "version", "dxn", "invariant", "self", "SchemaAST", "fields", "id", "String", "annotations", "kind", "EntityKind", "typename", "Schema", "SchemaAST", "raise", "assertArgument", "invariant", "DXN", "__dxlog_file", "ATTR_RELATION_SOURCE", "assertArgument", "Schema", "sourceSchema", "targetSchema", "getName", "dxn", "getVersion", "invariant", "version", "sourceDXN", "getDXNForRelationSchemaRef", "targetDXN", "getEntityKind", "EntityKind", "raise", "Error", "self", "fields", "__dxlog_file", "id", "String", "SchemaAST", "annotations", "kind", "typename", "relationSource", "relationTarget", "identifier", "getTypeIdentifierAnnotation", "schema", "tryMake", "getSchemaTypename", "DXN", "make", "Schema", "SchemaAST", "invariant", "DXN", "__dxlog_file", "version", "dxn", "invariant", "self", "SchemaAST", "fields", "schemaWithId", "Schema", "id", "String", "TypeAnnotationId", "kind", "EntityKind", "typename", "assertArgument", "unversioned", "VersionTypeId", "versioned", "isVersion", "entity", "version", "ver", "ObjectVersionId", "undefined", "versionValid", "assertArgument", "compareVersions", "version1", "version2", "automergeHeads", "length", "some", "head", "includes", "encodeVersion", "JSON", "stringify", "decodeVersion", "parsed", "parse", "Schema", "makeTypedEntityClass", "typename", "version", "baseSchema", "TypeId", "schemaVariance", "ast", "annotations", "bind", "pipe", "Symbol", "hasInstance", "obj", "getTypename", "Error", "_A", "_", "_I", "_R", "raise", "assertArgument", "failedInvariant", "ObjectId", "inspectCustom", "attachedTypedObjectInspector", "obj", "descriptor", "Object", "getOwnPropertyDescriptor", "inspectCustom", "defineProperty", "value", "typedObjectInspectFunction", "writable", "enumerable", "configurable", "depth", "options", "inspect", "id", "props", "ATTR_TYPE", "getTypeURI", "ATTR_META", "MetaId", "Schema", "raise", "ObjectStructure", "isEncodedReference", "assertArgument", "invariant", "EchoURI", "ObjectId", "URI", "assumeType", "decodeUint8ArrayFromJson", "deepMapValues", "isEncodedUint8Array", "visitValues", "__dxlog_file", "invariant", "typename", "typedJsonSerializer", "call", "__dxlog_file", "assertArgument", "jsonData", "URI", "ATTR_TYPE", "refResolver", "resolveSchema", "type", "schema", "undefined", "Schema", "isSchema", "decodedInput", "restoreUint8Arrays", "stripInternalJsonKeys", "obj", "setRefResolverOnData", "setTypename", "setSchema", "typeEntity", "setType", "sourceDxn", "ATTR_RELATION_SOURCE", "raise", "TypeError", "targetDxn", "source", "target", "defineHiddenProperty", "EntityKind", "Relation", "RelationSourceDXNId", "RelationTargetDXNId", "RelationSourceId", "RelationTargetId", "ATTR_META", "isArray", "meta", "keys", "MetaId", "resolvedParent", "ParentId", "parent", "uri", "database", "assertObjectModel", "ATTR_DELETED", "ATTR_SELF_URI", "ATTR_SELF_URI_LEGACY", "ATTR_RELATION_TARGET", "decodeGeneric", "deepMapValues", "value", "visitor", "isEncodedReference", "refFromEncodedReference", "options", "isEncodedUint8Array", "decodeUint8ArrayFromJson", "recurse", "props", "Ref", "setRefResolver", "visitValues", "getParent", "structure", "ObjectStructure", "getRelationSource", "getRelationTarget", "id", "typeRef", "ATTR_PARENT", "EchoURI", "tryParse", "createObject", "input", "props", "schema", "getStaticTypeSchema", "failedInvariant", "annotation", "getTypeAnnotation", "Error", "assertArgument", "RelationSourceDXNId", "RelationTargetDXNId", "RelationSourceId", "RelationTargetId", "metaOverride", "MetaId", "undefined", "obj", "id", "ObjectId", "random", "kind", "EntityKind", "Type", "Relation", "Object", "defineHiddenProperty", "KindId", "keys", "setSchema", "setType", "setTypename", "getSchemaURI", "attachTypedJsonSerializer", "attachedTypedObjectInspector", "sourceDXN", "getObjectEchoUri", "raise", "targetDXN", "assertObjectModel", "isDeleted", "obj", "ObjectDeletedId", "undefined", "Match", "Option", "SchemaAST", "getArrayElementType", "getBaseType", "getProperties", "isArrayType", "isNestedType", "invariant", "__dxlog_file", "schema", "getSchema", "obj", "invariant", "parent", "currentAST", "ast", "i", "length", "key", "part", "propertyAST", "getPropertyAST", "String", "shouldBeArray", "path", "value", "undefined", "isNestedType", "property", "properties", "getProperties", "getBaseType", "type", "isArrayType", "elementType", "filter", "isOptional", "defaultValue", "Match", "pipe", "when", "_tag", "orElse", "requiredProps", "prop", "name", "createObjectWithDefaults", "assertArgument", "deepMapValues", "copySymbolProperty", "source", "target", "symbol", "transform", "value", "undefined", "finalValue", "Object", "defineProperty", "writable", "enumerable", "configurable", "getSnapshot", "obj", "assertArgument", "KindId", "snapshot", "deepMapValues", "recurse", "getPrototypeOf", "prototype", "Array", "isArray", "SnapshotKindId", "TypeId", "SchemaId", "TypeEntityId", "SelfURIId", "ObjectDatabaseId", "ObjectDeletedId", "ParentId", "MetaId", "meta", "keys", "tags", "RelationSourceDXNId", "RelationTargetDXNId", "RelationSourceId", "RelationTargetId", "freeze", "invariant", "deepMapValues", "__dxlog_file", "invariant", "schema", "props", "deepMapValues", "data", "value", "recurse", "Ref", "opts", "make", "retainId", "meta", "makeObject", "prettyFilter", "filter", "type", "typename", "id", "undefined", "length", "Object", "keys", "props", "foreignKeys", "metaKey", "metaVersion", "JSON", "stringify", "parts", "push", "String", "join", "propEntries", "entries", "propsStr", "map", "k", "v", "fk", "operator", "value", "values", "tag", "from", "to", "searchKind", "text", "field", "parents", "p", "transitive", "filters", "prettyQuery", "query", "selection", "anchor", "property", "args", "method", "direction", "filterStr", "queries", "source", "exclude", "orders", "order", "o", "kind", "opts", "options", "deleted", "debugLabel", "_tag", "scope", "spaceIds", "s", "feeds", "allFeedsFromSpaces", "limit", "Schema", "SchemaAST", "invariant", "__dxlog_file", "schemaExtension", "annotations", "updateFieldsInSchema", "fields", "isTypeLiteral", "ast", "updatedProperties", "propertySignatures", "propertiesToUpdate", "p", "name", "property", "index", "push", "removeFieldsFromSchema", "fieldNames", "updateFieldNameInSchema", "schema", "before", "after", "Schema", "TypeSchemaStruct", "Struct", "name", "optional", "String", "jsonSchema", "JsonSchemaType", "TypeSchema", "pipe", "LabelAnnotation", "set", "IconAnnotation", "icon", "hue", "EchoTypeKindSchema", "TypeMetaSchemaDXN"]
7
+ }
@@ -0,0 +1,41 @@
1
+ import {
2
+ getSchema
3
+ } from "./chunk-UQAMAXDU.mjs";
4
+ import {
5
+ getSchemaURI
6
+ } from "./chunk-KHRAQDYX.mjs";
7
+ import {
8
+ __export
9
+ } from "./chunk-J5LGTIGS.mjs";
10
+
11
+ // src/Migration.ts
12
+ var Migration_exports = {};
13
+ __export(Migration_exports, {
14
+ define: () => define
15
+ });
16
+ var define = (options) => {
17
+ const fromSchema = getSchema(options.from);
18
+ const toSchema = getSchema(options.to);
19
+ const fromType = getSchemaURI(fromSchema);
20
+ if (!fromType) {
21
+ throw new Error("Invalid from schema");
22
+ }
23
+ const toType = getSchemaURI(toSchema);
24
+ if (!toType) {
25
+ throw new Error("Invalid to schema");
26
+ }
27
+ return {
28
+ fromType,
29
+ toType,
30
+ fromSchema,
31
+ toSchema,
32
+ transform: options.transform,
33
+ onMigration: options.onMigration
34
+ };
35
+ };
36
+
37
+ export {
38
+ define,
39
+ Migration_exports
40
+ };
41
+ //# sourceMappingURL=chunk-MPXUNTME.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/Migration.ts"],
4
+ "sourcesContent": ["//\n// Copyright 2024 DXOS.org\n//\n\n// @import-as-namespace\n\nimport type * as Schema from 'effect/Schema';\n\nimport { type URI } from '@dxos/keys';\n\nimport type * as Database from './Database';\nimport type * as Entity from './Entity';\nimport { MetaId, type ObjectMeta, getSchemaURI } from './internal';\nimport * as Type from './Type';\n\n/**\n * Result returned by a migration's `transform` callback.\n * The data shape matches the target schema; the optional `[Obj.Meta]` symbol key lets the\n * transform update the object's meta (e.g. `key` / `version`) atomically with the data swap.\n */\ntype MigrationSchemaInput = Type.AnyEntity;\n\ntype MigrationInstanceType<S> = S extends Type.AnyEntity\n ? Type.InstanceType<S>\n : S extends Schema.Schema.AnyNoContext\n ? Schema.Schema.Type<S>\n : never;\n\nexport type TransformResult<To> = Omit<MigrationInstanceType<To>, 'id' | Entity.KindId> & {\n [MetaId]?: Partial<ObjectMeta>;\n};\n\ntype DefineObjectMigrationOptions<From extends MigrationSchemaInput, To extends MigrationSchemaInput> = {\n from: From;\n to: To;\n /**\n * Pure function that converts the old object data to the new object data.\n *\n * The returned object may include an optional `[Obj.Meta]` entry to update the object's meta\n * (e.g. registry `key` / `version`) atomically with the data swap.\n */\n // TODO(dmaretskyi): `id` should not be a part of the schema.\n transform: (from: MigrationInstanceType<From>, context: ObjectMigrationContext) => Promise<TransformResult<To>>;\n\n /**\n * Callback that is called after the object is migrated. Called for every object that is migrated.\n *\n * NOTE: Database mutations performed in this callback are not guaranteed to be idempotent.\n * If multiple peers run the migration separately, the effects may be applied multiple times.\n */\n onMigration?: (params: OnMigrateProps<From, To>) => Promise<void>;\n};\n\n/**\n * Context passed to object migration callbacks.\n */\nexport type ObjectMigrationContext = {\n db: Database.Database;\n};\n\ntype OnMigrateProps<From, To> = {\n before: MigrationInstanceType<From>;\n object: MigrationInstanceType<To>;\n db: Database.Database;\n};\n\n/**\n * Definition of a migration from one object schema version to another.\n */\nexport type ObjectMigration = {\n fromType: URI.URI;\n toType: URI.URI;\n fromSchema: Schema.Schema.AnyNoContext;\n toSchema: Schema.Schema.AnyNoContext;\n transform: (from: unknown, context: ObjectMigrationContext) => Promise<unknown>;\n onMigration?: (params: OnMigrateProps<any, any>) => Promise<void>;\n};\n\n/**\n * Define a migration between two object schemas.\n *\n * @example\n * ```ts\n * const migration = Migration.define({\n * from: ContactV1,\n * to: ContactV2,\n * transform: async (from) => ({ name: `${from.firstName} ${from.lastName}` }),\n * onMigration: async () => {},\n * });\n * ```\n */\nexport const define = <From extends MigrationSchemaInput, To extends MigrationSchemaInput>(\n options: DefineObjectMigrationOptions<From, To>,\n): ObjectMigration => {\n const fromSchema = Type.getSchema(options.from);\n const toSchema = Type.getSchema(options.to);\n const fromType = getSchemaURI(fromSchema);\n if (!fromType) {\n throw new Error('Invalid from schema');\n }\n const toType = getSchemaURI(toSchema);\n if (!toType) {\n throw new Error('Invalid to schema');\n }\n\n return {\n fromType,\n toType,\n fromSchema,\n toSchema,\n transform: options.transform as any,\n onMigration: options.onMigration as any,\n };\n};\n"],
5
+ "mappings": ";;;;;;;;;;;AAAA;;;;AA2FO,IAAMA,SAAS,CACpBC,YAAAA;AAEA,QAAMC,aAAkBC,UAAUF,QAAQG,IAAI;AAC9C,QAAMC,WAAgBF,UAAUF,QAAQK,EAAE;AAC1C,QAAMC,WAAWC,aAAaN,UAAAA;AAC9B,MAAI,CAACK,UAAU;AACb,UAAM,IAAIE,MAAM,qBAAA;EAClB;AACA,QAAMC,SAASF,aAAaH,QAAAA;AAC5B,MAAI,CAACK,QAAQ;AACX,UAAM,IAAID,MAAM,mBAAA;EAClB;AAEA,SAAO;IACLF;IACAG;IACAR;IACAG;IACAM,WAAWV,QAAQU;IACnBC,aAAaX,QAAQW;EACvB;AACF;",
6
+ "names": ["define", "options", "fromSchema", "getSchema", "from", "toSchema", "to", "fromType", "getSchemaURI", "Error", "toType", "transform", "onMigration"]
7
+ }