@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,2186 @@
1
+ import {
2
+ JsonSchemaFields,
3
+ JsonSchemaType,
4
+ toEffectSchema,
5
+ toJsonSchema
6
+ } from "./chunk-SSDGRJ3A.mjs";
7
+ import {
8
+ Ref,
9
+ refFromEncodedReference,
10
+ setRefResolver
11
+ } from "./chunk-K5RH2PBH.mjs";
12
+ import {
13
+ ATTR_DELETED,
14
+ ATTR_RELATION_SOURCE,
15
+ ATTR_RELATION_TARGET,
16
+ ATTR_SELF_URI,
17
+ ATTR_SELF_URI_LEGACY,
18
+ ObjectDatabaseId,
19
+ ObjectDeletedId,
20
+ ObjectVersionId,
21
+ RelationSourceDXNId,
22
+ RelationSourceId,
23
+ RelationTargetDXNId,
24
+ RelationTargetId,
25
+ SelfURIId,
26
+ assertObjectModel,
27
+ getObjectEchoUri
28
+ } from "./chunk-ZII2BGPM.mjs";
29
+ import {
30
+ ATTR_PARENT,
31
+ ATTR_TYPE,
32
+ IconAnnotation,
33
+ LabelAnnotation,
34
+ ParentId,
35
+ SchemaId,
36
+ TypeAnnotationId,
37
+ TypeEntityId,
38
+ TypeId,
39
+ getEntityKind,
40
+ getLabel,
41
+ getSchema,
42
+ getSchemaTypename,
43
+ getSchemaURI,
44
+ getType,
45
+ getTypeAnnotation,
46
+ getTypeIdentifierAnnotation,
47
+ getTypeURI,
48
+ getTypename,
49
+ setSchema,
50
+ setType,
51
+ setTypename
52
+ } from "./chunk-KHRAQDYX.mjs";
53
+ import {
54
+ EntityKind,
55
+ KindId,
56
+ SchemaKindId,
57
+ SnapshotKindId,
58
+ StaticTypeSchemaSlot,
59
+ getStaticTypeSchema,
60
+ makeTypeJsonSchemaAnnotation
61
+ } from "./chunk-A5HDDVKS.mjs";
62
+
63
+ // src/internal/index.ts
64
+ import { JsonPath, JsonProp, getValue, splitJsonPath } from "@dxos/effect";
65
+
66
+ // src/internal/common/types/base.ts
67
+ import * as Schema from "effect/Schema";
68
+ import * as SchemaAST from "effect/SchemaAST";
69
+ var RawObject = (schema) => {
70
+ return Schema.make(SchemaAST.omit(schema.ast, [
71
+ "id"
72
+ ]));
73
+ };
74
+
75
+ // src/internal/common/types/meta.ts
76
+ import * as Schema2 from "effect/Schema";
77
+ import { ForeignKey } from "@dxos/echo-protocol";
78
+ import { invariant } from "@dxos/invariant";
79
+ import { intersection } from "@dxos/util";
80
+ var __dxlog_file = "/__w/dxos/dxos/packages/core/echo/echo/src/internal/common/types/meta.ts";
81
+ var ATTR_META = "@meta";
82
+ var MetaId = /* @__PURE__ */ Symbol.for("@dxos/echo/Meta");
83
+ var ObjectMetaSchema = Schema2.Struct({
84
+ keys: Schema2.Array(ForeignKey),
85
+ /**
86
+ * A set of tags.
87
+ * Tags are arbitrary application-defined strings.
88
+ * ECHO makes no assumptions about the tag structure.
89
+ */
90
+ // TODO(dmaretskyi): Has to be optional for compatibility with old data.
91
+ // Defaulting to an empty array is possible but requires a bit more work.
92
+ // TODO(dmaretskyi): In automerge this should be a map of { [tag]: boolean } for uniqueness and conflict resolution.
93
+ tags: Schema2.optional(Schema2.Array(Schema2.String)),
94
+ /**
95
+ * Fully-qualified registry key for the object (FQN format, e.g. `org.example.type.foo`).
96
+ * Identifies the canonical registry entry the object instance was created from.
97
+ */
98
+ key: Schema2.optional(Schema2.String),
99
+ /**
100
+ * Semantic version of the registry entry the object was created from.
101
+ * Must be a valid semver string (e.g. `1.2.3`).
102
+ */
103
+ version: Schema2.optional(Schema2.String)
104
+ });
105
+ var getMeta = (obj) => {
106
+ const metadata = obj[MetaId];
107
+ invariant(metadata, "ObjectMeta not found.", { "~LogMeta": "~LogMeta", F: __dxlog_file, L: 45, S: void 0, A: ["metadata", "'ObjectMeta not found.'"] });
108
+ return metadata;
109
+ };
110
+ var foreignKey = (source, id) => ({
111
+ source,
112
+ id
113
+ });
114
+ var foreignKeyEquals = (a, b) => a.source === b.source && a.id === b.id;
115
+ var compareForeignKeys = (a, b) => intersection(getMeta(a).keys, getMeta(b).keys, foreignKeyEquals).length > 0;
116
+
117
+ // src/internal/common/types/version.ts
118
+ var VersionTypeId = "~@dxos/echo/VersionTypeId";
119
+
120
+ // src/internal/Annotation/sorting.ts
121
+ var compare = (a, b) => {
122
+ if (a == null) {
123
+ return b == null ? 0 : 1;
124
+ }
125
+ if (b == null) {
126
+ return -1;
127
+ }
128
+ return a.localeCompare(b);
129
+ };
130
+ var sortByLabel = (a, b) => compare(getLabel(a), getLabel(b));
131
+ var sortByTypename = (a, b) => compare(getTypename(a), getTypename(b));
132
+ var sort = (...comparators) => {
133
+ return (a, b) => {
134
+ for (const comparator of comparators) {
135
+ const result = comparator(a, b);
136
+ if (result !== 0) {
137
+ return result;
138
+ }
139
+ }
140
+ return 0;
141
+ };
142
+ };
143
+
144
+ // src/internal/common/api/meta.ts
145
+ import { assertArgument, invariant as invariant2 } from "@dxos/invariant";
146
+ var __dxlog_file2 = "/__w/dxos/dxos/packages/core/echo/echo/src/internal/common/api/meta.ts";
147
+ function getMetaChecked(entity) {
148
+ assertArgument(entity, "entity", "Should be an entity.");
149
+ const meta = getMeta(entity);
150
+ invariant2(meta != null, "Invalid entity.", { "~LogMeta": "~LogMeta", F: __dxlog_file2, L: 9, S: this, A: ["meta != null", "'Invalid entity.'"] });
151
+ return meta;
152
+ }
153
+ var getKeys = (entity, source) => {
154
+ assertArgument(entity, "entity", "Should be an entity.");
155
+ const meta = getMetaChecked(entity);
156
+ invariant2(meta != null, "Invalid entity.", { "~LogMeta": "~LogMeta", F: __dxlog_file2, L: 18, S: void 0, A: ["meta != null", "'Invalid entity.'"] });
157
+ return meta.keys.filter((key) => key.source === source);
158
+ };
159
+ var deleteKeys = (entity, source) => {
160
+ const meta = getMetaChecked(entity);
161
+ for (let i = 0; i < meta.keys.length; i++) {
162
+ if (meta.keys[i].source === source) {
163
+ meta.keys.splice(i, 1);
164
+ i--;
165
+ }
166
+ }
167
+ };
168
+ var addTag = (entity, tag) => {
169
+ const meta = getMetaChecked(entity);
170
+ meta.tags ??= [];
171
+ meta.tags.push(tag);
172
+ };
173
+ var removeTag = (entity, tag) => {
174
+ const meta = getMetaChecked(entity);
175
+ if (!meta.tags) {
176
+ return;
177
+ }
178
+ for (let i = 0; i < meta.tags.length; i++) {
179
+ if (meta.tags[i] === tag) {
180
+ meta.tags.splice(i, 1);
181
+ i--;
182
+ }
183
+ }
184
+ };
185
+
186
+ // src/internal/common/proxy/symbols.ts
187
+ var EventId = /* @__PURE__ */ Symbol.for("@dxos/live-object/EventId");
188
+ var ChangeId = /* @__PURE__ */ Symbol.for("@dxos/live-object/ChangeId");
189
+
190
+ // src/internal/common/proxy/event-batch.ts
191
+ var eventBatchDepth = 0;
192
+ var pendingEventTargets = /* @__PURE__ */ new Set();
193
+ var batchEvents = (callback) => {
194
+ eventBatchDepth++;
195
+ try {
196
+ callback();
197
+ } finally {
198
+ eventBatchDepth--;
199
+ if (eventBatchDepth === 0) {
200
+ for (const target of pendingEventTargets) {
201
+ target[EventId]?.emit();
202
+ }
203
+ pendingEventTargets.clear();
204
+ }
205
+ }
206
+ };
207
+ var emitEvent = (target) => {
208
+ if (eventBatchDepth > 0) {
209
+ pendingEventTargets.add(target);
210
+ } else {
211
+ target[EventId]?.emit();
212
+ }
213
+ };
214
+
215
+ // src/internal/common/proxy/change-context.ts
216
+ var currentChangeContext = null;
217
+ var pendingNotificationKey = null;
218
+ var pendingOwnerNotifications = /* @__PURE__ */ new Set();
219
+ var enterChangeContext = (key) => {
220
+ currentChangeContext = key;
221
+ return () => {
222
+ currentChangeContext = null;
223
+ };
224
+ };
225
+ var isInChangeContext = (key) => {
226
+ return currentChangeContext === key;
227
+ };
228
+ var queueNotification = (key) => {
229
+ if (currentChangeContext === key) {
230
+ pendingNotificationKey = key;
231
+ }
232
+ };
233
+ var queueOwnerNotification = (target) => {
234
+ if (currentChangeContext !== null && target !== currentChangeContext) {
235
+ pendingOwnerNotifications.add(target);
236
+ }
237
+ };
238
+ var hasPendingNotifications = (key) => {
239
+ return pendingNotificationKey === key;
240
+ };
241
+ var clearPendingNotifications = (key) => {
242
+ if (pendingNotificationKey === key) {
243
+ pendingNotificationKey = null;
244
+ }
245
+ };
246
+ var executeChange = (contextKey, eventTarget, proxy, callback) => {
247
+ const exitContext = enterChangeContext(contextKey);
248
+ try {
249
+ batchEvents(() => callback(proxy));
250
+ } finally {
251
+ exitContext();
252
+ if (hasPendingNotifications(contextKey)) {
253
+ clearPendingNotifications(contextKey);
254
+ eventTarget[EventId]?.emit();
255
+ }
256
+ for (const ownerTarget of pendingOwnerNotifications) {
257
+ ownerTarget[EventId]?.emit();
258
+ }
259
+ pendingOwnerNotifications.clear();
260
+ }
261
+ };
262
+
263
+ // src/internal/common/proxy/define-hidden-property.ts
264
+ var defineHiddenProperty = (object, key, value2) => {
265
+ Object.defineProperty(object, key, {
266
+ enumerable: false,
267
+ configurable: true,
268
+ value: value2
269
+ });
270
+ };
271
+
272
+ // src/internal/common/proxy/errors.ts
273
+ var MutationOutsideChangeContextError = class extends Error {
274
+ constructor(operation, suggestion) {
275
+ super(`Cannot ${operation} outside of Obj.update(). Use Obj.update(obj, (mutableObj) => { ${suggestion} }) instead.`);
276
+ this.name = "MutationOutsideChangeContextError";
277
+ }
278
+ };
279
+ var createPropertySetError = (prop) => {
280
+ return new MutationOutsideChangeContextError(`modify object property "${String(prop)}"`, `mutableObj.${String(prop)} = value;`);
281
+ };
282
+ var createPropertyDeleteError = (prop) => {
283
+ return new MutationOutsideChangeContextError(`delete object property "${String(prop)}"`, `delete mutableObj.${String(prop)};`);
284
+ };
285
+ var createArrayMethodError = (method) => {
286
+ return new MutationOutsideChangeContextError(`call array.${method}()`, `mutableObj.array.${method}(...);`);
287
+ };
288
+
289
+ // src/internal/common/proxy/json-serializer.ts
290
+ import { invariant as invariant3 } from "@dxos/invariant";
291
+ import { EchoURI } from "@dxos/keys";
292
+ import { deepMapValues, encodeUint8ArrayToJson } from "@dxos/util";
293
+ var __dxlog_file3 = "/__w/dxos/dxos/packages/core/echo/echo/src/internal/common/proxy/json-serializer.ts";
294
+ var attachTypedJsonSerializer = (obj) => {
295
+ const descriptor = Object.getOwnPropertyDescriptor(obj, "toJSON");
296
+ if (descriptor) {
297
+ return;
298
+ }
299
+ Object.defineProperty(obj, "toJSON", {
300
+ value: typedJsonSerializer,
301
+ writable: false,
302
+ enumerable: false,
303
+ // Setting `configurable` to false breaks proxy invariants, should be fixable.
304
+ configurable: true
305
+ });
306
+ };
307
+ var typedJsonSerializer = function() {
308
+ const { id, ...rest } = this;
309
+ const result = {
310
+ id
311
+ };
312
+ if (this[TypeId]) {
313
+ result[ATTR_TYPE] = this[TypeId];
314
+ }
315
+ if (this[MetaId]) {
316
+ result[ATTR_META] = serializeMeta(this[MetaId]);
317
+ }
318
+ if (this[SelfURIId]) {
319
+ result[ATTR_SELF_URI] = this[SelfURIId];
320
+ }
321
+ if (this[RelationSourceDXNId]) {
322
+ const sourceDXN = this[RelationSourceDXNId];
323
+ invariant3(EchoURI.isEchoURI(sourceDXN), void 0, { "~LogMeta": "~LogMeta", F: __dxlog_file3, L: 42, S: this, A: ["EchoURI.isEchoURI(sourceDXN)", ""] });
324
+ result[ATTR_RELATION_SOURCE] = sourceDXN;
325
+ }
326
+ if (this[RelationTargetDXNId]) {
327
+ const targetDXN = this[RelationTargetDXNId];
328
+ invariant3(EchoURI.isEchoURI(targetDXN), void 0, { "~LogMeta": "~LogMeta", F: __dxlog_file3, L: 47, S: this, A: ["EchoURI.isEchoURI(targetDXN)", ""] });
329
+ result[ATTR_RELATION_TARGET] = targetDXN;
330
+ }
331
+ Object.assign(result, serializeData(rest));
332
+ return result;
333
+ };
334
+ var serializeData = (data) => {
335
+ return deepMapValues(data, (value2, recurse) => {
336
+ if (Ref.isRef(value2)) {
337
+ return value2.noInline().encode();
338
+ }
339
+ if (value2 instanceof Uint8Array) {
340
+ return encodeUint8ArrayToJson(value2);
341
+ }
342
+ return recurse(value2);
343
+ });
344
+ };
345
+ var serializeMeta = (meta) => {
346
+ return deepMapValues(meta, (value2, recurse) => recurse(value2));
347
+ };
348
+
349
+ // src/internal/common/proxy/make-object.ts
350
+ import { ObjectId } from "@dxos/keys";
351
+
352
+ // src/internal/common/proxy/proxy-utils.ts
353
+ import { invariant as invariant4 } from "@dxos/invariant";
354
+ var __dxlog_file4 = "/__w/dxos/dxos/packages/core/echo/echo/src/internal/common/proxy/proxy-utils.ts";
355
+ var symbolIsProxy = /* @__PURE__ */ Symbol.for("@dxos/schema/Proxy");
356
+ var isProxy = (value2) => !!value2?.[symbolIsProxy];
357
+ var isValidProxyTarget = (value2) => {
358
+ if (value2 == null || value2[symbolIsProxy]) {
359
+ return false;
360
+ }
361
+ if (Array.isArray(value2)) {
362
+ return true;
363
+ }
364
+ return typeof value2 === "object" && Object.getPrototypeOf(value2) === Object.prototype;
365
+ };
366
+ var getProxySlot = (proxy) => {
367
+ const value2 = proxy[symbolIsProxy];
368
+ invariant4(value2 instanceof ProxyHandlerSlot, void 0, { "~LogMeta": "~LogMeta", F: __dxlog_file4, L: 22, S: void 0, A: ["value instanceof ProxyHandlerSlot", ""] });
369
+ return value2;
370
+ };
371
+ var getProxyTarget = (proxy) => {
372
+ return getProxySlot(proxy).target;
373
+ };
374
+ var getProxyHandler = (proxy) => {
375
+ return getProxySlot(proxy).handler;
376
+ };
377
+ var dangerouslySetProxyId = (obj, id) => {
378
+ getProxySlot(obj).target.id = id;
379
+ };
380
+ var createProxy = (target, handler) => {
381
+ const existingProxy = handler._proxyMap.get(target);
382
+ if (existingProxy) {
383
+ return existingProxy;
384
+ }
385
+ const proxy = new Proxy(target, new ProxyHandlerSlot(target, handler));
386
+ handler.init(target);
387
+ handler._proxyMap.set(target, proxy);
388
+ return proxy;
389
+ };
390
+ var ProxyHandlerSlot = class {
391
+ target;
392
+ _handler;
393
+ /**
394
+ * @param target Original object.
395
+ * @param _handler Handles intercepted operations.
396
+ */
397
+ constructor(target, _handler) {
398
+ this.target = target;
399
+ this._handler = _handler;
400
+ }
401
+ get handler() {
402
+ invariant4(this._handler, void 0, { "~LogMeta": "~LogMeta", F: __dxlog_file4, L: 71, S: this, A: ["this._handler", ""] });
403
+ return this._handler;
404
+ }
405
+ // TODO(burdon): Requires comment.
406
+ setHandler(handler) {
407
+ this._handler = handler;
408
+ }
409
+ /**
410
+ * Get value.
411
+ */
412
+ get(target, prop, receiver) {
413
+ if (prop === symbolIsProxy) {
414
+ return this;
415
+ }
416
+ if (!this._handler || !this._handler.get) {
417
+ return Reflect.get(target, prop, receiver);
418
+ }
419
+ return this._handler.get(target, prop, receiver);
420
+ }
421
+ static {
422
+ const TRAPS = [
423
+ "apply",
424
+ "construct",
425
+ "defineProperty",
426
+ "deleteProperty",
427
+ "get",
428
+ "getOwnPropertyDescriptor",
429
+ "getPrototypeOf",
430
+ "has",
431
+ "isExtensible",
432
+ "ownKeys",
433
+ "preventExtensions",
434
+ "set",
435
+ "setPrototypeOf"
436
+ ];
437
+ for (const trap of TRAPS) {
438
+ if (trap === "get") {
439
+ continue;
440
+ }
441
+ Object.defineProperty(this.prototype, trap, {
442
+ enumerable: false,
443
+ value: function(...args) {
444
+ if (!this._handler || !this._handler[trap]) {
445
+ return Reflect[trap](...args);
446
+ }
447
+ return this._handler[trap].apply(this._handler, args);
448
+ }
449
+ });
450
+ }
451
+ }
452
+ };
453
+
454
+ // src/internal/common/proxy/typed-handler.ts
455
+ import * as Schema4 from "effect/Schema";
456
+ import * as SchemaAST3 from "effect/SchemaAST";
457
+ import { Event } from "@dxos/async";
458
+ import { inspectCustom } from "@dxos/debug";
459
+ import { invariant as invariant7 } from "@dxos/invariant";
460
+
461
+ // src/internal/common/proxy/ownership.ts
462
+ import { invariant as invariant5 } from "@dxos/invariant";
463
+ var __dxlog_file5 = "/__w/dxos/dxos/packages/core/echo/echo/src/internal/common/proxy/ownership.ts";
464
+ var EchoOwner = /* @__PURE__ */ Symbol.for("@dxos/echo/Owner");
465
+ var getRawTarget = (value2) => {
466
+ return isProxy(value2) ? getProxyTarget(value2) : value2;
467
+ };
468
+ var getOwner = (value2) => {
469
+ return value2?.[EchoOwner];
470
+ };
471
+ var setMetaOwner = (metaTarget, parent) => {
472
+ defineHiddenProperty(metaTarget, EchoOwner, parent);
473
+ };
474
+ var setOwnerRecursive = (value2, owner, options = {}) => {
475
+ const { visited = /* @__PURE__ */ new Set(), depth = 0, allowedPreviousOwner } = options;
476
+ if (value2 == null || typeof value2 !== "object") {
477
+ return;
478
+ }
479
+ const actualValue = getRawTarget(value2);
480
+ if (visited.has(actualValue)) {
481
+ return;
482
+ }
483
+ visited.add(actualValue);
484
+ const existingOwner = getOwner(actualValue);
485
+ const isRootEchoObject = EventId in actualValue;
486
+ let newAllowedPreviousOwner = allowedPreviousOwner;
487
+ if (isRootEchoObject && depth === 0) {
488
+ newAllowedPreviousOwner = actualValue;
489
+ }
490
+ if (!isRootEchoObject) {
491
+ const ownershipAllowed = existingOwner == null || existingOwner === owner || existingOwner === newAllowedPreviousOwner;
492
+ invariant5(ownershipAllowed, "Cannot reassign ownership of a nested record to a different ECHO object. Use deep copy first.", { "~LogMeta": "~LogMeta", F: __dxlog_file5, L: 76, S: void 0, A: ["ownershipAllowed", "'Cannot reassign ownership of a nested record to a different ECHO object. Use deep copy first.'"] });
493
+ }
494
+ defineHiddenProperty(actualValue, EchoOwner, owner);
495
+ const recursiveOptions = {
496
+ visited,
497
+ depth: depth + 1,
498
+ allowedPreviousOwner: newAllowedPreviousOwner
499
+ };
500
+ if (Array.isArray(actualValue)) {
501
+ for (const item of actualValue) {
502
+ if (isValidProxyTarget(item) || isProxy(item)) {
503
+ setOwnerRecursive(item, owner, recursiveOptions);
504
+ }
505
+ }
506
+ } else {
507
+ for (const key in actualValue) {
508
+ if (Object.prototype.hasOwnProperty.call(actualValue, key)) {
509
+ const nested = actualValue[key];
510
+ if (isValidProxyTarget(nested) || isProxy(nested)) {
511
+ setOwnerRecursive(nested, owner, recursiveOptions);
512
+ }
513
+ }
514
+ }
515
+ }
516
+ };
517
+ var traverseObjectGraph = (value2, visitor, visited = /* @__PURE__ */ new Set()) => {
518
+ if (value2 == null || typeof value2 !== "object") {
519
+ return false;
520
+ }
521
+ const actualValue = getRawTarget(value2);
522
+ if (visited.has(actualValue)) {
523
+ return false;
524
+ }
525
+ visited.add(actualValue);
526
+ if (visitor(actualValue)) {
527
+ return true;
528
+ }
529
+ if (Array.isArray(actualValue)) {
530
+ for (const item of actualValue) {
531
+ if (traverseObjectGraph(item, visitor, visited)) {
532
+ return true;
533
+ }
534
+ }
535
+ } else {
536
+ for (const key in actualValue) {
537
+ if (Object.prototype.hasOwnProperty.call(actualValue, key)) {
538
+ if (traverseObjectGraph(actualValue[key], visitor, visited)) {
539
+ return true;
540
+ }
541
+ }
542
+ }
543
+ }
544
+ return false;
545
+ };
546
+ var wouldCreateCycle = (targetRoot, value2) => traverseObjectGraph(value2, (v) => v === targetRoot);
547
+ var hasForeignOwner = (value2, target) => traverseObjectGraph(value2, (v) => {
548
+ const owner = getOwner(v);
549
+ if (owner != null && owner !== target) {
550
+ return true;
551
+ }
552
+ if (EventId in v && v !== target) {
553
+ return true;
554
+ }
555
+ return false;
556
+ });
557
+ var MAX_OWNER_DEPTH = 100;
558
+ var getEchoRoot = (target, depth = 0) => {
559
+ invariant5(depth < MAX_OWNER_DEPTH, "Owner chain too deep - possible circular ownership", { "~LogMeta": "~LogMeta", F: __dxlog_file5, L: 169, S: void 0, A: ["depth < MAX_OWNER_DEPTH", "'Owner chain too deep - possible circular ownership'"] });
560
+ if (KindId in target) {
561
+ return target;
562
+ }
563
+ const owner = getOwner(target);
564
+ if (owner) {
565
+ return getEchoRoot(owner, depth + 1);
566
+ }
567
+ return target;
568
+ };
569
+ var notifyOwnerChain = (target) => {
570
+ const owner = getOwner(target);
571
+ if (owner) {
572
+ queueOwnerNotification(getEchoRoot(owner));
573
+ notifyOwnerChain(owner);
574
+ }
575
+ };
576
+
577
+ // src/internal/common/proxy/proxy-types.ts
578
+ var objectData = /* @__PURE__ */ Symbol.for("@dxos/live-object/objectData");
579
+
580
+ // src/internal/common/proxy/reactive-array.ts
581
+ var checkArrayMutationAllowed = (arr, method) => {
582
+ const target = isProxy(arr) ? getProxyTarget(arr) : arr;
583
+ const echoRoot = getEchoRoot(target);
584
+ const isInitialized = echoRoot[ChangeId] === true || EventId in echoRoot;
585
+ if (!isInitialized) {
586
+ return;
587
+ }
588
+ if (!isInChangeContext(echoRoot)) {
589
+ throw createArrayMethodError(method);
590
+ }
591
+ };
592
+ var ReactiveArray = class extends Array {
593
+ static get [Symbol.species]() {
594
+ return Array;
595
+ }
596
+ static {
597
+ const BATCHED_METHODS = [
598
+ "push",
599
+ "pop",
600
+ "shift",
601
+ "unshift",
602
+ "splice",
603
+ "sort",
604
+ "reverse"
605
+ ];
606
+ for (const method of BATCHED_METHODS) {
607
+ Object.defineProperty(this.prototype, method, {
608
+ enumerable: false,
609
+ value: function(...args) {
610
+ checkArrayMutationAllowed(this, method);
611
+ let result;
612
+ batchEvents(() => {
613
+ result = Array.prototype[method].apply(this, args);
614
+ });
615
+ return result;
616
+ }
617
+ });
618
+ }
619
+ }
620
+ };
621
+
622
+ // src/internal/common/proxy/schema-validator.ts
623
+ import * as Schema3 from "effect/Schema";
624
+ import * as SchemaAST2 from "effect/SchemaAST";
625
+ import { invariant as invariant6 } from "@dxos/invariant";
626
+ import { log } from "@dxos/log";
627
+ var __dxlog_file6 = "/__w/dxos/dxos/packages/core/echo/echo/src/internal/common/proxy/schema-validator.ts";
628
+ var SchemaValidator = class {
629
+ /**
630
+ * Recursively check that schema specifies constructions we can handle.
631
+ * Validates there are no ambiguous discriminated union types.
632
+ */
633
+ static validateSchema(schema) {
634
+ const visitAll = (nodes) => nodes.forEach((node) => this.validateSchema(Schema3.make(node)));
635
+ if (SchemaAST2.isUnion(schema.ast)) {
636
+ const typeAstList = schema.ast.types.filter((type) => SchemaAST2.isTypeLiteral(type));
637
+ if (typeAstList.length > 1) {
638
+ getTypeDiscriminators(typeAstList);
639
+ }
640
+ visitAll(typeAstList);
641
+ } else if (SchemaAST2.isTupleType(schema.ast)) {
642
+ const positionalTypes = schema.ast.elements.map((t) => t.type);
643
+ const allTypes = positionalTypes.concat(schema.ast.rest.map((t) => t.type));
644
+ visitAll(allTypes);
645
+ } else if (SchemaAST2.isTypeLiteral(schema.ast)) {
646
+ visitAll(SchemaAST2.getPropertySignatures(schema.ast).map((p) => p.type));
647
+ }
648
+ }
649
+ static hasTypeAnnotation(rootObjectSchema, property, annotation) {
650
+ try {
651
+ let type = this.getPropertySchema(rootObjectSchema, [
652
+ property
653
+ ]);
654
+ if (SchemaAST2.isTupleType(type.ast)) {
655
+ type = this.getPropertySchema(rootObjectSchema, [
656
+ property,
657
+ "0"
658
+ ]);
659
+ }
660
+ return type.ast.annotations[annotation] != null;
661
+ } catch {
662
+ return false;
663
+ }
664
+ }
665
+ static getPropertySchema(rootObjectSchema, propertyPath, getProperty = () => null) {
666
+ let schema = rootObjectSchema;
667
+ for (let i = 0; i < propertyPath.length; i++) {
668
+ const propertyName = propertyPath[i];
669
+ const tupleAst = unwrapArray(schema.ast);
670
+ if (tupleAst != null) {
671
+ schema = getArrayElementSchema(tupleAst, propertyName);
672
+ } else {
673
+ const propertyType = getPropertyType(schema.ast, propertyName.toString(), (propertyName2) => getProperty([
674
+ ...propertyPath.slice(0, i),
675
+ propertyName2
676
+ ]));
677
+ if (propertyType == null) {
678
+ log.warn("unknown property", {
679
+ path: propertyPath,
680
+ property: propertyName
681
+ }, { "~LogMeta": "~LogMeta", F: __dxlog_file6, L: 60, S: this });
682
+ continue;
683
+ }
684
+ schema = Schema3.make(propertyType).annotations(propertyType.annotations);
685
+ }
686
+ }
687
+ return schema;
688
+ }
689
+ static getTargetPropertySchema(target, prop) {
690
+ const schema = target[SchemaId];
691
+ invariant6(schema, "target has no schema", { "~LogMeta": "~LogMeta", F: __dxlog_file6, L: 73, S: this, A: ["schema", "'target has no schema'"] });
692
+ const arrayAst = unwrapArray(schema.ast);
693
+ if (arrayAst != null) {
694
+ return getArrayElementSchema(arrayAst, prop);
695
+ }
696
+ const propertyType = getPropertyType(schema.ast, prop.toString(), (prop2) => target[prop2]);
697
+ if (propertyType == null) {
698
+ return Schema3.Any;
699
+ }
700
+ invariant6(propertyType, `invalid property: ${prop.toString()}`, { "~LogMeta": "~LogMeta", F: __dxlog_file6, L: 82, S: this, A: ["propertyType", "`invalid property: ${prop.toString()}`"] });
701
+ return Schema3.make(propertyType);
702
+ }
703
+ };
704
+ var getArrayElementSchema = (tupleAst, property) => {
705
+ const elementIndex = typeof property === "string" ? parseInt(property, 10) : Number.NaN;
706
+ if (Number.isNaN(elementIndex)) {
707
+ invariant6(property === "length", `invalid array property: ${String(property)}`, { "~LogMeta": "~LogMeta", F: __dxlog_file6, L: 93, S: void 0, A: ["property === 'length'", "`invalid array property: ${String(property)}`"] });
708
+ return Schema3.Number;
709
+ }
710
+ if (elementIndex < tupleAst.elements.length) {
711
+ const elementType = tupleAst.elements[elementIndex].type;
712
+ return Schema3.make(elementType).annotations(elementType.annotations);
713
+ }
714
+ const restType = tupleAst.rest;
715
+ return Schema3.make(restType[0].type).annotations(restType[0].annotations);
716
+ };
717
+ var flattenUnion = (typeAst) => SchemaAST2.isUnion(typeAst) ? typeAst.types.flatMap(flattenUnion) : [
718
+ typeAst
719
+ ];
720
+ var getProperties = (typeAst, getTargetPropertyFn) => {
721
+ const astCandidates = flattenUnion(typeAst);
722
+ const typeAstList = astCandidates.filter((type) => SchemaAST2.isTypeLiteral(type));
723
+ if (typeAstList.length === 0) {
724
+ return [];
725
+ }
726
+ if (typeAstList.length === 1) {
727
+ return SchemaAST2.getPropertySignatures(typeAstList[0]);
728
+ }
729
+ const typeDiscriminators = getTypeDiscriminators(typeAstList);
730
+ const targetPropertyValue = getTargetPropertyFn(String(typeDiscriminators[0].name));
731
+ const typeIndex = typeDiscriminators.findIndex((p) => targetPropertyValue === p.type.literal);
732
+ invariant6(typeIndex !== -1, "discriminator field not set on target", { "~LogMeta": "~LogMeta", F: __dxlog_file6, L: 118, S: void 0, A: ["typeIndex !== -1", "'discriminator field not set on target'"] });
733
+ return SchemaAST2.getPropertySignatures(typeAstList[typeIndex]);
734
+ };
735
+ var getPropertyType = (ast, propertyName, getTargetPropertyFn) => {
736
+ const anyOrObject = unwrapAst(ast, (candidate) => SchemaAST2.isAnyKeyword(candidate) || SchemaAST2.isObjectKeyword(candidate));
737
+ if (anyOrObject != null) {
738
+ return ast;
739
+ }
740
+ const typeOrDiscriminatedUnion = unwrapAst(ast, (t) => {
741
+ return SchemaAST2.isTypeLiteral(t) || SchemaAST2.isUnion(t) && t.types.some((t2) => SchemaAST2.isTypeLiteral(t2));
742
+ });
743
+ if (typeOrDiscriminatedUnion == null) {
744
+ return null;
745
+ }
746
+ const targetProperty = getProperties(typeOrDiscriminatedUnion, getTargetPropertyFn).find((p) => p.name === propertyName);
747
+ if (targetProperty != null) {
748
+ return unwrapAst(targetProperty.type);
749
+ }
750
+ const indexSignatureType = unwrapAst(ast, SchemaAST2.isTypeLiteral);
751
+ if (indexSignatureType && SchemaAST2.isTypeLiteral(indexSignatureType) && indexSignatureType.indexSignatures.length > 0) {
752
+ return unwrapAst(indexSignatureType.indexSignatures[0].type);
753
+ }
754
+ return null;
755
+ };
756
+ var getTypeDiscriminators = (typeAstList) => {
757
+ const discriminatorPropCandidates = typeAstList.flatMap(SchemaAST2.getPropertySignatures).filter((p) => SchemaAST2.isLiteral(p.type));
758
+ const propertyName = discriminatorPropCandidates[0].name;
759
+ const isValidDiscriminator = discriminatorPropCandidates.every((p) => p.name === propertyName && !p.isOptional);
760
+ const everyTypeHasDiscriminator = discriminatorPropCandidates.length === typeAstList.length;
761
+ const isDiscriminatedUnion = isValidDiscriminator && everyTypeHasDiscriminator;
762
+ invariant6(isDiscriminatedUnion, "type ambiguity: every type in a union must have a single unique-literal field", { "~LogMeta": "~LogMeta", F: __dxlog_file6, L: 148, S: void 0, A: ["isDiscriminatedUnion", "'type ambiguity: every type in a union must have a single unique-literal field'"] });
763
+ return discriminatorPropCandidates;
764
+ };
765
+ var unwrapAst = (rootAst, predicate) => {
766
+ let ast = rootAst;
767
+ while (ast != null) {
768
+ if (predicate?.(ast)) {
769
+ return ast;
770
+ }
771
+ if (SchemaAST2.isUnion(ast)) {
772
+ const next = ast.types.find((t) => predicate != null && predicate(t) || SchemaAST2.isSuspend(t));
773
+ if (next != null) {
774
+ ast = next;
775
+ continue;
776
+ }
777
+ }
778
+ if (SchemaAST2.isSuspend(ast)) {
779
+ ast = ast.f();
780
+ } else {
781
+ return predicate == null ? ast : null;
782
+ }
783
+ }
784
+ return null;
785
+ };
786
+ var unwrapArray = (ast) => unwrapAst(ast, SchemaAST2.isTupleType);
787
+ var checkIdNotPresentOnSchema = (schema) => {
788
+ invariant6(SchemaAST2.isTypeLiteral(schema.ast), void 0, { "~LogMeta": "~LogMeta", F: __dxlog_file6, L: 184, S: void 0, A: ["SchemaAST.isTypeLiteral(schema.ast)", ""] });
789
+ const idProperty = SchemaAST2.getPropertySignatures(schema.ast).find((prop) => prop.name === "id");
790
+ if (idProperty != null) {
791
+ throw new Error('"id" property name is reserved');
792
+ }
793
+ };
794
+
795
+ // src/internal/common/proxy/typed-handler.ts
796
+ var __dxlog_file7 = "/__w/dxos/dxos/packages/core/echo/echo/src/internal/common/proxy/typed-handler.ts";
797
+ var deepCopy = (value2, visited = /* @__PURE__ */ new Map()) => {
798
+ if (value2 == null || typeof value2 !== "object") {
799
+ return value2;
800
+ }
801
+ const actualValue = getRawTarget(value2);
802
+ if (visited.has(actualValue)) {
803
+ return visited.get(actualValue);
804
+ }
805
+ if (actualValue instanceof ReactiveArray) {
806
+ const copy2 = new ReactiveArray();
807
+ visited.set(actualValue, copy2);
808
+ for (const item of actualValue) {
809
+ copy2.push(deepCopy(item, visited));
810
+ }
811
+ copyHiddenProperties(actualValue, copy2);
812
+ return copy2;
813
+ }
814
+ const proto = Object.getPrototypeOf(actualValue);
815
+ if (proto !== Object.prototype && proto !== Array.prototype && proto !== null) {
816
+ return value2;
817
+ }
818
+ if (Array.isArray(actualValue)) {
819
+ const copy2 = new ReactiveArray();
820
+ visited.set(actualValue, copy2);
821
+ for (const item of actualValue) {
822
+ copy2.push(deepCopy(item, visited));
823
+ }
824
+ return copy2;
825
+ }
826
+ const copy = {};
827
+ visited.set(actualValue, copy);
828
+ for (const key of Object.keys(actualValue)) {
829
+ copy[key] = deepCopy(actualValue[key], visited);
830
+ }
831
+ copyHiddenProperties(actualValue, copy);
832
+ return copy;
833
+ };
834
+ var copyHiddenProperties = (source, target) => {
835
+ if (SchemaId in source) {
836
+ defineHiddenProperty(target, SchemaId, source[SchemaId]);
837
+ }
838
+ if (TypeId in source) {
839
+ defineHiddenProperty(target, TypeId, source[TypeId]);
840
+ }
841
+ };
842
+ var TypedReactiveHandler = class _TypedReactiveHandler {
843
+ static instance = new _TypedReactiveHandler();
844
+ _proxyMap = /* @__PURE__ */ new WeakMap();
845
+ _inSet = false;
846
+ constructor() {
847
+ }
848
+ init(target) {
849
+ invariant7(typeof target === "object" && target !== null, void 0, { "~LogMeta": "~LogMeta", F: __dxlog_file7, L: 100, S: this, A: ["typeof target === 'object' && target !== null", ""] });
850
+ invariant7(SchemaId in target, "Schema is not defined for the target", { "~LogMeta": "~LogMeta", F: __dxlog_file7, L: 101, S: this, A: ["SchemaId in target", "'Schema is not defined for the target'"] });
851
+ const hasOwner = !!getOwner(target);
852
+ if (!(EventId in target) && !hasOwner) {
853
+ defineHiddenProperty(target, EventId, new Event());
854
+ }
855
+ defineHiddenProperty(target, ObjectDeletedId, false);
856
+ if (!hasOwner && !(ChangeId in target)) {
857
+ defineHiddenProperty(target, ChangeId, true);
858
+ }
859
+ if (!hasOwner) {
860
+ for (const key in target) {
861
+ if (target[symbolIsProxy]) {
862
+ continue;
863
+ }
864
+ let value2 = target[key];
865
+ if (isValidProxyTarget(value2) || isProxy(value2)) {
866
+ if (hasForeignOwner(value2, target)) {
867
+ value2 = deepCopy(value2);
868
+ target[key] = value2;
869
+ }
870
+ setOwnerRecursive(value2, target);
871
+ }
872
+ }
873
+ }
874
+ Object.defineProperty(target, inspectCustom, {
875
+ enumerable: false,
876
+ configurable: true,
877
+ value: this._inspect.bind(target)
878
+ });
879
+ }
880
+ get(target, prop, receiver) {
881
+ switch (prop) {
882
+ // TODO(burdon): Remove?
883
+ case objectData: {
884
+ return toJSON(target);
885
+ }
886
+ case ChangeId: {
887
+ if (target[ChangeId] !== true) {
888
+ return void 0;
889
+ }
890
+ return (callback) => executeChange(target, target, receiver, callback);
891
+ }
892
+ case TypeEntityId: {
893
+ return Reflect.get(target, prop, receiver);
894
+ }
895
+ case StaticTypeSchemaSlot: {
896
+ const existing = Reflect.get(target, prop, receiver);
897
+ if (existing !== void 0) {
898
+ return existing;
899
+ }
900
+ const jsonSchema = target.jsonSchema;
901
+ if (jsonSchema == null) {
902
+ return void 0;
903
+ }
904
+ const rebuilt = toEffectSchema(jsonSchema);
905
+ defineHiddenProperty(target, StaticTypeSchemaSlot, rebuilt);
906
+ return rebuilt;
907
+ }
908
+ }
909
+ if (Object.getOwnPropertyDescriptor(target, prop)?.get) {
910
+ return Reflect.get(target, prop, receiver);
911
+ }
912
+ const value2 = Reflect.get(target, prop, receiver);
913
+ if (isValidProxyTarget(value2)) {
914
+ return createProxy(value2, this);
915
+ }
916
+ return value2;
917
+ }
918
+ set(target, prop, value2, receiver) {
919
+ const echoRoot = getEchoRoot(target);
920
+ const isInitialized = ChangeId in echoRoot || EventId in echoRoot;
921
+ const isSymbolProp = typeof prop === "symbol";
922
+ if (isInitialized && !isSymbolProp && !isInChangeContext(echoRoot)) {
923
+ throw new Error(`Cannot modify object property "${String(prop)}" outside of Obj.update(). Use Obj.update(obj, (mutableObj) => { mutableObj.property = value; }) instead.`);
924
+ }
925
+ let result = false;
926
+ this._inSet = true;
927
+ try {
928
+ batchEvents(() => {
929
+ const { echoRoot: _, preparedValue } = this._prepareValueForAssignment(target, prop, value2);
930
+ result = Reflect.set(target, prop, preparedValue, receiver);
931
+ if (prop === "jsonSchema") {
932
+ Reflect.deleteProperty(target, StaticTypeSchemaSlot);
933
+ }
934
+ if (isInitialized) {
935
+ queueNotification(echoRoot);
936
+ notifyOwnerChain(target);
937
+ }
938
+ });
939
+ } finally {
940
+ this._inSet = false;
941
+ }
942
+ return result;
943
+ }
944
+ ownKeys(target) {
945
+ return Reflect.ownKeys(target);
946
+ }
947
+ deleteProperty(target, property) {
948
+ const echoRoot = getEchoRoot(target);
949
+ const isInitialized = echoRoot[ChangeId] === true || EventId in echoRoot;
950
+ const isSymbolProp = typeof property === "symbol";
951
+ if (isInitialized && !isSymbolProp && !isInChangeContext(echoRoot)) {
952
+ throw createPropertyDeleteError(property);
953
+ }
954
+ const result = Reflect.deleteProperty(target, property);
955
+ if (isInitialized) {
956
+ queueNotification(echoRoot);
957
+ }
958
+ return result;
959
+ }
960
+ defineProperty(target, property, attributes) {
961
+ const echoRoot = getEchoRoot(target);
962
+ const isInitialized = ChangeId in echoRoot || EventId in echoRoot;
963
+ const isSymbolProp = typeof property === "symbol";
964
+ if (isInitialized && !isSymbolProp && !isInChangeContext(echoRoot)) {
965
+ throw new Error(`Cannot modify object property "${String(property)}" outside of Obj.update(). Use Obj.update(obj, (mutableObj) => { mutableObj.property = value; }) instead.`);
966
+ }
967
+ const { echoRoot: _, preparedValue } = this._prepareValueForAssignment(target, property, attributes.value);
968
+ const result = Reflect.defineProperty(target, property, {
969
+ ...attributes,
970
+ value: preparedValue
971
+ });
972
+ if (!this._inSet && isInitialized) {
973
+ queueNotification(echoRoot);
974
+ }
975
+ return result;
976
+ }
977
+ /**
978
+ * Prepare a value for assignment to a typed object property.
979
+ * Handles cycle detection, copy-on-assign, array conversion, validation, and ownership.
980
+ */
981
+ _prepareValueForAssignment(target, prop, value2) {
982
+ const echoRoot = getEchoRoot(target);
983
+ if (prop === ParentId) {
984
+ return {
985
+ echoRoot,
986
+ preparedValue: value2
987
+ };
988
+ }
989
+ if (isValidProxyTarget(value2) || isProxy(value2)) {
990
+ if (wouldCreateCycle(echoRoot, value2)) {
991
+ throw new Error("Cannot create cycles in typed object graph. Consider using Ref for circular references.");
992
+ }
993
+ }
994
+ if (isValidProxyTarget(value2) || isProxy(value2)) {
995
+ const actualValue = getRawTarget(value2);
996
+ const isRootEchoObject = EventId in actualValue;
997
+ if (isRootEchoObject) {
998
+ throw new Error("Object references must be wrapped with `Ref.make`");
999
+ }
1000
+ }
1001
+ if (isValidProxyTarget(value2) || isProxy(value2)) {
1002
+ const actualValue = getRawTarget(value2);
1003
+ const existingOwner = getOwner(actualValue);
1004
+ if (existingOwner != null && existingOwner !== echoRoot) {
1005
+ value2 = deepCopy(value2);
1006
+ }
1007
+ }
1008
+ if (Array.isArray(value2) && !(value2 instanceof ReactiveArray)) {
1009
+ value2 = ReactiveArray.from(value2);
1010
+ }
1011
+ const validatedValue = this._validateValue(target, prop, value2);
1012
+ if (isValidProxyTarget(validatedValue) || isProxy(validatedValue)) {
1013
+ setOwnerRecursive(validatedValue, echoRoot);
1014
+ }
1015
+ return {
1016
+ echoRoot,
1017
+ preparedValue: validatedValue
1018
+ };
1019
+ }
1020
+ _validateValue(target, prop, value2) {
1021
+ if (prop === ParentId) {
1022
+ return value2;
1023
+ }
1024
+ const schema = SchemaValidator.getTargetPropertySchema(target, prop);
1025
+ const _ = Schema4.asserts(schema)(value2);
1026
+ if (isValidProxyTarget(value2)) {
1027
+ setSchemaProperties(value2, schema);
1028
+ }
1029
+ return value2;
1030
+ }
1031
+ _inspect(_, options, inspectFn) {
1032
+ const inspected = inspectFn(this, {
1033
+ ...options,
1034
+ showHidden: false,
1035
+ customInspect: false
1036
+ });
1037
+ return `Typed ${inspected}`;
1038
+ }
1039
+ };
1040
+ var toJSON = (target) => {
1041
+ return {
1042
+ "@type": "TypedReactiveObject",
1043
+ ...target
1044
+ };
1045
+ };
1046
+ var setSchemaProperties = (obj, schema, typeSource) => {
1047
+ const schemaType = getSchemaURI(schema);
1048
+ if (schemaType != null) {
1049
+ defineHiddenProperty(obj, TypeId, schemaType);
1050
+ }
1051
+ if (typeSource != null) {
1052
+ defineHiddenProperty(obj, TypeEntityId, typeSource);
1053
+ Object.defineProperty(obj, SchemaId, {
1054
+ get: () => typeSource[StaticTypeSchemaSlot] ?? schema,
1055
+ enumerable: false,
1056
+ configurable: true
1057
+ });
1058
+ } else {
1059
+ defineHiddenProperty(obj, SchemaId, schema);
1060
+ }
1061
+ for (const key in obj) {
1062
+ if (isValidProxyTarget(obj[key])) {
1063
+ const elementSchema = SchemaValidator.getTargetPropertySchema(obj, key);
1064
+ if (elementSchema != null) {
1065
+ setSchemaProperties(obj[key], elementSchema);
1066
+ }
1067
+ }
1068
+ }
1069
+ };
1070
+ var prepareTypedTarget = (target, schema, typeSource) => {
1071
+ if (!SchemaAST3.isTypeLiteral(schema.ast)) {
1072
+ throw new Error("schema has to describe an object type");
1073
+ }
1074
+ SchemaValidator.validateSchema(schema);
1075
+ const _ = Schema4.asserts(schema)(target);
1076
+ makeArraysReactive(target);
1077
+ setSchemaProperties(target, schema, typeSource);
1078
+ };
1079
+ var makeArraysReactive = (target) => {
1080
+ for (const key in target) {
1081
+ if (target[symbolIsProxy]) {
1082
+ continue;
1083
+ }
1084
+ if (Array.isArray(target[key])) {
1085
+ target[key] = ReactiveArray.from(target[key]);
1086
+ }
1087
+ if (typeof target[key] === "object") {
1088
+ makeArraysReactive(target[key]);
1089
+ }
1090
+ }
1091
+ };
1092
+
1093
+ // src/internal/common/proxy/make-object.ts
1094
+ var makeObject = (schema, obj, meta, typeSource) => {
1095
+ return createReactiveObject(Object.assign({}, obj), meta, schema, typeSource);
1096
+ };
1097
+ var createReactiveObject = (obj, meta, schema, typeSource) => {
1098
+ if (!isValidProxyTarget(obj)) {
1099
+ throw new Error("Value cannot be made into a reactive object.");
1100
+ }
1101
+ if (!schema) {
1102
+ throw new Error("Schema is required for reactive objects. Use Atom for untyped reactive state.");
1103
+ }
1104
+ const parent = obj[ParentId];
1105
+ if (parent !== void 0) {
1106
+ delete obj[ParentId];
1107
+ }
1108
+ const annotation = getTypeAnnotation(schema);
1109
+ if (annotation) {
1110
+ setIdOnTarget(obj);
1111
+ defineHiddenProperty(obj, KindId, annotation.kind);
1112
+ }
1113
+ initMeta(obj, meta);
1114
+ if (parent !== void 0) {
1115
+ defineHiddenProperty(obj, ParentId, parent);
1116
+ }
1117
+ prepareTypedTarget(obj, schema, typeSource);
1118
+ attachTypedJsonSerializer(obj);
1119
+ const proxy = createProxy(obj, TypedReactiveHandler.instance);
1120
+ const metaProxy = obj[MetaId];
1121
+ if (metaProxy) {
1122
+ const metaTarget = getProxyTarget(metaProxy);
1123
+ if (metaTarget) {
1124
+ setMetaOwner(metaTarget, obj);
1125
+ }
1126
+ }
1127
+ return proxy;
1128
+ };
1129
+ var setIdOnTarget = (target) => {
1130
+ if ("id" in target && target.id !== void 0 && target.id !== null) {
1131
+ if (!ObjectId.isValid(target.id)) {
1132
+ throw new Error("Invalid object id format.");
1133
+ }
1134
+ } else {
1135
+ target.id = ObjectId.random();
1136
+ }
1137
+ };
1138
+ var initMeta = (obj, meta = {
1139
+ keys: []
1140
+ }) => {
1141
+ prepareTypedTarget(meta, ObjectMetaSchema);
1142
+ defineHiddenProperty(obj, MetaId, createProxy(meta, TypedReactiveHandler.instance));
1143
+ };
1144
+
1145
+ // src/internal/common/proxy/reactive.ts
1146
+ var subscribe = (obj, callback) => {
1147
+ if (!isProxy(obj)) {
1148
+ return () => {
1149
+ };
1150
+ }
1151
+ const target = getProxyTarget(obj);
1152
+ if (target && EventId in target) {
1153
+ return target[EventId].on(callback);
1154
+ }
1155
+ return () => {
1156
+ };
1157
+ };
1158
+ var change = (obj, callback) => {
1159
+ const changeFn = obj[ChangeId];
1160
+ if (changeFn) {
1161
+ changeFn(callback);
1162
+ } else {
1163
+ callback(obj);
1164
+ }
1165
+ };
1166
+
1167
+ // src/internal/Entity/entity.ts
1168
+ import * as Schema5 from "effect/Schema";
1169
+ import * as SchemaAST4 from "effect/SchemaAST";
1170
+ import { DXN, ObjectId as ObjectId2 } from "@dxos/keys";
1171
+
1172
+ // src/internal/JsonSchema/json-schema-normalize.ts
1173
+ var normalizeSchema = (schema) => {
1174
+ const copy = structuredClone(schema);
1175
+ go(copy);
1176
+ return copy;
1177
+ };
1178
+ var go = (schema) => {
1179
+ if (typeof schema !== "object" || schema === null) {
1180
+ return;
1181
+ }
1182
+ if (schema.exclusiveMaximum === true) {
1183
+ schema.exclusiveMaximum = schema.maximum;
1184
+ delete schema.exclusiveMaximum;
1185
+ } else if (schema.exclusiveMaximum === false) {
1186
+ delete schema.exclusiveMaximum;
1187
+ }
1188
+ if (schema.exclusiveMinimum === true) {
1189
+ schema.exclusiveMinimum = schema.minimum;
1190
+ delete schema.exclusiveMinimum;
1191
+ } else if (schema.exclusiveMinimum === false) {
1192
+ delete schema.exclusiveMinimum;
1193
+ }
1194
+ for (const key of Object.keys(schema)) {
1195
+ if (!JsonSchemaFields.includes(key)) {
1196
+ delete schema[key];
1197
+ }
1198
+ }
1199
+ if (schema.properties) {
1200
+ goOnRecord(schema.properties);
1201
+ }
1202
+ if (schema.patternProperties) {
1203
+ goOnRecord(schema.patternProperties);
1204
+ }
1205
+ if (schema.propertyNames) {
1206
+ go(schema.propertyNames);
1207
+ }
1208
+ if (schema.definitions) {
1209
+ goOnRecord(schema.definitions);
1210
+ }
1211
+ if (schema.items) {
1212
+ maybeGoOnArray(schema.items);
1213
+ }
1214
+ if (schema.additionalItems) {
1215
+ maybeGoOnArray(schema.additionalItems);
1216
+ }
1217
+ if (schema.contains) {
1218
+ go(schema.contains);
1219
+ }
1220
+ if (schema.if) {
1221
+ go(schema.if);
1222
+ }
1223
+ if (schema.then) {
1224
+ go(schema.then);
1225
+ }
1226
+ if (schema.else) {
1227
+ go(schema.else);
1228
+ }
1229
+ if (schema.allOf) {
1230
+ maybeGoOnArray(schema.allOf);
1231
+ }
1232
+ if (schema.anyOf) {
1233
+ maybeGoOnArray(schema.anyOf);
1234
+ }
1235
+ if (schema.oneOf) {
1236
+ maybeGoOnArray(schema.oneOf);
1237
+ }
1238
+ if (schema.not) {
1239
+ go(schema.not);
1240
+ }
1241
+ if (schema.$defs) {
1242
+ goOnRecord(schema.$defs);
1243
+ }
1244
+ if (schema.reference) {
1245
+ go(schema.reference.schema);
1246
+ }
1247
+ };
1248
+ var maybeGoOnArray = (value2) => {
1249
+ if (Array.isArray(value2)) {
1250
+ for (const item of value2) {
1251
+ go(item);
1252
+ }
1253
+ } else if (typeof value2 === "object" && value2 !== null) {
1254
+ go(value2);
1255
+ }
1256
+ };
1257
+ var goOnRecord = (record) => {
1258
+ for (const key of Object.keys(record)) {
1259
+ go(record[key]);
1260
+ }
1261
+ };
1262
+
1263
+ // src/internal/Entity/entity.ts
1264
+ var TypeMetaSchemaDXN = DXN.make("org.dxos.type.schema", "0.1.0");
1265
+ var persistentEntitySchema = (() => {
1266
+ const typename = DXN.getName(TypeMetaSchemaDXN);
1267
+ const version2 = DXN.getVersion(TypeMetaSchemaDXN);
1268
+ const struct = Schema5.Struct({
1269
+ name: Schema5.optional(Schema5.String),
1270
+ jsonSchema: JsonSchemaType.pipe(Schema5.optional),
1271
+ id: ObjectId2
1272
+ });
1273
+ const ast = SchemaAST4.annotations(struct.ast, {
1274
+ [TypeAnnotationId]: {
1275
+ kind: EntityKind.Type,
1276
+ typename,
1277
+ version: version2
1278
+ },
1279
+ [SchemaAST4.JSONSchemaAnnotationId]: makeTypeJsonSchemaAnnotation({
1280
+ kind: EntityKind.Type,
1281
+ typename,
1282
+ version: version2
1283
+ })
1284
+ });
1285
+ return Schema5.make(ast);
1286
+ })();
1287
+ var makeEchoTypeSchema = (fields, ast, typename, version2, kind, computeJsonSchema) => {
1288
+ const sourceSchema = Schema5.make(ast);
1289
+ const meta = {
1290
+ keys: [],
1291
+ key: typename,
1292
+ version: version2
1293
+ };
1294
+ const entity = makeObject(persistentEntitySchema, {}, meta);
1295
+ const target = getProxyTarget(entity);
1296
+ let memoizedJsonSchema;
1297
+ Object.defineProperty(target, "jsonSchema", {
1298
+ configurable: true,
1299
+ enumerable: true,
1300
+ get() {
1301
+ return memoizedJsonSchema ??= computeJsonSchema();
1302
+ },
1303
+ set(value2) {
1304
+ memoizedJsonSchema = value2;
1305
+ }
1306
+ });
1307
+ defineHiddenProperty(target, StaticTypeSchemaSlot, sourceSchema);
1308
+ defineHiddenProperty(target, SchemaKindId, kind);
1309
+ Object.defineProperty(target, "fields", {
1310
+ configurable: true,
1311
+ enumerable: false,
1312
+ get: () => fields
1313
+ });
1314
+ return entity;
1315
+ };
1316
+
1317
+ // src/internal/Entity/object.ts
1318
+ import * as Schema6 from "effect/Schema";
1319
+ import * as SchemaAST5 from "effect/SchemaAST";
1320
+ import { invariant as invariant8 } from "@dxos/invariant";
1321
+ import { DXN as DXN2 } from "@dxos/keys";
1322
+ var __dxlog_file8 = "/__w/dxos/dxos/packages/core/echo/echo/src/internal/Entity/object.ts";
1323
+ var EchoObjectSchema = (dxn) => {
1324
+ const typename = DXN2.getName(dxn);
1325
+ const version2 = DXN2.getVersion(dxn);
1326
+ invariant8(version2, `Type.makeObject requires a versioned DXN: ${dxn}`, { "~LogMeta": "~LogMeta", F: __dxlog_file8, L: 18, S: void 0, A: ["version", "`Type.makeObject requires a versioned DXN: ${dxn}`"] });
1327
+ return (self) => {
1328
+ invariant8(typeof TypeAnnotationId === "symbol", "Sanity.", { "~LogMeta": "~LogMeta", F: __dxlog_file8, L: 20, S: void 0, A: ["typeof TypeAnnotationId === 'symbol'", "'Sanity.'"] });
1329
+ invariant8(SchemaAST5.isTypeLiteral(self.ast), "Schema must be a TypeLiteral.", { "~LogMeta": "~LogMeta", F: __dxlog_file8, L: 21, S: void 0, A: ["SchemaAST.isTypeLiteral(self.ast)", "'Schema must be a TypeLiteral.'"] });
1330
+ const fields = self.fields ?? {};
1331
+ const schemaWithId = Schema6.extend(self, Schema6.Struct({
1332
+ id: Schema6.String
1333
+ }));
1334
+ const ast = SchemaAST5.annotations(schemaWithId.ast, {
1335
+ // TODO(dmaretskyi): `extend` kills the annotations.
1336
+ ...self.ast.annotations,
1337
+ [TypeAnnotationId]: {
1338
+ kind: EntityKind.Object,
1339
+ typename,
1340
+ version: version2
1341
+ },
1342
+ // TODO(dmaretskyi): TypeIdentifierAnnotationId?
1343
+ [SchemaAST5.JSONSchemaAnnotationId]: makeTypeJsonSchemaAnnotation({
1344
+ kind: EntityKind.Object,
1345
+ typename,
1346
+ version: version2
1347
+ })
1348
+ });
1349
+ return makeEchoTypeSchema(fields, ast, typename, version2, EntityKind.Object, () => toJsonSchema(Schema6.make(ast)));
1350
+ };
1351
+ };
1352
+
1353
+ // src/internal/Entity/relation.ts
1354
+ import * as Schema7 from "effect/Schema";
1355
+ import * as SchemaAST6 from "effect/SchemaAST";
1356
+ import { raise } from "@dxos/debug";
1357
+ import { assertArgument as assertArgument2, invariant as invariant9 } from "@dxos/invariant";
1358
+ import { DXN as DXN3 } from "@dxos/keys";
1359
+ var __dxlog_file9 = "/__w/dxos/dxos/packages/core/echo/echo/src/internal/Entity/relation.ts";
1360
+ var EchoRelationSchema = ({ dxn, source, target }) => {
1361
+ const sourceSchema = source != null ? getStaticTypeSchema(source) ?? source : source;
1362
+ const targetSchema = target != null ? getStaticTypeSchema(target) ?? target : target;
1363
+ assertArgument2(Schema7.isSchema(sourceSchema), "source");
1364
+ assertArgument2(Schema7.isSchema(targetSchema), "target");
1365
+ const typename = DXN3.getName(dxn);
1366
+ const version2 = DXN3.getVersion(dxn);
1367
+ invariant9(version2, `Type.makeRelation requires a versioned DXN: ${dxn}`, { "~LogMeta": "~LogMeta", F: __dxlog_file9, L: 26, S: void 0, A: ["version", "`Type.makeRelation requires a versioned DXN: ${dxn}`"] });
1368
+ const sourceDXN = getDXNForRelationSchemaRef(sourceSchema);
1369
+ const targetDXN = getDXNForRelationSchemaRef(targetSchema);
1370
+ if (getEntityKind(sourceSchema) !== EntityKind.Object) {
1371
+ raise(new Error("Source schema must be an echo object schema."));
1372
+ }
1373
+ if (getEntityKind(targetSchema) !== EntityKind.Object) {
1374
+ raise(new Error("Target schema must be an echo object schema."));
1375
+ }
1376
+ return (self) => {
1377
+ invariant9(SchemaAST6.isTypeLiteral(self.ast), "Schema must be a TypeLiteral.", { "~LogMeta": "~LogMeta", F: __dxlog_file9, L: 36, S: void 0, A: ["SchemaAST.isTypeLiteral(self.ast)", "'Schema must be a TypeLiteral.'"] });
1378
+ const fields = self.fields ?? {};
1379
+ const schemaWithId = Schema7.extend(self, Schema7.Struct({
1380
+ id: Schema7.String
1381
+ }));
1382
+ const ast = SchemaAST6.annotations(schemaWithId.ast, {
1383
+ // TODO(dmaretskyi): `extend` kills the annotations.
1384
+ ...self.ast.annotations,
1385
+ [TypeAnnotationId]: {
1386
+ kind: EntityKind.Relation,
1387
+ typename,
1388
+ version: version2,
1389
+ sourceSchema: sourceDXN,
1390
+ targetSchema: targetDXN
1391
+ },
1392
+ // TODO(dmaretskyi): TypeIdentifierAnnotationId?
1393
+ [SchemaAST6.JSONSchemaAnnotationId]: makeTypeJsonSchemaAnnotation({
1394
+ kind: EntityKind.Relation,
1395
+ typename,
1396
+ version: version2,
1397
+ relationSource: sourceDXN,
1398
+ relationTarget: targetDXN
1399
+ })
1400
+ });
1401
+ return makeEchoTypeSchema(fields, ast, typename, version2, EntityKind.Relation, () => toJsonSchema(Schema7.make(ast)));
1402
+ };
1403
+ };
1404
+ var getDXNForRelationSchemaRef = (schema) => {
1405
+ assertArgument2(Schema7.isSchema(schema), "schema");
1406
+ const identifier = getTypeIdentifierAnnotation(schema);
1407
+ if (identifier) {
1408
+ return DXN3.tryMake(identifier) ?? raise(new Error(`Invalid schema identifier: ${identifier}`));
1409
+ }
1410
+ const typename = getSchemaTypename(schema);
1411
+ if (!typename) {
1412
+ throw new Error("Schema must have a typename");
1413
+ }
1414
+ return DXN3.make(typename);
1415
+ };
1416
+
1417
+ // src/internal/Entity/type-kind.ts
1418
+ import * as Schema8 from "effect/Schema";
1419
+ import * as SchemaAST7 from "effect/SchemaAST";
1420
+ import { invariant as invariant10 } from "@dxos/invariant";
1421
+ import { DXN as DXN4 } from "@dxos/keys";
1422
+ var __dxlog_file10 = "/__w/dxos/dxos/packages/core/echo/echo/src/internal/Entity/type-kind.ts";
1423
+ var EchoTypeKindSchema = (dxn) => {
1424
+ const typename = DXN4.getName(dxn);
1425
+ const version2 = DXN4.getVersion(dxn);
1426
+ invariant10(version2, `Type-kind schemas require a versioned DXN: ${dxn}`, { "~LogMeta": "~LogMeta", F: __dxlog_file10, L: 21, S: void 0, A: ["version", "`Type-kind schemas require a versioned DXN: ${dxn}`"] });
1427
+ return (self) => {
1428
+ invariant10(SchemaAST7.isTypeLiteral(self.ast), "Schema must be a TypeLiteral.", { "~LogMeta": "~LogMeta", F: __dxlog_file10, L: 23, S: void 0, A: ["SchemaAST.isTypeLiteral(self.ast)", "'Schema must be a TypeLiteral.'"] });
1429
+ const fields = self.fields ?? {};
1430
+ const schemaWithId = Schema8.extend(self, Schema8.Struct({
1431
+ id: Schema8.String
1432
+ }));
1433
+ const ast = SchemaAST7.annotations(schemaWithId.ast, {
1434
+ ...self.ast.annotations,
1435
+ [TypeAnnotationId]: {
1436
+ kind: EntityKind.Type,
1437
+ typename,
1438
+ version: version2
1439
+ },
1440
+ [SchemaAST7.JSONSchemaAnnotationId]: makeTypeJsonSchemaAnnotation({
1441
+ kind: EntityKind.Type,
1442
+ typename,
1443
+ version: version2
1444
+ })
1445
+ });
1446
+ return makeEchoTypeSchema(fields, ast, typename, version2, EntityKind.Type, () => toJsonSchema(Schema8.make(ast)));
1447
+ };
1448
+ };
1449
+
1450
+ // src/internal/Entity/version.ts
1451
+ import { assertArgument as assertArgument3 } from "@dxos/invariant";
1452
+ var unversioned = {
1453
+ [VersionTypeId]: {},
1454
+ versioned: false
1455
+ };
1456
+ var isVersion = (entity) => {
1457
+ return entity != null && typeof entity === "object" && VersionTypeId in entity;
1458
+ };
1459
+ var version = (entity) => {
1460
+ const ver = entity[ObjectVersionId];
1461
+ if (ver === void 0) {
1462
+ return unversioned;
1463
+ }
1464
+ return ver;
1465
+ };
1466
+ var versionValid = (ver) => {
1467
+ assertArgument3(isVersion(ver), "version", "Invalid version object");
1468
+ return !!ver.versioned;
1469
+ };
1470
+ var compareVersions = (version1, version2) => {
1471
+ assertArgument3(isVersion(version1), "version1", "Invalid version object");
1472
+ assertArgument3(isVersion(version2), "version2", "Invalid version object");
1473
+ if (!versionValid(version1) || !versionValid(version2)) {
1474
+ return "unversioned";
1475
+ }
1476
+ if (version1.automergeHeads?.length !== version2.automergeHeads?.length) {
1477
+ return "different";
1478
+ }
1479
+ if (version1.automergeHeads?.some((head) => !version2.automergeHeads?.includes(head))) {
1480
+ return "different";
1481
+ }
1482
+ return "equal";
1483
+ };
1484
+ var encodeVersion = (ver) => {
1485
+ return JSON.stringify(ver);
1486
+ };
1487
+ var decodeVersion = (ver) => {
1488
+ const parsed = JSON.parse(ver);
1489
+ parsed[VersionTypeId] = {};
1490
+ return parsed;
1491
+ };
1492
+
1493
+ // src/internal/Obj/common.ts
1494
+ import * as Schema9 from "effect/Schema";
1495
+ var makeTypedEntityClass = (typename, version2, baseSchema) => {
1496
+ return class {
1497
+ // Implement TypedObject properties.
1498
+ static typename = typename;
1499
+ static version = version2;
1500
+ // Implement Schema.Schema properties.
1501
+ // TODO(burdon): Comment required.
1502
+ static [Schema9.TypeId] = schemaVariance;
1503
+ static ast = baseSchema.ast;
1504
+ static annotations = baseSchema.annotations.bind(baseSchema);
1505
+ static pipe = baseSchema.pipe.bind(baseSchema);
1506
+ // TODO(burdon): Comment required.
1507
+ static [Symbol.hasInstance](obj) {
1508
+ return obj != null && getTypename(obj) === typename;
1509
+ }
1510
+ // TODO(burdon): Throw APIError.
1511
+ constructor() {
1512
+ throw new Error("Use live(Typename, { ...fields }) to instantiate an object.");
1513
+ }
1514
+ };
1515
+ };
1516
+ var schemaVariance = {
1517
+ _A: (_) => _,
1518
+ _I: (_) => _,
1519
+ _R: (_) => _
1520
+ };
1521
+
1522
+ // src/internal/Obj/create-object.ts
1523
+ import { raise as raise3 } from "@dxos/debug";
1524
+ import { assertArgument as assertArgument5, failedInvariant } from "@dxos/invariant";
1525
+ import { ObjectId as ObjectId4 } from "@dxos/keys";
1526
+
1527
+ // src/internal/Obj/inspect.ts
1528
+ import { inspectCustom as inspectCustom2 } from "@dxos/debug";
1529
+ var attachedTypedObjectInspector = (obj) => {
1530
+ const descriptor = Object.getOwnPropertyDescriptor(obj, inspectCustom2);
1531
+ if (descriptor) {
1532
+ return;
1533
+ }
1534
+ Object.defineProperty(obj, inspectCustom2, {
1535
+ value: typedObjectInspectFunction,
1536
+ writable: false,
1537
+ enumerable: false,
1538
+ configurable: true
1539
+ });
1540
+ };
1541
+ var typedObjectInspectFunction = function(depth, options, inspect) {
1542
+ const { id, ...props } = this;
1543
+ return inspect({
1544
+ id,
1545
+ [ATTR_TYPE]: getTypeURI(this),
1546
+ ...props,
1547
+ [ATTR_META]: this[MetaId]
1548
+ }, options);
1549
+ };
1550
+
1551
+ // src/internal/Obj/json-serializer.ts
1552
+ import * as Schema10 from "effect/Schema";
1553
+ import { raise as raise2 } from "@dxos/debug";
1554
+ import { ObjectStructure, isEncodedReference } from "@dxos/echo-protocol";
1555
+ import { assertArgument as assertArgument4, invariant as invariant11 } from "@dxos/invariant";
1556
+ import { EchoURI as EchoURI2, ObjectId as ObjectId3, URI } from "@dxos/keys";
1557
+ import { assumeType, decodeUint8ArrayFromJson, deepMapValues as deepMapValues2, isEncodedUint8Array, visitValues } from "@dxos/util";
1558
+ var __dxlog_file11 = "/__w/dxos/dxos/packages/core/echo/echo/src/internal/Obj/json-serializer.ts";
1559
+ var objectToJSON = (obj) => {
1560
+ const typename = getTypeURI(obj);
1561
+ invariant11(typename && typeof typename === "string", void 0, { "~LogMeta": "~LogMeta", F: __dxlog_file11, L: 21, S: void 0, A: ["typename && typeof typename === 'string'", ""] });
1562
+ return typedJsonSerializer.call(obj);
1563
+ };
1564
+ var objectFromJSON = async (jsonData, { refResolver, uri, database, parent } = {}) => {
1565
+ assumeType(jsonData);
1566
+ assertArgument4(typeof jsonData === "object" && jsonData !== null, "jsonData", "expect object");
1567
+ assertArgument4(typeof jsonData[ATTR_TYPE] === "string", "jsonData[ATTR_TYPE]", "expected object to have a type");
1568
+ assertArgument4(typeof jsonData.id === "string", "jsonData.id", "expected object to have an id");
1569
+ const type = URI.make(jsonData[ATTR_TYPE]);
1570
+ const schema = await refResolver?.resolveSchema(type);
1571
+ invariant11(schema === void 0 || Schema10.isSchema(schema), void 0, { "~LogMeta": "~LogMeta", F: __dxlog_file11, L: 41, S: void 0, A: ["schema === undefined || Schema.isSchema(schema)", ""] });
1572
+ const decodedInput = restoreUint8Arrays(stripInternalJsonKeys(jsonData));
1573
+ let obj;
1574
+ if (schema != null) {
1575
+ obj = await schema.pipe(Schema10.decodeUnknownPromise)(decodedInput);
1576
+ if (refResolver) {
1577
+ setRefResolverOnData(obj, refResolver);
1578
+ }
1579
+ } else {
1580
+ obj = decodeGeneric(decodedInput, {
1581
+ refResolver
1582
+ });
1583
+ }
1584
+ invariant11(ObjectId3.isValid(obj.id), "Invalid object id", { "~LogMeta": "~LogMeta", F: __dxlog_file11, L: 54, S: void 0, A: ["ObjectId.isValid(obj.id)", "'Invalid object id'"] });
1585
+ setTypename(obj, type);
1586
+ if (schema) {
1587
+ setSchema(obj, schema);
1588
+ }
1589
+ if (refResolver?.resolveType) {
1590
+ const typeEntity = await refResolver.resolveType(type);
1591
+ if (typeEntity != null) {
1592
+ setType(obj, typeEntity);
1593
+ }
1594
+ }
1595
+ const isRelation = typeof jsonData[ATTR_RELATION_SOURCE] === "string" || typeof jsonData[ATTR_RELATION_TARGET] === "string";
1596
+ if (isRelation) {
1597
+ const sourceDxn = jsonData[ATTR_RELATION_SOURCE] ?? raise2(new TypeError("Missing relation source"));
1598
+ const targetDxn = jsonData[ATTR_RELATION_TARGET] ?? raise2(new TypeError("Missing relation target"));
1599
+ const source = await refResolver?.resolve(sourceDxn);
1600
+ const target = await refResolver?.resolve(targetDxn);
1601
+ defineHiddenProperty(obj, KindId, EntityKind.Relation);
1602
+ defineHiddenProperty(obj, RelationSourceDXNId, sourceDxn);
1603
+ defineHiddenProperty(obj, RelationTargetDXNId, targetDxn);
1604
+ defineHiddenProperty(obj, RelationSourceId, source);
1605
+ defineHiddenProperty(obj, RelationTargetId, target);
1606
+ } else {
1607
+ const annotationKind = schema != null ? getTypeAnnotation(schema)?.kind : void 0;
1608
+ defineHiddenProperty(obj, KindId, annotationKind === EntityKind.Type ? EntityKind.Type : EntityKind.Object);
1609
+ }
1610
+ if (typeof jsonData[ATTR_META] === "object") {
1611
+ const meta = await ObjectMetaSchema.pipe(Schema10.decodeUnknownPromise)(jsonData[ATTR_META]);
1612
+ invariant11(Array.isArray(meta.keys), void 0, { "~LogMeta": "~LogMeta", F: __dxlog_file11, L: 90, S: void 0, A: ["Array.isArray(meta.keys)", ""] });
1613
+ defineHiddenProperty(obj, MetaId, meta);
1614
+ } else {
1615
+ defineHiddenProperty(obj, MetaId, {
1616
+ keys: []
1617
+ });
1618
+ }
1619
+ if (jsonData[ATTR_PARENT]) {
1620
+ const parentDxn = jsonData[ATTR_PARENT];
1621
+ const resolvedParent = await refResolver?.resolve(parentDxn);
1622
+ defineHiddenProperty(obj, ParentId, resolvedParent);
1623
+ } else if (parent) {
1624
+ defineHiddenProperty(obj, ParentId, parent);
1625
+ }
1626
+ if (uri) {
1627
+ defineHiddenProperty(obj, SelfURIId, uri);
1628
+ }
1629
+ if (database) {
1630
+ defineHiddenProperty(obj, ObjectDatabaseId, database);
1631
+ }
1632
+ assertObjectModel(obj);
1633
+ invariant11(obj[ATTR_TYPE] === void 0, "Invalid object model", { "~LogMeta": "~LogMeta", F: __dxlog_file11, L: 111, S: void 0, A: ["obj[ATTR_TYPE] === undefined", "'Invalid object model'"] });
1634
+ invariant11(obj[ATTR_META] === void 0, "Invalid object model", { "~LogMeta": "~LogMeta", F: __dxlog_file11, L: 112, S: void 0, A: ["obj[ATTR_META] === undefined", "'Invalid object model'"] });
1635
+ invariant11(obj[ATTR_DELETED] === void 0, "Invalid object model", { "~LogMeta": "~LogMeta", F: __dxlog_file11, L: 113, S: void 0, A: ["obj[ATTR_DELETED] === undefined", "'Invalid object model'"] });
1636
+ invariant11(obj[ATTR_SELF_URI] === void 0, "Invalid object model", { "~LogMeta": "~LogMeta", F: __dxlog_file11, L: 114, S: void 0, A: ["obj[ATTR_SELF_URI] === undefined", "'Invalid object model'"] });
1637
+ invariant11(obj[ATTR_SELF_URI_LEGACY] === void 0, "Invalid object model", { "~LogMeta": "~LogMeta", F: __dxlog_file11, L: 115, S: void 0, A: ["obj[ATTR_SELF_URI_LEGACY] === undefined", "'Invalid object model'"] });
1638
+ invariant11(obj[ATTR_RELATION_SOURCE] === void 0, "Invalid object model", { "~LogMeta": "~LogMeta", F: __dxlog_file11, L: 116, S: void 0, A: ["obj[ATTR_RELATION_SOURCE] === undefined", "'Invalid object model'"] });
1639
+ invariant11(obj[ATTR_RELATION_TARGET] === void 0, "Invalid object model", { "~LogMeta": "~LogMeta", F: __dxlog_file11, L: 117, S: void 0, A: ["obj[ATTR_RELATION_TARGET] === undefined", "'Invalid object model'"] });
1640
+ return obj;
1641
+ };
1642
+ var decodeGeneric = (jsonData, options) => {
1643
+ const props = stripInternalJsonKeys(jsonData);
1644
+ return deepMapValues2(props, (value2, visitor) => {
1645
+ if (isEncodedReference(value2)) {
1646
+ return refFromEncodedReference(value2, options.refResolver);
1647
+ }
1648
+ if (isEncodedUint8Array(value2)) {
1649
+ return decodeUint8ArrayFromJson(value2);
1650
+ }
1651
+ return visitor(value2);
1652
+ });
1653
+ };
1654
+ var restoreUint8Arrays = (data) => deepMapValues2(data, (value2, recurse) => {
1655
+ if (isEncodedUint8Array(value2)) {
1656
+ return decodeUint8ArrayFromJson(value2);
1657
+ }
1658
+ return recurse(value2);
1659
+ });
1660
+ var stripInternalJsonKeys = (jsonData) => {
1661
+ const { [ATTR_TYPE]: _type, [ATTR_META]: _meta, [ATTR_DELETED]: _deleted, [ATTR_SELF_URI]: _selfUri, [ATTR_SELF_URI_LEGACY]: _legacySelfUri, [ATTR_RELATION_SOURCE]: _relationSource, [ATTR_RELATION_TARGET]: _relationTarget, ...props } = jsonData;
1662
+ return props;
1663
+ };
1664
+ var setRefResolverOnData = (obj, refResolver) => {
1665
+ const visitor = (value2) => {
1666
+ if (Ref.isRef(value2)) {
1667
+ setRefResolver(value2, refResolver);
1668
+ } else {
1669
+ visitValues(value2, visitor);
1670
+ }
1671
+ };
1672
+ visitor(obj);
1673
+ };
1674
+ var objectStructureToJson = (objectId, structure) => {
1675
+ const typeRef = ObjectStructure.getTypeReference(structure)?.["/"];
1676
+ const parent = ObjectStructure.getParent(structure)?.["/"];
1677
+ const source = ObjectStructure.getRelationSource(structure)?.["/"];
1678
+ const target = ObjectStructure.getRelationTarget(structure)?.["/"];
1679
+ return {
1680
+ ...structure.data,
1681
+ id: objectId,
1682
+ [ATTR_TYPE]: typeRef ? URI.make(typeRef) : void 0,
1683
+ [ATTR_DELETED]: ObjectStructure.isDeleted(structure),
1684
+ [ATTR_PARENT]: parent !== void 0 ? EchoURI2.tryParse(parent) : void 0,
1685
+ [ATTR_RELATION_SOURCE]: source !== void 0 ? EchoURI2.tryParse(source) : void 0,
1686
+ [ATTR_RELATION_TARGET]: target !== void 0 ? EchoURI2.tryParse(target) : void 0
1687
+ };
1688
+ };
1689
+
1690
+ // src/internal/Obj/create-object.ts
1691
+ var createObject = (input, props) => {
1692
+ const schema = getStaticTypeSchema(input) ?? failedInvariant("Type entity is missing its source schema");
1693
+ const annotation = getTypeAnnotation(schema);
1694
+ if (!annotation) {
1695
+ throw new Error("Schema is not an ECHO schema");
1696
+ }
1697
+ assertArgument5(!("@type" in props), "data", "@type is not allowed");
1698
+ assertArgument5(!(RelationSourceDXNId in props), "data", "Relation source DXN is not allowed in the constructor");
1699
+ assertArgument5(!(RelationTargetDXNId in props), "data", "Relation target DXN is not allowed in the constructor");
1700
+ assertArgument5(RelationSourceId in props === RelationTargetId in props, "data", "Relation source and target must be provided together");
1701
+ const metaOverride = props[MetaId];
1702
+ if (metaOverride !== void 0) {
1703
+ delete props[MetaId];
1704
+ }
1705
+ const obj = {
1706
+ ...props,
1707
+ id: props.id ?? ObjectId4.random()
1708
+ };
1709
+ const kind = annotation.kind === EntityKind.Type ? EntityKind.Type : annotation.kind === EntityKind.Relation || RelationSourceId in props ? EntityKind.Relation : EntityKind.Object;
1710
+ defineHiddenProperty(obj, KindId, kind);
1711
+ defineHiddenProperty(obj, MetaId, {
1712
+ keys: [],
1713
+ ...metaOverride
1714
+ });
1715
+ setSchema(obj, schema);
1716
+ if (input !== schema) {
1717
+ setType(obj, input);
1718
+ }
1719
+ setTypename(obj, getSchemaURI(schema) ?? failedInvariant("Missing schema URI"));
1720
+ attachTypedJsonSerializer(obj);
1721
+ attachedTypedObjectInspector(obj);
1722
+ if (kind === EntityKind.Relation) {
1723
+ const sourceDXN = getObjectEchoUri(props[RelationSourceId]) ?? raise3(new Error("Unresolved relation source"));
1724
+ const targetDXN = getObjectEchoUri(props[RelationTargetId]) ?? raise3(new Error("Unresolved relation target"));
1725
+ defineHiddenProperty(obj, RelationSourceDXNId, sourceDXN);
1726
+ defineHiddenProperty(obj, RelationTargetDXNId, targetDXN);
1727
+ }
1728
+ assertObjectModel(obj);
1729
+ return obj;
1730
+ };
1731
+
1732
+ // src/internal/Obj/deleted.ts
1733
+ var isDeleted = (obj) => {
1734
+ if (obj[ObjectDeletedId] === void 0) {
1735
+ return false;
1736
+ }
1737
+ return obj[ObjectDeletedId] ?? false;
1738
+ };
1739
+
1740
+ // src/internal/Obj/set-value.ts
1741
+ import * as Match from "effect/Match";
1742
+ import * as Option from "effect/Option";
1743
+ import * as SchemaAST8 from "effect/SchemaAST";
1744
+ import { getArrayElementType, getBaseType, getProperties as getProperties2, isArrayType, isNestedType } from "@dxos/effect";
1745
+ import { invariant as invariant12 } from "@dxos/invariant";
1746
+ var __dxlog_file12 = "/__w/dxos/dxos/packages/core/echo/echo/src/internal/Obj/set-value.ts";
1747
+ var setValue = (obj, path, value2) => {
1748
+ invariant12(path.length > 0, "Path must not be empty", { "~LogMeta": "~LogMeta", F: __dxlog_file12, L: 14, S: void 0, A: ["path.length > 0", "'Path must not be empty'"] });
1749
+ const schema = getSchema(obj);
1750
+ invariant12(schema != null, "Object must have a schema", { "~LogMeta": "~LogMeta", F: __dxlog_file12, L: 16, S: void 0, A: ["schema != null", "'Object must have a schema'"] });
1751
+ let parent = obj;
1752
+ let currentAST = schema.ast;
1753
+ for (let i = 0; i < path.length - 1; i++) {
1754
+ const part = path[i];
1755
+ const key = typeof part === "number" ? part : String(part);
1756
+ if (parent[key] === void 0) {
1757
+ const propertyAST = getPropertyAST(currentAST, String(part));
1758
+ const shouldBeArray = propertyAST ? isArrayType(propertyAST) : false;
1759
+ if (shouldBeArray) {
1760
+ parent[key] = [];
1761
+ } else {
1762
+ const objWithDefaults = createObjectWithDefaults(propertyAST);
1763
+ parent[key] = objWithDefaults;
1764
+ }
1765
+ }
1766
+ parent = parent[key];
1767
+ currentAST = getPropertyAST(currentAST, String(part));
1768
+ }
1769
+ const finalKey = path[path.length - 1];
1770
+ parent[finalKey] = value2;
1771
+ return value2;
1772
+ };
1773
+ var getPropertyAST = (ast, propertyName) => {
1774
+ if (!ast) {
1775
+ return void 0;
1776
+ }
1777
+ if (isNestedType(ast)) {
1778
+ const properties = getProperties2(ast);
1779
+ const property = properties.find((p) => p.name.toString() === propertyName);
1780
+ if (property) {
1781
+ return getBaseType(property).type;
1782
+ }
1783
+ }
1784
+ if (isArrayType(ast)) {
1785
+ const elementType = getArrayElementType(ast);
1786
+ return elementType;
1787
+ }
1788
+ return void 0;
1789
+ };
1790
+ var getRequiredProperties = (ast) => {
1791
+ if (!ast) {
1792
+ return [];
1793
+ }
1794
+ if (!isNestedType(ast)) {
1795
+ return [];
1796
+ }
1797
+ const properties = getProperties2(ast);
1798
+ return properties.filter((p) => !p.isOptional);
1799
+ };
1800
+ var getDefaultValueForType = (ast) => {
1801
+ if (!ast) {
1802
+ return void 0;
1803
+ }
1804
+ const defaultValue = SchemaAST8.getDefaultAnnotation(ast);
1805
+ if (Option.isSome(defaultValue)) {
1806
+ return defaultValue.value;
1807
+ }
1808
+ return Match.value(ast).pipe(Match.when({
1809
+ _tag: "StringKeyword"
1810
+ }, () => ""), Match.when({
1811
+ _tag: "NumberKeyword"
1812
+ }, () => 0), Match.when({
1813
+ _tag: "BooleanKeyword"
1814
+ }, () => false), Match.orElse(() => void 0));
1815
+ };
1816
+ var createObjectWithDefaults = (ast) => {
1817
+ if (!ast) {
1818
+ return {};
1819
+ }
1820
+ const requiredProps = getRequiredProperties(ast);
1821
+ const obj = {};
1822
+ for (const prop of requiredProps) {
1823
+ const defaultValue = getDefaultValueForType(prop.type);
1824
+ if (defaultValue !== void 0) {
1825
+ obj[prop.name] = defaultValue;
1826
+ } else if (isNestedType(prop.type)) {
1827
+ obj[prop.name] = createObjectWithDefaults(prop.type);
1828
+ }
1829
+ }
1830
+ return obj;
1831
+ };
1832
+
1833
+ // src/internal/Obj/snapshot.ts
1834
+ import { assertArgument as assertArgument6 } from "@dxos/invariant";
1835
+ import { deepMapValues as deepMapValues3 } from "@dxos/util";
1836
+ var copySymbolProperty = (source, target, symbol, transform) => {
1837
+ let value2;
1838
+ try {
1839
+ value2 = source[symbol];
1840
+ } catch {
1841
+ return;
1842
+ }
1843
+ if (value2 !== void 0) {
1844
+ const finalValue = transform ? transform(value2) : value2;
1845
+ Object.defineProperty(target, symbol, {
1846
+ value: finalValue,
1847
+ writable: false,
1848
+ enumerable: false,
1849
+ configurable: false
1850
+ });
1851
+ }
1852
+ };
1853
+ var getSnapshot = (obj) => {
1854
+ assertArgument6(typeof obj === "object" && obj !== null && KindId in obj, "obj", "must be an entity");
1855
+ const snapshot = deepMapValues3(obj, (value2, recurse) => {
1856
+ if (typeof value2 === "object" && value2 !== null && Object.getPrototypeOf(value2) !== Object.prototype && !Array.isArray(value2)) {
1857
+ return value2;
1858
+ }
1859
+ return recurse(value2);
1860
+ });
1861
+ if (obj != null && typeof obj === "object" && KindId in obj) {
1862
+ snapshot[SnapshotKindId] = obj[KindId];
1863
+ }
1864
+ const source = obj;
1865
+ copySymbolProperty(source, snapshot, TypeId);
1866
+ copySymbolProperty(source, snapshot, SchemaId);
1867
+ copySymbolProperty(source, snapshot, TypeEntityId);
1868
+ copySymbolProperty(source, snapshot, SelfURIId);
1869
+ copySymbolProperty(source, snapshot, ObjectDatabaseId);
1870
+ copySymbolProperty(source, snapshot, ObjectDeletedId);
1871
+ copySymbolProperty(source, snapshot, ParentId);
1872
+ copySymbolProperty(source, snapshot, MetaId, (meta) => ({
1873
+ keys: [
1874
+ ...meta?.keys ?? []
1875
+ ],
1876
+ tags: [
1877
+ ...meta?.tags ?? []
1878
+ ]
1879
+ }));
1880
+ copySymbolProperty(source, snapshot, RelationSourceDXNId);
1881
+ copySymbolProperty(source, snapshot, RelationTargetDXNId);
1882
+ copySymbolProperty(source, snapshot, RelationSourceId);
1883
+ copySymbolProperty(source, snapshot, RelationTargetId);
1884
+ return Object.freeze(snapshot);
1885
+ };
1886
+
1887
+ // src/internal/Obj/clone.ts
1888
+ import { invariant as invariant13 } from "@dxos/invariant";
1889
+ import { deepMapValues as deepMapValues4 } from "@dxos/util";
1890
+ var __dxlog_file13 = "/__w/dxos/dxos/packages/core/echo/echo/src/internal/Obj/clone.ts";
1891
+ var clone = (obj, opts) => {
1892
+ const { id, ...data } = obj;
1893
+ const typeEntity = getType(obj);
1894
+ const schema = typeEntity != null ? getStaticTypeSchema(typeEntity) : getSchema(obj);
1895
+ invariant13(schema != null, "Object should have a type or schema", { "~LogMeta": "~LogMeta", F: __dxlog_file13, L: 20, S: void 0, A: ["schema != null", "'Object should have a type or schema'"] });
1896
+ const props = deepMapValues4(data, (value2, recurse) => {
1897
+ if (Ref.isRef(value2)) {
1898
+ if (opts?.deep) {
1899
+ return Ref.make(clone(value2.target, opts));
1900
+ }
1901
+ return value2;
1902
+ }
1903
+ return recurse(value2);
1904
+ });
1905
+ if (opts?.retainId) {
1906
+ props.id = id;
1907
+ }
1908
+ const meta = deepMapValues4(getMeta(obj), (value2, recurse) => {
1909
+ if (Ref.isRef(value2)) {
1910
+ if (opts?.deep) {
1911
+ return Ref.make(clone(value2.target, opts));
1912
+ }
1913
+ return value2;
1914
+ }
1915
+ return recurse(value2);
1916
+ });
1917
+ return makeObject(schema, props, meta, typeEntity);
1918
+ };
1919
+
1920
+ // src/internal/Query.ts
1921
+ var prettyFilter = (filter) => {
1922
+ switch (filter.type) {
1923
+ case "object": {
1924
+ if (filter.typename === null && (filter.id === void 0 || filter.id.length === 0) && Object.keys(filter.props).length === 0 && (filter.foreignKeys === void 0 || filter.foreignKeys.length === 0) && filter.metaKey !== void 0) {
1925
+ return filter.metaVersion !== void 0 ? `Filter.key(${JSON.stringify(filter.metaKey)}, { version: ${JSON.stringify(filter.metaVersion)} })` : `Filter.key(${JSON.stringify(filter.metaKey)})`;
1926
+ }
1927
+ const parts = [];
1928
+ if (filter.typename !== null) {
1929
+ parts.push(String(filter.typename));
1930
+ }
1931
+ if (filter.id !== void 0 && filter.id.length > 0) {
1932
+ parts.push(`id: [${filter.id.join(", ")}]`);
1933
+ }
1934
+ const propEntries = Object.entries(filter.props);
1935
+ if (propEntries.length > 0) {
1936
+ const propsStr = propEntries.map(([k, v]) => `${k}: ${prettyFilter(v)}`).join(", ");
1937
+ parts.push(`{ ${propsStr} }`);
1938
+ }
1939
+ if (filter.foreignKeys !== void 0 && filter.foreignKeys.length > 0) {
1940
+ parts.push(`foreignKeys: [${filter.foreignKeys.map((fk) => JSON.stringify(fk)).join(", ")}]`);
1941
+ }
1942
+ if (filter.metaKey !== void 0) {
1943
+ parts.push(filter.metaVersion !== void 0 ? `metaKey: ${JSON.stringify(filter.metaKey)} (${filter.metaVersion})` : `metaKey: ${JSON.stringify(filter.metaKey)}`);
1944
+ }
1945
+ return parts.length > 0 ? `Filter.type(${parts.join(", ")})` : "Filter.everything()";
1946
+ }
1947
+ case "compare":
1948
+ return `Filter.${filter.operator}(${JSON.stringify(filter.value)})`;
1949
+ case "in":
1950
+ return `Filter.in([${filter.values.map((v) => JSON.stringify(v)).join(", ")}])`;
1951
+ case "contains":
1952
+ return `Filter.contains(${JSON.stringify(filter.value)})`;
1953
+ case "tag":
1954
+ return `Filter.tag(${JSON.stringify(filter.tag)})`;
1955
+ case "range":
1956
+ return `Filter.range(${JSON.stringify(filter.from)}, ${JSON.stringify(filter.to)})`;
1957
+ case "text-search":
1958
+ return filter.searchKind ? `Filter.textSearch(${JSON.stringify(filter.text)}, ${JSON.stringify(filter.searchKind)})` : `Filter.textSearch(${JSON.stringify(filter.text)})`;
1959
+ case "timestamp":
1960
+ return `Filter.${filter.field}.${filter.operator}(${filter.value})`;
1961
+ case "child-of":
1962
+ return `Filter.childOf([${filter.parents.map((p) => JSON.stringify(p)).join(", ")}], { transitive: ${filter.transitive} })`;
1963
+ case "not":
1964
+ return `Filter.not(${prettyFilter(filter.filter)})`;
1965
+ case "and":
1966
+ return `Filter.and(${filter.filters.map(prettyFilter).join(", ")})`;
1967
+ case "or":
1968
+ return `Filter.or(${filter.filters.map(prettyFilter).join(", ")})`;
1969
+ }
1970
+ };
1971
+ var prettyQuery = (query) => {
1972
+ switch (query.type) {
1973
+ case "select":
1974
+ return `Query.select(${prettyFilter(query.filter)})`;
1975
+ case "filter":
1976
+ return `${prettyQuery(query.selection)}.select(${prettyFilter(query.filter)})`;
1977
+ case "reference-traversal":
1978
+ return `${prettyQuery(query.anchor)}.reference(${JSON.stringify(query.property)})`;
1979
+ case "incoming-references": {
1980
+ const args = [];
1981
+ if (query.typename !== null) {
1982
+ args.push(String(query.typename));
1983
+ }
1984
+ if (query.property !== null) {
1985
+ args.push(JSON.stringify(query.property));
1986
+ }
1987
+ return `${prettyQuery(query.anchor)}.referencedBy(${args.join(", ")})`;
1988
+ }
1989
+ case "relation": {
1990
+ const method = query.direction === "outgoing" ? "sourceOf" : query.direction === "incoming" ? "targetOf" : "relationOf";
1991
+ const filterStr = query.filter !== void 0 ? prettyFilter(query.filter) : "";
1992
+ return `${prettyQuery(query.anchor)}.${method}(${filterStr})`;
1993
+ }
1994
+ case "relation-traversal":
1995
+ return `${prettyQuery(query.anchor)}.${query.direction}()`;
1996
+ case "hierarchy-traversal":
1997
+ return query.direction === "to-parent" ? `${prettyQuery(query.anchor)}.parent()` : `${prettyQuery(query.anchor)}.children()`;
1998
+ case "union":
1999
+ return `Query.all(${query.queries.map(prettyQuery).join(", ")})`;
2000
+ case "set-difference":
2001
+ return `Query.without(${prettyQuery(query.source)}, ${prettyQuery(query.exclude)})`;
2002
+ case "order": {
2003
+ const orders = query.order.map((o) => {
2004
+ if (o.kind === "natural") {
2005
+ return "Order.natural()";
2006
+ } else if (o.kind === "rank") {
2007
+ return `Order.rank(${JSON.stringify(o.direction)})`;
2008
+ } else {
2009
+ return `Order.property(${JSON.stringify(o.property)}, ${JSON.stringify(o.direction)})`;
2010
+ }
2011
+ });
2012
+ return `${prettyQuery(query.query)}.orderBy(${orders.join(", ")})`;
2013
+ }
2014
+ case "options": {
2015
+ const opts = query.options;
2016
+ const parts = [];
2017
+ if (opts.deleted !== void 0) {
2018
+ parts.push(`deleted: ${JSON.stringify(opts.deleted)}`);
2019
+ }
2020
+ if (opts.debugLabel !== void 0) {
2021
+ parts.push(`debugLabel: ${JSON.stringify(opts.debugLabel)}`);
2022
+ }
2023
+ return `${prettyQuery(query.query)}.options({ ${parts.join(", ")} })`;
2024
+ }
2025
+ case "from": {
2026
+ if (query.from._tag === "scope") {
2027
+ const scope = query.from.scope;
2028
+ const parts = [];
2029
+ if (scope.spaceIds !== void 0) {
2030
+ parts.push(`spaceIds: [${scope.spaceIds.map((s) => JSON.stringify(s)).join(", ")}]`);
2031
+ }
2032
+ if (scope.feeds !== void 0) {
2033
+ parts.push(`feeds: [${scope.feeds.map(String).join(", ")}]`);
2034
+ }
2035
+ if (scope.allFeedsFromSpaces !== void 0) {
2036
+ parts.push(`allFeedsFromSpaces: ${scope.allFeedsFromSpaces}`);
2037
+ }
2038
+ return `${prettyQuery(query.query)}.from({ ${parts.join(", ")} })`;
2039
+ }
2040
+ return `${prettyQuery(query.query)}.from(${prettyQuery(query.from.query)})`;
2041
+ }
2042
+ case "limit":
2043
+ return `${prettyQuery(query.query)}.limit(${query.limit})`;
2044
+ }
2045
+ };
2046
+
2047
+ // src/internal/Type/manipulation.ts
2048
+ import * as Schema11 from "effect/Schema";
2049
+ import * as SchemaAST9 from "effect/SchemaAST";
2050
+ import { invariant as invariant14 } from "@dxos/invariant";
2051
+ var __dxlog_file14 = "/__w/dxos/dxos/packages/core/echo/echo/src/internal/Type/manipulation.ts";
2052
+ var addFieldsToSchema = (schema, fields) => {
2053
+ const schemaExtension = Schema11.partial(Schema11.Struct(fields));
2054
+ return Schema11.extend(schema, schemaExtension).annotations(schema.ast.annotations);
2055
+ };
2056
+ var updateFieldsInSchema = (schema, fields) => {
2057
+ const ast = schema.ast;
2058
+ invariant14(SchemaAST9.isTypeLiteral(ast), void 0, { "~LogMeta": "~LogMeta", F: __dxlog_file14, L: 14, S: void 0, A: ["SchemaAST.isTypeLiteral(ast)", ""] });
2059
+ const updatedProperties = [
2060
+ ...ast.propertySignatures
2061
+ ];
2062
+ const propertiesToUpdate = Schema11.partial(Schema11.Struct(fields)).ast.propertySignatures;
2063
+ for (const property of propertiesToUpdate) {
2064
+ const index = updatedProperties.findIndex((p) => p.name === property.name);
2065
+ if (index !== -1) {
2066
+ updatedProperties[index] = property;
2067
+ } else {
2068
+ updatedProperties.push(property);
2069
+ }
2070
+ }
2071
+ return Schema11.make(new SchemaAST9.TypeLiteral(updatedProperties, ast.indexSignatures, ast.annotations));
2072
+ };
2073
+ var removeFieldsFromSchema = (schema, fieldNames) => {
2074
+ return Schema11.make(SchemaAST9.omit(schema.ast, fieldNames)).annotations(schema.ast.annotations);
2075
+ };
2076
+ var updateFieldNameInSchema = (schema, { before, after }) => {
2077
+ const ast = schema.ast;
2078
+ invariant14(SchemaAST9.isTypeLiteral(ast), void 0, { "~LogMeta": "~LogMeta", F: __dxlog_file14, L: 34, S: void 0, A: ["SchemaAST.isTypeLiteral(ast)", ""] });
2079
+ return Schema11.make(new SchemaAST9.TypeLiteral(ast.propertySignatures.map((p) => p.name === before ? new SchemaAST9.PropertySignature(after, p.type, p.isOptional, p.isReadonly, p.annotations) : p), ast.indexSignatures, ast.annotations));
2080
+ };
2081
+
2082
+ // src/internal/Type/type-schema.ts
2083
+ import * as Schema12 from "effect/Schema";
2084
+ var TypeSchemaStruct = Schema12.Struct({
2085
+ name: Schema12.optional(Schema12.String),
2086
+ jsonSchema: JsonSchemaType
2087
+ });
2088
+ var TypeSchema = TypeSchemaStruct.pipe(LabelAnnotation.set([
2089
+ "name"
2090
+ ]), IconAnnotation.set({
2091
+ icon: "ph--database--regular",
2092
+ hue: "green"
2093
+ }), EchoTypeKindSchema(TypeMetaSchemaDXN));
2094
+
2095
+ export {
2096
+ RawObject,
2097
+ ATTR_META,
2098
+ MetaId,
2099
+ ObjectMetaSchema,
2100
+ getMeta,
2101
+ foreignKey,
2102
+ foreignKeyEquals,
2103
+ compareForeignKeys,
2104
+ VersionTypeId,
2105
+ compare,
2106
+ sortByLabel,
2107
+ sortByTypename,
2108
+ sort,
2109
+ getMetaChecked,
2110
+ getKeys,
2111
+ deleteKeys,
2112
+ addTag,
2113
+ removeTag,
2114
+ EventId,
2115
+ ChangeId,
2116
+ batchEvents,
2117
+ emitEvent,
2118
+ enterChangeContext,
2119
+ isInChangeContext,
2120
+ queueNotification,
2121
+ queueOwnerNotification,
2122
+ hasPendingNotifications,
2123
+ clearPendingNotifications,
2124
+ executeChange,
2125
+ defineHiddenProperty,
2126
+ MutationOutsideChangeContextError,
2127
+ createPropertySetError,
2128
+ createPropertyDeleteError,
2129
+ createArrayMethodError,
2130
+ attachTypedJsonSerializer,
2131
+ typedJsonSerializer,
2132
+ symbolIsProxy,
2133
+ isProxy,
2134
+ isValidProxyTarget,
2135
+ getProxySlot,
2136
+ getProxyTarget,
2137
+ getProxyHandler,
2138
+ dangerouslySetProxyId,
2139
+ createProxy,
2140
+ setMetaOwner,
2141
+ getEchoRoot,
2142
+ objectData,
2143
+ ReactiveArray,
2144
+ SchemaValidator,
2145
+ checkIdNotPresentOnSchema,
2146
+ TypedReactiveHandler,
2147
+ prepareTypedTarget,
2148
+ makeObject,
2149
+ subscribe,
2150
+ change,
2151
+ normalizeSchema,
2152
+ TypeMetaSchemaDXN,
2153
+ makeEchoTypeSchema,
2154
+ EchoObjectSchema,
2155
+ EchoRelationSchema,
2156
+ getDXNForRelationSchemaRef,
2157
+ EchoTypeKindSchema,
2158
+ isVersion,
2159
+ version,
2160
+ versionValid,
2161
+ compareVersions,
2162
+ encodeVersion,
2163
+ decodeVersion,
2164
+ makeTypedEntityClass,
2165
+ objectToJSON,
2166
+ objectFromJSON,
2167
+ setRefResolverOnData,
2168
+ objectStructureToJson,
2169
+ createObject,
2170
+ isDeleted,
2171
+ setValue,
2172
+ getSnapshot,
2173
+ clone,
2174
+ prettyFilter,
2175
+ prettyQuery,
2176
+ addFieldsToSchema,
2177
+ updateFieldsInSchema,
2178
+ removeFieldsFromSchema,
2179
+ updateFieldNameInSchema,
2180
+ TypeSchema,
2181
+ JsonPath,
2182
+ JsonProp,
2183
+ getValue,
2184
+ splitJsonPath
2185
+ };
2186
+ //# sourceMappingURL=chunk-LNZIPZX6.mjs.map