@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
@@ -0,0 +1,140 @@
1
+ //
2
+ // Copyright 2025 DXOS.org
3
+ //
4
+
5
+ import { raise } from '@dxos/debug';
6
+ import { assertArgument, failedInvariant } from '@dxos/invariant';
7
+ import { EntityId } from '@dxos/keys';
8
+
9
+ import type * as Type from '../../Type';
10
+ import { getSchemaURI, getTypeAnnotation, setTypename } from '../Annotation';
11
+ import { defineHiddenProperty } from '../common/proxy';
12
+ import {
13
+ EntityKind,
14
+ KindId,
15
+ SchemaKindId,
16
+ StaticTypeSchemaSlot,
17
+ getStaticTypeSchema,
18
+ setSchema,
19
+ setType,
20
+ } from '../common/types';
21
+ import { type EntityMeta } from '../common/types/meta';
22
+ import { MetaId } from '../common/types/model-symbols';
23
+ import {
24
+ RelationSourceDXNId,
25
+ RelationSourceId,
26
+ RelationTargetDXNId,
27
+ RelationTargetId,
28
+ assertObjectModel,
29
+ getObjectEchoUri,
30
+ } from '../Entity';
31
+ import { attachedTypedObjectInspector } from './inspect';
32
+ import { attachTypedJsonSerializer } from './json-serializer';
33
+
34
+ // Omits the brand slots — those get stamped on the instance by the entity
35
+ // handler (KindId via setKind, SchemaKindId derived in the proxy `get` trap
36
+ // from kind + jsonSchema.entityKind, StaticTypeSchemaSlot lazily via the
37
+ // proxy), not supplied by the caller. Allows `[Obj.Meta]` (MetaId symbol) for
38
+ // seeding registry-provenance meta at construction (mirrors `Obj.make`).
39
+ export type CreateObjectProps<T> = (T extends { id: string }
40
+ ? Omit<T, 'id' | KindId | SchemaKindId | StaticTypeSchemaSlot> & { id?: string }
41
+ : Omit<T, KindId | SchemaKindId | StaticTypeSchemaSlot>) & {
42
+ readonly [MetaId]?: Partial<EntityMeta>;
43
+ };
44
+
45
+ /**
46
+ * Creates a new object instance from a schema and data, without signal reactivity.
47
+ * This static version creates plain JavaScript objects that are not reactive/observable.
48
+ * For reactive objects that automatically update UI when changed, use the regular live() function.
49
+ *
50
+ * @param schema - The Effect schema that defines the object's structure and type, piped into EchoObjectSchema
51
+ * @param data - The data to initialize the object with. The id and @type fields are handled automatically.
52
+ * @returns A new non-reactive object instance conforming to the schema
53
+ * @throws {Error} If the schema is not an object schema
54
+ * @throws {TypeError} If data contains an @type field
55
+ *
56
+ * @example
57
+ * ```ts
58
+ * const Contact = Schema.Struct({
59
+ * name: Schema.String,
60
+ * email: Schema.String,
61
+ * }).pipe(Type.makeObject(DXN.make('com.example.type.person', '0.1.0')))
62
+ *
63
+ * const contact = createObject(Contact, {
64
+ * name: "John",
65
+ * email: "john@example.com",
66
+ * })
67
+ * ```
68
+ */
69
+ // TODO(burdon): Make internal.
70
+ export const createObject: {
71
+ <T extends Type.AnyEntity>(input: T, props: NoInfer<CreateObjectProps<Type.InstanceType<T>>>): Type.InstanceType<T>;
72
+ } = (input: any, props: any): any => {
73
+ // `Type.Type` entities aren't `Schema.Schema` themselves; read the source
74
+ // schema off the hidden slot (persisted entities synthesize it lazily via
75
+ // the proxy `get` trap).
76
+ const schema = getStaticTypeSchema(input) ?? failedInvariant('Type entity is missing its source schema');
77
+ const annotation = getTypeAnnotation(schema);
78
+ if (!annotation) {
79
+ throw new Error('Schema is not an ECHO schema');
80
+ }
81
+ assertArgument(!('@type' in props), 'data', '@type is not allowed');
82
+ assertArgument(!(RelationSourceDXNId in props), 'data', 'Relation source DXN is not allowed in the constructor');
83
+ assertArgument(!(RelationTargetDXNId in props), 'data', 'Relation target DXN is not allowed in the constructor');
84
+ assertArgument(
85
+ RelationSourceId in props === RelationTargetId in props,
86
+ 'data',
87
+ 'Relation source and target must be provided together',
88
+ );
89
+
90
+ // Pull `[Obj.Meta]` (MetaId-symbol) off props before spreading so it doesn't
91
+ // leak into data. Callers use this to seed registry-provenance meta fields
92
+ // (`key`, `version`) and foreign keys / tags at construction time, mirroring
93
+ // `Obj.make`'s symbol-keyed meta convention.
94
+ const metaOverride = props[MetaId];
95
+ if (metaOverride !== undefined) {
96
+ delete props[MetaId];
97
+ }
98
+
99
+ // Raw object.
100
+ const obj = { ...props, id: props.id ?? EntityId.random() };
101
+
102
+ // Metadata. Instance-kind is read from the schema's TypeAnnotation (set by
103
+ // EchoObjectSchema / EchoRelationSchema / EchoTypeKindSchema): instances of
104
+ // a type-kind meta-schema are themselves type-kind entities, etc. The
105
+ // RelationSourceId-in-props check covers the legacy path where the schema
106
+ // annotation isn't authoritative.
107
+ const kind =
108
+ annotation.kind === EntityKind.Type
109
+ ? EntityKind.Type
110
+ : annotation.kind === EntityKind.Relation || RelationSourceId in props
111
+ ? EntityKind.Relation
112
+ : EntityKind.Object;
113
+ defineHiddenProperty(obj, KindId, kind);
114
+ defineHiddenProperty(obj, MetaId, {
115
+ ...metaOverride,
116
+ keys: metaOverride?.keys ?? [],
117
+ tags: metaOverride?.tags ?? [],
118
+ annotations: metaOverride?.annotations ?? {},
119
+ });
120
+ setSchema(obj, schema);
121
+ // If the caller passed a type entity (recognised via the schema slot), keep
122
+ // a reference to it on the instance for `Obj.getType` / `Relation.getType`.
123
+ if (input !== schema) {
124
+ setType(obj, input);
125
+ }
126
+ setTypename(obj, getSchemaURI(schema) ?? failedInvariant('Missing schema URI'));
127
+ attachTypedJsonSerializer(obj);
128
+ attachedTypedObjectInspector(obj);
129
+
130
+ // Relation.
131
+ if (kind === EntityKind.Relation) {
132
+ const sourceDXN = getObjectEchoUri(props[RelationSourceId]) ?? raise(new Error('Unresolved relation source'));
133
+ const targetDXN = getObjectEchoUri(props[RelationTargetId]) ?? raise(new Error('Unresolved relation target'));
134
+ defineHiddenProperty(obj, RelationSourceDXNId, sourceDXN);
135
+ defineHiddenProperty(obj, RelationTargetDXNId, targetDXN);
136
+ }
137
+
138
+ assertObjectModel(obj);
139
+ return obj;
140
+ };
@@ -0,0 +1,19 @@
1
+ //
2
+ // Copyright 2025 DXOS.org
3
+ //
4
+
5
+ import { type AnyProperties } from '../common/types';
6
+ import { ObjectDeletedId } from '../Entity';
7
+
8
+ /**
9
+ * @returns `true` if the object has been marked as deleted.
10
+ */
11
+ export const isDeleted = (obj: AnyProperties): boolean => {
12
+ if ((obj as any)[ObjectDeletedId] === undefined) {
13
+ // TODO(dmaretskyi): Return to prior behavior of throwing.
14
+ // throw new Error('Object does not support deletion marker');
15
+ return false;
16
+ }
17
+
18
+ return (obj as any)[ObjectDeletedId] ?? false;
19
+ };
@@ -0,0 +1,14 @@
1
+ //
2
+ // Copyright 2024 DXOS.org
3
+ //
4
+
5
+ export * from './common';
6
+ export * from './create-object';
7
+ export * from './deleted';
8
+ export * from './json-serializer';
9
+ export * from './schema-validator';
10
+ export * from './set-value';
11
+ export * from './snapshot';
12
+ export * from './typed-object';
13
+ export * from './atoms';
14
+ export * from './clone';
@@ -6,10 +6,10 @@ import type { InspectOptionsStylized, inspect as inspectFn } from 'node:util';
6
6
 
7
7
  import { type CustomInspectFunction, inspectCustom } from '@dxos/debug';
8
8
 
9
- import { type AnyEchoObject } from '../types';
10
-
11
- import { ATTR_META, ATTR_TYPE, MetaId } from './model';
12
- import { getType } from './typename';
9
+ import { getTypeURI } from '../Annotation';
10
+ import { ATTR_TYPE, type AnyEntity } from '../common/types';
11
+ import { ATTR_META } from '../common/types/meta';
12
+ import { MetaId } from '../common/types/model-symbols';
13
13
 
14
14
  /*
15
15
  * @internal
@@ -29,8 +29,8 @@ export const attachedTypedObjectInspector = (obj: any) => {
29
29
  };
30
30
 
31
31
  // NOTE: KEEP as function.
32
- const typedObjectInspectFunction: CustomInspectFunction<AnyEchoObject> = function (
33
- this: AnyEchoObject,
32
+ const typedObjectInspectFunction: CustomInspectFunction<AnyEntity> = function (
33
+ this: AnyEntity,
34
34
  depth: number,
35
35
  options: InspectOptionsStylized,
36
36
  inspect: typeof inspectFn,
@@ -39,7 +39,7 @@ const typedObjectInspectFunction: CustomInspectFunction<AnyEchoObject> = functio
39
39
  return inspect(
40
40
  {
41
41
  id,
42
- [ATTR_TYPE]: getType(this),
42
+ [ATTR_TYPE]: getTypeURI(this),
43
43
  ...props,
44
44
  [ATTR_META]: (this as any)[MetaId], // TODO(dmaretskyi): Couldn't use getMeta since that throw's if the object has no meta.
45
45
  },
@@ -0,0 +1,199 @@
1
+ //
2
+ // Copyright 2025 DXOS.org
3
+ //
4
+
5
+ import * as Schema from 'effect/Schema';
6
+ import { describe, expect, test } from 'vitest';
7
+
8
+ import { DXN, EID } from '@dxos/keys';
9
+
10
+ import * as Obj from '../../Obj';
11
+ import { TestSchema } from '../../testing';
12
+ import * as Type from '../../Type';
13
+ import { getTypeURI, getTypename } from '../Annotation';
14
+ import { getMetaChecked } from '../common/api';
15
+ import { ATTR_TYPE, EntityKind, KindId, TypeId, getSchema } from '../common/types';
16
+ import { MetaId } from '../common/types/model-symbols';
17
+ import { RelationSourceId, RelationTargetId, getObjectEchoUri } from '../Entity';
18
+ import * as JsonSchema from '../JsonSchema';
19
+ import { Ref, StaticRefResolver } from '../Ref';
20
+ import { createObject } from './create-object';
21
+ import { objectFromJSON, objectToJSON } from './json-serializer';
22
+
23
+ describe('Object JSON serializer', () => {
24
+ test('should serialize and deserialize object', async () => {
25
+ const contact = Obj.make(TestSchema.Person, { name: 'Alice' });
26
+ Obj.update(contact, (contact) => {
27
+ getMetaChecked(contact).keys.push({ id: '12345', source: 'example.com' });
28
+ });
29
+
30
+ const task = createObject(TestSchema.Task, {
31
+ title: 'Fix the tests',
32
+ assignee: Ref.make(contact),
33
+ });
34
+
35
+ const contactJson = objectToJSON(contact);
36
+ const taskJson = objectToJSON(task);
37
+
38
+ expect(contactJson.id).toBe(contact.id);
39
+ expect(contactJson[ATTR_TYPE]).toEqual(Type.getURI(TestSchema.Person).toString());
40
+ expect(contactJson.name).toEqual('Alice');
41
+
42
+ expect(taskJson.id).toBe(task.id);
43
+ expect(taskJson[ATTR_TYPE]).toEqual(Type.getURI(TestSchema.Task).toString());
44
+ expect(taskJson.title).toEqual('Fix the tests');
45
+ expect(taskJson.assignee).toEqual({ '/': EID.make({ entityId: contact.id }) });
46
+
47
+ const refResolver = new StaticRefResolver()
48
+ .addSchema(TestSchema.Person)
49
+ .addSchema(TestSchema.Task)
50
+ .addObject(contact)
51
+ .addObject(task);
52
+
53
+ const contactFromJson = (await objectFromJSON(contactJson, { refResolver })) as TestSchema.Person;
54
+ const taskFromJson = (await objectFromJSON(taskJson, { refResolver })) as TestSchema.Task;
55
+
56
+ expect(contactFromJson.id).toBe(contact.id);
57
+ expect(contactFromJson.name).toBe('Alice');
58
+ expect((contactFromJson as any)[TypeId]).toEqual(Type.getURI(TestSchema.Person));
59
+ expect((contactFromJson as any)[KindId]).toBe(EntityKind.Object);
60
+ expect((contactFromJson as any)[RelationSourceId]).toBeUndefined();
61
+ expect((contactFromJson as any)[RelationTargetId]).toBeUndefined();
62
+ expect((contactFromJson as any)[MetaId]).toEqual({
63
+ keys: [
64
+ {
65
+ id: '12345',
66
+ source: 'example.com',
67
+ },
68
+ ],
69
+ tags: [],
70
+ annotations: {},
71
+ });
72
+ expect(getTypeURI(contactFromJson)?.toString()).toBe(Type.getURI(TestSchema.Person).toString());
73
+ expect(getTypename(contactFromJson)).toBe(Type.getTypename(TestSchema.Person));
74
+ expect(getObjectEchoUri(contactFromJson)?.toString()).toEqual(getObjectEchoUri(contact)?.toString());
75
+ expect(getSchema(contactFromJson)).toEqual(Type.getSchema(TestSchema.Person));
76
+
77
+ expect(taskFromJson.id).toBe(task.id);
78
+ expect(taskFromJson.title).toBe('Fix the tests');
79
+ expect(taskFromJson.assignee!.uri).toEqual(EID.make({ entityId: contact.id }));
80
+ expect(taskFromJson.assignee!.target).toEqual(contact);
81
+ expect(await taskFromJson.assignee!.load()).toEqual(contact);
82
+ expect((taskFromJson as any)[TypeId]).toEqual(Type.getURI(TestSchema.Task));
83
+ expect((taskFromJson as any)[KindId]).toBe(EntityKind.Object);
84
+ expect((taskFromJson as any)[RelationSourceId]).toBeUndefined();
85
+ expect((taskFromJson as any)[RelationTargetId]).toBeUndefined();
86
+ expect((taskFromJson as any)[MetaId]).toEqual({ keys: [], tags: [], annotations: {} });
87
+ expect(getSchema(taskFromJson)).toEqual(Type.getSchema(TestSchema.Task));
88
+ });
89
+
90
+ test('serialize with unresolved schema', async () => {
91
+ const contact = createObject(TestSchema.Person, { name: 'Alice' });
92
+ const contactJson = objectToJSON(contact);
93
+ const contactFromJson: any = await objectFromJSON(contactJson);
94
+
95
+ expect(contactFromJson.id).toBe(contact.id);
96
+ expect(contactFromJson.name).toBe('Alice');
97
+ expect(getSchema(contactFromJson)).toBeUndefined();
98
+ expect(getTypename(contactFromJson)).toEqual(Type.getTypename(TestSchema.Person));
99
+ expect(getObjectEchoUri(contactFromJson)).toEqual(getObjectEchoUri(contact));
100
+ expect(getTypeURI(contactFromJson)).toEqual(Type.getURI(TestSchema.Person));
101
+ });
102
+
103
+ test('upgrades bare string tags to encoded references on deserialize', async () => {
104
+ const expando = Obj.make(TestSchema.Expando, { message: 'hi' });
105
+ const json = objectToJSON(expando) as any;
106
+ // Simulate data serialized before the tags-as-refs migration: bare id strings.
107
+ json['@meta'] = { keys: [], tags: ['echo:/TAGLEGACY'] };
108
+
109
+ const fromJson = (await objectFromJSON(json)) as any;
110
+ // Decodes to a materialized `Ref` (the shared ref codec), not a raw encoded reference.
111
+ expect(fromJson[MetaId].tags.map((ref: any) => ref.uri)).toEqual(['echo:/TAGLEGACY']);
112
+ });
113
+
114
+ test('deserializes expando without leaking internal json keys', async () => {
115
+ const expando = Obj.make(TestSchema.Expando, { message: 'local-only' });
116
+ const expandoJson = objectToJSON(expando);
117
+
118
+ const refResolver = new StaticRefResolver().addSchema(TestSchema.Expando);
119
+ const expandoFromJson = (await objectFromJSON(expandoJson, { refResolver })) as TestSchema.Expando;
120
+
121
+ expect(expandoFromJson.id).toBe(expando.id);
122
+ expect(expandoFromJson.message).toBe('local-only');
123
+ expect((expandoFromJson as any)[ATTR_TYPE]).toBeUndefined();
124
+ });
125
+
126
+ test('deserializes expando without schema resolver and without leaking internal json keys', async () => {
127
+ const expando = Obj.make(TestSchema.Expando, { message: 'local-only' });
128
+ const expandoJson = objectToJSON(expando);
129
+
130
+ const expandoFromJson = (await objectFromJSON(expandoJson)) as TestSchema.Expando;
131
+
132
+ expect(expandoFromJson.id).toBe(expando.id);
133
+ expect(expandoFromJson.message).toBe('local-only');
134
+ expect((expandoFromJson as any)[ATTR_TYPE]).toBeUndefined();
135
+ });
136
+
137
+ // `objectFromJSON` is the deserialization path for queue messages and devtools
138
+ // round-trips. For persisted `Type.Type` entities it must stamp `KindId = Type`
139
+ // (not Object), mirroring the kind resolution that `createObject` does for the
140
+ // in-memory path. Otherwise `Filter.type(Type.Type)` / `Type.isType` skip them.
141
+ describe('Type.Type round-trip', () => {
142
+ test('preserves KindId=Type for a persisted Type.Type entity', async ({ expect }) => {
143
+ const typeEntity = Type.makeObjectFromJsonSchema({
144
+ typename: 'com.example.type.regression',
145
+ version: '0.1.0',
146
+ jsonSchema: JsonSchema.toJsonSchema(Schema.Struct({ field: Schema.Number })),
147
+ name: 'Regression Type',
148
+ });
149
+
150
+ const typeJson = objectToJSON(typeEntity as any);
151
+ const refResolver = new StaticRefResolver().addSchema(Type.Type);
152
+ const reconstructed = (await objectFromJSON(typeJson, { refResolver })) as any;
153
+
154
+ expect(reconstructed[KindId]).toBe(EntityKind.Type);
155
+ expect(Type.isType(reconstructed)).toBe(true);
156
+ // `typename` lives in `EntityMeta.key` on persisted Type.Type entities
157
+ // — surfaced via `Type.getTypename`.
158
+ expect(Type.getTypename(reconstructed)).toBe('com.example.type.regression');
159
+ });
160
+ });
161
+
162
+ describe('Uint8Array', () => {
163
+ const Blob = Schema.Struct({
164
+ name: Schema.String,
165
+ bytes: Schema.Uint8ArrayFromSelf,
166
+ }).pipe(Type.makeObject(DXN.make('com.example.type.blob', '0.1.0')));
167
+ type Blob = Type.InstanceType<typeof Blob>;
168
+
169
+ test('round-trips Uint8Array field through JSON with schema', async ({ expect }) => {
170
+ const bytes = new Uint8Array([0, 1, 2, 3, 250, 251, 252, 253, 254, 255]);
171
+ const blob = Obj.make(Blob, { name: 'blob', bytes });
172
+
173
+ const blobJson = objectToJSON(blob);
174
+ // JSON must round-trip through stringify/parse without loss.
175
+ const roundTripped = JSON.parse(JSON.stringify(blobJson));
176
+
177
+ const refResolver = new StaticRefResolver().addSchema(Blob);
178
+ const blobFromJson = (await objectFromJSON(roundTripped, { refResolver })) as Blob;
179
+
180
+ expect(blobFromJson.name).toBe('blob');
181
+ expect(blobFromJson.bytes).toBeInstanceOf(Uint8Array);
182
+ expect(Array.from(blobFromJson.bytes)).toEqual(Array.from(bytes));
183
+ });
184
+
185
+ test('round-trips Uint8Array field through JSON without schema resolver', async ({ expect }) => {
186
+ const bytes = new Uint8Array([10, 20, 30, 40, 50]);
187
+ const blob = Obj.make(Blob, { name: 'blob', bytes });
188
+
189
+ const blobJson = objectToJSON(blob);
190
+ const roundTripped = JSON.parse(JSON.stringify(blobJson));
191
+
192
+ const blobFromJson = (await objectFromJSON(roundTripped)) as Blob;
193
+
194
+ expect(blobFromJson.name).toBe('blob');
195
+ expect(blobFromJson.bytes).toBeInstanceOf(Uint8Array);
196
+ expect(Array.from(blobFromJson.bytes)).toEqual(Array.from(bytes));
197
+ });
198
+ });
199
+ });
@@ -0,0 +1,278 @@
1
+ //
2
+ // Copyright 2025 DXOS.org
3
+ //
4
+
5
+ import * as Schema from 'effect/Schema';
6
+
7
+ import { raise } from '@dxos/debug';
8
+ import { type EncodedReference, EntityStructure, isEncodedReference } from '@dxos/echo-protocol';
9
+ import { assertArgument, invariant } from '@dxos/invariant';
10
+ import { EID, EntityId, URI } from '@dxos/keys';
11
+ import { assumeType, decodeUint8ArrayFromJson, deepMapValues, isEncodedUint8Array, visitValues } from '@dxos/util';
12
+
13
+ import type * as Database from '../../Database';
14
+ import type * as Obj from '../../Obj';
15
+ import { getTypeAnnotation, getTypeURI, setTypename } from '../Annotation';
16
+ import { attachTypedJsonSerializer, defineHiddenProperty, typedJsonSerializer } from '../common/proxy';
17
+ import {
18
+ ATTR_PARENT,
19
+ ATTR_TYPE,
20
+ type AnyEntity,
21
+ EntityKind,
22
+ KindId,
23
+ ParentId,
24
+ setSchema,
25
+ setType,
26
+ } from '../common/types';
27
+ import { ATTR_META, EntityMetaSchema } from '../common/types/meta';
28
+ import { MetaId } from '../common/types/model-symbols';
29
+ import {
30
+ ATTR_DELETED,
31
+ ATTR_RELATION_SOURCE,
32
+ ATTR_RELATION_TARGET,
33
+ ATTR_SELF_URI,
34
+ ATTR_SELF_URI_LEGACY,
35
+ ObjectDatabaseId,
36
+ type ObjectJSON,
37
+ RelationSourceDXNId,
38
+ RelationSourceId,
39
+ RelationTargetDXNId,
40
+ RelationTargetId,
41
+ SelfURIId,
42
+ assertObjectModel,
43
+ } from '../Entity';
44
+ import { Ref, type RefResolver, refFromEncodedReference, setRefResolver } from '../Ref';
45
+
46
+ // Re-export for backward compatibility.
47
+ export { attachTypedJsonSerializer };
48
+
49
+ type DeepReplaceRef<T> =
50
+ T extends Ref<any>
51
+ ? EncodedReference
52
+ : T extends object
53
+ ? {
54
+ [K in keyof T]: DeepReplaceRef<T[K]>;
55
+ }
56
+ : T;
57
+
58
+ type SerializedObject<T extends { id: string }> = {
59
+ [K in keyof T]: DeepReplaceRef<T[K]>;
60
+ } & ObjectJSON;
61
+
62
+ /**
63
+ * Converts object to it's JSON representation.
64
+ */
65
+ export const objectToJSON = <T extends AnyEntity>(obj: T): SerializedObject<T> => {
66
+ const typename = getTypeURI(obj);
67
+ invariant(typename && typeof typename === 'string');
68
+ return typedJsonSerializer.call(obj);
69
+ };
70
+
71
+ /**
72
+ * Creates an object from it's json representation.
73
+ * Performs schema validation.
74
+ * References and schema will be resolvable if the `refResolver` is provided.
75
+ * The function need to be async to support resolving the schema as well as the relation endpoints.
76
+ *
77
+ * @param jsonData - JSON representation of the object.
78
+ * @param options.refResolver - Resolver for references.
79
+ * @param options.uri - Override object URI.
80
+ * @param options.database - Database to associate with the object.
81
+ */
82
+ export const objectFromJSON = async (
83
+ jsonData: unknown,
84
+ {
85
+ refResolver,
86
+ uri,
87
+ database,
88
+ parent,
89
+ }: { refResolver?: RefResolver; uri?: URI.URI; database?: Database.Database; parent?: Obj.Unknown } = {},
90
+ ): Promise<AnyEntity> => {
91
+ assumeType<ObjectJSON>(jsonData);
92
+ assertArgument(typeof jsonData === 'object' && jsonData !== null, 'jsonData', 'expect object');
93
+ assertArgument(typeof jsonData[ATTR_TYPE] === 'string', 'jsonData[ATTR_TYPE]', 'expected object to have a type');
94
+ assertArgument(typeof jsonData.id === 'string', 'jsonData.id', 'expected object to have an id');
95
+
96
+ const type = URI.make(jsonData[ATTR_TYPE]);
97
+ const schema = await refResolver?.resolveSchema(type);
98
+ invariant(schema === undefined || Schema.isSchema(schema));
99
+ const decodedInput = restoreUint8Arrays(stripInternalJsonKeys(jsonData));
100
+
101
+ let obj: any;
102
+ if (schema != null) {
103
+ obj = await schema.pipe(Schema.decodeUnknownPromise)(decodedInput);
104
+ if (refResolver) {
105
+ setRefResolverOnData(obj, refResolver);
106
+ }
107
+ } else {
108
+ obj = decodeGeneric(decodedInput, { refResolver });
109
+ }
110
+
111
+ invariant(EntityId.isValid(obj.id), 'Invalid object id');
112
+ setTypename(obj, type);
113
+ if (schema) {
114
+ setSchema(obj, schema);
115
+ }
116
+ // Resolve and stamp the source type entity, if the resolver provides one.
117
+ // Lets `Obj.getType` / `Entity.getType` return a stable entity for objects
118
+ // loaded via `Obj.fromJSON` (serializer / queue paths).
119
+ if (refResolver?.resolveType) {
120
+ const typeEntity = await refResolver.resolveType(type);
121
+ if (typeEntity != null) {
122
+ setType(obj, typeEntity);
123
+ }
124
+ }
125
+
126
+ const isRelation =
127
+ typeof jsonData[ATTR_RELATION_SOURCE] === 'string' || typeof jsonData[ATTR_RELATION_TARGET] === 'string';
128
+ if (isRelation) {
129
+ const sourceDxn = jsonData[ATTR_RELATION_SOURCE] ?? raise(new TypeError('Missing relation source'));
130
+ const targetDxn = jsonData[ATTR_RELATION_TARGET] ?? raise(new TypeError('Missing relation target'));
131
+
132
+ const source = (await refResolver?.resolve(sourceDxn)) as AnyEntity | undefined;
133
+ const target = (await refResolver?.resolve(targetDxn)) as AnyEntity | undefined;
134
+
135
+ defineHiddenProperty(obj, KindId, EntityKind.Relation);
136
+ defineHiddenProperty(obj, RelationSourceDXNId, sourceDxn);
137
+ defineHiddenProperty(obj, RelationTargetDXNId, targetDxn);
138
+ defineHiddenProperty(obj, RelationSourceId, source);
139
+ defineHiddenProperty(obj, RelationTargetId, target);
140
+ } else {
141
+ // Honour the schema's TypeAnnotation kind — persisted `Type.Type` entities
142
+ // (e.g. dynamic schemas loaded from a snapshot import) must brand as
143
+ // `KindId = Type`, not Object, otherwise `Filter.type(Type.Type)` /
144
+ // `Type.isType` skip them and the schema registry never picks them up.
145
+ // Mirrors the kind resolution in `createObject` (the in-memory path).
146
+ const annotationKind = schema != null ? getTypeAnnotation(schema)?.kind : undefined;
147
+ defineHiddenProperty(obj, KindId, annotationKind === EntityKind.Type ? EntityKind.Type : EntityKind.Object);
148
+ }
149
+
150
+ if (typeof jsonData[ATTR_META] === 'object') {
151
+ const meta = await EntityMetaSchema.pipe(Schema.decodeUnknownPromise)(normalizeMeta(jsonData[ATTR_META]));
152
+ invariant(Array.isArray(meta.keys));
153
+ defineHiddenProperty(obj, MetaId, meta);
154
+ } else {
155
+ defineHiddenProperty(obj, MetaId, {
156
+ keys: [],
157
+ tags: [],
158
+ annotations: {},
159
+ });
160
+ }
161
+
162
+ if (jsonData[ATTR_PARENT]) {
163
+ const parentDxn = jsonData[ATTR_PARENT];
164
+ const resolvedParent = (await refResolver?.resolve(parentDxn)) as Obj.Unknown | undefined;
165
+ defineHiddenProperty(obj, ParentId, resolvedParent);
166
+ } else if (parent) {
167
+ defineHiddenProperty(obj, ParentId, parent);
168
+ }
169
+
170
+ if (uri) {
171
+ defineHiddenProperty(obj, SelfURIId, uri);
172
+ }
173
+
174
+ if (database) {
175
+ defineHiddenProperty(obj, ObjectDatabaseId, database);
176
+ }
177
+
178
+ assertObjectModel(obj);
179
+ invariant((obj as any)[ATTR_TYPE] === undefined, 'Invalid object model');
180
+ invariant((obj as any)[ATTR_META] === undefined, 'Invalid object model');
181
+ invariant((obj as any)[ATTR_DELETED] === undefined, 'Invalid object model');
182
+ invariant((obj as any)[ATTR_SELF_URI] === undefined, 'Invalid object model');
183
+ invariant((obj as any)[ATTR_SELF_URI_LEGACY] === undefined, 'Invalid object model');
184
+ invariant((obj as any)[ATTR_RELATION_SOURCE] === undefined, 'Invalid object model');
185
+ invariant((obj as any)[ATTR_RELATION_TARGET] === undefined, 'Invalid object model');
186
+ return obj;
187
+ };
188
+
189
+ /**
190
+ * Backfills required meta fields and upgrades legacy `tags` (bare URI strings) to encoded references
191
+ * so serialized data produced before the tags-as-refs migration still decodes.
192
+ */
193
+ const normalizeMeta = (meta: any): any => {
194
+ const tags = Array.isArray(meta?.tags)
195
+ ? meta.tags.map((tag: unknown) => (typeof tag === 'string' ? { '/': URI.make(tag) } : tag))
196
+ : [];
197
+ // Coalesce required fields so explicit `undefined` in legacy input doesn't override the defaults.
198
+ return {
199
+ ...meta,
200
+ keys: Array.isArray(meta?.keys) ? meta.keys : [],
201
+ tags,
202
+ annotations: meta?.annotations ?? {},
203
+ };
204
+ };
205
+
206
+ const decodeGeneric = (jsonData: unknown, options: { refResolver?: RefResolver }) => {
207
+ const props = stripInternalJsonKeys(jsonData);
208
+
209
+ return deepMapValues(props, (value, visitor) => {
210
+ if (isEncodedReference(value)) {
211
+ return refFromEncodedReference(value, options.refResolver);
212
+ }
213
+ if (isEncodedUint8Array(value)) {
214
+ return decodeUint8ArrayFromJson(value);
215
+ }
216
+
217
+ return visitor(value);
218
+ });
219
+ };
220
+
221
+ /**
222
+ * Recursively replaces encoded `Uint8Array` JSON markers with actual `Uint8Array` instances.
223
+ * Runs before schema decoding so `Schema.Uint8ArrayFromSelf` sees real bytes.
224
+ */
225
+ const restoreUint8Arrays = (data: unknown): any =>
226
+ deepMapValues(data, (value, recurse) => {
227
+ if (isEncodedUint8Array(value)) {
228
+ return decodeUint8ArrayFromJson(value);
229
+ }
230
+ return recurse(value);
231
+ });
232
+
233
+ const stripInternalJsonKeys = (jsonData: unknown) => {
234
+ const {
235
+ [ATTR_TYPE]: _type,
236
+ [ATTR_META]: _meta,
237
+ [ATTR_DELETED]: _deleted,
238
+ [ATTR_SELF_URI]: _selfUri,
239
+ [ATTR_SELF_URI_LEGACY]: _legacySelfUri,
240
+ [ATTR_RELATION_SOURCE]: _relationSource,
241
+ [ATTR_RELATION_TARGET]: _relationTarget,
242
+ ...props
243
+ } = jsonData as any;
244
+
245
+ return props;
246
+ };
247
+
248
+ export const setRefResolverOnData = (obj: AnyEntity, refResolver: RefResolver) => {
249
+ const visitor = (value: unknown) => {
250
+ if (Ref.isRef(value)) {
251
+ setRefResolver(value, refResolver);
252
+ } else {
253
+ visitValues(value, visitor);
254
+ }
255
+ };
256
+
257
+ visitor(obj);
258
+ };
259
+
260
+ /**
261
+ * Convert EntityStructure to JSON data for indexing.
262
+ * Different from {@link objectToJSON} as it takes the internal {@link EntityStructure} representation directly
263
+ */
264
+ export const objectStructureToJson = (objectId: EntityId, structure: EntityStructure): Obj.JSON => {
265
+ const typeRef = EntityStructure.getTypeReference(structure)?.['/'];
266
+ const parent = EntityStructure.getParent(structure)?.['/'];
267
+ const source = EntityStructure.getRelationSource(structure)?.['/'];
268
+ const target = EntityStructure.getRelationTarget(structure)?.['/'];
269
+ return {
270
+ ...structure.data,
271
+ id: objectId,
272
+ [ATTR_TYPE]: typeRef ? URI.make(typeRef) : undefined,
273
+ [ATTR_DELETED]: EntityStructure.isDeleted(structure),
274
+ [ATTR_PARENT]: parent !== undefined ? EID.tryParse(parent) : undefined,
275
+ [ATTR_RELATION_SOURCE]: source !== undefined ? EID.tryParse(source) : undefined,
276
+ [ATTR_RELATION_TARGET]: target !== undefined ? EID.tryParse(target) : undefined,
277
+ };
278
+ };