@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
@@ -3,39 +3,47 @@
3
3
  //
4
4
 
5
5
  import * as Effect from 'effect/Effect';
6
+ import * as Equal from 'effect/Equal';
7
+ import * as Hash from 'effect/Hash';
6
8
  import * as Option from 'effect/Option';
7
9
  import * as ParseResult from 'effect/ParseResult';
10
+ import * as Pipeable from 'effect/Pipeable';
8
11
  import * as Schema from 'effect/Schema';
9
12
  import * as SchemaAST from 'effect/SchemaAST';
13
+ import type * as Types from 'effect/Types';
10
14
 
11
- import { type EncodedReference, Reference } from '@dxos/echo-protocol';
12
- import { compositeRuntime } from '@dxos/echo-signals/runtime';
15
+ import { Event } from '@dxos/async';
16
+ import { type CustomInspectFunction, inspectCustom } from '@dxos/debug';
17
+ import { EncodedReference } from '@dxos/echo-protocol';
13
18
  import { assertArgument, invariant } from '@dxos/invariant';
14
- import { DXN, ObjectId } from '@dxos/keys';
19
+ import { DXN, EchoURI, ObjectId, type URI } from '@dxos/keys';
15
20
 
16
- import { ReferenceAnnotationId, getSchemaDXN, getTypeAnnotation, getTypeIdentifierAnnotation } from '../ast';
17
- import { type JsonSchemaType } from '../json-schema';
18
- import type { BaseObject, WithId } from '../types';
21
+ import * as Database from '../../Database';
22
+ import type * as Type from '../../Type';
23
+ import { ReferenceAnnotationId, getSchemaURI, getTypeAnnotation, getTypeIdentifierAnnotation } from '../Annotation';
24
+ import { type AnyEntity, type AnyProperties, type UnknownTypeSchema, getStaticTypeSchema } from '../common/types';
25
+ import { type JsonSchemaType } from '../JsonSchema';
19
26
 
20
27
  /**
21
28
  * The `$id` and `$ref` fields for an ECHO reference schema.
22
29
  */
23
30
  export const JSON_SCHEMA_ECHO_REF_ID = '/schemas/echo/ref';
24
31
 
25
- // TODO(burdon): Define return type.
26
32
  export const getSchemaReference = (property: JsonSchemaType): { typename: string } | undefined => {
27
33
  const { $id, reference: { schema: { $ref } = {} } = {} } = property;
28
34
  if ($id === JSON_SCHEMA_ECHO_REF_ID && $ref) {
29
- return { typename: DXN.parse($ref).typename };
35
+ const parsed = DXN.tryMake($ref);
36
+ const typename = parsed ? DXN.getName(parsed) : undefined;
37
+ return typename ? { typename } : undefined;
30
38
  }
31
39
  };
32
40
 
33
- export const createSchemaReference = (typename: string): JsonSchemaType => {
41
+ export const createSchemaReference = (typename: string): Types.DeepMutable<JsonSchemaType> => {
34
42
  return {
35
43
  $id: JSON_SCHEMA_ECHO_REF_ID,
36
44
  reference: {
37
45
  schema: {
38
- $ref: DXN.fromTypename(typename).toString(),
46
+ $ref: DXN.make(typename),
39
47
  },
40
48
  },
41
49
  };
@@ -71,16 +79,38 @@ export const RefTypeId: unique symbol = Symbol('@dxos/echo/internal/Ref');
71
79
  /**
72
80
  * Reference Schema.
73
81
  */
74
- export interface Ref$<T extends WithId> extends Schema.SchemaClass<Ref<T>, EncodedReference> {}
82
+ export interface RefSchema<T extends AnyEntity> extends Schema.SchemaClass<Ref<T>, EncodedReference> {}
75
83
 
76
- // Type of the `Ref` function and extra methods attached to it.
84
+ /**
85
+ * Type of the `Ref` function and extra methods attached to it.
86
+ */
77
87
  export interface RefFn {
78
- <S extends Schema.Schema.Any>(schema: S): Ref$<Schema.Schema.Type<S>>;
88
+ // A reference target is a `Type.AnyEntity` entity (the canonical Option B
89
+ // input) or one of the well-known "any object" / "any relation" branded
90
+ // schemas (`Obj.Unknown` / `Relation.Unknown`). Arbitrary raw schemas are
91
+ // rejected.
92
+ //
93
+ // Referencing a type-kind entity (a meta-schema, e.g. `Type.Type`) yields a
94
+ // reference to a stored schema record; its loaded target is any registered
95
+ // entity (`Type.AnyEntity`), since a stored object/relation schema is itself a
96
+ // `Type.Type` record. Referencing an object/relation type yields a reference
97
+ // to an instance of that type.
98
+ <S extends Type.AnyEntity | UnknownTypeSchema<any, any> = Type.AnyEntity>(
99
+ schema: S,
100
+ ): RefSchema<
101
+ S extends Type.AnyType
102
+ ? Type.AnyEntity
103
+ : S extends Type.AnyObj | Type.AnyRelation
104
+ ? Type.InstanceType<S>
105
+ : S extends UnknownTypeSchema<infer A, any>
106
+ ? A
107
+ : never
108
+ >;
79
109
 
80
110
  /**
81
111
  * @returns True if the object is a reference.
82
112
  */
83
- isRef: (obj: any) => obj is Ref<any>;
113
+ isRef: (obj: unknown) => obj is Ref<any>;
84
114
 
85
115
  /**
86
116
  * @returns True if the reference points to the given object id.
@@ -90,7 +120,7 @@ export interface RefFn {
90
120
  /**
91
121
  * @returns True if the schema is a reference schema.
92
122
  */
93
- isRefSchema: (schema: Schema.Schema<any, any>) => schema is Ref$<any>;
123
+ isRefSchema: (schema: Schema.Schema<any, any>) => schema is RefSchema<any>;
94
124
 
95
125
  /**
96
126
  * @returns True if the schema AST is a reference schema.
@@ -100,49 +130,51 @@ export interface RefFn {
100
130
  /**
101
131
  * Constructs a reference that points to the given object.
102
132
  */
103
- // TODO(burdon): Tighten type of T?
104
- make: <T extends WithId>(object: T) => Ref<T>;
133
+ // TODO(burdon): Narrow to Obj.Unknown?
134
+ make: <T extends AnyEntity>(object: T) => Ref<T>;
105
135
 
106
136
  /**
107
- * Constructs a reference that points to the object specified by the provided DXN.
137
+ * Constructs a reference that points to the object specified by the provided URI
138
+ * (either an `echo:` EchoURI for an object reference or a `dxn:` DXN for a type reference).
108
139
  */
109
- fromDXN: (dxn: DXN) => Ref<any>;
140
+ fromURI: (uri: URI.URI) => Ref<any>;
110
141
  }
142
+
111
143
  /**
112
144
  * Schema builder for references.
113
145
  */
114
- export const Ref: RefFn = <S extends Schema.Schema.Any>(schema: S): Ref$<Schema.Schema.Type<S>> => {
146
+ export const Ref: RefFn = (input: any): RefSchema<any> => {
147
+ // `Type.Type` entities carry their source schema on the hidden slot; the
148
+ // branded `Obj.Unknown` / `Relation.Unknown` schemas are used directly.
149
+ const schema = getStaticTypeSchema(input) ?? input;
115
150
  assertArgument(Schema.isSchema(schema), 'schema', 'Must call with an instance of effect-schema');
116
-
117
151
  const annotation = getTypeAnnotation(schema);
118
152
  if (annotation == null) {
119
153
  throw new Error('Reference target must be an ECHO schema.');
120
154
  }
121
155
 
122
- return createEchoReferenceSchema(
123
- getTypeIdentifierAnnotation(schema),
124
- annotation.typename,
125
- annotation.version,
126
- getSchemaExpectedName(schema.ast),
127
- );
156
+ return createEchoReferenceSchema(getTypeIdentifierAnnotation(schema), annotation.typename, annotation.version);
128
157
  };
129
158
 
130
159
  /**
131
160
  * Represents materialized reference to a target.
132
161
  * This is the data type for the fields marked as ref.
133
162
  */
134
- export interface Ref<T> {
163
+ export interface Ref<T> extends Pipeable.Pipeable {
135
164
  /**
136
- * Target object DXN.
165
+ * Target URI (either an `echo:` EchoURI for an object reference or a `dxn:` DXN for a type reference).
137
166
  */
138
- get dxn(): DXN;
167
+ get uri(): URI.URI;
168
+
169
+ /**
170
+ * Returns true if the reference has a target available (inlined or resolver set).
171
+ */
172
+ get isAvailable(): boolean;
139
173
 
140
174
  /**
141
175
  * @returns The reference target.
142
176
  * May return `undefined` if the object is not loaded in the working set.
143
177
  * Accessing this property, even if it returns `undefined` will trigger the object to be loaded to the working set.
144
- *
145
- * @reactive Supports signal subscriptions.
146
178
  */
147
179
  get target(): T | undefined;
148
180
 
@@ -156,8 +188,19 @@ export interface Ref<T> {
156
188
  /**
157
189
  * @returns Promise that will resolves with the target object or undefined if the object is not loaded locally.
158
190
  */
191
+
159
192
  tryLoad(): Promise<T | undefined>;
160
193
 
194
+ /**
195
+ * Subscribe to the ref's resolution event.
196
+ * The callback fires when the target object becomes available in the working set
197
+ * (e.g. when its document is loaded after sibling-client mutation).
198
+ * Note: the resolver only schedules a notification when the target is requested
199
+ * via {@link target} while it is not yet loaded.
200
+ * @returns Function that unsubscribes the callback.
201
+ */
202
+ onResolved(callback: () => void): () => void;
203
+
161
204
  /**
162
205
  * Do not inline the target object in the reference.
163
206
  * Makes .target unavailable unless the reference is connected to a database context.
@@ -199,9 +242,12 @@ Ref.isRef = (obj: any): obj is Ref<any> => {
199
242
  return obj && typeof obj === 'object' && RefTypeId in obj;
200
243
  };
201
244
 
202
- Ref.hasObjectId = (id: ObjectId) => (ref: Ref<any>) => ref.dxn.isLocalObjectId() && ref.dxn.parts[1] === id;
245
+ Ref.hasObjectId = (id: ObjectId) => (ref: Ref<any>) => {
246
+ const uri = EchoURI.tryParse(ref.uri);
247
+ return uri !== undefined && EchoURI.isLocal(uri) && EchoURI.getObjectId(uri) === id;
248
+ };
203
249
 
204
- Ref.isRefSchema = (schema: Schema.Schema<any, any>): schema is Ref$<any> => {
250
+ Ref.isRefSchema = (schema: Schema.Schema<any, any>): schema is RefSchema<any> => {
205
251
  return Ref.isRefSchemaAST(schema.ast);
206
252
  };
207
253
 
@@ -209,21 +255,21 @@ Ref.isRefSchemaAST = (ast: SchemaAST.AST): boolean => {
209
255
  return SchemaAST.getAnnotation(ast, ReferenceAnnotationId).pipe(Option.isSome);
210
256
  };
211
257
 
212
- Ref.make = <T extends BaseObject>(obj: T): Ref<T> => {
258
+ Ref.make = <T extends AnyProperties>(obj: T): Ref<T> => {
213
259
  if (typeof obj !== 'object' || obj === null) {
214
260
  throw new TypeError('Expected: ECHO object.');
215
261
  }
216
262
 
217
- // TODO(dmaretskyi): Extract to `getObjectDXN` function.
263
+ // TODO(dmaretskyi): Extract to `getObjectEchoUri` function.
218
264
  const id = obj.id;
219
265
  invariant(ObjectId.isValid(id), 'Invalid object ID');
220
- const dxn = Reference.localObjectReference(id).toDXN();
221
- return new RefImpl(dxn, obj);
266
+ const uri = EchoURI.make({ objectId: id });
267
+ return new RefImpl(uri, obj);
222
268
  };
223
269
 
224
- Ref.fromDXN = (dxn: DXN): Ref<any> => {
225
- assertArgument(dxn instanceof DXN, 'dxn', 'Expected DXN');
226
- return new RefImpl(dxn);
270
+ Ref.fromURI = (uri: URI.URI): Ref<any> => {
271
+ assertArgument(typeof uri === 'string', 'uri', 'Expected URI string');
272
+ return new RefImpl(uri);
227
273
  };
228
274
 
229
275
  /**
@@ -239,19 +285,18 @@ export type JsonSchemaReferenceInfo = {
239
285
  */
240
286
  // TODO(burdon): Move to json schema and make private?
241
287
  export const createEchoReferenceSchema = (
242
- echoId: string | undefined,
288
+ echoUri: string | undefined,
243
289
  typename: string | undefined,
244
290
  version: string | undefined,
245
- schemaName?: string,
246
291
  ): Schema.SchemaClass<Ref<any>, EncodedReference> => {
247
- if (!echoId && !typename) {
248
- throw new TypeError('Either echoId or typename must be provided.');
292
+ if (!echoUri && !typename) {
293
+ throw new TypeError('Either echoUri or typename must be provided.');
249
294
  }
250
295
 
251
296
  const referenceInfo: JsonSchemaReferenceInfo = {
252
297
  schema: {
253
298
  // TODO(dmaretskyi): Include version?
254
- $ref: echoId ?? DXN.fromTypename(typename!).toString(),
299
+ $ref: echoUri ?? DXN.make(typename!),
255
300
  },
256
301
  schemaVersion: version,
257
302
  };
@@ -261,25 +306,39 @@ export const createEchoReferenceSchema = (
261
306
  [],
262
307
  {
263
308
  encode: () => {
264
- return (value) => {
265
- return Effect.succeed({
266
- '/': (value as Ref<any>).dxn.toString(),
309
+ return (value) =>
310
+ Effect.gen(function* () {
311
+ if (Ref.isRef(value)) {
312
+ return EncodedReference.fromURI((value as Ref<any>).uri);
313
+ } else if (EncodedReference.isEncodedReference(value)) {
314
+ return value;
315
+ }
316
+ throw new Error('Invalid reference');
267
317
  });
268
- };
269
318
  },
270
319
  decode: () => {
271
- return (value) => {
272
- // TODO(dmaretskyi): This branch seems to be taken by Schema.is
273
- if (Ref.isRef(value)) {
274
- return Effect.succeed(value);
275
- }
276
-
277
- if (typeof value !== 'object' || value == null || typeof (value as any)['/'] !== 'string') {
278
- return Effect.fail(new ParseResult.Unexpected(value, 'reference'));
279
- }
280
-
281
- return Effect.succeed(Ref.fromDXN(DXN.parse((value as any)['/'])));
282
- };
320
+ return (value) =>
321
+ Effect.gen(function* () {
322
+ const dbService = yield* Effect.serviceOption(Database.Service);
323
+
324
+ // TODO(dmaretskyi): This branch seems to be taken by Schema.is
325
+ if (Ref.isRef(value)) {
326
+ if (Option.isSome(dbService)) {
327
+ return dbService.value.db.makeRef(value.uri);
328
+ } else {
329
+ return value;
330
+ }
331
+ }
332
+
333
+ if (!EncodedReference.isEncodedReference(value)) {
334
+ return yield* Effect.fail(new ParseResult.Unexpected(value, 'reference'));
335
+ }
336
+ if (Option.isSome(dbService)) {
337
+ return dbService.value.db.makeRef(EncodedReference.toURI(value));
338
+ } else {
339
+ return Ref.fromURI(EncodedReference.toURI(value));
340
+ }
341
+ });
283
342
  },
284
343
  },
285
344
  {
@@ -311,25 +370,34 @@ export interface RefResolver {
311
370
  /**
312
371
  * Resolve ref synchronously from the objects in the working set.
313
372
  *
314
- * @param dxn
373
+ * @param uri
315
374
  * @param load If true the resolver should attempt to load the object from disk.
316
375
  * @param onLoad Callback to call when the object is loaded.
317
376
  */
318
- resolveSync(dxn: DXN, load: boolean, onLoad?: () => void): BaseObject | undefined;
377
+ resolveSync(uri: URI.URI, load: boolean, onLoad?: () => void): AnyProperties | undefined;
319
378
 
320
379
  /**
321
380
  * Resolver ref asynchronously.
322
381
  */
323
- resolve(dxn: DXN): Promise<BaseObject | undefined>;
382
+ resolve(uri: URI.URI): Promise<AnyProperties | undefined>;
324
383
 
325
384
  // TODO(dmaretskyi): Combine with `resolve`.
326
- resolveSchema(dxn: DXN): Promise<Schema.Schema.AnyNoContext | undefined>;
385
+ resolveSchema(uri: URI.URI): Promise<Schema.Schema.AnyNoContext | undefined>;
386
+
387
+ /**
388
+ * Resolve the source `Type.AnyEntity` entity for a type URI. Used by
389
+ * deserialization paths (`Obj.fromJSON`) to set the back-reference accessed
390
+ * via `Obj.getType` / `Entity.getType`. Optional — resolvers that only
391
+ * carry raw schemas may leave this unimplemented; the deserializer falls
392
+ * back to leaving the type entity unset.
393
+ */
394
+ resolveType?(uri: URI.URI): Promise<unknown | undefined>;
327
395
  }
328
396
 
329
397
  export class RefImpl<T> implements Ref<T> {
330
- #dxn: DXN;
398
+ #uri: URI.URI;
331
399
  #resolver?: RefResolver = undefined;
332
- #signal = compositeRuntime.createSignal();
400
+ #resolved = new Event<void>();
333
401
 
334
402
  /**
335
403
  * Target is set when the reference is created from a specific object.
@@ -341,32 +409,38 @@ export class RefImpl<T> implements Ref<T> {
341
409
  * Callback to issue a reactive notification when object is resolved.
342
410
  */
343
411
  #resolverCallback = () => {
344
- this.#signal.notifyWrite();
412
+ this.#resolved.emit();
345
413
  };
346
414
 
347
- constructor(dxn: DXN, target?: T) {
348
- this.#dxn = dxn;
415
+ constructor(uri: URI.URI, target?: T) {
416
+ this.#uri = uri;
349
417
  this.#target = target;
350
418
  }
351
419
 
352
420
  /**
353
421
  * @inheritdoc
354
422
  */
355
- get dxn(): DXN {
356
- return this.#dxn;
423
+ get uri(): URI.URI {
424
+ return this.#uri;
425
+ }
426
+
427
+ /**
428
+ * @inheritdoc
429
+ */
430
+ get isAvailable(): boolean {
431
+ return this.#target !== undefined || this.#resolver !== undefined;
357
432
  }
358
433
 
359
434
  /**
360
435
  * @inheritdoc
361
436
  */
362
437
  get target(): T | undefined {
363
- this.#signal.notifyRead();
364
438
  if (this.#target) {
365
439
  return this.#target;
366
440
  }
367
441
 
368
442
  invariant(this.#resolver, 'Resolver is not set');
369
- return this.#resolver.resolveSync(this.#dxn, true, this.#resolverCallback) as T | undefined;
443
+ return this.#resolver.resolveSync(this.#uri, true, this.#resolverCallback) as T | undefined;
370
444
  }
371
445
 
372
446
  /**
@@ -377,7 +451,7 @@ export class RefImpl<T> implements Ref<T> {
377
451
  return this.#target;
378
452
  }
379
453
  invariant(this.#resolver, 'Resolver is not set');
380
- const obj = await this.#resolver.resolve(this.#dxn);
454
+ const obj = await this.#resolver.resolve(this.#uri);
381
455
  if (obj == null) {
382
456
  throw new Error('Object not found');
383
457
  }
@@ -388,8 +462,18 @@ export class RefImpl<T> implements Ref<T> {
388
462
  * @inheritdoc
389
463
  */
390
464
  async tryLoad(): Promise<T | undefined> {
465
+ if (this.#target) {
466
+ return this.#target;
467
+ }
391
468
  invariant(this.#resolver, 'Resolver is not set');
392
- return (await this.#resolver.resolve(this.#dxn)) as T | undefined;
469
+ return (await this.#resolver.resolve(this.#uri)) as T | undefined;
470
+ }
471
+
472
+ /**
473
+ * @inheritdoc
474
+ */
475
+ onResolved(callback: () => void): () => void {
476
+ return this.#resolved.on(callback);
393
477
  }
394
478
 
395
479
  /**
@@ -398,14 +482,14 @@ export class RefImpl<T> implements Ref<T> {
398
482
  * Clones the reference object.
399
483
  */
400
484
  noInline(): RefImpl<T> {
401
- const ref = new RefImpl<T>(this.#dxn, undefined);
485
+ const ref = new RefImpl<T>(this.#uri, undefined);
402
486
  ref.#resolver = this.#resolver;
403
487
  return ref;
404
488
  }
405
489
 
406
490
  encode(): EncodedReference {
407
491
  return {
408
- '/': this.#dxn.toString(),
492
+ '/': this.#uri,
409
493
  ...(this.#target ? { target: this.#target } : {}),
410
494
  };
411
495
  }
@@ -425,13 +509,33 @@ export class RefImpl<T> implements Ref<T> {
425
509
  return `Ref(${this.#target.toString()})`;
426
510
  }
427
511
 
428
- return `Ref(${this.#dxn.toString()})`;
512
+ return `Ref(${this.#uri.toString()})`;
429
513
  }
430
514
 
515
+ [inspectCustom]: CustomInspectFunction = (depth, options, inspect) => {
516
+ return this.toString();
517
+ };
518
+
431
519
  [RefTypeId] = refVariance;
432
520
 
521
+ /**
522
+ * Effect Hash trait. Required for MutableHashMap-based caches (e.g., Atom.family)
523
+ * to deduplicate Ref instances that point to the same object.
524
+ * ECHO proxies return new RefImpl instances on every property access,
525
+ * so without this, each access would create a separate cache entry.
526
+ */
527
+ [Hash.symbol](): number {
528
+ return Hash.hash(this.#uri.toString());
529
+ }
530
+
531
+ /** Effect Equal trait. See {@link Hash.symbol} for rationale. */
532
+ [Equal.symbol](that: Equal.Equal): boolean {
533
+ return that instanceof RefImpl && this.#uri === that.uri;
534
+ }
535
+
433
536
  /**
434
537
  * Internal method to set the resolver.
538
+ *
435
539
  * @internal
436
540
  */
437
541
  _setResolver(resolver: RefResolver): void {
@@ -439,13 +543,16 @@ export class RefImpl<T> implements Ref<T> {
439
543
  }
440
544
 
441
545
  /**
442
- * Internal method to get the saved target.
443
- * Not the same as `target` which is resolved from the resolver.
444
546
  * @internal
445
547
  */
446
548
  _getSavedTarget(): T | undefined {
447
549
  return this.#target;
448
550
  }
551
+
552
+ pipe() {
553
+ // eslint-disable-next-line prefer-rest-params
554
+ return Pipeable.pipeArguments(this, arguments);
555
+ }
449
556
  }
450
557
 
451
558
  /**
@@ -459,7 +566,7 @@ export const setRefResolver = (ref: Ref<any>, resolver: RefResolver) => {
459
566
  /**
460
567
  * Internal API for getting the saved target on a reference.
461
568
  */
462
- export const getRefSavedTarget = (ref: Ref<any>): BaseObject | undefined => {
569
+ export const getRefSavedTarget = (ref: Ref<any>): AnyProperties | undefined => {
463
570
  invariant(ref instanceof RefImpl, 'Ref is not an instance of RefImpl');
464
571
  return ref._getSavedTarget();
465
572
  };
@@ -470,8 +577,8 @@ const refVariance: Ref<any>[typeof RefTypeId] = {
470
577
  };
471
578
 
472
579
  export const refFromEncodedReference = (encodedReference: EncodedReference, resolver?: RefResolver): Ref<any> => {
473
- const dxn = DXN.parse(encodedReference['/']);
474
- const ref = new RefImpl(dxn);
580
+ const uri = EncodedReference.toURI(encodedReference);
581
+ const ref = new RefImpl(uri);
475
582
 
476
583
  // TODO(dmaretskyi): Handle inline target in the encoded reference.
477
584
 
@@ -482,23 +589,26 @@ export const refFromEncodedReference = (encodedReference: EncodedReference, reso
482
589
  };
483
590
 
484
591
  export class StaticRefResolver implements RefResolver {
485
- public objects = new Map<ObjectId, BaseObject>();
486
- public schemas = new Map<DXN.String, Schema.Schema.AnyNoContext>();
592
+ public objects = new Map<ObjectId, AnyProperties>();
593
+ public schemas = new Map<URI.URI, Schema.Schema.AnyNoContext>();
487
594
 
488
- addObject(obj: BaseObject): this {
595
+ addObject(obj: AnyProperties): this {
489
596
  this.objects.set(obj.id, obj);
490
597
  return this;
491
598
  }
492
599
 
493
- addSchema(schema: Schema.Schema.AnyNoContext): this {
494
- const dxn = getSchemaDXN(schema);
495
- invariant(dxn, 'Schema has no DXN');
496
- this.schemas.set(dxn.toString(), schema);
600
+ addSchema(input: Type.AnyEntity): this {
601
+ const schema = getStaticTypeSchema(input);
602
+ invariant(schema, 'Type entity is missing its source schema');
603
+ const uri = getSchemaURI(schema);
604
+ invariant(uri, 'Schema has no URI');
605
+ this.schemas.set(uri, schema);
497
606
  return this;
498
607
  }
499
608
 
500
- resolveSync(dxn: DXN, _load: boolean, _onLoad?: () => void): BaseObject | undefined {
501
- const id = dxn?.asEchoDXN()?.echoId;
609
+ resolveSync(uri: URI.URI, _load: boolean, _onLoad?: () => void): AnyProperties | undefined {
610
+ const echoUri = EchoURI.tryParse(uri);
611
+ const id = echoUri ? EchoURI.getObjectId(echoUri) : undefined;
502
612
  if (id == null) {
503
613
  return undefined;
504
614
  }
@@ -506,8 +616,9 @@ export class StaticRefResolver implements RefResolver {
506
616
  return this.objects.get(id);
507
617
  }
508
618
 
509
- async resolve(dxn: DXN): Promise<BaseObject | undefined> {
510
- const id = dxn?.asEchoDXN()?.echoId;
619
+ async resolve(uri: URI.URI): Promise<AnyProperties | undefined> {
620
+ const echoUri = EchoURI.tryParse(uri);
621
+ const id = echoUri ? EchoURI.getObjectId(echoUri) : undefined;
511
622
  if (id == null) {
512
623
  return undefined;
513
624
  }
@@ -515,7 +626,7 @@ export class StaticRefResolver implements RefResolver {
515
626
  return this.objects.get(id);
516
627
  }
517
628
 
518
- async resolveSchema(dxn: DXN): Promise<Schema.Schema.AnyNoContext | undefined> {
519
- return this.schemas.get(dxn.toString());
629
+ async resolveSchema(uri: URI.URI): Promise<Schema.Schema.AnyNoContext | undefined> {
630
+ return this.schemas.get(uri);
520
631
  }
521
632
  }
@@ -5,23 +5,23 @@
5
5
  import * as Schema from 'effect/Schema';
6
6
  import { describe, test } from 'vitest';
7
7
 
8
- import { FieldPath } from '../ast';
9
- import { FormatAnnotation, FormatEnum } from '../formats';
10
- import { toJsonSchema } from '../json';
11
- import { ECHO_ANNOTATIONS_NS_KEY } from '../json-schema';
12
- import { TypedObject } from '../object';
8
+ import { DXN } from '@dxos/keys';
13
9
 
10
+ import { FieldPath } from '../Annotation';
11
+ import { EchoObjectSchema } from '../Entity';
12
+ import { FormatAnnotation, TypeFormat } from '../Format';
13
+ import { ECHO_ANNOTATIONS_NS_KEY, toJsonSchema } from '../JsonSchema';
14
14
  import { composeSchema } from './compose';
15
15
 
16
16
  describe('schema composition', () => {
17
17
  test('schema composition', ({ expect }) => {
18
- class BaseType extends TypedObject({ typename: 'example.com/Person', version: '0.1.0' })({
18
+ const BaseType = Schema.Struct({
19
19
  name: Schema.String,
20
20
  email: Schema.String,
21
- }) {}
21
+ }).pipe(EchoObjectSchema(DXN.make('com.example.person', '0.1.0')));
22
22
 
23
23
  const OverlaySchema = Schema.Struct({
24
- email: Schema.String.pipe(FieldPath('$.email'), FormatAnnotation.set(FormatEnum.Email)),
24
+ email: Schema.String.pipe(FieldPath('$.email'), FormatAnnotation.set(TypeFormat.Email)),
25
25
  });
26
26
 
27
27
  const baseSchema = toJsonSchema(BaseType);
@@ -30,7 +30,7 @@ describe('schema composition', () => {
30
30
  expect(composedSchema.properties).to.deep.eq({
31
31
  email: {
32
32
  type: 'string',
33
- format: FormatEnum.Email,
33
+ format: TypeFormat.Email,
34
34
  // TODO(dmaretskyi): Should use the new field.
35
35
  [ECHO_ANNOTATIONS_NS_KEY]: {
36
36
  meta: {
@@ -2,18 +2,22 @@
2
2
  // Copyright 2024 DXOS.org
3
3
  //
4
4
 
5
+ import type * as Types from 'effect/Types';
6
+
5
7
  import { invariant } from '@dxos/invariant';
6
8
 
7
- import { type JsonSchemaType } from '../json-schema';
8
- import { getSnapshot } from '../schema';
9
+ import { type JsonSchemaType } from '../JsonSchema';
9
10
 
10
11
  /**
11
12
  * Creates a composite schema from the source and projection schemas.
12
13
  */
13
14
  // TODO(burdon): Use effect schema projections.
14
15
  // TODO(burdon): Can avoid having to call this every time we modify any property on the view?
15
- export const composeSchema = (source: JsonSchemaType, target: JsonSchemaType): JsonSchemaType => {
16
- const result: JsonSchemaType = getSnapshot(target);
16
+ export const composeSchema = (
17
+ source: Types.Mutable<JsonSchemaType>,
18
+ target: Types.Mutable<JsonSchemaType>,
19
+ ): Types.Mutable<JsonSchemaType> => {
20
+ const result = structuredClone(target);
17
21
  invariant('type' in result && result.type === 'object', 'source schema must be an object');
18
22
  invariant('type' in source && source.type === 'object', 'target schema must be an object');
19
23
 
@@ -21,12 +25,13 @@ export const composeSchema = (source: JsonSchemaType, target: JsonSchemaType): J
21
25
  const propSchema = source.properties![prop]; // TODO(dmaretskyi): Find by json-path instead.
22
26
  const annotations = (propSchema as JsonSchemaType)?.annotations?.meta;
23
27
  if (annotations) {
24
- (result.properties[prop] as JsonSchemaType).annotations ??= {};
25
- (result.properties[prop] as JsonSchemaType).annotations!.meta ??= {};
28
+ const resultProp = result.properties[prop] as Record<string, any>;
29
+ resultProp.annotations ??= {};
30
+ resultProp.annotations.meta ??= {};
26
31
  for (const key in annotations) {
27
- (result.properties[prop] as JsonSchemaType).annotations!.meta![key] ??= {};
28
- Object.assign((result.properties[prop] as JsonSchemaType).annotations!.meta![key], annotations[key], {
29
- ...(result.properties[prop] as JsonSchemaType).annotations!.meta![key],
32
+ resultProp.annotations.meta[key] ??= {};
33
+ Object.assign(resultProp.annotations.meta[key], annotations[key], {
34
+ ...resultProp.annotations.meta[key],
30
35
  });
31
36
  }
32
37
  }
@@ -0,0 +1,6 @@
1
+ //
2
+ // Copyright 2024 DXOS.org
3
+ //
4
+
5
+ export * from './manipulation';
6
+ export * from './type-schema';