@dxos/echo 0.8.4-main.fffef41 → 0.8.4-staging.60fe92afc8

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 (731) hide show
  1. package/LICENSE +102 -5
  2. package/README.md +10 -11
  3. package/dist/lib/neutral/Annotation.mjs +68 -0
  4. package/dist/lib/neutral/Database.mjs +38 -0
  5. package/dist/lib/neutral/Entity.mjs +72 -0
  6. package/dist/lib/neutral/Err.mjs +12 -0
  7. package/dist/lib/neutral/Feed.mjs +54 -0
  8. package/dist/lib/neutral/Filter.mjs +70 -0
  9. package/dist/lib/neutral/Format.mjs +86 -0
  10. package/dist/lib/neutral/Format.mjs.map +7 -0
  11. package/dist/lib/neutral/JsonSchema.mjs +18 -0
  12. package/dist/lib/neutral/JsonSchema.mjs.map +7 -0
  13. package/dist/lib/neutral/Key.mjs +16 -0
  14. package/dist/lib/neutral/Key.mjs.map +7 -0
  15. package/dist/lib/neutral/Migration.mjs +18 -0
  16. package/dist/lib/neutral/Migration.mjs.map +7 -0
  17. package/dist/lib/neutral/Obj.mjs +122 -0
  18. package/dist/lib/neutral/Obj.mjs.map +7 -0
  19. package/dist/lib/neutral/Order.mjs +16 -0
  20. package/dist/lib/neutral/Order.mjs.map +7 -0
  21. package/dist/lib/neutral/Query.mjs +38 -0
  22. package/dist/lib/neutral/Query.mjs.map +7 -0
  23. package/dist/lib/neutral/QueryResult.mjs +2 -0
  24. package/dist/lib/neutral/QueryResult.mjs.map +7 -0
  25. package/dist/lib/neutral/Ref.mjs +25 -0
  26. package/dist/lib/neutral/Ref.mjs.map +7 -0
  27. package/dist/lib/neutral/Registry.mjs +14 -0
  28. package/dist/lib/neutral/Registry.mjs.map +7 -0
  29. package/dist/lib/neutral/Relation.mjs +97 -0
  30. package/dist/lib/neutral/Relation.mjs.map +7 -0
  31. package/dist/lib/neutral/Scope.mjs +12 -0
  32. package/dist/lib/neutral/Scope.mjs.map +7 -0
  33. package/dist/lib/neutral/Tag.mjs +32 -0
  34. package/dist/lib/neutral/Tag.mjs.map +7 -0
  35. package/dist/lib/neutral/Type.mjs +65 -0
  36. package/dist/lib/neutral/Type.mjs.map +7 -0
  37. package/dist/lib/neutral/chunk-35INCYOE.mjs +7 -0
  38. package/dist/lib/neutral/chunk-35INCYOE.mjs.map +7 -0
  39. package/dist/lib/neutral/chunk-3PBP4V4O.mjs +101 -0
  40. package/dist/lib/neutral/chunk-3PBP4V4O.mjs.map +7 -0
  41. package/dist/lib/neutral/chunk-4ZUHOTCG.mjs +184 -0
  42. package/dist/lib/neutral/chunk-4ZUHOTCG.mjs.map +7 -0
  43. package/dist/lib/neutral/chunk-5SMDBFVB.mjs +108 -0
  44. package/dist/lib/neutral/chunk-5SMDBFVB.mjs.map +7 -0
  45. package/dist/lib/neutral/chunk-5SUJPHAE.mjs +34 -0
  46. package/dist/lib/neutral/chunk-5SUJPHAE.mjs.map +7 -0
  47. package/dist/lib/neutral/chunk-6M2Z6WBH.mjs +93 -0
  48. package/dist/lib/neutral/chunk-6M2Z6WBH.mjs.map +7 -0
  49. package/dist/lib/neutral/chunk-6YDI3J37.mjs +346 -0
  50. package/dist/lib/neutral/chunk-6YDI3J37.mjs.map +7 -0
  51. package/dist/lib/neutral/chunk-7FPIAJIV.mjs +2279 -0
  52. package/dist/lib/neutral/chunk-7FPIAJIV.mjs.map +7 -0
  53. package/dist/lib/neutral/chunk-7LOUAPYZ.mjs +25 -0
  54. package/dist/lib/neutral/chunk-7LOUAPYZ.mjs.map +7 -0
  55. package/dist/lib/neutral/chunk-7PI7C4EF.mjs +747 -0
  56. package/dist/lib/neutral/chunk-7PI7C4EF.mjs.map +7 -0
  57. package/dist/lib/neutral/chunk-BBFJWWAV.mjs +51 -0
  58. package/dist/lib/neutral/chunk-BBFJWWAV.mjs.map +7 -0
  59. package/dist/lib/neutral/chunk-EVK6XBXO.mjs +56 -0
  60. package/dist/lib/neutral/chunk-EVK6XBXO.mjs.map +7 -0
  61. package/dist/lib/neutral/chunk-IGK6FN65.mjs +27 -0
  62. package/dist/lib/neutral/chunk-IGK6FN65.mjs.map +7 -0
  63. package/dist/lib/neutral/chunk-J5LGTIGS.mjs +10 -0
  64. package/dist/lib/neutral/chunk-J5LGTIGS.mjs.map +7 -0
  65. package/dist/lib/neutral/chunk-LWXVKPPW.mjs +281 -0
  66. package/dist/lib/neutral/chunk-LWXVKPPW.mjs.map +7 -0
  67. package/dist/lib/neutral/chunk-MZ7K3MLL.mjs +48 -0
  68. package/dist/lib/neutral/chunk-MZ7K3MLL.mjs.map +7 -0
  69. package/dist/lib/neutral/chunk-O6BH7EPN.mjs +94 -0
  70. package/dist/lib/neutral/chunk-O6BH7EPN.mjs.map +7 -0
  71. package/dist/lib/neutral/chunk-QQIYS74I.mjs +336 -0
  72. package/dist/lib/neutral/chunk-QQIYS74I.mjs.map +7 -0
  73. package/dist/lib/neutral/chunk-R5W6DXR4.mjs +678 -0
  74. package/dist/lib/neutral/chunk-R5W6DXR4.mjs.map +7 -0
  75. package/dist/lib/neutral/chunk-RIVWNMSF.mjs +41 -0
  76. package/dist/lib/neutral/chunk-RIVWNMSF.mjs.map +7 -0
  77. package/dist/lib/neutral/chunk-SBVFRTST.mjs +160 -0
  78. package/dist/lib/neutral/chunk-SBVFRTST.mjs.map +7 -0
  79. package/dist/lib/neutral/chunk-T6E37YIP.mjs +251 -0
  80. package/dist/lib/neutral/chunk-T6E37YIP.mjs.map +7 -0
  81. package/dist/lib/neutral/chunk-TFEWTY5A.mjs +428 -0
  82. package/dist/lib/neutral/chunk-TFEWTY5A.mjs.map +7 -0
  83. package/dist/lib/neutral/chunk-TYGKCRMK.mjs +437 -0
  84. package/dist/lib/neutral/chunk-TYGKCRMK.mjs.map +7 -0
  85. package/dist/lib/neutral/chunk-UUP46KUQ.mjs +205 -0
  86. package/dist/lib/neutral/chunk-UUP46KUQ.mjs.map +7 -0
  87. package/dist/lib/neutral/chunk-WISOH2XH.mjs +36 -0
  88. package/dist/lib/neutral/chunk-WISOH2XH.mjs.map +7 -0
  89. package/dist/lib/neutral/chunk-WTQJHC75.mjs +395 -0
  90. package/dist/lib/neutral/chunk-WTQJHC75.mjs.map +7 -0
  91. package/dist/lib/neutral/chunk-WU3GIANS.mjs +31 -0
  92. package/dist/lib/neutral/chunk-WU3GIANS.mjs.map +7 -0
  93. package/dist/lib/neutral/chunk-ZGNNFYHS.mjs +132 -0
  94. package/dist/lib/neutral/chunk-ZGNNFYHS.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 +539 -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 +458 -0
  101. package/dist/lib/neutral/testing/index.mjs.map +7 -0
  102. package/dist/types/src/Annotation.d.ts +128 -0
  103. package/dist/types/src/Annotation.d.ts.map +1 -0
  104. package/dist/types/src/Annotation.test.d.ts +2 -0
  105. package/dist/types/src/Annotation.test.d.ts.map +1 -0
  106. package/dist/types/src/Collection.d.ts +15 -0
  107. package/dist/types/src/Collection.d.ts.map +1 -0
  108. package/dist/types/src/Database.d.ts +208 -0
  109. package/dist/types/src/Database.d.ts.map +1 -0
  110. package/dist/types/src/Dataset.d.ts +29 -0
  111. package/dist/types/src/Dataset.d.ts.map +1 -0
  112. package/dist/types/src/Entity.d.ts +247 -0
  113. package/dist/types/src/Entity.d.ts.map +1 -0
  114. package/dist/types/src/Entity.test.d.ts +2 -0
  115. package/dist/types/src/Entity.test.d.ts.map +1 -0
  116. package/dist/types/src/Err.d.ts +107 -0
  117. package/dist/types/src/Err.d.ts.map +1 -0
  118. package/dist/types/src/Feed.d.ts +229 -0
  119. package/dist/types/src/Feed.d.ts.map +1 -0
  120. package/dist/types/src/Filter.d.ts +175 -0
  121. package/dist/types/src/Filter.d.ts.map +1 -0
  122. package/dist/types/src/Filter.test.d.ts +2 -0
  123. package/dist/types/src/Filter.test.d.ts.map +1 -0
  124. package/dist/types/src/Format.d.ts +2 -0
  125. package/dist/types/src/Format.d.ts.map +1 -0
  126. package/dist/types/src/Hypergraph.d.ts +70 -0
  127. package/dist/types/src/Hypergraph.d.ts.map +1 -0
  128. package/dist/types/src/Json.d.ts +33 -0
  129. package/dist/types/src/Json.d.ts.map +1 -0
  130. package/dist/types/src/Json.test.d.ts +2 -0
  131. package/dist/types/src/Json.test.d.ts.map +1 -0
  132. package/dist/types/src/JsonSchema.d.ts +16 -0
  133. package/dist/types/src/JsonSchema.d.ts.map +1 -0
  134. package/dist/types/src/Key.d.ts +2 -1
  135. package/dist/types/src/Key.d.ts.map +1 -1
  136. package/dist/types/src/Migration.d.ts +72 -0
  137. package/dist/types/src/Migration.d.ts.map +1 -0
  138. package/dist/types/src/Obj.d.ts +483 -110
  139. package/dist/types/src/Obj.d.ts.map +1 -1
  140. package/dist/types/src/Obj.test.d.ts +2 -0
  141. package/dist/types/src/Obj.test.d.ts.map +1 -0
  142. package/dist/types/src/Order.d.ts +26 -0
  143. package/dist/types/src/Order.d.ts.map +1 -0
  144. package/dist/types/src/Query.d.ts +231 -0
  145. package/dist/types/src/Query.d.ts.map +1 -0
  146. package/dist/types/src/Query.test.d.ts +2 -0
  147. package/dist/types/src/Query.test.d.ts.map +1 -0
  148. package/dist/types/src/QueryResult.d.ts +101 -0
  149. package/dist/types/src/QueryResult.d.ts.map +1 -0
  150. package/dist/types/src/Ref.d.ts +69 -11
  151. package/dist/types/src/Ref.d.ts.map +1 -1
  152. package/dist/types/src/Registry.d.ts +131 -0
  153. package/dist/types/src/Registry.d.ts.map +1 -0
  154. package/dist/types/src/Relation.d.ts +321 -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/Scope.d.ts +35 -0
  159. package/dist/types/src/Scope.d.ts.map +1 -0
  160. package/dist/types/src/Tag.d.ts +26 -9
  161. package/dist/types/src/Tag.d.ts.map +1 -1
  162. package/dist/types/src/Type.d.ts +397 -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 +21 -5
  173. package/dist/types/src/index.d.ts.map +1 -1
  174. package/dist/types/src/internal/Annotation/annotations.d.ts +272 -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/dictionary.d.ts +24 -0
  178. package/dist/types/src/internal/Annotation/dictionary.d.ts.map +1 -0
  179. package/dist/types/src/internal/Annotation/entity-dictionary.d.ts +14 -0
  180. package/dist/types/src/internal/Annotation/entity-dictionary.d.ts.map +1 -0
  181. package/dist/types/src/internal/Annotation/index.d.ts +6 -0
  182. package/dist/types/src/internal/Annotation/index.d.ts.map +1 -0
  183. package/dist/types/src/internal/Annotation/sorting.d.ts +24 -0
  184. package/dist/types/src/internal/Annotation/sorting.d.ts.map +1 -0
  185. package/dist/types/src/internal/Annotation/util.d.ts +48 -0
  186. package/dist/types/src/internal/Annotation/util.d.ts.map +1 -0
  187. package/dist/types/src/internal/Entity/api.d.ts +27 -0
  188. package/dist/types/src/internal/Entity/api.d.ts.map +1 -0
  189. package/dist/types/src/internal/Entity/entity.d.ts +84 -0
  190. package/dist/types/src/internal/Entity/entity.d.ts.map +1 -0
  191. package/dist/types/src/internal/Entity/guard.d.ts +10 -0
  192. package/dist/types/src/internal/Entity/guard.d.ts.map +1 -0
  193. package/dist/types/src/internal/Entity/index.d.ts +10 -0
  194. package/dist/types/src/internal/Entity/index.d.ts.map +1 -0
  195. package/dist/types/src/internal/Entity/model.d.ts +59 -0
  196. package/dist/types/src/internal/Entity/model.d.ts.map +1 -0
  197. package/dist/types/src/internal/Entity/object.d.ts +18 -0
  198. package/dist/types/src/internal/Entity/object.d.ts.map +1 -0
  199. package/dist/types/src/internal/Entity/relation.d.ts +58 -0
  200. package/dist/types/src/internal/Entity/relation.d.ts.map +1 -0
  201. package/dist/types/src/internal/Entity/type-kind.d.ts +24 -0
  202. package/dist/types/src/internal/Entity/type-kind.d.ts.map +1 -0
  203. package/dist/types/src/internal/Entity/type-uri.d.ts +24 -0
  204. package/dist/types/src/internal/Entity/type-uri.d.ts.map +1 -0
  205. package/dist/types/src/internal/Entity/util.d.ts +2 -0
  206. package/dist/types/src/internal/Entity/util.d.ts.map +1 -0
  207. package/dist/types/src/internal/Entity/version.d.ts +42 -0
  208. package/dist/types/src/internal/Entity/version.d.ts.map +1 -0
  209. package/dist/types/src/internal/Format/date.d.ts.map +1 -0
  210. package/dist/types/src/internal/Format/date.test.d.ts.map +1 -0
  211. package/dist/types/src/internal/{formats → Format}/format.d.ts +7 -4
  212. package/dist/types/src/internal/Format/format.d.ts.map +1 -0
  213. package/dist/types/src/internal/Format/format.test.d.ts.map +1 -0
  214. package/dist/types/src/internal/{formats → Format}/index.d.ts +2 -2
  215. package/dist/types/src/internal/Format/index.d.ts.map +1 -0
  216. package/dist/types/src/internal/Format/number.d.ts.map +1 -0
  217. package/dist/types/src/internal/{formats → Format}/object.d.ts +3 -1
  218. package/dist/types/src/internal/Format/object.d.ts.map +1 -0
  219. package/dist/types/src/internal/{formats → Format}/select.d.ts +6 -4
  220. package/dist/types/src/internal/Format/select.d.ts.map +1 -0
  221. package/dist/types/src/internal/{formats → Format}/string.d.ts +4 -0
  222. package/dist/types/src/internal/Format/string.d.ts.map +1 -0
  223. package/dist/types/src/internal/{formats → Format}/types.d.ts +14 -10
  224. package/dist/types/src/internal/Format/types.d.ts.map +1 -0
  225. package/dist/types/src/internal/{json → JsonSchema}/annotations.d.ts +1 -1
  226. package/dist/types/src/internal/JsonSchema/annotations.d.ts.map +1 -0
  227. package/dist/types/src/internal/JsonSchema/effect-schema.test.d.ts.map +1 -0
  228. package/dist/types/src/internal/JsonSchema/index.d.ts +5 -0
  229. package/dist/types/src/internal/JsonSchema/index.d.ts.map +1 -0
  230. package/dist/types/src/internal/JsonSchema/json-schema-normalize.d.ts.map +1 -0
  231. package/dist/types/src/internal/{json-schema → JsonSchema}/json-schema-type.d.ts +136 -35
  232. package/dist/types/src/internal/JsonSchema/json-schema-type.d.ts.map +1 -0
  233. package/dist/types/src/internal/{json → JsonSchema}/json-schema.d.ts +6 -3
  234. package/dist/types/src/internal/JsonSchema/json-schema.d.ts.map +1 -0
  235. package/dist/types/src/internal/JsonSchema/json-schema.test.d.ts.map +1 -0
  236. package/dist/types/src/internal/Obj/atoms.d.ts +38 -0
  237. package/dist/types/src/internal/Obj/atoms.d.ts.map +1 -0
  238. package/dist/types/src/internal/Obj/clone.d.ts +8 -0
  239. package/dist/types/src/internal/Obj/clone.d.ts.map +1 -0
  240. package/dist/types/src/internal/Obj/common.d.ts.map +1 -0
  241. package/dist/types/src/internal/{object/create.d.ts → Obj/create-object.d.ts} +15 -16
  242. package/dist/types/src/internal/Obj/create-object.d.ts.map +1 -0
  243. package/dist/types/src/internal/Obj/create-object.test.d.ts +2 -0
  244. package/dist/types/src/internal/Obj/create-object.test.d.ts.map +1 -0
  245. package/dist/types/src/internal/Obj/deleted.d.ts +6 -0
  246. package/dist/types/src/internal/Obj/deleted.d.ts.map +1 -0
  247. package/dist/types/src/internal/Obj/index.d.ts +11 -0
  248. package/dist/types/src/internal/Obj/index.d.ts.map +1 -0
  249. package/dist/types/src/internal/Obj/inspect.d.ts.map +1 -0
  250. package/dist/types/src/internal/Obj/json-serializer.d.ts +45 -0
  251. package/dist/types/src/internal/Obj/json-serializer.d.ts.map +1 -0
  252. package/dist/types/src/internal/Obj/json-serializer.test.d.ts.map +1 -0
  253. package/dist/types/src/internal/Obj/schema-validator.d.ts +2 -0
  254. package/dist/types/src/internal/Obj/schema-validator.d.ts.map +1 -0
  255. package/dist/types/src/internal/Obj/schema-validator.test.d.ts.map +1 -0
  256. package/dist/types/src/internal/Obj/set-value.d.ts +7 -0
  257. package/dist/types/src/internal/Obj/set-value.d.ts.map +1 -0
  258. package/dist/types/src/internal/Obj/set-value.test.d.ts +2 -0
  259. package/dist/types/src/internal/Obj/set-value.test.d.ts.map +1 -0
  260. package/dist/types/src/internal/Obj/snapshot.d.ts +6 -0
  261. package/dist/types/src/internal/Obj/snapshot.d.ts.map +1 -0
  262. package/dist/types/src/internal/Obj/typed-object.d.ts +25 -0
  263. package/dist/types/src/internal/Obj/typed-object.d.ts.map +1 -0
  264. package/dist/types/src/internal/Obj/typed-object.test.d.ts.map +1 -0
  265. package/dist/types/src/internal/Query/index.d.ts +2 -0
  266. package/dist/types/src/internal/Query/index.d.ts.map +1 -0
  267. package/dist/types/src/internal/Query/pretty.d.ts +10 -0
  268. package/dist/types/src/internal/Query/pretty.d.ts.map +1 -0
  269. package/dist/types/src/internal/Ref/atoms.d.ts +10 -0
  270. package/dist/types/src/internal/Ref/atoms.d.ts.map +1 -0
  271. package/dist/types/src/internal/Ref/index.d.ts.map +1 -0
  272. package/dist/types/src/internal/Ref/ref-array.d.ts +21 -0
  273. package/dist/types/src/internal/Ref/ref-array.d.ts.map +1 -0
  274. package/dist/types/src/internal/{ref → Ref}/ref.d.ts +88 -32
  275. package/dist/types/src/internal/Ref/ref.d.ts.map +1 -0
  276. package/dist/types/src/internal/Ref/ref.test.d.ts.map +1 -0
  277. package/dist/types/src/internal/Ref/utils.d.ts +8 -0
  278. package/dist/types/src/internal/Ref/utils.d.ts.map +1 -0
  279. package/dist/types/src/internal/Type/compose.d.ts +7 -0
  280. package/dist/types/src/internal/Type/compose.d.ts.map +1 -0
  281. package/dist/types/src/internal/Type/compose.test.d.ts.map +1 -0
  282. package/dist/types/src/internal/Type/index.d.ts +3 -0
  283. package/dist/types/src/internal/Type/index.d.ts.map +1 -0
  284. package/dist/types/src/internal/{schema → Type}/manipulation.d.ts +0 -1
  285. package/dist/types/src/internal/Type/manipulation.d.ts.map +1 -0
  286. package/dist/types/src/internal/Type/type-schema.d.ts +52 -0
  287. package/dist/types/src/internal/Type/type-schema.d.ts.map +1 -0
  288. package/dist/types/src/internal/common/api/index.d.ts +11 -0
  289. package/dist/types/src/internal/common/api/index.d.ts.map +1 -0
  290. package/dist/types/src/internal/common/api/meta.d.ts +45 -0
  291. package/dist/types/src/internal/common/api/meta.d.ts.map +1 -0
  292. package/dist/types/src/internal/common/index.d.ts +4 -0
  293. package/dist/types/src/internal/common/index.d.ts.map +1 -0
  294. package/dist/types/src/internal/common/proxy/change-context.d.ts +55 -0
  295. package/dist/types/src/internal/common/proxy/change-context.d.ts.map +1 -0
  296. package/dist/types/src/internal/common/proxy/change.test.d.ts +2 -0
  297. package/dist/types/src/internal/common/proxy/change.test.d.ts.map +1 -0
  298. package/dist/types/src/internal/common/proxy/define-hidden-property.d.ts +5 -0
  299. package/dist/types/src/internal/common/proxy/define-hidden-property.d.ts.map +1 -0
  300. package/dist/types/src/internal/common/proxy/errors.d.ts +19 -0
  301. package/dist/types/src/internal/common/proxy/errors.d.ts.map +1 -0
  302. package/dist/types/src/internal/common/proxy/event-batch.d.ts +10 -0
  303. package/dist/types/src/internal/common/proxy/event-batch.d.ts.map +1 -0
  304. package/dist/types/src/internal/common/proxy/handler.test.d.ts.map +1 -0
  305. package/dist/types/src/internal/common/proxy/index.d.ts +14 -0
  306. package/dist/types/src/internal/common/proxy/index.d.ts.map +1 -0
  307. package/dist/types/src/internal/common/proxy/json-serializer.d.ts +6 -0
  308. package/dist/types/src/internal/common/proxy/json-serializer.d.ts.map +1 -0
  309. package/dist/types/src/internal/common/proxy/make-object.d.ts +20 -0
  310. package/dist/types/src/internal/common/proxy/make-object.d.ts.map +1 -0
  311. package/dist/types/src/internal/common/proxy/ownership.d.ts +57 -0
  312. package/dist/types/src/internal/common/proxy/ownership.d.ts.map +1 -0
  313. package/dist/types/src/internal/common/proxy/proxy-types.d.ts +18 -0
  314. package/dist/types/src/internal/common/proxy/proxy-types.d.ts.map +1 -0
  315. package/dist/types/src/internal/common/proxy/proxy-utils.d.ts +47 -0
  316. package/dist/types/src/internal/common/proxy/proxy-utils.d.ts.map +1 -0
  317. package/dist/types/src/internal/common/proxy/reactive-array.d.ts +8 -0
  318. package/dist/types/src/internal/common/proxy/reactive-array.d.ts.map +1 -0
  319. package/dist/types/src/internal/common/proxy/reactive.d.ts +39 -0
  320. package/dist/types/src/internal/common/proxy/reactive.d.ts.map +1 -0
  321. package/dist/types/src/internal/common/proxy/reactive.test.d.ts +2 -0
  322. package/dist/types/src/internal/common/proxy/reactive.test.d.ts.map +1 -0
  323. package/dist/types/src/internal/common/proxy/schema-validator.d.ts.map +1 -0
  324. package/dist/types/src/internal/common/proxy/schema.test.d.ts.map +1 -0
  325. package/dist/types/src/internal/common/proxy/symbols.d.ts +3 -0
  326. package/dist/types/src/internal/common/proxy/symbols.d.ts.map +1 -0
  327. package/dist/types/src/internal/common/proxy/typed-handler.d.ts +64 -0
  328. package/dist/types/src/internal/common/proxy/typed-handler.d.ts.map +1 -0
  329. package/dist/types/src/internal/common/proxy/typed-handler.test.d.ts.map +1 -0
  330. package/dist/types/src/internal/common/proxy/typed-object.test.d.ts.map +1 -0
  331. package/dist/types/src/internal/common/types/base.d.ts +27 -0
  332. package/dist/types/src/internal/common/types/base.d.ts.map +1 -0
  333. package/dist/types/src/internal/common/types/entity.d.ts +94 -0
  334. package/dist/types/src/internal/common/types/entity.d.ts.map +1 -0
  335. package/dist/types/src/internal/common/types/index.d.ts +7 -0
  336. package/dist/types/src/internal/common/types/index.d.ts.map +1 -0
  337. package/dist/types/src/internal/common/types/meta.d.ts +54 -0
  338. package/dist/types/src/internal/common/types/meta.d.ts.map +1 -0
  339. package/dist/types/src/internal/common/types/model-symbols.d.ts +65 -0
  340. package/dist/types/src/internal/common/types/model-symbols.d.ts.map +1 -0
  341. package/dist/types/src/internal/common/types/typename.d.ts +28 -0
  342. package/dist/types/src/internal/common/types/typename.d.ts.map +1 -0
  343. package/dist/types/src/internal/common/types/version.d.ts +15 -0
  344. package/dist/types/src/internal/common/types/version.d.ts.map +1 -0
  345. package/dist/types/src/internal/common/types/well-known-types.d.ts +11 -0
  346. package/dist/types/src/internal/common/types/well-known-types.d.ts.map +1 -0
  347. package/dist/types/src/internal/index.d.ts +10 -14
  348. package/dist/types/src/internal/index.d.ts.map +1 -1
  349. package/dist/types/src/{test → testing}/api.test.d.ts.map +1 -1
  350. package/dist/types/src/testing/index.d.ts +4 -3
  351. package/dist/types/src/testing/index.d.ts.map +1 -1
  352. package/dist/types/src/testing/registry.d.ts +9 -0
  353. package/dist/types/src/testing/registry.d.ts.map +1 -0
  354. package/dist/types/src/testing/test-data.d.ts +18 -0
  355. package/dist/types/src/testing/test-data.d.ts.map +1 -0
  356. package/dist/types/src/testing/test-schema.d.ts +298 -0
  357. package/dist/types/src/testing/test-schema.d.ts.map +1 -0
  358. package/dist/types/src/testing/util.d.ts +23 -0
  359. package/dist/types/src/testing/util.d.ts.map +1 -0
  360. package/dist/types/tsconfig.tsbuildinfo +1 -1
  361. package/package.json +119 -66
  362. package/src/Annotation.test.ts +439 -0
  363. package/src/Annotation.ts +202 -0
  364. package/src/Collection.ts +33 -0
  365. package/src/Database.ts +345 -0
  366. package/src/Dataset.ts +34 -0
  367. package/src/Entity.test.ts +132 -0
  368. package/src/Entity.ts +345 -0
  369. package/src/Err.ts +40 -0
  370. package/src/Feed.ts +352 -0
  371. package/src/Filter.test.ts +90 -0
  372. package/src/Filter.ts +484 -0
  373. package/src/Format.ts +5 -0
  374. package/src/Hypergraph.ts +84 -0
  375. package/src/Json.test.ts +175 -0
  376. package/src/Json.ts +103 -0
  377. package/src/JsonSchema.ts +26 -0
  378. package/src/Key.ts +4 -1
  379. package/src/Migration.ts +114 -0
  380. package/src/Obj.test.ts +641 -0
  381. package/src/Obj.ts +778 -281
  382. package/src/Order.ts +68 -0
  383. package/src/Query.test.ts +835 -0
  384. package/src/Query.ts +634 -0
  385. package/src/QueryResult.ts +132 -0
  386. package/src/Ref.ts +98 -10
  387. package/src/Registry.ts +155 -0
  388. package/src/Relation.test.ts +88 -0
  389. package/src/Relation.ts +503 -67
  390. package/src/Scope.ts +50 -0
  391. package/src/Tag.md +88 -0
  392. package/src/Tag.ts +53 -8
  393. package/src/Type.test.ts +257 -0
  394. package/src/Type.ts +643 -151
  395. package/src/View.ts +98 -0
  396. package/src/exemplars.test.ts +21 -0
  397. package/src/hierarchy.test.ts +33 -0
  398. package/src/index.ts +22 -6
  399. package/src/internal/Annotation/annotations.test.ts +165 -0
  400. package/src/internal/Annotation/annotations.ts +609 -0
  401. package/src/internal/Annotation/dictionary.ts +47 -0
  402. package/src/internal/Annotation/entity-dictionary.ts +74 -0
  403. package/src/internal/Annotation/index.ts +9 -0
  404. package/src/internal/Annotation/sorting.ts +51 -0
  405. package/src/internal/Annotation/util.ts +94 -0
  406. package/src/internal/Entity/api.ts +77 -0
  407. package/src/internal/Entity/entity.ts +277 -0
  408. package/src/internal/Entity/guard.ts +26 -0
  409. package/src/internal/Entity/index.ts +13 -0
  410. package/src/internal/Entity/model.ts +119 -0
  411. package/src/internal/Entity/object.ts +73 -0
  412. package/src/internal/Entity/relation.ts +188 -0
  413. package/src/internal/Entity/type-kind.ts +75 -0
  414. package/src/internal/Entity/type-uri.ts +92 -0
  415. package/src/internal/Entity/util.ts +33 -0
  416. package/src/internal/Entity/version.ts +96 -0
  417. package/src/internal/{formats → Format}/date.test.ts +1 -2
  418. package/src/internal/{formats → Format}/date.ts +5 -9
  419. package/src/internal/{formats → Format}/format.test.ts +27 -7
  420. package/src/internal/{formats → Format}/format.ts +8 -6
  421. package/src/internal/{formats → Format}/index.ts +2 -3
  422. package/src/internal/{formats → Format}/number.ts +5 -5
  423. package/src/internal/{formats → Format}/object.ts +23 -6
  424. package/src/internal/{formats → Format}/select.ts +6 -4
  425. package/src/internal/{formats → Format}/string.ts +14 -9
  426. package/src/internal/{formats → Format}/types.ts +54 -43
  427. package/src/internal/{json → JsonSchema}/annotations.ts +3 -3
  428. package/src/internal/{json-schema → JsonSchema}/index.ts +2 -0
  429. package/src/internal/{json-schema → JsonSchema}/json-schema-normalize.ts +4 -2
  430. package/src/internal/{json-schema → JsonSchema}/json-schema-type.ts +39 -39
  431. package/src/internal/{json → JsonSchema}/json-schema.test.ts +119 -182
  432. package/src/internal/{json → JsonSchema}/json-schema.ts +70 -42
  433. package/src/internal/Obj/atoms.ts +244 -0
  434. package/src/internal/Obj/clone.ts +53 -0
  435. package/src/internal/{object → Obj}/common.ts +3 -4
  436. package/src/internal/Obj/create-object.test.ts +116 -0
  437. package/src/internal/Obj/create-object.ts +140 -0
  438. package/src/internal/Obj/deleted.ts +19 -0
  439. package/src/internal/Obj/index.ts +14 -0
  440. package/src/internal/{object → Obj}/inspect.ts +7 -7
  441. package/src/internal/Obj/json-serializer.test.ts +199 -0
  442. package/src/internal/Obj/json-serializer.ts +278 -0
  443. package/src/internal/{object → Obj}/schema-validator.test.ts +3 -7
  444. package/src/internal/Obj/schema-validator.ts +6 -0
  445. package/src/internal/Obj/set-value.test.ts +258 -0
  446. package/src/internal/Obj/set-value.ts +158 -0
  447. package/src/internal/Obj/snapshot.ts +114 -0
  448. package/src/internal/Obj/typed-object.test.ts +32 -0
  449. package/src/internal/Obj/typed-object.ts +30 -0
  450. package/src/internal/{json → Query}/index.ts +1 -1
  451. package/src/internal/Query/pretty.ts +162 -0
  452. package/src/internal/Ref/atoms.ts +20 -0
  453. package/src/internal/{ref → Ref}/ref-array.ts +6 -7
  454. package/src/internal/Ref/ref.test.ts +91 -0
  455. package/src/internal/{ref → Ref}/ref.ts +230 -101
  456. package/src/internal/Ref/utils.ts +45 -0
  457. package/src/internal/{projection → Type}/compose.test.ts +9 -9
  458. package/src/internal/{projection → Type}/compose.ts +14 -9
  459. package/src/internal/Type/index.ts +6 -0
  460. package/src/internal/{schema → Type}/manipulation.ts +0 -25
  461. package/src/internal/Type/type-schema.ts +60 -0
  462. package/src/internal/common/README.md +102 -0
  463. package/src/internal/common/api/index.ts +15 -0
  464. package/src/internal/common/api/meta.ts +90 -0
  465. package/src/internal/{testing → common}/index.ts +2 -1
  466. package/src/internal/common/proxy/change-context.ts +138 -0
  467. package/src/internal/common/proxy/change.test.ts +527 -0
  468. package/src/internal/common/proxy/define-hidden-property.ts +14 -0
  469. package/src/internal/common/proxy/errors.ts +42 -0
  470. package/src/internal/common/proxy/event-batch.ts +44 -0
  471. package/src/internal/common/proxy/handler.test.ts +121 -0
  472. package/src/internal/common/proxy/index.ts +17 -0
  473. package/src/internal/common/proxy/json-serializer.ts +101 -0
  474. package/src/internal/common/proxy/make-object.ts +129 -0
  475. package/src/internal/common/proxy/ownership.ts +252 -0
  476. package/src/internal/common/proxy/proxy-types.ts +23 -0
  477. package/src/internal/common/proxy/proxy-utils.ts +150 -0
  478. package/src/internal/common/proxy/reactive-array.ts +71 -0
  479. package/src/internal/common/proxy/reactive.test.ts +54 -0
  480. package/src/internal/common/proxy/reactive.ts +77 -0
  481. package/src/internal/{object → common/proxy}/schema-validator.ts +6 -3
  482. package/src/internal/common/proxy/schema.test.ts +107 -0
  483. package/src/internal/common/proxy/symbols.ts +7 -0
  484. package/src/internal/common/proxy/typed-handler.test.ts +314 -0
  485. package/src/internal/common/proxy/typed-handler.ts +509 -0
  486. package/src/internal/common/proxy/typed-object.test.ts +103 -0
  487. package/src/internal/common/types/base.ts +43 -0
  488. package/src/internal/common/types/entity.ts +133 -0
  489. package/src/internal/common/types/index.ts +15 -0
  490. package/src/internal/common/types/meta.ts +109 -0
  491. package/src/internal/common/types/model-symbols.ts +89 -0
  492. package/src/internal/common/types/typename.ts +91 -0
  493. package/src/internal/common/types/version.ts +19 -0
  494. package/src/internal/common/types/well-known-types.ts +15 -0
  495. package/src/internal/index.ts +14 -17
  496. package/src/testing/api.test.ts +131 -0
  497. package/src/testing/index.ts +4 -3
  498. package/src/testing/registry.ts +44 -0
  499. package/src/testing/test-data.ts +189 -0
  500. package/src/testing/test-schema.ts +204 -0
  501. package/src/testing/util.ts +88 -0
  502. package/dist/lib/browser/chunk-BIDAASFK.mjs +0 -3727
  503. package/dist/lib/browser/chunk-BIDAASFK.mjs.map +0 -7
  504. package/dist/lib/browser/chunk-ZDLCWGEW.mjs +0 -410
  505. package/dist/lib/browser/chunk-ZDLCWGEW.mjs.map +0 -7
  506. package/dist/lib/browser/chunk-ZFRJKT4A.mjs +0 -585
  507. package/dist/lib/browser/chunk-ZFRJKT4A.mjs.map +0 -7
  508. package/dist/lib/browser/index.mjs +0 -35
  509. package/dist/lib/browser/internal/index.mjs +0 -336
  510. package/dist/lib/browser/meta.json +0 -1
  511. package/dist/lib/browser/query/index.mjs +0 -13
  512. package/dist/lib/browser/testing/index.mjs +0 -267
  513. package/dist/lib/browser/testing/index.mjs.map +0 -7
  514. package/dist/lib/node-esm/chunk-3SVRRCUU.mjs +0 -3727
  515. package/dist/lib/node-esm/chunk-3SVRRCUU.mjs.map +0 -7
  516. package/dist/lib/node-esm/chunk-CGDHRZWH.mjs +0 -585
  517. package/dist/lib/node-esm/chunk-CGDHRZWH.mjs.map +0 -7
  518. package/dist/lib/node-esm/chunk-HWS6VBQC.mjs +0 -410
  519. package/dist/lib/node-esm/chunk-HWS6VBQC.mjs.map +0 -7
  520. package/dist/lib/node-esm/index.mjs +0 -35
  521. package/dist/lib/node-esm/internal/index.mjs +0 -336
  522. package/dist/lib/node-esm/meta.json +0 -1
  523. package/dist/lib/node-esm/query/index.mjs +0 -13
  524. package/dist/lib/node-esm/testing/index.mjs +0 -267
  525. package/dist/lib/node-esm/testing/index.mjs.map +0 -7
  526. package/dist/types/src/errors.d.ts +0 -68
  527. package/dist/types/src/errors.d.ts.map +0 -1
  528. package/dist/types/src/internal/ast/annotation-helper.d.ts +0 -8
  529. package/dist/types/src/internal/ast/annotation-helper.d.ts.map +0 -1
  530. package/dist/types/src/internal/ast/annotations.d.ts +0 -131
  531. package/dist/types/src/internal/ast/annotations.d.ts.map +0 -1
  532. package/dist/types/src/internal/ast/annotations.test.d.ts.map +0 -1
  533. package/dist/types/src/internal/ast/entity-kind.d.ts +0 -10
  534. package/dist/types/src/internal/ast/entity-kind.d.ts.map +0 -1
  535. package/dist/types/src/internal/ast/index.d.ts +0 -5
  536. package/dist/types/src/internal/ast/index.d.ts.map +0 -1
  537. package/dist/types/src/internal/ast/types.d.ts +0 -6
  538. package/dist/types/src/internal/ast/types.d.ts.map +0 -1
  539. package/dist/types/src/internal/formats/date.d.ts.map +0 -1
  540. package/dist/types/src/internal/formats/date.test.d.ts.map +0 -1
  541. package/dist/types/src/internal/formats/format.d.ts.map +0 -1
  542. package/dist/types/src/internal/formats/format.test.d.ts.map +0 -1
  543. package/dist/types/src/internal/formats/index.d.ts.map +0 -1
  544. package/dist/types/src/internal/formats/number.d.ts.map +0 -1
  545. package/dist/types/src/internal/formats/object.d.ts.map +0 -1
  546. package/dist/types/src/internal/formats/select.d.ts.map +0 -1
  547. package/dist/types/src/internal/formats/string.d.ts.map +0 -1
  548. package/dist/types/src/internal/formats/types.d.ts.map +0 -1
  549. package/dist/types/src/internal/json/annotations.d.ts.map +0 -1
  550. package/dist/types/src/internal/json/effect-schema.test.d.ts.map +0 -1
  551. package/dist/types/src/internal/json/index.d.ts +0 -2
  552. package/dist/types/src/internal/json/index.d.ts.map +0 -1
  553. package/dist/types/src/internal/json/json-schema.d.ts.map +0 -1
  554. package/dist/types/src/internal/json/json-schema.test.d.ts.map +0 -1
  555. package/dist/types/src/internal/json-schema/index.d.ts +0 -3
  556. package/dist/types/src/internal/json-schema/index.d.ts.map +0 -1
  557. package/dist/types/src/internal/json-schema/json-schema-normalize.d.ts.map +0 -1
  558. package/dist/types/src/internal/json-schema/json-schema-type.d.ts.map +0 -1
  559. package/dist/types/src/internal/object/accessors.d.ts +0 -37
  560. package/dist/types/src/internal/object/accessors.d.ts.map +0 -1
  561. package/dist/types/src/internal/object/common.d.ts.map +0 -1
  562. package/dist/types/src/internal/object/create.d.ts.map +0 -1
  563. package/dist/types/src/internal/object/create.test.d.ts +0 -2
  564. package/dist/types/src/internal/object/create.test.d.ts.map +0 -1
  565. package/dist/types/src/internal/object/deleted.d.ts +0 -6
  566. package/dist/types/src/internal/object/deleted.d.ts.map +0 -1
  567. package/dist/types/src/internal/object/entity.d.ts +0 -33
  568. package/dist/types/src/internal/object/entity.d.ts.map +0 -1
  569. package/dist/types/src/internal/object/expando.d.ts +0 -14
  570. package/dist/types/src/internal/object/expando.d.ts.map +0 -1
  571. package/dist/types/src/internal/object/ids.d.ts +0 -6
  572. package/dist/types/src/internal/object/ids.d.ts.map +0 -1
  573. package/dist/types/src/internal/object/index.d.ts +0 -16
  574. package/dist/types/src/internal/object/index.d.ts.map +0 -1
  575. package/dist/types/src/internal/object/inspect.d.ts.map +0 -1
  576. package/dist/types/src/internal/object/json-serializer.d.ts +0 -32
  577. package/dist/types/src/internal/object/json-serializer.d.ts.map +0 -1
  578. package/dist/types/src/internal/object/json-serializer.test.d.ts.map +0 -1
  579. package/dist/types/src/internal/object/meta.d.ts +0 -31
  580. package/dist/types/src/internal/object/meta.d.ts.map +0 -1
  581. package/dist/types/src/internal/object/model.d.ts +0 -117
  582. package/dist/types/src/internal/object/model.d.ts.map +0 -1
  583. package/dist/types/src/internal/object/relation.d.ts +0 -17
  584. package/dist/types/src/internal/object/relation.d.ts.map +0 -1
  585. package/dist/types/src/internal/object/schema-validator.d.ts.map +0 -1
  586. package/dist/types/src/internal/object/schema-validator.test.d.ts.map +0 -1
  587. package/dist/types/src/internal/object/typed-object.d.ts +0 -31
  588. package/dist/types/src/internal/object/typed-object.d.ts.map +0 -1
  589. package/dist/types/src/internal/object/typed-object.test.d.ts.map +0 -1
  590. package/dist/types/src/internal/object/typename.d.ts +0 -15
  591. package/dist/types/src/internal/object/typename.d.ts.map +0 -1
  592. package/dist/types/src/internal/object/version.d.ts +0 -14
  593. package/dist/types/src/internal/object/version.d.ts.map +0 -1
  594. package/dist/types/src/internal/projection/compose.d.ts +0 -6
  595. package/dist/types/src/internal/projection/compose.d.ts.map +0 -1
  596. package/dist/types/src/internal/projection/compose.test.d.ts.map +0 -1
  597. package/dist/types/src/internal/projection/index.d.ts +0 -2
  598. package/dist/types/src/internal/projection/index.d.ts.map +0 -1
  599. package/dist/types/src/internal/proxy/handler.test.d.ts.map +0 -1
  600. package/dist/types/src/internal/proxy/reactive-object.d.ts +0 -15
  601. package/dist/types/src/internal/proxy/reactive-object.d.ts.map +0 -1
  602. package/dist/types/src/internal/proxy/schema.test.d.ts.map +0 -1
  603. package/dist/types/src/internal/proxy/typed-handler.d.ts +0 -44
  604. package/dist/types/src/internal/proxy/typed-handler.d.ts.map +0 -1
  605. package/dist/types/src/internal/proxy/typed-handler.test.d.ts.map +0 -1
  606. package/dist/types/src/internal/proxy/typed-object.test.d.ts.map +0 -1
  607. package/dist/types/src/internal/query/index.d.ts +0 -2
  608. package/dist/types/src/internal/query/index.d.ts.map +0 -1
  609. package/dist/types/src/internal/query/query.d.ts +0 -17
  610. package/dist/types/src/internal/query/query.d.ts.map +0 -1
  611. package/dist/types/src/internal/ref/index.d.ts.map +0 -1
  612. package/dist/types/src/internal/ref/ref-array.d.ts +0 -21
  613. package/dist/types/src/internal/ref/ref-array.d.ts.map +0 -1
  614. package/dist/types/src/internal/ref/ref.d.ts.map +0 -1
  615. package/dist/types/src/internal/ref/ref.test.d.ts.map +0 -1
  616. package/dist/types/src/internal/schema/echo-schema.d.ts +0 -168
  617. package/dist/types/src/internal/schema/echo-schema.d.ts.map +0 -1
  618. package/dist/types/src/internal/schema/index.d.ts +0 -7
  619. package/dist/types/src/internal/schema/index.d.ts.map +0 -1
  620. package/dist/types/src/internal/schema/manipulation.d.ts.map +0 -1
  621. package/dist/types/src/internal/schema/runtime-schema-registry.d.ts +0 -18
  622. package/dist/types/src/internal/schema/runtime-schema-registry.d.ts.map +0 -1
  623. package/dist/types/src/internal/schema/snapshot.d.ts +0 -6
  624. package/dist/types/src/internal/schema/snapshot.d.ts.map +0 -1
  625. package/dist/types/src/internal/schema/stored-schema.d.ts +0 -13
  626. package/dist/types/src/internal/schema/stored-schema.d.ts.map +0 -1
  627. package/dist/types/src/internal/testing/index.d.ts +0 -3
  628. package/dist/types/src/internal/testing/index.d.ts.map +0 -1
  629. package/dist/types/src/internal/testing/types.d.ts +0 -381
  630. package/dist/types/src/internal/testing/types.d.ts.map +0 -1
  631. package/dist/types/src/internal/testing/utils.d.ts +0 -10
  632. package/dist/types/src/internal/testing/utils.d.ts.map +0 -1
  633. package/dist/types/src/internal/types/index.d.ts +0 -3
  634. package/dist/types/src/internal/types/index.d.ts.map +0 -1
  635. package/dist/types/src/internal/types/types.d.ts +0 -79
  636. package/dist/types/src/internal/types/types.d.ts.map +0 -1
  637. package/dist/types/src/internal/types/types.test.d.ts +0 -2
  638. package/dist/types/src/internal/types/types.test.d.ts.map +0 -1
  639. package/dist/types/src/internal/types/util.d.ts +0 -5
  640. package/dist/types/src/internal/types/util.d.ts.map +0 -1
  641. package/dist/types/src/query/index.d.ts +0 -2
  642. package/dist/types/src/query/index.d.ts.map +0 -1
  643. package/dist/types/src/query/query.d.ts +0 -248
  644. package/dist/types/src/query/query.d.ts.map +0 -1
  645. package/dist/types/src/query/query.test.d.ts +0 -2
  646. package/dist/types/src/query/query.test.d.ts.map +0 -1
  647. package/dist/types/src/testing/echo-schema.d.ts +0 -7
  648. package/dist/types/src/testing/echo-schema.d.ts.map +0 -1
  649. package/dist/types/src/testing/types.d.ts +0 -228
  650. package/dist/types/src/testing/types.d.ts.map +0 -1
  651. package/src/errors.ts +0 -18
  652. package/src/internal/ast/annotation-helper.ts +0 -22
  653. package/src/internal/ast/annotations.test.ts +0 -98
  654. package/src/internal/ast/annotations.ts +0 -226
  655. package/src/internal/ast/entity-kind.ts +0 -15
  656. package/src/internal/ast/index.ts +0 -8
  657. package/src/internal/ast/types.ts +0 -17
  658. package/src/internal/object/accessors.ts +0 -153
  659. package/src/internal/object/create.test.ts +0 -118
  660. package/src/internal/object/create.ts +0 -96
  661. package/src/internal/object/deleted.ts +0 -19
  662. package/src/internal/object/entity.ts +0 -248
  663. package/src/internal/object/expando.ts +0 -21
  664. package/src/internal/object/ids.ts +0 -12
  665. package/src/internal/object/index.ts +0 -19
  666. package/src/internal/object/json-serializer.test.ts +0 -99
  667. package/src/internal/object/json-serializer.ts +0 -225
  668. package/src/internal/object/meta.ts +0 -61
  669. package/src/internal/object/model.ts +0 -170
  670. package/src/internal/object/relation.ts +0 -24
  671. package/src/internal/object/typed-object.test.ts +0 -34
  672. package/src/internal/object/typed-object.ts +0 -88
  673. package/src/internal/object/typename.ts +0 -61
  674. package/src/internal/object/version.ts +0 -22
  675. package/src/internal/projection/index.ts +0 -5
  676. package/src/internal/proxy/handler.test.ts +0 -163
  677. package/src/internal/proxy/reactive-object.ts +0 -108
  678. package/src/internal/proxy/schema.test.ts +0 -136
  679. package/src/internal/proxy/typed-handler.test.ts +0 -102
  680. package/src/internal/proxy/typed-handler.ts +0 -228
  681. package/src/internal/proxy/typed-object.test.ts +0 -100
  682. package/src/internal/query/index.ts +0 -5
  683. package/src/internal/query/query.ts +0 -23
  684. package/src/internal/ref/ref.test.ts +0 -100
  685. package/src/internal/schema/echo-schema.ts +0 -383
  686. package/src/internal/schema/index.ts +0 -10
  687. package/src/internal/schema/runtime-schema-registry.ts +0 -78
  688. package/src/internal/schema/snapshot.ts +0 -25
  689. package/src/internal/schema/stored-schema.ts +0 -26
  690. package/src/internal/testing/types.ts +0 -144
  691. package/src/internal/testing/utils.ts +0 -54
  692. package/src/internal/types/index.ts +0 -6
  693. package/src/internal/types/types.test.ts +0 -48
  694. package/src/internal/types/types.ts +0 -176
  695. package/src/internal/types/util.ts +0 -9
  696. package/src/query/index.ts +0 -6
  697. package/src/query/query.test.ts +0 -401
  698. package/src/query/query.ts +0 -789
  699. package/src/test/api.test.ts +0 -180
  700. package/src/testing/echo-schema.ts +0 -39
  701. package/src/testing/types.ts +0 -108
  702. /package/dist/lib/{browser/index.mjs.map → neutral/Annotation.mjs.map} +0 -0
  703. /package/dist/lib/{browser/internal/index.mjs.map → neutral/Database.mjs.map} +0 -0
  704. /package/dist/lib/{browser/query/index.mjs.map → neutral/Entity.mjs.map} +0 -0
  705. /package/dist/lib/{node-esm/index.mjs.map → neutral/Err.mjs.map} +0 -0
  706. /package/dist/lib/{node-esm/internal/index.mjs.map → neutral/Feed.mjs.map} +0 -0
  707. /package/dist/lib/{node-esm/query/index.mjs.map → neutral/Filter.mjs.map} +0 -0
  708. /package/dist/types/src/internal/{ast → Annotation}/annotations.test.d.ts +0 -0
  709. /package/dist/types/src/internal/{formats → Format}/date.d.ts +0 -0
  710. /package/dist/types/src/internal/{formats → Format}/date.test.d.ts +0 -0
  711. /package/dist/types/src/internal/{formats → Format}/format.test.d.ts +0 -0
  712. /package/dist/types/src/internal/{formats → Format}/number.d.ts +0 -0
  713. /package/dist/types/src/internal/{json → JsonSchema}/effect-schema.test.d.ts +0 -0
  714. /package/dist/types/src/internal/{json-schema → JsonSchema}/json-schema-normalize.d.ts +0 -0
  715. /package/dist/types/src/internal/{json → JsonSchema}/json-schema.test.d.ts +0 -0
  716. /package/dist/types/src/internal/{object → Obj}/common.d.ts +0 -0
  717. /package/dist/types/src/internal/{object → Obj}/inspect.d.ts +0 -0
  718. /package/dist/types/src/internal/{object → Obj}/json-serializer.test.d.ts +0 -0
  719. /package/dist/types/src/internal/{object → Obj}/schema-validator.test.d.ts +0 -0
  720. /package/dist/types/src/internal/{object → Obj}/typed-object.test.d.ts +0 -0
  721. /package/dist/types/src/internal/{ref → Ref}/index.d.ts +0 -0
  722. /package/dist/types/src/internal/{ref → Ref}/ref.test.d.ts +0 -0
  723. /package/dist/types/src/internal/{projection → Type}/compose.test.d.ts +0 -0
  724. /package/dist/types/src/internal/{proxy → common/proxy}/handler.test.d.ts +0 -0
  725. /package/dist/types/src/internal/{object → common/proxy}/schema-validator.d.ts +0 -0
  726. /package/dist/types/src/internal/{proxy → common/proxy}/schema.test.d.ts +0 -0
  727. /package/dist/types/src/internal/{proxy → common/proxy}/typed-handler.test.d.ts +0 -0
  728. /package/dist/types/src/internal/{proxy → common/proxy}/typed-object.test.d.ts +0 -0
  729. /package/dist/types/src/{test → testing}/api.test.d.ts +0 -0
  730. /package/src/internal/{json → JsonSchema}/effect-schema.test.ts +0 -0
  731. /package/src/internal/{ref → Ref}/index.ts +0 -0
package/src/Type.ts CHANGED
@@ -2,244 +2,736 @@
2
2
  // Copyright 2025 DXOS.org
3
3
  //
4
4
 
5
- import type * as EffectSchema from 'effect/Schema';
5
+ // @import-as-namespace
6
6
 
7
+ import * as Schema from 'effect/Schema';
8
+ import type * as Types from 'effect/Types';
9
+
10
+ import { raise } from '@dxos/debug';
7
11
  import { type EncodedReference } from '@dxos/echo-protocol';
8
- import { invariant } from '@dxos/invariant';
9
- import type * as Keys from '@dxos/keys';
12
+ import { assertArgument, invariant } from '@dxos/invariant';
13
+ import { DXN, EID, type EntityId, type URI } from '@dxos/keys';
10
14
 
11
- import { type ToMutable } from './internal';
12
- import * as EchoSchema from './internal';
15
+ import type * as Database from './Database';
16
+ import type * as EntityModule from './Entity';
17
+ import * as internal from './internal';
18
+ import * as typeInternal from './internal/Type';
13
19
  import type * as RelationModule from './Relation';
14
20
 
15
21
  //
16
- // Kind
22
+ // Internal types (not exported)
17
23
  //
18
24
 
19
- export const KindId: unique symbol = EchoSchema.EntityKindId as any;
20
- export type KindId = typeof KindId;
25
+ /**
26
+ * Structural base shared by the three sibling type-entity interfaces
27
+ * ({@link Obj}, {@link Relation}, {@link Type}). NOT exported — callers
28
+ * should constrain on {@link AnyEntity} when they want "any of the three"
29
+ * and on the specific kind interface otherwise.
30
+ */
31
+ interface BaseTypeEntity<A> {
32
+ /**
33
+ * Entity-kind brand of the type-entity value itself — always `EntityKind.Type`.
34
+ * The kind of instance the type *describes* lives on `[SchemaKindId]`
35
+ * (Object / Relation / Type). Lets `Obj.isObject` / `Relation.isRelation`
36
+ * reject type entities by a single `[KindId]` check.
37
+ */
38
+ readonly [internal.KindId]: internal.EntityKind.Type;
39
+
40
+ /**
41
+ * Object id. Like all ECHO entities, type entities always carry an id —
42
+ * stamped at construction for in-memory (static) declarations and assigned by
43
+ * the database once persisted. The id does NOT determine the entity's URI:
44
+ * static types resolve to their typename DXN, persisted types to `echo:/<id>`
45
+ * (see `getTypeURIFromSpecifier`).
46
+ */
47
+ readonly id: EntityId;
48
+
49
+ readonly name?: string;
50
+ // NOTE: `typename` / `version` are intentionally NOT fields on any type-entity
51
+ // interface. Both static and persisted entities carry them in `EntityMeta`
52
+ // (`key` / `version`); read them via `Type.getTypename(self)` /
53
+ // `Type.getVersion(self)` — never as a direct property.
54
+ readonly jsonSchema: internal.JsonSchemaType;
55
+ readonly [InstancePhantomId]?: A;
56
+ }
21
57
 
22
- export const Kind = EchoSchema.EntityKind;
58
+ //
59
+ // Obj — `Type.Type` value for an ECHO object schema.
60
+ //
23
61
 
24
62
  /**
25
- * Assigns a kind to an Object or Relation instance.
63
+ * TypeScript type for an ECHO object type — a `Type.Type<A>` entity.
64
+ *
65
+ * `T` is the instance type produced by `Obj.make(Foo, props)`. `Fields` is
66
+ * retained as a structural hint (the runtime value still carries `.fields`),
67
+ * but consumers should derive instance/encoded types via `Type.InstanceType`.
68
+ *
69
+ * **Not a `Schema.Schema`.** `Foo.ast` / `Schema.Schema.Type<typeof Foo>` /
70
+ * `Schema.extend(Foo)` no longer typecheck — extract the Effect Schema via
71
+ * `Type.getSchema(Foo)` first, or derive instance types via
72
+ * `Type.InstanceType<typeof Foo>`.
73
+ *
74
+ * @example
75
+ * ```ts
76
+ * const Person = Schema.Struct({
77
+ * name: Schema.String,
78
+ * }).pipe(Type.makeObject(DXN.make('com.example.type.person', '0.1.0')));
79
+ *
80
+ * type Person = Type.InstanceType<typeof Person>;
81
+ * ```
26
82
  */
27
- // NOTE: Needed to make `isRelation` and `isObject` checks work.
28
- export interface OfKind<Kind extends EchoSchema.EntityKind> {
29
- readonly id: Keys.ObjectId;
30
- readonly [KindId]: Kind;
83
+ export interface Obj<T, Fields extends Schema.Struct.Fields = Schema.Struct.Fields> extends BaseTypeEntity<
84
+ T & EntityModule.OfKind<typeof EntityModule.Kind.Object>
85
+ > {
86
+ /** Schema-kind brand (object). */
87
+ readonly [internal.SchemaKindId]: internal.EntityKind.Object;
88
+
89
+ /** Source Effect Schema — used internally by `Type.getSchema(self)`. */
90
+ readonly [internal.StaticTypeSchemaSlot]: Schema.Schema.AnyNoContext;
91
+
92
+ /**
93
+ * The fields defined in the original struct schema.
94
+ * Allows accessing field definitions for introspection.
95
+ */
96
+ readonly fields: Fields;
31
97
  }
32
98
 
33
99
  /**
34
- * Base ECHO schema type.
100
+ * Type that represents any ECHO object type — a `Type.Type` entity branded
101
+ * with the object entity kind, i.e. what `Type.makeObject(dxn)` produces.
35
102
  */
36
- export type Schema = EchoSchema.EchoSchema;
103
+ export type AnyObj = Obj<unknown>;
37
104
 
38
105
  /**
39
- * Returns all properties of an object or relation except for the id and kind.
106
+ * Factory function to create an ECHO object type.
107
+ *
108
+ * Returns a `Type.Type` entity — a live, in-memory `TypeSchema` instance,
109
+ * NOT a `Schema.Schema`. Use `Type.InstanceType<typeof Foo>` for the instance
110
+ * type and `Type.getSchema(Foo)` to obtain the underlying Effect Schema.
111
+ *
112
+ * The entity's id defaults to `EntityId.deterministic(typename, version)` so
113
+ * constructing a type never reaches `crypto.getRandomValues()` — required for
114
+ * Cloudflare workerd, which forbids RNG calls in global (module-evaluation)
115
+ * scope. Pass `{ id }` to override (e.g. with `EntityId.random()` from a
116
+ * request handler).
117
+ *
118
+ * @example
119
+ * ```ts
120
+ * const Person = Schema.Struct({
121
+ * name: Schema.String,
122
+ * }).pipe(Type.makeObject(DXN.make('com.example.type.person', '0.1.0')));
123
+ * ```
40
124
  */
41
- export type Properties<T = any> = Omit<T, 'id' | KindId | RelationModule.Source | RelationModule.Target>;
125
+ export const makeObject: {
126
+ (
127
+ dxn: DXN.DXN,
128
+ options?: { id?: EntityId },
129
+ ): <Self extends Schema.Schema.Any>(self: Self) => Obj<Schema.Schema.Type<Self>>;
130
+ } = internal.EchoObjectSchema as any;
42
131
 
43
132
  //
44
- // Obj
133
+ // Type — the ECHO entity that holds a schema and metadata.
134
+ // Persisted via `db.addType()`; subscribed to via `Filter.type(Type.Type)`.
45
135
  //
46
136
 
47
- interface ObjJsonProps {
48
- id: string;
49
- }
137
+ /**
138
+ * ECHO meta-schema entity — stores `{ name?, typename, version, jsonSchema }`.
139
+ * Type-kind sibling of `Type.makeObject(...)` / `Type.makeRelation(...)` outputs.
140
+ * Stored types live under this entity; filter via `Filter.type(Type.Type)`.
141
+ */
142
+ export const Type: Type<typeInternal.TypeSchema> = typeInternal.TypeSchema as any;
143
+
144
+ /**
145
+ * Default version stamped on draft (unnamed) types created via
146
+ * {@link makeObjectFromJsonSchema} / {@link makeRelationFromJsonSchema} when
147
+ * the caller does not supply one. Pure dynamic drafts surface as `'0.0.0'`
148
+ * until they are persisted, at which point automerge-heads suffix the version.
149
+ */
150
+ const DRAFT_VERSION = '0.0.0';
151
+
152
+ /**
153
+ * Common props shared by the type-kind factories. Typename and version are
154
+ * optional — drafts omit typename and default version to {@link DRAFT_VERSION}.
155
+ */
156
+ type MakeTypeProps = {
157
+ jsonSchema: internal.JsonSchemaType;
158
+ typename?: string;
159
+ version?: string;
160
+ name?: string;
161
+ id?: EntityId;
162
+ };
50
163
 
51
164
  /**
52
- * Return type of the `Obj` schema constructor.
165
+ * Construct a new object-kind type entity from raw metadata — for cases where
166
+ * an Effect Schema isn't available (e.g. JSON-Schema arriving over the network
167
+ * or from a UI editor). Parallel to {@link makeObject} but takes pre-built
168
+ * `jsonSchema` instead of piping through an Effect schema.
53
169
  *
54
- * This typedef avoids `TS4023` error (name from external module cannot be used named).
55
- * See Effect's note on interface types.
170
+ * The returned entity is in-memory; persist it with `db.addType(entity)`.
56
171
  */
57
- export interface obj<Self extends EffectSchema.Schema.Any>
58
- extends EchoSchema.TypeMeta,
59
- EffectSchema.AnnotableClass<
60
- obj<Self>,
61
- OfKind<EchoSchema.EntityKind.Object> & ToMutable<EffectSchema.Schema.Type<Self>>,
62
- EffectSchema.Simplify<ObjJsonProps & ToMutable<EffectSchema.Schema.Encoded<Self>>>,
63
- EffectSchema.Schema.Context<Self>
64
- > {}
172
+ export const makeObjectFromJsonSchema = (props: MakeTypeProps): Type<typeInternal.TypeSchema> => {
173
+ const { typename, version, ...data } = props;
174
+ // `typename` / `version` are routed through `EntityMeta` (`key` / `version`)
175
+ // — the canonical registry-provenance pair — not data fields. Drafts default
176
+ // to `'0.0.0'`; the version is omitted from meta entirely when the caller
177
+ // doesn't supply one so the proxy projection can apply its own default.
178
+ return internal.makeObject(
179
+ internal.getStaticTypeSchema(typeInternal.TypeSchema) as any,
180
+ data as any,
181
+ {
182
+ keys: [],
183
+ key: typename,
184
+ version: version ?? DRAFT_VERSION,
185
+ },
186
+ typeInternal.TypeSchema,
187
+ ) as unknown as Type<typeInternal.TypeSchema>;
188
+ };
65
189
 
66
190
  /**
67
- * Object schema.
191
+ * Construct a new relation-kind type entity from raw metadata. Parallel to
192
+ * {@link makeRelation} but takes pre-built `jsonSchema` instead of piping
193
+ * through an Effect schema. `source` / `target` accept either a static
194
+ * `Type.Obj` entity or the well-known `Obj.Unknown` schema.
195
+ *
196
+ * The returned entity is in-memory; persist it with `db.addType(entity)`.
68
197
  */
69
- export const Obj: {
70
- (opts: EchoSchema.TypeMeta): <Self extends EffectSchema.Schema.Any>(self: Self) => obj<Self>;
71
- } = EchoSchema.EchoObject as any;
198
+ export const makeRelationFromJsonSchema = (
199
+ props: MakeTypeProps & {
200
+ source: AnyObj | internal.UnknownTypeSchema<any, typeof EntityModule.Kind.Object>;
201
+ target: AnyObj | internal.UnknownTypeSchema<any, typeof EntityModule.Kind.Object>;
202
+ },
203
+ ): Type<typeInternal.TypeSchema> => {
204
+ const { source, target, jsonSchema, typename, version, ...rest } = props;
205
+ // Embed source/target DXNs + relation entity-kind into the jsonSchema so the
206
+ // entity round-trips correctly through `toEffectSchema` / queries / refs.
207
+ const sourceURI = internal.getTypeURIFromSpecifier(source);
208
+ const targetURI = internal.getTypeURIFromSpecifier(target);
209
+ const enrichedJsonSchema: internal.JsonSchemaType = {
210
+ ...jsonSchema,
211
+ entityKind: internal.EntityKind.Relation,
212
+ relationSource: { $ref: sourceURI },
213
+ relationTarget: { $ref: targetURI },
214
+ };
215
+ // `typename` / `version` route through `EntityMeta` (see
216
+ // {@link makeObjectFromJsonSchema}); drafts default version to `'0.0.0'`.
217
+ return internal.makeObject(
218
+ internal.getStaticTypeSchema(typeInternal.TypeSchema) as any,
219
+ { ...rest, jsonSchema: enrichedJsonSchema } as any,
220
+ {
221
+ keys: [],
222
+ key: typename,
223
+ version: version ?? DRAFT_VERSION,
224
+ },
225
+ typeInternal.TypeSchema,
226
+ ) as unknown as Type<typeInternal.TypeSchema>;
227
+ };
72
228
 
73
229
  /**
74
- * Object schema type definitions.
230
+ * TypeScript type for an ECHO relation type — a `Type.Type<A>` entity.
231
+ *
232
+ * `T` is the instance-property type produced by `Relation.make(...)` (excluding
233
+ * source/target endpoints). `Source` and `Target` are the endpoint types.
234
+ *
235
+ * **Not a `Schema.Schema`.** See {@link Obj}'s note.
75
236
  */
76
- export declare namespace Obj {
237
+ export interface Relation<
238
+ T,
239
+ Source,
240
+ Target,
241
+ Fields extends Schema.Struct.Fields = Schema.Struct.Fields,
242
+ > extends BaseTypeEntity<
243
+ RelationModule.Endpoints<Source, Target> & T & EntityModule.OfKind<typeof EntityModule.Kind.Relation>
244
+ > {
245
+ /** Schema-kind brand (relation). */
246
+ readonly [internal.SchemaKindId]: internal.EntityKind.Relation;
247
+
248
+ /** Source Effect Schema — used internally by `Type.getSchema(self)`. */
249
+ readonly [internal.StaticTypeSchemaSlot]: Schema.Schema.AnyNoContext;
250
+
77
251
  /**
78
- * Type that represents an arbitrary schema type of an object.
79
- * NOTE: This is not an instance type.
252
+ * The fields defined in the original struct schema.
253
+ * Allows accessing field definitions for introspection.
80
254
  */
81
- // TODO(dmaretskyi): If schema was covariant, we could specify props in here, like `id: ObjectId`.
82
- // TODO(burdon): This erases the ECHO type info (e.g., id, typename).
83
- export type Any = EffectSchema.Schema.AnyNoContext;
255
+ readonly fields: Fields;
84
256
  }
85
257
 
86
- //
87
- // Expando
88
- //
258
+ /**
259
+ * Type that represents any ECHO relation type — a `Type.Type` entity branded
260
+ * with the relation entity kind, i.e. what `Type.makeRelation(...)` produces.
261
+ */
262
+ export type AnyRelation = Relation<unknown, unknown, unknown>;
89
263
 
90
- // TODO(burdon): We're using Expando in many places as a base type.
91
- export interface Expando extends OfKind<EchoSchema.EntityKind.Object> {
92
- [key: string]: any;
93
- }
264
+ /**
265
+ * Factory function to create an ECHO relation schema.
266
+ * Adds relation metadata annotations to an Effect schema.
267
+ *
268
+ * @example
269
+ * ```ts
270
+ * const WorksFor = Schema.Struct({
271
+ * role: Schema.String,
272
+ * }).pipe(Type.makeRelation({
273
+ * dxn: DXN.make('com.example.type.worksFor', '0.1.0'),
274
+ * source: Person,
275
+ * target: Company,
276
+ * }));
277
+ * ```
278
+ */
279
+ export const makeRelation: {
280
+ <SourceInstance, TargetInstance>(opts: {
281
+ dxn: DXN.DXN;
282
+ source: Obj<SourceInstance, any> | internal.UnknownTypeSchema<SourceInstance, typeof EntityModule.Kind.Object>;
283
+ target: Obj<TargetInstance, any> | internal.UnknownTypeSchema<TargetInstance, typeof EntityModule.Kind.Object>;
284
+ /**
285
+ * Override the entity id. Defaults to `EntityId.deterministic(typename, version)`;
286
+ * see `Type.makeObject` for the workerd motivation.
287
+ */
288
+ id?: EntityId;
289
+ }): <Self extends Schema.Schema.Any>(
290
+ self: Self,
291
+ ) => Relation<
292
+ Schema.Schema.Type<Self>,
293
+ SourceInstance & EntityModule.OfKind<typeof EntityModule.Kind.Object>,
294
+ TargetInstance & EntityModule.OfKind<typeof EntityModule.Kind.Object>
295
+ >;
296
+ } = internal.EchoRelationSchema as any;
297
+
298
+ /**
299
+ * Type that represents any ECHO type-kind entity — a `Type.Type` meta-schema
300
+ * value (static `Type.Type` or a persisted draft from `db.addType(...)`).
301
+ * Mirrors {@link AnyObj} / {@link AnyRelation} for the third sibling kind.
302
+ */
303
+ export type AnyType = Type<unknown>;
304
+
305
+ /**
306
+ * Any ECHO type-entity — one of the three sibling kinds: object-kind, relation-kind,
307
+ * or type-kind (the meta-schema). APIs that want "any ECHO type" use this union;
308
+ * the underlying Effect Schema is retrieved via `Type.getSchema`.
309
+ */
310
+ export type AnyEntity = AnyObj | AnyRelation | AnyType;
311
+
312
+ /**
313
+ * Type guard: narrows a `Type.AnyEntity` to an object-kind entity. Checks
314
+ * ENTITIES, not instances — use `Obj.isObject` for instances. Raw
315
+ * `Schema.Schema` values (including the branded `Obj.Unknown` companion)
316
+ * are intentionally not accepted; inspect their `TypeAnnotation` directly.
317
+ */
318
+ export const isObject = (entity: AnyEntity): entity is AnyObj => {
319
+ return internal.getSchemaKind(entity) === internal.EntityKind.Object;
320
+ };
321
+
322
+ /**
323
+ * Type guard: narrows a `Type.AnyEntity` to a relation-kind entity. Checks
324
+ * ENTITIES, not instances — use `Relation.isRelation` for instances.
325
+ */
326
+ export const isRelation = (entity: AnyEntity): entity is AnyRelation => {
327
+ return internal.getSchemaKind(entity) === internal.EntityKind.Relation;
328
+ };
329
+
330
+ /**
331
+ * Type guard: narrows a `Type.AnyEntity` to the type-kind meta-schema
332
+ * (e.g. `Type.Type`). Mirrors {@link isObject} / {@link isRelation}.
333
+ */
334
+ export const isTypeKind = (entity: AnyEntity): entity is Type => {
335
+ return internal.getSchemaKind(entity) === internal.EntityKind.Type;
336
+ };
94
337
 
95
- type ExpandoEncoded = EffectSchema.Simplify<ObjJsonProps & { [key: string]: any }>;
338
+ /**
339
+ * Narrow a `Type.AnyEntity` (e.g. one returned from `schemaRegistry.query(...)`)
340
+ * to `AnyObj`, throwing if it describes a relation or the type-kind
341
+ * meta-schema. Use at call sites that need to pass the value to `Obj.make`,
342
+ * `Filter.type`, or other object-only APIs.
343
+ */
344
+ export const assertObject = (entity: AnyEntity): AnyObj => {
345
+ assertArgument(isObject(entity), 'entity', 'Expected an object-kind Type entity.');
346
+ return entity;
347
+ };
96
348
 
97
- export const Expando: EffectSchema.Schema<Expando, ExpandoEncoded, never> = EchoSchema.Expando as any;
349
+ /** Narrow a `Type.AnyEntity` to `AnyRelation`, throwing otherwise. */
350
+ export const expectRelation = (entity: AnyEntity): AnyRelation => {
351
+ assertArgument(isRelation(entity), 'entity', 'Expected a relation-kind Type entity.');
352
+ return entity;
353
+ };
354
+
355
+ /** Narrow a `Type.AnyEntity` to the `Type.Type` meta-schema, throwing otherwise. */
356
+ export const expectTypeKind = (entity: AnyEntity): Type => {
357
+ assertArgument(isTypeKind(entity), 'entity', 'Expected a type-kind Type entity.');
358
+ return entity;
359
+ };
360
+
361
+ /**
362
+ * Type that represents any Ref schema (with unknown target type).
363
+ * This is a schema type, not an instance type.
364
+ */
365
+ export type AnyRef = Schema.Schema<internal.Ref<any>, EncodedReference>;
98
366
 
99
367
  //
100
- // Relation
368
+ // Schema utility functions
101
369
  //
102
370
 
103
- interface RelationJsonProps {
104
- id: string;
105
- [EchoSchema.ATTR_RELATION_SOURCE]: string;
106
- [EchoSchema.ATTR_RELATION_TARGET]: string;
107
- }
371
+ /**
372
+ * Returns the URI identifying a type entity. Always defined.
373
+ *
374
+ * - Static `Type.Obj` / `Type.Relation` → typename DXN (e.g. `dxn:com.example.type.person:0.1.0`).
375
+ * - Persisted `Type.Type` instance (has `id`) → local `EID` (`echo:/<objectId>`).
376
+ * - In-memory `Type.Type` draft (has `id`, no typename) → local `EID`.
377
+ *
378
+ * Only accepts `Type.AnyEntity` entities. Raw `Schema.Schema` values and the
379
+ * branded `Obj.Unknown` / `Relation.Unknown` schemas are intentionally not
380
+ * supported — use `internal.getSchemaURI` or the schema's typename annotation
381
+ * directly when working at the schema level.
382
+ */
383
+ export const getURI = (input: AnyEntity): URI.URI => {
384
+ // For Type entities, route through `getTypeURIFromSpecifier` (id → EID,
385
+ // typename/version → DXN). For Obj/Relation entities, unwrap to the source
386
+ // Effect Schema first and read its annotations.
387
+ if (isType(input)) {
388
+ return internal.getTypeURIFromSpecifier(input);
389
+ }
390
+ return internal.getSchemaURI(getSchema(input)) ?? raise(new TypeError('Type entity has no URI'));
391
+ };
108
392
 
109
393
  /**
110
- * Return type of the `Relation` schema constructor.
394
+ * @returns The typename. Example: `com.example.type.person`.
111
395
  *
112
- * This typedef avoids `TS4023` error (name from external module cannot be used named).
113
- * See Effect's note on interface types.
396
+ * Persisted `Type.Type` entities carry typename in `EntityMeta.key` (the
397
+ * canonical registry-provenance field); unnamed drafts fall back to the
398
+ * entity's object id so the helper always returns a string. Any `dxn:` or
399
+ * `echo:/` prefix is stripped — typename is a bare identifier, not a URI.
114
400
  */
115
- export interface relation<
116
- Self extends EffectSchema.Schema.Any,
117
- SourceSchema extends EffectSchema.Schema.Any,
118
- TargetSchema extends EffectSchema.Schema.Any,
119
- > extends EchoSchema.TypeMeta,
120
- EffectSchema.AnnotableClass<
121
- relation<Self, SourceSchema, TargetSchema>,
122
- OfKind<EchoSchema.EntityKind.Relation> &
123
- Relation.Endpoints<EffectSchema.Schema.Type<SourceSchema>, EffectSchema.Schema.Type<TargetSchema>> &
124
- ToMutable<EffectSchema.Schema.Type<Self>>,
125
- EffectSchema.Simplify<RelationJsonProps & ToMutable<EffectSchema.Schema.Encoded<Self>>>,
126
- EffectSchema.Schema.Context<Self>
127
- > {}
401
+ // TODO(wittjosiah): For in-database types this should return the object id once the registry
402
+ // has more robust options for shadowing types (so callers can disambiguate db-stored copies).
403
+ export const getTypename = (input: AnyEntity): string => {
404
+ // Both in-memory and in-database entities carry typename in `EntityMeta.key`
405
+ // the canonical registry-provenance field. In-memory entities attach meta
406
+ // eagerly (see `makeEchoTypeSchema`), so a single meta-backed read covers
407
+ // both forms.
408
+ const meta = internal.getMetaChecked(input);
409
+ let typename: string | undefined = meta.key as string | undefined;
410
+ // `meta.key` is a denormalized copy of the typename. The authoritative source
411
+ // for a type entity is its `jsonSchema.typename` (`getSchema` rebuilds the
412
+ // Effect Schema from `jsonSchema`). A type loaded from a snapshot can arrive
413
+ // with `meta.key` absent (the meta round-trip dropped the denormalized copy)
414
+ // while `jsonSchema.typename` is always present — consult it before the
415
+ // last-resort id fallback so callers never receive a bare object id where a
416
+ // typename is expected (e.g. `Filter.typename`, which rejects non-typenames).
417
+ if (typename == null) {
418
+ typename = input.jsonSchema?.typename;
419
+ }
420
+ // Unnamed drafts (no meta.key, no jsonSchema typename) fall back to the id.
421
+ typename ??= input.id as string;
422
+ // Typename is a bare identifier — strip URI prefixes if a caller seeded
423
+ // meta.key with one accidentally (or if a static entity carries a DXN-
424
+ // style typename).
425
+ typename = stripTypenamePrefix(typename);
426
+ invariant(typeof typename === 'string' && typename.length > 0, 'Invalid typename');
427
+ return typename;
428
+ };
128
429
 
129
430
  /**
130
- * Relation schema.
431
+ * Gets the version.
432
+ * @example 0.1.0
433
+ * @example 0.1.0-<heads> (in-database, versioned by automerge heads)
434
+ *
435
+ * The registry-provenance semver lives in `EntityMeta.version`; unversioned
436
+ * drafts default to {@link DRAFT_VERSION} (`'0.0.0'`). In-database entities are
437
+ * additionally versioned by their automerge heads, which are exposed as the
438
+ * semver pre-release tag (`<semver>-<heads>`). In-memory declarations have no
439
+ * heads and surface the bare semver. Read the registry semver alone via
440
+ * `Type.getMeta(input).version`.
131
441
  */
132
- // TODO(dmaretskyi): I have to redefine the type here so that the definition uses symbols from @dxos/echo/Relation.
133
- export const Relation: {
134
- <Source extends EffectSchema.Schema.AnyNoContext, Target extends EffectSchema.Schema.AnyNoContext>(
135
- opts: EchoSchema.EchoRelationOptions<Source, Target>,
136
- ): <Self extends EffectSchema.Schema.Any>(self: Self) => relation<Self, Source, Target>;
137
- } = EchoSchema.EchoRelation as any;
442
+ export const getVersion = (input: AnyEntity): string => {
443
+ const meta = internal.getMetaChecked(input);
444
+ // As with `getTypename`: `meta.version` is a denormalized copy; the
445
+ // authoritative semver lives in `jsonSchema.version`. Prefer meta, fall back
446
+ // to jsonSchema (always present on persisted types, survives serialization),
447
+ // then to `DRAFT_VERSION` for unversioned drafts.
448
+ const semver = (meta.version as string | undefined) ?? input.jsonSchema?.version ?? DRAFT_VERSION;
449
+ invariant(typeof semver === 'string' && semver.match(/^\d+\.\d+\.\d+$/), 'Invalid version');
450
+ // In-database entities are versioned by their automerge heads; expose them as
451
+ // the semver pre-release tag. In-memory drafts carry no heads → bare semver.
452
+ const heads = internal.version(input).automergeHeads;
453
+ if (heads != null && heads.length > 0) {
454
+ return `${semver}-${[...heads].sort().join('.')}`;
455
+ }
456
+ return semver;
457
+ };
138
458
 
139
459
  /**
140
- * Relation schema type definitions.
460
+ * Strip URI prefixes (`dxn:`, `echo:/`, `echo://`) from a typename string.
461
+ * Typename is a bare identifier — callers reading from meta or from a
462
+ * caller-supplied seed value shouldn't propagate URI prefixes downstream.
141
463
  */
142
- export namespace Relation {
143
- /**
144
- * Type that represents an arbitrary schema type of a relation.
145
- * NOTE: This is not an instance type.
146
- */
147
- // TODO(dmaretskyi): If schema was covariant, we could specify props in here, like `id: ObjectId`.
148
- export type Any = EffectSchema.Schema.AnyNoContext;
464
+ const stripTypenamePrefix = (value: string): string => {
465
+ if (value.startsWith('dxn:')) {
466
+ return value.slice('dxn:'.length);
467
+ }
468
+ if (value.startsWith('echo://')) {
469
+ return value.slice('echo://'.length);
470
+ }
471
+ if (value.startsWith('echo:/')) {
472
+ return value.slice('echo:/'.length);
473
+ }
474
+ return value;
475
+ };
149
476
 
150
- /**
151
- * Get relation source type.
152
- */
153
- export type Source<A> = A extends Relation.Endpoints<infer S, infer _T> ? S : never;
477
+ /**
478
+ * Type predicate: true iff the value is any type-kind ECHO entity — a static
479
+ * `Type.Obj` / `Type.Relation` produced by `Type.makeObject` / `Type.makeRelation`, a
480
+ * static meta `Type.Type`, or a persisted `Type.Type` returned by the database.
481
+ *
482
+ * All three branches stamp `[KindId] = Type`, so this is a single brand check.
483
+ * Use {@link isObject} / {@link isRelation} / {@link isTypeKind}
484
+ * when you need to discriminate further; use {@link getDatabase} when you mean
485
+ * "is this a db-attached type" (vs. an in-memory declaration).
486
+ */
487
+ export const isType = (value: unknown): value is AnyEntity =>
488
+ internal.getEntityKindBrand(value) === internal.EntityKind.Type;
154
489
 
155
- /**
156
- * Get relation target type.
157
- */
158
- export type Target<A> = A extends Relation.Endpoints<infer _S, infer T> ? T : never;
490
+ /**
491
+ * Get the database the type entity belongs to, or `undefined` if it is an
492
+ * in-memory declaration (`Type.makeObject` / `Type.makeRelation` result) not
493
+ * yet attached to a database. Mirrors `Obj.getDatabase` / `Relation.getDatabase`.
494
+ *
495
+ * Database attachment is the canonical discriminator between in-memory and
496
+ * in-database type entities — both are live reactive `TypeSchema` instances and
497
+ * are otherwise indistinguishable.
498
+ */
499
+ export const getDatabase = (input: AnyEntity): Database.Database | undefined => internal.getDatabase(input);
159
500
 
160
- export type Endpoints<Source, Target> = {
161
- [RelationModule.Source]: Source;
162
- [RelationModule.Target]: Target;
163
- };
501
+ /**
502
+ * Mutable meta type returned by `Type.getMeta` inside a `Type.update` callback.
503
+ * Mirrors `Obj.Meta` / `Relation.Meta` — `Type.Type` is an Entity like its
504
+ * siblings, so its meta is the same `EntityMeta` record:
505
+ * `{ keys, tags?, key?, version? }`.
506
+ *
507
+ * `key` / `version` here are the canonical registry-provenance pair
508
+ * (typename + semver) on persisted Type.Type entities; they are absent on
509
+ * unnamed drafts. Use {@link getTypename} / {@link getVersion} when you want
510
+ * a non-`undefined` value with id / {@link DRAFT_VERSION} fallbacks.
511
+ */
512
+ export type Meta = internal.Meta;
513
+
514
+ /**
515
+ * Deeply read-only version of {@link Meta}.
516
+ * Prevents mutation at all nesting levels (e.g., `meta.keys.push()` is a TS error).
517
+ */
518
+ export type ReadonlyMeta = internal.ReadonlyMeta;
519
+
520
+ /**
521
+ * Returns the entity's `EntityMeta`. Same semantics as `Obj.getMeta` /
522
+ * `Relation.getMeta` — `Type.Type` is an Entity and carries the canonical
523
+ * `EntityMeta` directly. Returns mutable meta when passed a mutable type
524
+ * (inside a `Type.update` callback), read-only meta otherwise.
525
+ *
526
+ * For persisted Type entities, `meta.key` holds the typename and
527
+ * `meta.version` holds the semver. Use {@link getTypename} / {@link getVersion}
528
+ * if you want the helpers' id / {@link DRAFT_VERSION} fallbacks for drafts.
529
+ *
530
+ * Both persisted and in-memory type entities (`Type.makeObject` /
531
+ * `Type.makeRelation` results) carry their `EntityMeta` via `[MetaId]`, so the
532
+ * lookup is uniform.
533
+ */
534
+ export function getMeta(entity: internal.Mutable<AnyEntity>): Meta;
535
+ export function getMeta(entity: Mutable): Meta;
536
+ export function getMeta(entity: AnyEntity): ReadonlyMeta;
537
+ export function getMeta(entity: AnyEntity | internal.Mutable<AnyEntity> | Mutable): ReadonlyMeta | Meta {
538
+ // The `Mutable` overload accepts the narrowed view passed to `Type.update`
539
+ // callbacks; at runtime that draft IS the underlying persisted Type entity,
540
+ // so the same `MetaId` lookup works.
541
+ assertArgument(isType(entity), 'entity', 'Expected a Type entity.');
542
+ // Both persisted and in-memory type entities carry runtime `EntityMeta` via
543
+ // `[MetaId]`, so the lookup is uniform.
544
+ return internal.getMetaChecked(entity);
164
545
  }
165
546
 
166
- //
167
- // Ref
168
- //
547
+ /**
548
+ * Get the display label of a type entity.
549
+ * Reads the field(s) nominated by the type's {@link LabelAnnotation} (e.g. `name` on persisted schemas).
550
+ * Returns `undefined` if no label field is populated.
551
+ */
552
+ export const getLabel = (entity: AnyEntity, options?: internal.GetLabelOptions): string | undefined =>
553
+ internal.getLabel(entity, options);
169
554
 
170
555
  /**
171
- * Return type of the `Ref` schema constructor.
556
+ * String key used to phantom-carry the instance type produced by a `Type.Type`.
557
+ * Used by `Type.InstanceType<typeof Foo>` to recover the schema instance type
558
+ * since `Type.makeObject(dxn)` does not return a `Schema.Schema`.
172
559
  *
173
- * This typedef avoids `TS4023` error (name from external module cannot be used named).
174
- * See Effect's note on interface types.
560
+ * Re-exported from the internal types layer so both `Type.ts` and internal
561
+ * helpers (`makeObject`, `createObject`) reference the same phantom key.
175
562
  */
176
- export interface ref<TargetSchema extends EffectSchema.Schema.Any>
177
- extends EchoSchema.Ref$<EffectSchema.Schema.Type<TargetSchema>> {}
563
+ export const InstancePhantomId = internal.InstancePhantomId;
564
+ export type InstancePhantomId = internal.InstancePhantomId;
178
565
 
179
566
  /**
180
- * Ref schema.
567
+ * Sibling of {@link Obj} / {@link Relation} for the third ECHO entity kind:
568
+ * **type-kind** entities (meta-schemas). The singleton {@link Type} const is
569
+ * the canonical example — it describes stored type definitions themselves.
570
+ *
571
+ * Not a `Schema.Schema`. Use `Type.getSchema(value)` to obtain the underlying
572
+ * Effect Schema and `Type.update(value, draft => ...)` to mutate.
573
+ *
574
+ * `A` is the instance-type phantom — what `Obj.make(value, ...)` would produce.
575
+ * Merged with the `Type` const value via TypeScript declaration merging.
181
576
  */
182
- export const Ref: <S extends Obj.Any>(schema: S) => ref<S> = EchoSchema.Ref;
577
+ export interface Type<A = unknown> extends BaseTypeEntity<A & EntityModule.OfKind<typeof EntityModule.Kind.Type>> {
578
+ /** Schema-kind brand (type — the meta-schema kind). */
579
+ readonly [internal.SchemaKindId]: internal.EntityKind.Type;
580
+
581
+ /** Source Effect Schema — used internally by `Type.getSchema(self)`. */
582
+ readonly [internal.StaticTypeSchemaSlot]: Schema.Schema.AnyNoContext;
583
+ }
183
584
 
184
- export interface Ref<T> extends EffectSchema.SchemaClass<EchoSchema.Ref<T>, EncodedReference> {}
585
+ /**
586
+ * Instance type produced by a Type entity.
587
+ *
588
+ * Accepts ONLY {@link AnyEntity} inputs — `Type.Obj`, `Type.Relation`, or
589
+ * `Type.Type`. Raw Effect `Schema.Schema` values are rejected: for those, use
590
+ * `Schema.Schema.Type<typeof Foo>` directly. This separation keeps the type
591
+ * system honest about which values represent ECHO entities versus plain
592
+ * Effect schemas.
593
+ *
594
+ * Dispatches on the entity kind:
595
+ * - `Relation<Props, S, T>` → `Endpoints<S,T> & Props & OfKind<Relation>`
596
+ * - `Obj<A>` → `A & OfKind<Object>`
597
+ * - `Type<A>` → `A & OfKind<Type>`
598
+ */
599
+ export type InstanceType<T extends AnyEntity> =
600
+ T extends Relation<infer Props, infer Source, infer Target, any>
601
+ ? RelationModule.Endpoints<Source, Target> & Props & EntityModule.OfKind<typeof EntityModule.Kind.Relation>
602
+ : T extends Obj<infer A, any>
603
+ ? A & EntityModule.OfKind<typeof EntityModule.Kind.Object>
604
+ : T extends Type<infer A>
605
+ ? A & EntityModule.OfKind<typeof EntityModule.Kind.Type>
606
+ : never;
185
607
 
186
- // TODO(buurdon): Move to Ref?
187
- export namespace Ref {
188
- /**
189
- * Type that represents an arbitrary schema type of a reference.
190
- * NOTE: This is not an instance type.
191
- */
192
- export type Any = EffectSchema.Schema<EchoSchema.Ref<any>, EncodedReference>;
608
+ /**
609
+ * Returns the Effect Schema for a type entity.
610
+ *
611
+ * - For static `Type.Obj` / `Type.Relation` entities the source Effect Schema is
612
+ * read from a hidden slot these overloads preserve the instance type.
613
+ * - For `Type.Type` entities (the meta-schema kind) the schema is rebuilt from
614
+ * `type.jsonSchema`; the instance type isn't statically knowable so the wide
615
+ * `AnyEntity` overload widens to `Schema.Schema.AnyNoContext`.
616
+ *
617
+ * Always call this when you need to interact with the Effect Schema API
618
+ * (e.g. before passing to Effect.Schema functions). For ECHO-side APIs
619
+ * (`Obj.make`, `Filter.type`, `Ref`) pass the type entity directly.
620
+ *
621
+ * Only accepts `Type.AnyEntity` — raw `Schema.Schema` values can be used
622
+ * directly without unwrapping.
623
+ */
624
+ export function getSchema<T extends AnyObj>(type: T): Schema.Schema<InstanceType<T>>;
625
+ export function getSchema<T extends AnyRelation>(type: T): Schema.Schema<InstanceType<T>>;
626
+ export function getSchema(type: AnyEntity): Schema.Schema.AnyNoContext;
627
+ export function getSchema(type: AnyEntity): Schema.Schema.AnyNoContext {
628
+ // Static `Type.Type` entities carry the source Effect Schema on a hidden
629
+ // slot so we can return it without round-tripping through JsonSchema.
630
+ const staticSchema = internal.getStaticTypeSchema(type);
631
+ if (staticSchema != null) {
632
+ return staticSchema;
633
+ }
634
+ assertArgument(isType(type), 'type', 'Expected a Type entity.');
635
+ // Persisted `Type.Type` entity — build the Effect Schema from its stored
636
+ // jsonSchema and re-attach the TypeIdentifierAnnotation so the rebuilt
637
+ // schema's URI (via getSchemaURI) matches the entity's local EID.
638
+ const rebuilt = internal.toEffectSchema(type.jsonSchema);
639
+ if (typeof type.id === 'string') {
640
+ return rebuilt.annotations({
641
+ [internal.TypeIdentifierAnnotationId]: EID.make({ entityId: type.id }),
642
+ });
643
+ }
644
+ return rebuilt;
193
645
  }
194
646
 
195
647
  /**
196
- * Gets the full DXN of the schema.
197
- * Will include the version if it's a `type` DXN.
198
- * @example "dxn:example.com/type/Person:0.1.0"
199
- * @example "dxn:echo:SSSSSSSSSS:XXXXXXXXXXXXX"
648
+ * Mutable view of a `Type.Type` — the shape passed to the `Type.update` callback.
649
+ * Outside `Type.update`, `Type.Type` fields are read-only (both at the type level
650
+ * and at runtime — direct assignment throws). Use this to constrain mutation to
651
+ * the change context, analogous to `Obj.update(obj, (draft) => ...)`.
652
+ *
653
+ * NOTE: `typename` and `version` are intentionally absent — they live in
654
+ * `EntityMeta` (`key` / `version` — the canonical registry-provenance pair).
655
+ * Read them via {@link getTypename} / {@link getVersion} / {@link getMeta};
656
+ * `typename` is treated as immutable on persisted entities.
657
+ *
658
+ * Unlike `Obj.update` — whose mutable view is inferred as `Mutable<A>` over the
659
+ * whole instance type because every data field is editable — a `Type.Type`
660
+ * exposes only `name` and `jsonSchema` for mutation. The rest of its shape
661
+ * (`id`, the `[KindId]` / `[SchemaKindId]` brands, and `typename` / `version`
662
+ * in meta) is immutable, so this view is declared explicitly rather than
663
+ * derived from `InstanceType<Type.Type>`.
200
664
  */
201
- export const getDXN = (schema: Obj.Any | Relation.Any): Keys.DXN | undefined => {
202
- return EchoSchema.getSchemaDXN(schema);
203
- };
665
+ export interface Mutable {
666
+ name?: string;
667
+ // Deep-mutable within the change context — `Type.update`'s purpose is to allow
668
+ // mutation, so the draft exposes `jsonSchema` as writable (the readonly
669
+ // `JsonSchemaType` would force callers to cast).
670
+ jsonSchema: Types.DeepMutable<internal.JsonSchemaType>;
671
+ }
204
672
 
205
673
  /**
206
- * @param schema - Schema to get the typename from.
207
- * @returns The typename of the schema. Example: `example.com/type/Person`.
674
+ * Perform mutations on a `Type.Type` within a change context.
675
+ *
676
+ * The callback receives a {@link Mutable} view of the type — direct mutation of
677
+ * a `Type.Type` outside `Type.update` throws at runtime, mirroring `Obj.update`.
678
+ * Delegates to the same automerge-transaction primitive `Obj.update(obj, cb)` uses.
208
679
  */
209
- export const getTypename = (schema: Obj.Any | Relation.Any): string => {
210
- const typename = EchoSchema.getSchemaTypename(schema);
211
- invariant(typeof typename === 'string' && !typename.startsWith('dxn:'), 'Invalid typename');
212
- return typename;
680
+ export const update = (type: AnyEntity, callback: (mutable: Mutable) => void): void => {
681
+ // `Type.Type` is an ECHO object; the change machinery is the same as `Obj.update`.
682
+ internal.change(type, callback as internal.ChangeCallback<AnyEntity>);
213
683
  };
214
684
 
685
+ //
686
+ // Field-level helpers for mutating persisted types.
687
+ // These are thin wrappers over `Type.update` plus the JsonSchema manipulation
688
+ // utilities. Callers pass a persisted `Type.Type` (e.g. one returned by
689
+ // `db.addType(schemaEntity)`) and the helper drives the change context.
690
+ //
691
+
215
692
  /**
216
- * Gets the version of the schema.
217
- * @example 0.1.0
693
+ * Add fields to a persisted type's schema.
694
+ * @throws if the type is not persisted.
218
695
  */
219
- export const getVersion = (schema: Obj.Any | Relation.Any): string => {
220
- const version = EchoSchema.getSchemaVersion(schema);
221
- invariant(typeof version === 'string' && version.match(/^\d+\.\d+\.\d+$/), 'Invalid version');
222
- return version;
696
+ export const addFields = (type: AnyEntity, fields: Schema.Struct.Fields): void => {
697
+ const extended = typeInternal.addFieldsToSchema(getSchema(type), fields);
698
+ update(type, (draft) => {
699
+ draft.jsonSchema = internal.toJsonSchema(extended);
700
+ });
223
701
  };
224
702
 
225
703
  /**
226
- * @returns True if the schema is mutable.
704
+ * Replace existing fields on a persisted type's schema.
705
+ * @throws if the type is not persisted.
227
706
  */
228
- export const isMutable = EchoSchema.isMutable;
707
+ export const updateFields = (type: AnyEntity, fields: Schema.Struct.Fields): void => {
708
+ const updated = typeInternal.updateFieldsInSchema(getSchema(type), fields);
709
+ update(type, (draft) => {
710
+ draft.jsonSchema = internal.toJsonSchema(updated);
711
+ });
712
+ };
229
713
 
230
714
  /**
231
- * ECHO type metadata.
715
+ * Rename a field on a persisted type's schema.
716
+ * @throws if the type is not persisted.
232
717
  */
233
- export type Meta = EchoSchema.TypeAnnotation;
718
+ export const updateFieldPropertyName = (
719
+ type: Type,
720
+ { before, after }: { before: PropertyKey; after: PropertyKey },
721
+ ): void => {
722
+ const renamed = typeInternal.updateFieldNameInSchema(getSchema(type), { before, after });
723
+ update(type, (draft) => {
724
+ draft.jsonSchema = internal.toJsonSchema(renamed);
725
+ });
726
+ };
234
727
 
235
728
  /**
236
- * Gets the meta data of the schema.
729
+ * Remove fields from a persisted type's schema.
730
+ * @throws if the type is not persisted.
237
731
  */
238
- export const getMeta = (schema: Obj.Any | Relation.Any): Meta | undefined => {
239
- return EchoSchema.getTypeAnnotation(schema);
732
+ export const removeFields = (type: AnyEntity, fieldNames: string[]): void => {
733
+ const removed = typeInternal.removeFieldsFromSchema(getSchema(type), fieldNames);
734
+ update(type, (draft) => {
735
+ draft.jsonSchema = internal.toJsonSchema(removed);
736
+ });
240
737
  };
241
-
242
- // TODO(dmaretskyi): Remove re-exports.
243
- export { SpaceId, ObjectId, DXN } from '@dxos/keys';
244
-
245
- export { Format, JsonSchemaType as JsonSchema, toEffectSchema, toJsonSchema } from './internal';