@dxos/echo 0.8.4-staging.ac66bdf99f → 0.9.0

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 (437) hide show
  1. package/LICENSE +102 -5
  2. package/README.md +7 -7
  3. package/dist/lib/neutral/Annotation.mjs +37 -6
  4. package/dist/lib/neutral/Database.mjs +6 -17
  5. package/dist/lib/neutral/Entity.mjs +31 -20
  6. package/dist/lib/neutral/Err.mjs +3 -3
  7. package/dist/lib/neutral/Feed.mjs +23 -19
  8. package/dist/lib/neutral/Filter.mjs +13 -15
  9. package/dist/lib/neutral/Format.mjs +23 -3
  10. package/dist/lib/neutral/JsonSchema.mjs +7 -8
  11. package/dist/lib/neutral/Key.mjs +9 -5
  12. package/dist/lib/neutral/Migration.mjs +11 -10
  13. package/dist/lib/neutral/Obj.mjs +29 -20
  14. package/dist/lib/neutral/Order.mjs +7 -3
  15. package/dist/lib/neutral/Query.mjs +17 -17
  16. package/dist/lib/neutral/QueryResult.mjs +1 -1
  17. package/dist/lib/neutral/Ref.mjs +10 -9
  18. package/dist/lib/neutral/Registry.mjs +14 -0
  19. package/dist/lib/neutral/Relation.mjs +28 -25
  20. package/dist/lib/neutral/Scope.mjs +12 -0
  21. package/dist/lib/neutral/Tag.mjs +17 -14
  22. package/dist/lib/neutral/Type.mjs +54 -26
  23. package/dist/lib/neutral/{chunk-OMUPQMLR.mjs → chunk-35INCYOE.mjs} +1 -1
  24. package/dist/lib/neutral/chunk-35INCYOE.mjs.map +7 -0
  25. package/dist/lib/neutral/chunk-3PBP4V4O.mjs +101 -0
  26. package/dist/lib/neutral/chunk-3PBP4V4O.mjs.map +7 -0
  27. package/dist/lib/neutral/chunk-4ZUHOTCG.mjs +184 -0
  28. package/dist/lib/neutral/chunk-4ZUHOTCG.mjs.map +7 -0
  29. package/dist/lib/neutral/chunk-5SMDBFVB.mjs +108 -0
  30. package/dist/lib/neutral/chunk-5SMDBFVB.mjs.map +7 -0
  31. package/dist/lib/neutral/{chunk-OS35K56T.mjs → chunk-5SUJPHAE.mjs} +3 -3
  32. package/dist/lib/neutral/{chunk-OS35K56T.mjs.map → chunk-5SUJPHAE.mjs.map} +2 -2
  33. package/dist/lib/neutral/{chunk-GZQTCRJB.mjs → chunk-6M2Z6WBH.mjs} +22 -2
  34. package/dist/lib/neutral/chunk-6M2Z6WBH.mjs.map +7 -0
  35. package/dist/lib/neutral/{chunk-V36VO5SS.mjs → chunk-6YDI3J37.mjs} +32 -40
  36. package/dist/lib/neutral/chunk-6YDI3J37.mjs.map +7 -0
  37. package/dist/lib/neutral/{chunk-MOR5ERFM.mjs → chunk-7FPIAJIV.mjs} +701 -1256
  38. package/dist/lib/neutral/chunk-7FPIAJIV.mjs.map +7 -0
  39. package/dist/lib/neutral/{chunk-ANHVGJI4.mjs → chunk-7LOUAPYZ.mjs} +9 -5
  40. package/dist/lib/neutral/chunk-7LOUAPYZ.mjs.map +7 -0
  41. package/dist/lib/neutral/{chunk-JUXPFOEI.mjs → chunk-7PI7C4EF.mjs} +48 -88
  42. package/dist/lib/neutral/chunk-7PI7C4EF.mjs.map +7 -0
  43. package/dist/lib/neutral/{chunk-UBEZSGXY.mjs → chunk-BBFJWWAV.mjs} +6 -6
  44. package/dist/lib/neutral/chunk-BBFJWWAV.mjs.map +7 -0
  45. package/dist/lib/neutral/{chunk-UI6MWK5W.mjs → chunk-EVK6XBXO.mjs} +16 -2
  46. package/dist/lib/neutral/chunk-EVK6XBXO.mjs.map +7 -0
  47. package/dist/lib/neutral/{chunk-7RO7CPBZ.mjs → chunk-IGK6FN65.mjs} +2 -2
  48. package/dist/lib/neutral/{chunk-HBUZJNZO.mjs → chunk-LWXVKPPW.mjs} +94 -99
  49. package/dist/lib/neutral/chunk-LWXVKPPW.mjs.map +7 -0
  50. package/dist/lib/neutral/{chunk-BVOFLCVF.mjs → chunk-MZ7K3MLL.mjs} +9 -6
  51. package/dist/lib/neutral/chunk-MZ7K3MLL.mjs.map +7 -0
  52. package/dist/lib/neutral/{chunk-TBKX6JQO.mjs → chunk-O6BH7EPN.mjs} +30 -3
  53. package/dist/lib/neutral/chunk-O6BH7EPN.mjs.map +7 -0
  54. package/dist/lib/neutral/{chunk-EAMSSLZC.mjs → chunk-QQIYS74I.mjs} +83 -46
  55. package/dist/lib/neutral/chunk-QQIYS74I.mjs.map +7 -0
  56. package/dist/lib/neutral/chunk-R5W6DXR4.mjs +678 -0
  57. package/dist/lib/neutral/chunk-R5W6DXR4.mjs.map +7 -0
  58. package/dist/lib/neutral/{chunk-WAK4DMFV.mjs → chunk-RIVWNMSF.mjs} +12 -7
  59. package/dist/lib/neutral/chunk-RIVWNMSF.mjs.map +7 -0
  60. package/dist/lib/neutral/{chunk-T6W2LEZU.mjs → chunk-SBVFRTST.mjs} +73 -38
  61. package/dist/lib/neutral/chunk-SBVFRTST.mjs.map +7 -0
  62. package/dist/lib/neutral/chunk-T6E37YIP.mjs +251 -0
  63. package/dist/lib/neutral/chunk-T6E37YIP.mjs.map +7 -0
  64. package/dist/lib/neutral/{chunk-DQYLD2RB.mjs → chunk-TFEWTY5A.mjs} +155 -129
  65. package/dist/lib/neutral/chunk-TFEWTY5A.mjs.map +7 -0
  66. package/dist/lib/neutral/{chunk-B4BASU6W.mjs → chunk-TYGKCRMK.mjs} +85 -76
  67. package/dist/lib/neutral/chunk-TYGKCRMK.mjs.map +7 -0
  68. package/dist/lib/neutral/{chunk-4OIBYSXE.mjs → chunk-UUP46KUQ.mjs} +78 -32
  69. package/dist/lib/neutral/chunk-UUP46KUQ.mjs.map +7 -0
  70. package/dist/lib/neutral/chunk-WISOH2XH.mjs +36 -0
  71. package/dist/lib/neutral/chunk-WISOH2XH.mjs.map +7 -0
  72. package/dist/lib/neutral/{chunk-G3IQMKF7.mjs → chunk-WTQJHC75.mjs} +111 -112
  73. package/dist/lib/neutral/chunk-WTQJHC75.mjs.map +7 -0
  74. package/dist/lib/neutral/chunk-WU3GIANS.mjs +31 -0
  75. package/dist/lib/neutral/chunk-WU3GIANS.mjs.map +7 -0
  76. package/dist/lib/neutral/{chunk-TU3GW67D.mjs → chunk-ZGNNFYHS.mjs} +40 -40
  77. package/dist/lib/neutral/chunk-ZGNNFYHS.mjs.map +7 -0
  78. package/dist/lib/neutral/index.mjs +47 -41
  79. package/dist/lib/neutral/internal/index.mjs +137 -72
  80. package/dist/lib/neutral/meta.json +1 -1
  81. package/dist/lib/neutral/testing/index.mjs +261 -178
  82. package/dist/lib/neutral/testing/index.mjs.map +4 -4
  83. package/dist/types/src/Annotation.d.ts +108 -4
  84. package/dist/types/src/Annotation.d.ts.map +1 -1
  85. package/dist/types/src/Annotation.test.d.ts +2 -0
  86. package/dist/types/src/Annotation.test.d.ts.map +1 -0
  87. package/dist/types/src/Collection.d.ts +2 -3
  88. package/dist/types/src/Collection.d.ts.map +1 -1
  89. package/dist/types/src/Database.d.ts +56 -49
  90. package/dist/types/src/Database.d.ts.map +1 -1
  91. package/dist/types/src/Dataset.d.ts +16 -6
  92. package/dist/types/src/Dataset.d.ts.map +1 -1
  93. package/dist/types/src/Entity.d.ts +101 -28
  94. package/dist/types/src/Entity.d.ts.map +1 -1
  95. package/dist/types/src/Err.d.ts +27 -27
  96. package/dist/types/src/Err.d.ts.map +1 -1
  97. package/dist/types/src/Feed.d.ts +66 -19
  98. package/dist/types/src/Feed.d.ts.map +1 -1
  99. package/dist/types/src/Filter.d.ts +38 -12
  100. package/dist/types/src/Filter.d.ts.map +1 -1
  101. package/dist/types/src/Format.d.ts +0 -2
  102. package/dist/types/src/Format.d.ts.map +1 -1
  103. package/dist/types/src/Hypergraph.d.ts +14 -9
  104. package/dist/types/src/Hypergraph.d.ts.map +1 -1
  105. package/dist/types/src/Json.d.ts +33 -0
  106. package/dist/types/src/Json.d.ts.map +1 -0
  107. package/dist/types/src/Json.test.d.ts +2 -0
  108. package/dist/types/src/Json.test.d.ts.map +1 -0
  109. package/dist/types/src/JsonSchema.d.ts +2 -2
  110. package/dist/types/src/JsonSchema.d.ts.map +1 -1
  111. package/dist/types/src/Key.d.ts +1 -1
  112. package/dist/types/src/Key.d.ts.map +1 -1
  113. package/dist/types/src/Migration.d.ts +26 -11
  114. package/dist/types/src/Migration.d.ts.map +1 -1
  115. package/dist/types/src/Obj.d.ts +104 -61
  116. package/dist/types/src/Obj.d.ts.map +1 -1
  117. package/dist/types/src/Order.d.ts +10 -0
  118. package/dist/types/src/Order.d.ts.map +1 -1
  119. package/dist/types/src/Query.d.ts +34 -12
  120. package/dist/types/src/Query.d.ts.map +1 -1
  121. package/dist/types/src/QueryResult.d.ts +21 -0
  122. package/dist/types/src/QueryResult.d.ts.map +1 -1
  123. package/dist/types/src/Ref.d.ts +15 -7
  124. package/dist/types/src/Ref.d.ts.map +1 -1
  125. package/dist/types/src/Registry.d.ts +131 -0
  126. package/dist/types/src/Registry.d.ts.map +1 -0
  127. package/dist/types/src/Relation.d.ts +73 -41
  128. package/dist/types/src/Relation.d.ts.map +1 -1
  129. package/dist/types/src/Scope.d.ts +35 -0
  130. package/dist/types/src/Scope.d.ts.map +1 -0
  131. package/dist/types/src/Tag.d.ts +21 -5
  132. package/dist/types/src/Tag.d.ts.map +1 -1
  133. package/dist/types/src/Type.d.ts +362 -95
  134. package/dist/types/src/Type.d.ts.map +1 -1
  135. package/dist/types/src/View.d.ts +9 -12
  136. package/dist/types/src/View.d.ts.map +1 -1
  137. package/dist/types/src/exemplars.test.d.ts +2 -0
  138. package/dist/types/src/exemplars.test.d.ts.map +1 -0
  139. package/dist/types/src/index.d.ts +4 -3
  140. package/dist/types/src/index.d.ts.map +1 -1
  141. package/dist/types/src/internal/Annotation/annotations.d.ts +79 -38
  142. package/dist/types/src/internal/Annotation/annotations.d.ts.map +1 -1
  143. package/dist/types/src/internal/Annotation/dictionary.d.ts +24 -0
  144. package/dist/types/src/internal/Annotation/dictionary.d.ts.map +1 -0
  145. package/dist/types/src/internal/Annotation/entity-dictionary.d.ts +14 -0
  146. package/dist/types/src/internal/Annotation/entity-dictionary.d.ts.map +1 -0
  147. package/dist/types/src/internal/Annotation/index.d.ts +4 -2
  148. package/dist/types/src/internal/Annotation/index.d.ts.map +1 -1
  149. package/dist/types/src/internal/Annotation/sorting.d.ts.map +1 -1
  150. package/dist/types/src/internal/Annotation/util.d.ts +14 -5
  151. package/dist/types/src/internal/Annotation/util.d.ts.map +1 -1
  152. package/dist/types/src/internal/Entity/api.d.ts +17 -3
  153. package/dist/types/src/internal/Entity/api.d.ts.map +1 -1
  154. package/dist/types/src/internal/Entity/entity.d.ts +72 -8
  155. package/dist/types/src/internal/Entity/entity.d.ts.map +1 -1
  156. package/dist/types/src/internal/Entity/guard.d.ts +10 -0
  157. package/dist/types/src/internal/Entity/guard.d.ts.map +1 -0
  158. package/dist/types/src/internal/Entity/index.d.ts +2 -0
  159. package/dist/types/src/internal/Entity/index.d.ts.map +1 -1
  160. package/dist/types/src/internal/Entity/model.d.ts +21 -17
  161. package/dist/types/src/internal/Entity/model.d.ts.map +1 -1
  162. package/dist/types/src/internal/Entity/object.d.ts +3 -3
  163. package/dist/types/src/internal/Entity/object.d.ts.map +1 -1
  164. package/dist/types/src/internal/Entity/relation.d.ts +30 -7
  165. package/dist/types/src/internal/Entity/relation.d.ts.map +1 -1
  166. package/dist/types/src/internal/Entity/type-kind.d.ts +24 -0
  167. package/dist/types/src/internal/Entity/type-kind.d.ts.map +1 -0
  168. package/dist/types/src/internal/Entity/type-uri.d.ts +24 -0
  169. package/dist/types/src/internal/Entity/type-uri.d.ts.map +1 -0
  170. package/dist/types/src/internal/Entity/version.d.ts.map +1 -1
  171. package/dist/types/src/internal/Format/date.d.ts.map +1 -1
  172. package/dist/types/src/internal/Format/format.d.ts +3 -2
  173. package/dist/types/src/internal/Format/format.d.ts.map +1 -1
  174. package/dist/types/src/internal/Format/index.d.ts +2 -2
  175. package/dist/types/src/internal/Format/index.d.ts.map +1 -1
  176. package/dist/types/src/internal/Format/number.d.ts.map +1 -1
  177. package/dist/types/src/internal/Format/object.d.ts +3 -1
  178. package/dist/types/src/internal/Format/object.d.ts.map +1 -1
  179. package/dist/types/src/internal/Format/types.d.ts.map +1 -1
  180. package/dist/types/src/internal/JsonSchema/json-schema-normalize.d.ts.map +1 -1
  181. package/dist/types/src/internal/JsonSchema/json-schema-type.d.ts +34 -34
  182. package/dist/types/src/internal/JsonSchema/json-schema-type.d.ts.map +1 -1
  183. package/dist/types/src/internal/JsonSchema/json-schema.d.ts +3 -2
  184. package/dist/types/src/internal/JsonSchema/json-schema.d.ts.map +1 -1
  185. package/dist/types/src/internal/Obj/atoms.d.ts +38 -0
  186. package/dist/types/src/internal/Obj/atoms.d.ts.map +1 -0
  187. package/dist/types/src/internal/Obj/clone.d.ts.map +1 -1
  188. package/dist/types/src/internal/Obj/common.d.ts.map +1 -1
  189. package/dist/types/src/internal/Obj/create-object.d.ts +12 -12
  190. package/dist/types/src/internal/Obj/create-object.d.ts.map +1 -1
  191. package/dist/types/src/internal/Obj/deleted.d.ts.map +1 -1
  192. package/dist/types/src/internal/Obj/index.d.ts +1 -1
  193. package/dist/types/src/internal/Obj/index.d.ts.map +1 -1
  194. package/dist/types/src/internal/Obj/json-serializer.d.ts +8 -8
  195. package/dist/types/src/internal/Obj/json-serializer.d.ts.map +1 -1
  196. package/dist/types/src/internal/Obj/set-value.d.ts +1 -1
  197. package/dist/types/src/internal/Obj/set-value.d.ts.map +1 -1
  198. package/dist/types/src/internal/Obj/snapshot.d.ts.map +1 -1
  199. package/dist/types/src/internal/Obj/typed-object.d.ts +1 -1
  200. package/dist/types/src/internal/Query/index.d.ts +2 -0
  201. package/dist/types/src/internal/Query/index.d.ts.map +1 -0
  202. package/dist/types/src/internal/{Query.d.ts → Query/pretty.d.ts} +1 -1
  203. package/dist/types/src/internal/Query/pretty.d.ts.map +1 -0
  204. package/dist/types/src/internal/Ref/atoms.d.ts +10 -0
  205. package/dist/types/src/internal/Ref/atoms.d.ts.map +1 -0
  206. package/dist/types/src/internal/Ref/ref-array.d.ts +2 -2
  207. package/dist/types/src/internal/Ref/ref.d.ts +50 -19
  208. package/dist/types/src/internal/Ref/ref.d.ts.map +1 -1
  209. package/dist/types/src/internal/Ref/utils.d.ts +8 -0
  210. package/dist/types/src/internal/Ref/utils.d.ts.map +1 -0
  211. package/dist/types/src/internal/Type/compose.d.ts.map +1 -1
  212. package/dist/types/src/internal/Type/index.d.ts +1 -2
  213. package/dist/types/src/internal/Type/index.d.ts.map +1 -1
  214. package/dist/types/src/internal/Type/manipulation.d.ts +0 -1
  215. package/dist/types/src/internal/Type/manipulation.d.ts.map +1 -1
  216. package/dist/types/src/internal/Type/type-schema.d.ts +52 -0
  217. package/dist/types/src/internal/Type/type-schema.d.ts.map +1 -0
  218. package/dist/types/src/internal/common/api/meta.d.ts +14 -11
  219. package/dist/types/src/internal/common/api/meta.d.ts.map +1 -1
  220. package/dist/types/src/internal/common/proxy/change-context.d.ts +1 -1
  221. package/dist/types/src/internal/common/proxy/change-context.d.ts.map +1 -1
  222. package/dist/types/src/internal/common/proxy/define-hidden-property.d.ts.map +1 -1
  223. package/dist/types/src/internal/common/proxy/errors.d.ts +1 -1
  224. package/dist/types/src/internal/common/proxy/errors.d.ts.map +1 -1
  225. package/dist/types/src/internal/common/proxy/event-batch.d.ts.map +1 -1
  226. package/dist/types/src/internal/common/proxy/json-serializer.d.ts.map +1 -1
  227. package/dist/types/src/internal/common/proxy/make-object.d.ts +11 -5
  228. package/dist/types/src/internal/common/proxy/make-object.d.ts.map +1 -1
  229. package/dist/types/src/internal/common/proxy/ownership.d.ts.map +1 -1
  230. package/dist/types/src/internal/common/proxy/proxy-utils.d.ts.map +1 -1
  231. package/dist/types/src/internal/common/proxy/reactive-array.d.ts +1 -1
  232. package/dist/types/src/internal/common/proxy/reactive.d.ts +1 -1
  233. package/dist/types/src/internal/common/proxy/reactive.d.ts.map +1 -1
  234. package/dist/types/src/internal/common/proxy/reactive.test.d.ts +2 -0
  235. package/dist/types/src/internal/common/proxy/reactive.test.d.ts.map +1 -0
  236. package/dist/types/src/internal/common/proxy/schema-validator.d.ts.map +1 -1
  237. package/dist/types/src/internal/common/proxy/typed-handler.d.ts +18 -2
  238. package/dist/types/src/internal/common/proxy/typed-handler.d.ts.map +1 -1
  239. package/dist/types/src/internal/common/types/base.d.ts +4 -4
  240. package/dist/types/src/internal/common/types/base.d.ts.map +1 -1
  241. package/dist/types/src/internal/common/types/entity.d.ts +62 -5
  242. package/dist/types/src/internal/common/types/entity.d.ts.map +1 -1
  243. package/dist/types/src/internal/common/types/index.d.ts +1 -1
  244. package/dist/types/src/internal/common/types/index.d.ts.map +1 -1
  245. package/dist/types/src/internal/common/types/meta.d.ts +33 -12
  246. package/dist/types/src/internal/common/types/meta.d.ts.map +1 -1
  247. package/dist/types/src/internal/common/types/model-symbols.d.ts +15 -4
  248. package/dist/types/src/internal/common/types/model-symbols.d.ts.map +1 -1
  249. package/dist/types/src/internal/common/types/typename.d.ts +7 -0
  250. package/dist/types/src/internal/common/types/typename.d.ts.map +1 -1
  251. package/dist/types/src/internal/common/types/version.d.ts +1 -1
  252. package/dist/types/src/internal/common/types/well-known-types.d.ts +11 -0
  253. package/dist/types/src/internal/common/types/well-known-types.d.ts.map +1 -0
  254. package/dist/types/src/internal/index.d.ts +2 -2
  255. package/dist/types/src/internal/index.d.ts.map +1 -1
  256. package/dist/types/src/testing/index.d.ts +1 -0
  257. package/dist/types/src/testing/index.d.ts.map +1 -1
  258. package/dist/types/src/testing/registry.d.ts +9 -0
  259. package/dist/types/src/testing/registry.d.ts.map +1 -0
  260. package/dist/types/src/testing/test-data.d.ts +8 -8
  261. package/dist/types/src/testing/test-data.d.ts.map +1 -1
  262. package/dist/types/src/testing/test-schema.d.ts +83 -89
  263. package/dist/types/src/testing/test-schema.d.ts.map +1 -1
  264. package/dist/types/src/testing/util.d.ts +5 -3
  265. package/dist/types/src/testing/util.d.ts.map +1 -1
  266. package/dist/types/tsconfig.tsbuildinfo +1 -1
  267. package/package.json +26 -24
  268. package/src/Annotation.test.ts +439 -0
  269. package/src/Annotation.ts +158 -4
  270. package/src/Collection.ts +5 -9
  271. package/src/Database.ts +93 -100
  272. package/src/Dataset.ts +10 -2
  273. package/src/Entity.test.ts +116 -6
  274. package/src/Entity.ts +134 -32
  275. package/src/Err.ts +4 -4
  276. package/src/Feed.ts +92 -44
  277. package/src/Filter.ts +70 -40
  278. package/src/Format.ts +0 -4
  279. package/src/Hypergraph.ts +14 -9
  280. package/src/Json.test.ts +175 -0
  281. package/src/Json.ts +103 -0
  282. package/src/Key.ts +1 -1
  283. package/src/Migration.ts +39 -19
  284. package/src/Obj.test.ts +122 -20
  285. package/src/Obj.ts +168 -91
  286. package/src/Order.ts +22 -0
  287. package/src/Query.test.ts +183 -154
  288. package/src/Query.ts +172 -85
  289. package/src/QueryResult.ts +26 -0
  290. package/src/Ref.ts +22 -4
  291. package/src/Registry.ts +155 -0
  292. package/src/Relation.test.ts +10 -10
  293. package/src/Relation.ts +116 -69
  294. package/src/Scope.ts +50 -0
  295. package/src/Tag.md +88 -0
  296. package/src/Tag.ts +49 -6
  297. package/src/Type.test.ts +223 -18
  298. package/src/Type.ts +609 -131
  299. package/src/View.ts +14 -23
  300. package/src/exemplars.test.ts +21 -0
  301. package/src/index.ts +4 -4
  302. package/src/internal/Annotation/annotations.test.ts +31 -11
  303. package/src/internal/Annotation/annotations.ts +143 -111
  304. package/src/internal/Annotation/dictionary.ts +47 -0
  305. package/src/internal/Annotation/entity-dictionary.ts +74 -0
  306. package/src/internal/Annotation/index.ts +4 -2
  307. package/src/internal/Annotation/util.ts +17 -8
  308. package/src/internal/Entity/api.ts +54 -7
  309. package/src/internal/Entity/entity.ts +196 -47
  310. package/src/internal/Entity/guard.ts +26 -0
  311. package/src/internal/Entity/index.ts +2 -0
  312. package/src/internal/Entity/model.ts +38 -28
  313. package/src/internal/Entity/object.ts +21 -5
  314. package/src/internal/Entity/relation.ts +68 -34
  315. package/src/internal/Entity/type-kind.ts +75 -0
  316. package/src/internal/Entity/type-uri.ts +92 -0
  317. package/src/internal/Entity/util.ts +9 -9
  318. package/src/internal/Format/date.ts +0 -4
  319. package/src/internal/Format/format.test.ts +21 -0
  320. package/src/internal/Format/index.ts +2 -3
  321. package/src/internal/Format/object.ts +21 -4
  322. package/src/internal/Format/types.ts +1 -1
  323. package/src/internal/JsonSchema/annotations.ts +1 -1
  324. package/src/internal/JsonSchema/json-schema-type.ts +4 -4
  325. package/src/internal/JsonSchema/json-schema.test.ts +71 -145
  326. package/src/internal/JsonSchema/json-schema.ts +49 -35
  327. package/src/internal/Obj/atoms.ts +244 -0
  328. package/src/internal/Obj/clone.ts +9 -4
  329. package/src/internal/Obj/create-object.test.ts +12 -10
  330. package/src/internal/Obj/create-object.ts +68 -22
  331. package/src/internal/Obj/index.ts +1 -1
  332. package/src/internal/Obj/inspect.ts +5 -3
  333. package/src/internal/Obj/json-serializer.test.ts +101 -22
  334. package/src/internal/Obj/json-serializer.ts +89 -33
  335. package/src/internal/Obj/set-value.test.ts +22 -45
  336. package/src/internal/Obj/set-value.ts +12 -19
  337. package/src/internal/Obj/snapshot.ts +13 -4
  338. package/src/internal/Obj/typed-object.test.ts +9 -11
  339. package/src/internal/Obj/typed-object.ts +1 -1
  340. package/src/internal/Query/index.ts +5 -0
  341. package/src/internal/{Query.ts → Query/pretty.ts} +40 -12
  342. package/src/internal/Ref/atoms.ts +20 -0
  343. package/src/internal/Ref/ref-array.ts +3 -3
  344. package/src/internal/Ref/ref.test.ts +18 -27
  345. package/src/internal/Ref/ref.ts +137 -59
  346. package/src/internal/Ref/utils.ts +45 -0
  347. package/src/internal/Type/compose.test.ts +3 -1
  348. package/src/internal/Type/index.ts +1 -2
  349. package/src/internal/Type/manipulation.ts +0 -25
  350. package/src/internal/Type/type-schema.ts +60 -0
  351. package/src/internal/common/README.md +2 -2
  352. package/src/internal/common/api/meta.ts +19 -17
  353. package/src/internal/common/proxy/change-context.ts +1 -1
  354. package/src/internal/common/proxy/change.test.ts +91 -83
  355. package/src/internal/common/proxy/errors.ts +2 -2
  356. package/src/internal/common/proxy/handler.test.ts +1 -1
  357. package/src/internal/common/proxy/json-serializer.ts +27 -16
  358. package/src/internal/common/proxy/make-object.ts +44 -20
  359. package/src/internal/common/proxy/ownership.ts +2 -2
  360. package/src/internal/common/proxy/reactive-array.ts +1 -1
  361. package/src/internal/common/proxy/reactive.test.ts +54 -0
  362. package/src/internal/common/proxy/reactive.ts +11 -2
  363. package/src/internal/common/proxy/schema.test.ts +48 -86
  364. package/src/internal/common/proxy/typed-handler.test.ts +12 -11
  365. package/src/internal/common/proxy/typed-handler.ts +78 -16
  366. package/src/internal/common/proxy/typed-object.test.ts +16 -28
  367. package/src/internal/common/types/base.ts +4 -4
  368. package/src/internal/common/types/entity.ts +80 -1
  369. package/src/internal/common/types/index.ts +6 -1
  370. package/src/internal/common/types/meta.ts +62 -20
  371. package/src/internal/common/types/model-symbols.ts +24 -4
  372. package/src/internal/common/types/typename.ts +39 -3
  373. package/src/internal/common/types/well-known-types.ts +15 -0
  374. package/src/internal/index.ts +6 -4
  375. package/src/testing/api.test.ts +15 -9
  376. package/src/testing/index.ts +1 -0
  377. package/src/testing/registry.ts +44 -0
  378. package/src/testing/test-data.ts +159 -99
  379. package/src/testing/test-schema.ts +22 -58
  380. package/src/testing/util.ts +14 -11
  381. package/dist/lib/neutral/Extension.mjs +0 -18
  382. package/dist/lib/neutral/SchemaRegistry.mjs +0 -2
  383. package/dist/lib/neutral/chunk-2KHZ36F5.mjs +0 -361
  384. package/dist/lib/neutral/chunk-2KHZ36F5.mjs.map +0 -7
  385. package/dist/lib/neutral/chunk-4OIBYSXE.mjs.map +0 -7
  386. package/dist/lib/neutral/chunk-4P3IXBLT.mjs +0 -45
  387. package/dist/lib/neutral/chunk-4P3IXBLT.mjs.map +0 -7
  388. package/dist/lib/neutral/chunk-ANHVGJI4.mjs.map +0 -7
  389. package/dist/lib/neutral/chunk-B4BASU6W.mjs.map +0 -7
  390. package/dist/lib/neutral/chunk-BNCCGLJN.mjs +0 -7
  391. package/dist/lib/neutral/chunk-BNCCGLJN.mjs.map +0 -7
  392. package/dist/lib/neutral/chunk-BVOFLCVF.mjs.map +0 -7
  393. package/dist/lib/neutral/chunk-DQYLD2RB.mjs.map +0 -7
  394. package/dist/lib/neutral/chunk-EAMSSLZC.mjs.map +0 -7
  395. package/dist/lib/neutral/chunk-G3IQMKF7.mjs.map +0 -7
  396. package/dist/lib/neutral/chunk-GZQTCRJB.mjs.map +0 -7
  397. package/dist/lib/neutral/chunk-HBUZJNZO.mjs.map +0 -7
  398. package/dist/lib/neutral/chunk-JUXPFOEI.mjs.map +0 -7
  399. package/dist/lib/neutral/chunk-MOR5ERFM.mjs.map +0 -7
  400. package/dist/lib/neutral/chunk-OMUPQMLR.mjs.map +0 -7
  401. package/dist/lib/neutral/chunk-PHU22NLC.mjs +0 -136
  402. package/dist/lib/neutral/chunk-PHU22NLC.mjs.map +0 -7
  403. package/dist/lib/neutral/chunk-ROG4RXXL.mjs +0 -97
  404. package/dist/lib/neutral/chunk-ROG4RXXL.mjs.map +0 -7
  405. package/dist/lib/neutral/chunk-T6W2LEZU.mjs.map +0 -7
  406. package/dist/lib/neutral/chunk-TBKX6JQO.mjs.map +0 -7
  407. package/dist/lib/neutral/chunk-TU3GW67D.mjs.map +0 -7
  408. package/dist/lib/neutral/chunk-UBEZSGXY.mjs.map +0 -7
  409. package/dist/lib/neutral/chunk-UI6MWK5W.mjs.map +0 -7
  410. package/dist/lib/neutral/chunk-V36VO5SS.mjs.map +0 -7
  411. package/dist/lib/neutral/chunk-WAK4DMFV.mjs.map +0 -7
  412. package/dist/lib/neutral/chunk-YAHXAYOW.mjs +0 -56
  413. package/dist/lib/neutral/chunk-YAHXAYOW.mjs.map +0 -7
  414. package/dist/lib/neutral/chunk-YS6Q3XAD.mjs +0 -50
  415. package/dist/lib/neutral/chunk-YS6Q3XAD.mjs.map +0 -7
  416. package/dist/types/src/Extension.d.ts +0 -80
  417. package/dist/types/src/Extension.d.ts.map +0 -1
  418. package/dist/types/src/Extension.test.d.ts +0 -2
  419. package/dist/types/src/Extension.test.d.ts.map +0 -1
  420. package/dist/types/src/SchemaRegistry.d.ts +0 -84
  421. package/dist/types/src/SchemaRegistry.d.ts.map +0 -1
  422. package/dist/types/src/internal/Obj/ids.d.ts +0 -6
  423. package/dist/types/src/internal/Obj/ids.d.ts.map +0 -1
  424. package/dist/types/src/internal/Query.d.ts.map +0 -1
  425. package/dist/types/src/internal/Type/echo-schema.d.ts +0 -181
  426. package/dist/types/src/internal/Type/echo-schema.d.ts.map +0 -1
  427. package/dist/types/src/internal/Type/persistent-schema.d.ts +0 -20
  428. package/dist/types/src/internal/Type/persistent-schema.d.ts.map +0 -1
  429. package/src/Extension.test.ts +0 -235
  430. package/src/Extension.ts +0 -122
  431. package/src/SchemaRegistry.ts +0 -106
  432. package/src/internal/Obj/ids.ts +0 -12
  433. package/src/internal/Type/echo-schema.ts +0 -423
  434. package/src/internal/Type/persistent-schema.ts +0 -33
  435. /package/dist/lib/neutral/{Extension.mjs.map → Registry.mjs.map} +0 -0
  436. /package/dist/lib/neutral/{SchemaRegistry.mjs.map → Scope.mjs.map} +0 -0
  437. /package/dist/lib/neutral/{chunk-7RO7CPBZ.mjs.map → chunk-IGK6FN65.mjs.map} +0 -0
@@ -13,16 +13,22 @@ import { TestSchema } from './test-schema';
13
13
  describe('Experimental API review', () => {
14
14
  test('type checks', ({ expect }) => {
15
15
  const contact = Obj.make(TestSchema.Person, { name: 'Test' });
16
- const schema = Obj.getSchema(contact) ?? raise(new Error('No schema found'));
17
-
18
- expect(Type.getDXN(schema)?.typename).to.eq(TestSchema.Person.typename);
19
- expect(Type.getTypename(schema)).to.eq('com.example.type.person');
20
- expect(Type.getVersion(schema)).to.eq('0.1.0');
21
- expect(Type.getMeta(schema)).to.deep.eq({
22
- kind: Entity.Kind.Object,
23
- typename: 'com.example.type.person',
16
+ const type = Obj.getType(contact) ?? raise(new Error('No type found'));
17
+
18
+ expect(Type.getTypename(type)).to.eq(Type.getTypename(TestSchema.Person));
19
+ expect(Type.getTypename(type)).to.eq('com.example.type.person');
20
+ expect(Type.getVersion(type)).to.eq('0.1.0');
21
+ // `Type.getMeta` returns `EntityMeta` (`{ keys, tags?, key?, version? }`)
22
+ // the same shape `Obj.getMeta` and `Relation.getMeta` return. The
23
+ // schema-kind brand lives on `[SchemaKindId]`, not in meta.
24
+ expect(Type.getMeta(type)).to.deep.eq({
25
+ keys: [],
26
+ tags: [],
27
+ annotations: {},
28
+ key: 'com.example.type.person',
24
29
  version: '0.1.0',
25
30
  });
31
+ expect(Type.isObject(type)).to.be.true;
26
32
  });
27
33
 
28
34
  test('instance checks', ({ expect }) => {
@@ -32,7 +38,7 @@ describe('Experimental API review', () => {
32
38
  employer: Ref.make(organization),
33
39
  });
34
40
 
35
- expect(Schema.is(TestSchema.Person)(contact)).to.be.true;
41
+ expect(Schema.is(Type.getSchema(TestSchema.Person))(contact)).to.be.true;
36
42
  expect(Obj.instanceOf(TestSchema.Person, contact)).to.be.true;
37
43
  expect(Obj.instanceOf(TestSchema.Organization, organization)).to.be.true;
38
44
 
@@ -2,6 +2,7 @@
2
2
  // Copyright 2025 DXOS.org
3
3
  //
4
4
 
5
+ export * from './registry';
5
6
  export * from './test-data';
6
7
  export * from './test-schema';
7
8
  export * from './util';
@@ -0,0 +1,44 @@
1
+ //
2
+ // Copyright 2026 DXOS.org
3
+ //
4
+
5
+ import * as Atom from '@effect-atom/atom/Atom';
6
+ import * as Layer from 'effect/Layer';
7
+
8
+ import { Event } from '@dxos/async';
9
+
10
+ import * as Registry from '../Registry';
11
+
12
+ /**
13
+ * Noop `Registry.Service` layer for testing — always returns empty query results.
14
+ * Use this in test layer stacks that require `Registry.Service` but don't need
15
+ * actual registry contents.
16
+ */
17
+ export const registryLayerNoop: Layer.Layer<Registry.Service> = Layer.succeed(Registry.Service, {
18
+ [Registry.TypeId]: Registry.TypeId,
19
+ id: 'noop-registry',
20
+ changed: new Event<void>(),
21
+ local: [],
22
+ add: () => {},
23
+ remove: () => false,
24
+ clear: () => {},
25
+ get: () => undefined,
26
+ getByURI: () => undefined,
27
+ list: () => [],
28
+ // QueryFn is an overloaded interface — a single generic function cannot satisfy both overload
29
+ // signatures without a cast. This is the intentional type-system boundary.
30
+ query: ((_queryOrFilter: unknown) => ({
31
+ results: [],
32
+ entries: [],
33
+ run: async () => [],
34
+ runEntries: async () => [],
35
+ runSync: () => [],
36
+ runSyncEntries: () => [],
37
+ first: async (): Promise<never> => {
38
+ throw new Error('registryLayerNoop: registry is empty');
39
+ },
40
+ firstOrUndefined: async () => undefined,
41
+ subscribe: () => () => {},
42
+ atom: Atom.make((): never[] => []),
43
+ })) as Registry.Registry['query'],
44
+ } satisfies Registry.Registry);
@@ -2,128 +2,188 @@
2
2
  // Copyright 2025 DXOS.org
3
3
  //
4
4
 
5
- import { DatabaseDirectory, ObjectStructure } from '@dxos/echo-protocol';
6
- import { DXN, ObjectId, PublicKey } from '@dxos/keys';
5
+ import { DatabaseDirectory, EntityStructure } from '@dxos/echo-protocol';
6
+ import { EID, EntityId, PublicKey } from '@dxos/keys';
7
7
 
8
8
  import { Type } from '../index';
9
9
  import { TestSchema } from './test-schema';
10
10
 
11
- const spaceKey = PublicKey.random();
11
+ // Lazy init: Cloudflare workers disallow non-determinism at module scope (e.g. random keys).
12
+ let cachedSpaceKeyHex: string | undefined;
13
+ const getSpaceKeyHex = (): string => {
14
+ if (cachedSpaceKeyHex === undefined) {
15
+ cachedSpaceKeyHex = PublicKey.random().toHex();
16
+ }
17
+ return cachedSpaceKeyHex;
18
+ };
19
+
20
+ let cachedPeopleAlice: DatabaseDirectory | undefined;
21
+ let cachedPeopleBob: DatabaseDirectory | undefined;
22
+ let cachedOrgsDxos: DatabaseDirectory | undefined;
23
+ let cachedOrgsCyberdyne: DatabaseDirectory | undefined;
24
+ let cachedWorksFredCyberdyne: DatabaseDirectory | undefined;
25
+ let cachedWorksAliceAperture: DatabaseDirectory | undefined;
26
+ let cachedTasksTask1: DatabaseDirectory | undefined;
27
+ let cachedTasksTask2: DatabaseDirectory | undefined;
12
28
 
13
29
  // TODO(burdon): Use Obj.make.
14
30
 
15
31
  export const PEOPLE = {
16
- alice: DatabaseDirectory.make({
17
- spaceKey: spaceKey.toHex(),
18
- objects: {
19
- [ObjectId.random()]: ObjectStructure.makeObject({
20
- type: Type.getDXN(TestSchema.Person)!.toString(),
21
- data: {
22
- name: 'Alice',
32
+ get alice(): DatabaseDirectory {
33
+ if (cachedPeopleAlice === undefined) {
34
+ cachedPeopleAlice = DatabaseDirectory.make({
35
+ spaceKey: getSpaceKeyHex(),
36
+ objects: {
37
+ [EntityId.random()]: EntityStructure.makeObject({
38
+ type: Type.getURI(TestSchema.Person)!,
39
+ data: {
40
+ name: 'Alice',
41
+ },
42
+ }),
23
43
  },
24
- }),
25
- },
26
- }),
27
- bob: DatabaseDirectory.make({
28
- spaceKey: spaceKey.toHex(),
29
- objects: {
30
- [ObjectId.random()]: ObjectStructure.makeObject({
31
- type: Type.getDXN(TestSchema.Person)!.toString(),
32
- data: {
33
- name: 'Bob',
44
+ });
45
+ }
46
+ return cachedPeopleAlice;
47
+ },
48
+
49
+ get bob(): DatabaseDirectory {
50
+ if (cachedPeopleBob === undefined) {
51
+ cachedPeopleBob = DatabaseDirectory.make({
52
+ spaceKey: getSpaceKeyHex(),
53
+ objects: {
54
+ [EntityId.random()]: EntityStructure.makeObject({
55
+ type: Type.getURI(TestSchema.Person)!,
56
+ data: {
57
+ name: 'Bob',
58
+ },
59
+ }),
34
60
  },
35
- }),
36
- },
37
- }),
61
+ });
62
+ }
63
+ return cachedPeopleBob;
64
+ },
38
65
  };
39
66
 
40
67
  export const ORGS = {
41
- dxos: DatabaseDirectory.make({
42
- spaceKey: spaceKey.toHex(),
43
- objects: {
44
- [ObjectId.random()]: ObjectStructure.makeObject({
45
- type: Type.getDXN(TestSchema.Organization)!.toString(),
46
- data: {
47
- name: 'DXOS',
48
- founded: '2023',
68
+ get dxos(): DatabaseDirectory {
69
+ if (cachedOrgsDxos === undefined) {
70
+ cachedOrgsDxos = DatabaseDirectory.make({
71
+ spaceKey: getSpaceKeyHex(),
72
+ objects: {
73
+ [EntityId.random()]: EntityStructure.makeObject({
74
+ type: Type.getURI(TestSchema.Organization)!,
75
+ data: {
76
+ name: 'DXOS',
77
+ founded: '2023',
78
+ },
79
+ }),
49
80
  },
50
- }),
51
- },
52
- }),
53
- cyberdyne: DatabaseDirectory.make({
54
- spaceKey: spaceKey.toHex(),
55
- objects: {
56
- [ObjectId.random()]: ObjectStructure.makeObject({
57
- type: Type.getDXN(TestSchema.Organization)!.toString(),
58
- data: {
59
- name: 'Cyberdyne Systems',
60
- founded: '1984',
81
+ });
82
+ }
83
+ return cachedOrgsDxos;
84
+ },
85
+
86
+ get cyberdyne(): DatabaseDirectory {
87
+ if (cachedOrgsCyberdyne === undefined) {
88
+ cachedOrgsCyberdyne = DatabaseDirectory.make({
89
+ spaceKey: getSpaceKeyHex(),
90
+ objects: {
91
+ [EntityId.random()]: EntityStructure.makeObject({
92
+ type: Type.getURI(TestSchema.Organization)!,
93
+ data: {
94
+ name: 'Cyberdyne Systems',
95
+ founded: '1984',
96
+ },
97
+ }),
61
98
  },
62
- }),
63
- },
64
- }),
99
+ });
100
+ }
101
+ return cachedOrgsCyberdyne;
102
+ },
65
103
  };
66
104
 
67
105
  export const WORKS_FOR = {
68
- fredWorksForCyberdyne: DatabaseDirectory.make({
69
- spaceKey: spaceKey.toHex(),
70
- objects: {
71
- [ObjectId.random()]: ObjectStructure.makeRelation({
72
- type: Type.getDXN(TestSchema.EmployedBy)!.toString(),
73
- source: { '/': DXN.fromLocalObjectId(Object.keys(PEOPLE.bob.objects!)[0]).toString() },
74
- target: { '/': DXN.fromLocalObjectId(Object.keys(ORGS.cyberdyne.objects!)[0]).toString() },
75
- data: {
76
- since: '2020',
77
- position: 'Engineer',
106
+ get fredWorksForCyberdyne(): DatabaseDirectory {
107
+ if (cachedWorksFredCyberdyne === undefined) {
108
+ cachedWorksFredCyberdyne = DatabaseDirectory.make({
109
+ spaceKey: getSpaceKeyHex(),
110
+ objects: {
111
+ [EntityId.random()]: EntityStructure.makeRelation({
112
+ type: Type.getURI(TestSchema.EmployedBy)!,
113
+ source: { '/': EID.make({ entityId: Object.keys(PEOPLE.bob.objects!)[0] }) },
114
+ target: { '/': EID.make({ entityId: Object.keys(ORGS.cyberdyne.objects!)[0] }) },
115
+ data: {
116
+ since: '2020',
117
+ position: 'Engineer',
118
+ },
119
+ }),
78
120
  },
79
- }),
80
- },
81
- }),
82
- aliceWorksForAperture: DatabaseDirectory.make({
83
- spaceKey: spaceKey.toHex(),
84
- objects: {
85
- [ObjectId.random()]: ObjectStructure.makeRelation({
86
- type: Type.getDXN(TestSchema.EmployedBy)!.toString(),
87
- source: { '/': DXN.fromLocalObjectId(Object.keys(PEOPLE.alice.objects!)[0]).toString() },
88
- target: { '/': DXN.fromLocalObjectId(Object.keys(ORGS.dxos.objects!)[0]).toString() },
89
- data: {
90
- since: '2018',
91
- position: 'Research Scientist',
121
+ });
122
+ }
123
+ return cachedWorksFredCyberdyne;
124
+ },
125
+
126
+ get aliceWorksForAperture(): DatabaseDirectory {
127
+ if (cachedWorksAliceAperture === undefined) {
128
+ cachedWorksAliceAperture = DatabaseDirectory.make({
129
+ spaceKey: getSpaceKeyHex(),
130
+ objects: {
131
+ [EntityId.random()]: EntityStructure.makeRelation({
132
+ type: Type.getURI(TestSchema.EmployedBy)!,
133
+ source: { '/': EID.make({ entityId: Object.keys(PEOPLE.alice.objects!)[0] }) },
134
+ target: { '/': EID.make({ entityId: Object.keys(ORGS.dxos.objects!)[0] }) },
135
+ data: {
136
+ since: '2018',
137
+ position: 'Research Scientist',
138
+ },
139
+ }),
92
140
  },
93
- }),
94
- },
95
- }),
141
+ });
142
+ }
143
+ return cachedWorksAliceAperture;
144
+ },
96
145
  };
97
146
 
98
147
  export const TASKS = {
99
- task1: DatabaseDirectory.make({
100
- spaceKey: spaceKey.toHex(),
101
- objects: {
102
- [ObjectId.random()]: ObjectStructure.makeObject({
103
- type: Type.getDXN(TestSchema.Task)!.toString(),
104
- data: {
105
- title: 'Complete project documentation',
106
- description: 'Write comprehensive documentation for the new system',
107
- status: 'in-progress',
108
- dueDate: '2023-12-31',
109
- assignee: { '/': DXN.fromLocalObjectId(Object.keys(PEOPLE.bob.objects!)[0]).toString() },
148
+ get task1(): DatabaseDirectory {
149
+ if (cachedTasksTask1 === undefined) {
150
+ cachedTasksTask1 = DatabaseDirectory.make({
151
+ spaceKey: getSpaceKeyHex(),
152
+ objects: {
153
+ [EntityId.random()]: EntityStructure.makeObject({
154
+ type: Type.getURI(TestSchema.Task)!,
155
+ data: {
156
+ title: 'Complete project documentation',
157
+ description: 'Write comprehensive documentation for the new system',
158
+ status: 'in-progress',
159
+ dueDate: '2023-12-31',
160
+ assignee: { '/': EID.make({ entityId: Object.keys(PEOPLE.bob.objects!)[0] }) },
161
+ },
162
+ }),
110
163
  },
111
- }),
112
- },
113
- }),
114
- task2: DatabaseDirectory.make({
115
- spaceKey: spaceKey.toHex(),
116
- objects: {
117
- [ObjectId.random()]: ObjectStructure.makeObject({
118
- type: Type.getDXN(TestSchema.Task)!.toString(),
119
- data: {
120
- title: 'Run experiments',
121
- description: 'Conduct series of experiments on the portal device',
122
- status: 'pending',
123
- dueDate: '2023-11-15',
124
- assignee: { '/': DXN.fromLocalObjectId(Object.keys(PEOPLE.alice.objects!)[0]).toString() },
164
+ });
165
+ }
166
+ return cachedTasksTask1;
167
+ },
168
+
169
+ get task2(): DatabaseDirectory {
170
+ if (cachedTasksTask2 === undefined) {
171
+ cachedTasksTask2 = DatabaseDirectory.make({
172
+ spaceKey: getSpaceKeyHex(),
173
+ objects: {
174
+ [EntityId.random()]: EntityStructure.makeObject({
175
+ type: Type.getURI(TestSchema.Task)!,
176
+ data: {
177
+ title: 'Run experiments',
178
+ description: 'Conduct series of experiments on the portal device',
179
+ status: 'pending',
180
+ dueDate: '2023-11-15',
181
+ assignee: { '/': EID.make({ entityId: Object.keys(PEOPLE.alice.objects!)[0] }) },
182
+ },
183
+ }),
125
184
  },
126
- }),
127
- },
128
- }),
185
+ });
186
+ }
187
+ return cachedTasksTask2;
188
+ },
129
189
  };
@@ -4,6 +4,8 @@
4
4
 
5
5
  import * as Schema from 'effect/Schema';
6
6
 
7
+ import { DXN } from '@dxos/keys';
8
+
7
9
  import * as Obj from '../Obj';
8
10
  import * as Ref from '../Ref';
9
11
  import * as Type from '../Type';
@@ -18,13 +20,10 @@ export namespace TestSchema {
18
20
  * This is the test variant with example.com namespace.
19
21
  */
20
22
  export const Expando = Schema.Struct({}, { key: Schema.String, value: Schema.Any }).pipe(
21
- Type.object({
22
- typename: 'com.example.type.expando',
23
- version: '0.1.0',
24
- }),
23
+ Type.makeObject(DXN.make('com.example.type.expando', '0.1.0')),
25
24
  );
26
25
 
27
- export interface Expando extends Schema.Schema.Type<typeof Expando> {}
26
+ export type Expando = Type.InstanceType<typeof Expando>;
28
27
 
29
28
  //
30
29
  // Example
@@ -63,15 +62,10 @@ export namespace TestSchema {
63
62
  export interface ExampleSchema extends Schema.Schema.Type<typeof ExampleSchema> {}
64
63
 
65
64
  /** @deprecated Use another test schema or create a specific local test schema. */
66
- export const Example = ExampleSchema.pipe(
67
- Type.object({
68
- typename: 'com.example.type.example',
69
- version: '0.1.0',
70
- }),
71
- );
65
+ export const Example = ExampleSchema.pipe(Type.makeObject(DXN.make('com.example.type.example', '0.1.0')));
72
66
 
73
67
  /** @deprecated Use another test schema or create a specific local test schema. */
74
- export interface Example extends Schema.Schema.Type<typeof Example> {}
68
+ export interface Example extends Type.InstanceType<typeof Example> {}
75
69
 
76
70
  //
77
71
  // Message
@@ -87,14 +81,9 @@ export namespace TestSchema {
87
81
  ),
88
82
  });
89
83
 
90
- export const Message = MessageStruct.pipe(
91
- Type.object({
92
- typename: 'com.example.type.message',
93
- version: '0.1.0',
94
- }),
95
- );
84
+ export const Message = MessageStruct.pipe(Type.makeObject(DXN.make('com.example.type.message', '0.1.0')));
96
85
 
97
- export interface Message extends Schema.Schema.Type<typeof Message> {}
86
+ export type Message = Type.InstanceType<typeof Message>;
98
87
 
99
88
  //
100
89
  // Organization
@@ -108,14 +97,9 @@ export namespace TestSchema {
108
97
  value: Schema.String,
109
98
  }),
110
99
  ),
111
- }).pipe(
112
- Type.object({
113
- typename: 'com.example.type.organization',
114
- version: '0.1.0',
115
- }),
116
- );
100
+ }).pipe(Type.makeObject(DXN.make('com.example.type.organization', '0.1.0')));
117
101
 
118
- export interface Organization extends Schema.Schema.Type<typeof Organization> {}
102
+ export type Organization = Type.InstanceType<typeof Organization>;
119
103
 
120
104
  //
121
105
  // Person
@@ -141,15 +125,9 @@ export namespace TestSchema {
141
125
  label: Schema.String,
142
126
  value: Schema.String,
143
127
  }).pipe(Schema.Array, Schema.optional),
144
- }).pipe(
145
- Schema.partial,
146
- Type.object({
147
- typename: 'com.example.type.person',
148
- version: '0.1.0',
149
- }),
150
- );
128
+ }).pipe(Schema.partial, Type.makeObject(DXN.make('com.example.type.person', '0.1.0')));
151
129
 
152
- export interface Person extends Schema.Schema.Type<typeof Person> {}
130
+ export interface Person extends Type.InstanceType<typeof Person> {}
153
131
 
154
132
  //
155
133
  // Task
@@ -163,30 +141,23 @@ export namespace TestSchema {
163
141
  previous: Schema.optional(Schema.suspend((): Ref.RefSchema<Task> => Ref.Ref(Task))),
164
142
  subTasks: Schema.optional(Schema.Array(Schema.suspend((): Ref.RefSchema<Task> => Ref.Ref(Task)))),
165
143
  description: Schema.optional(Schema.String),
166
- }).pipe(
167
- Schema.partial,
168
- Type.object({
169
- typename: 'com.example.type.task',
170
- version: '0.1.0',
171
- }),
172
- );
144
+ }).pipe(Schema.partial, Type.makeObject(DXN.make('com.example.type.task', '0.1.0')));
173
145
 
174
- export interface Task extends Schema.Schema.Type<typeof Task> {}
146
+ export interface Task extends Type.InstanceType<typeof Task> {}
175
147
 
176
148
  //
177
149
  // HasManager
178
150
  //
179
151
 
180
152
  export const HasManager = Schema.Struct({}).pipe(
181
- Type.relation({
182
- typename: 'com.example.type.has-manager',
183
- version: '0.1.0',
153
+ Type.makeRelation({
154
+ dxn: DXN.make('com.example.type.hasManager', '0.1.0'),
184
155
  source: Person,
185
156
  target: Person,
186
157
  }),
187
158
  );
188
159
 
189
- export interface HasManager extends Schema.Schema.Type<typeof HasManager> {}
160
+ export type HasManager = Type.InstanceType<typeof HasManager>;
190
161
 
191
162
  //
192
163
  // EmployedBy
@@ -196,15 +167,14 @@ export namespace TestSchema {
196
167
  role: Schema.String,
197
168
  since: Schema.optional(Schema.String),
198
169
  }).pipe(
199
- Type.relation({
200
- typename: 'com.example.type.employed-by',
201
- version: '0.1.0',
170
+ Type.makeRelation({
171
+ dxn: DXN.make('com.example.type.employedBy', '0.1.0'),
202
172
  source: Person,
203
173
  target: Organization,
204
174
  }),
205
175
  );
206
176
 
207
- export interface EmployedBy extends Schema.Schema.Type<typeof EmployedBy> {}
177
+ export type EmployedBy = Type.InstanceType<typeof EmployedBy>;
208
178
 
209
179
  //
210
180
  // RecordType
@@ -228,13 +198,7 @@ export namespace TestSchema {
228
198
  }),
229
199
  ),
230
200
  ),
231
- }).pipe(
232
- Schema.partial,
233
- Type.object({
234
- typename: 'com.example.type.container',
235
- version: '0.1.0',
236
- }),
237
- );
201
+ }).pipe(Schema.partial, Type.makeObject(DXN.make('com.example.type.container', '0.1.0')));
238
202
 
239
- export interface Container extends Schema.Schema.Type<typeof Container> {}
203
+ export type Container = Type.InstanceType<typeof Container>;
240
204
  }
@@ -8,24 +8,27 @@ import type * as SchemaAST from 'effect/SchemaAST';
8
8
  import { assertArgument } from '@dxos/invariant';
9
9
  import { deepMapValues } from '@dxos/util';
10
10
 
11
- import { EchoSchema, PersistentSchema, getSchemaTypename, makeObject, subscribe, toJsonSchema } from '../internal';
11
+ import { TypeSchema, getSchemaTypename, getStaticTypeSchema, makeObject, subscribe, toJsonSchema } from '../internal';
12
+ import type * as Type from '../Type';
12
13
 
13
14
  /**
14
- * Create a reactive mutable schema that updates when the JSON schema is updated.
15
+ * Create an in-memory `Type.Type` entity (a `TypeSchema` object) for tests.
16
+ * Accepts a raw Effect Schema. Pass `Type.getSchema(entity)` to convert a
17
+ * `Type.Type` entity to its underlying source schema first.
15
18
  */
16
19
  // TODO(dmaretskyi): Should be replaced by registration of typed object.
17
- export const createEchoSchema = (schema: Schema.Schema.AnyNoContext, version = '0.1.0'): EchoSchema => {
20
+ export const createEchoSchema = (schema: Schema.Schema.AnyNoContext, version = '0.1.0'): Type.Type => {
18
21
  const jsonSchema = toJsonSchema(schema);
19
22
  const typename = getSchemaTypename(schema);
20
23
  assertArgument(typename, 'typename', 'Schema does not have a typename.');
21
- const echoSchema = new EchoSchema(makeObject(PersistentSchema, { typename, version, jsonSchema }));
22
-
23
- // TODO(burdon): Unsubscribe is never called.
24
- subscribe(echoSchema.persistentSchema, () => {
25
- echoSchema._invalidate();
26
- });
27
-
28
- return echoSchema;
24
+ // typename/version are routed via EntityMeta (the canonical registry-provenance
25
+ // pair); they're no longer data fields on `TypeSchema`.
26
+ return makeObject(
27
+ getStaticTypeSchema(TypeSchema) as any,
28
+ { jsonSchema },
29
+ { keys: [], key: typename, version },
30
+ TypeSchema,
31
+ ) as unknown as Type.Type;
29
32
  };
30
33
 
31
34
  /**
@@ -1,18 +0,0 @@
1
- import {
2
- Key,
3
- TypeId,
4
- Values,
5
- get,
6
- make,
7
- set
8
- } from "./chunk-YS6Q3XAD.mjs";
9
- import "./chunk-J5LGTIGS.mjs";
10
- export {
11
- Key,
12
- TypeId,
13
- Values,
14
- get,
15
- make,
16
- set
17
- };
18
- //# sourceMappingURL=Extension.mjs.map
@@ -1,2 +0,0 @@
1
- import "./chunk-BNCCGLJN.mjs";
2
- //# sourceMappingURL=SchemaRegistry.mjs.map