@dxos/echo 0.8.4-main.c85a9c8dae → 0.8.4-main.d05539e30a

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 (558) hide show
  1. package/LICENSE +102 -5
  2. package/README.md +3 -3
  3. package/dist/lib/neutral/Annotation.mjs +5 -3
  4. package/dist/lib/neutral/Database.mjs +8 -4
  5. package/dist/lib/neutral/Entity.mjs +16 -11
  6. package/dist/lib/neutral/Err.mjs +1 -1
  7. package/dist/lib/neutral/Extension.mjs +18 -0
  8. package/dist/lib/neutral/Extension.mjs.map +7 -0
  9. package/dist/lib/neutral/Feed.mjs +23 -14
  10. package/dist/lib/neutral/Filter.mjs +23 -10
  11. package/dist/lib/neutral/Format.mjs +3 -3
  12. package/dist/lib/neutral/JsonSchema.mjs +8 -7
  13. package/dist/lib/neutral/Key.mjs +1 -1
  14. package/dist/lib/neutral/Migration.mjs +17 -0
  15. package/dist/lib/neutral/Migration.mjs.map +7 -0
  16. package/dist/lib/neutral/Obj.mjs +16 -10
  17. package/dist/lib/neutral/Order.mjs +1 -1
  18. package/dist/lib/neutral/Query.mjs +19 -13
  19. package/dist/lib/neutral/QueryResult.mjs +1 -1
  20. package/dist/lib/neutral/Ref.mjs +9 -7
  21. package/dist/lib/neutral/Relation.mjs +15 -11
  22. package/dist/lib/neutral/SchemaRegistry.mjs +1 -1
  23. package/dist/lib/neutral/Tag.mjs +14 -10
  24. package/dist/lib/neutral/Type.mjs +10 -7
  25. package/dist/lib/neutral/{chunk-DZQSL6RW.mjs → chunk-44HT3MEC.mjs} +2 -2
  26. package/dist/lib/neutral/{chunk-DZQSL6RW.mjs.map → chunk-44HT3MEC.mjs.map} +1 -1
  27. package/dist/lib/neutral/{chunk-OVUBTQLT.mjs → chunk-5SL5LDLD.mjs} +4 -2
  28. package/dist/lib/neutral/chunk-5SL5LDLD.mjs.map +7 -0
  29. package/dist/lib/neutral/{chunk-ANHVGJI4.mjs → chunk-7RVZT53K.mjs} +1 -1
  30. package/dist/lib/neutral/chunk-APHSOTIX.mjs +34 -0
  31. package/dist/lib/neutral/chunk-APHSOTIX.mjs.map +7 -0
  32. package/dist/lib/neutral/{chunk-ALOGSVBP.mjs → chunk-APJKDGFL.mjs} +72 -6
  33. package/dist/lib/neutral/chunk-APJKDGFL.mjs.map +7 -0
  34. package/dist/lib/neutral/{chunk-T6JEFNP6.mjs → chunk-BICZKPQG.mjs} +1 -1
  35. package/dist/lib/neutral/{chunk-T6JEFNP6.mjs.map → chunk-BICZKPQG.mjs.map} +1 -1
  36. package/dist/lib/neutral/chunk-BMB7IHGB.mjs +346 -0
  37. package/dist/lib/neutral/chunk-BMB7IHGB.mjs.map +7 -0
  38. package/dist/lib/neutral/chunk-FIWO2FZK.mjs +36 -0
  39. package/dist/lib/neutral/chunk-FIWO2FZK.mjs.map +7 -0
  40. package/dist/lib/neutral/{chunk-PP4DNUZU.mjs → chunk-G54OX4IX.mjs} +1418 -2885
  41. package/dist/lib/neutral/chunk-G54OX4IX.mjs.map +7 -0
  42. package/dist/lib/neutral/chunk-GWFFC34K.mjs +50 -0
  43. package/dist/lib/neutral/chunk-GWFFC34K.mjs.map +7 -0
  44. package/dist/lib/neutral/{chunk-5ELDDYWE.mjs → chunk-I2DARWPX.mjs} +17 -19
  45. package/dist/lib/neutral/chunk-I2DARWPX.mjs.map +7 -0
  46. package/dist/lib/neutral/{chunk-KGV3QIRX.mjs → chunk-J54QMAKF.mjs} +125 -17
  47. package/dist/lib/neutral/chunk-J54QMAKF.mjs.map +7 -0
  48. package/dist/lib/neutral/{chunk-BRJSLACP.mjs → chunk-MGSQGHOD.mjs} +71 -17
  49. package/dist/lib/neutral/chunk-MGSQGHOD.mjs.map +7 -0
  50. package/dist/lib/neutral/chunk-MLS7U7AT.mjs +734 -0
  51. package/dist/lib/neutral/chunk-MLS7U7AT.mjs.map +7 -0
  52. package/dist/lib/neutral/{chunk-4KG6IGL4.mjs → chunk-N4B7FHQT.mjs} +4 -4
  53. package/dist/lib/neutral/{chunk-4KG6IGL4.mjs.map → chunk-N4B7FHQT.mjs.map} +2 -2
  54. package/dist/lib/neutral/{chunk-QXF3LGN2.mjs → chunk-N7VOEPSV.mjs} +8 -3
  55. package/dist/lib/neutral/chunk-N7VOEPSV.mjs.map +7 -0
  56. package/dist/lib/neutral/{chunk-T4MPQJ7X.mjs → chunk-PSZBLH53.mjs} +6 -22
  57. package/dist/lib/neutral/chunk-PSZBLH53.mjs.map +7 -0
  58. package/dist/lib/neutral/{chunk-ZWKJ4LZJ.mjs → chunk-PT37DG2F.mjs} +23 -51
  59. package/dist/lib/neutral/chunk-PT37DG2F.mjs.map +7 -0
  60. package/dist/lib/neutral/{chunk-GAWKQ5DZ.mjs → chunk-Q2KKKJSV.mjs} +5 -5
  61. package/dist/lib/neutral/chunk-Q2KKKJSV.mjs.map +7 -0
  62. package/dist/lib/neutral/{chunk-AQP4QKYP.mjs → chunk-Q7ZL2P5H.mjs} +56 -19
  63. package/dist/lib/neutral/chunk-Q7ZL2P5H.mjs.map +7 -0
  64. package/dist/lib/neutral/{chunk-O3TZFQCT.mjs → chunk-QRZ2I3ZM.mjs} +2 -2
  65. package/dist/lib/neutral/chunk-QRZ2I3ZM.mjs.map +7 -0
  66. package/dist/lib/neutral/{chunk-W7OP5HGZ.mjs → chunk-SCPFDS2E.mjs} +14 -10
  67. package/dist/lib/neutral/chunk-SCPFDS2E.mjs.map +7 -0
  68. package/dist/lib/neutral/{chunk-F7KMHDPJ.mjs → chunk-TNBK56IN.mjs} +54 -31
  69. package/dist/lib/neutral/chunk-TNBK56IN.mjs.map +7 -0
  70. package/dist/lib/neutral/{chunk-M2KVTHZM.mjs → chunk-TRPZU2HV.mjs} +10 -10
  71. package/dist/lib/neutral/chunk-TRPZU2HV.mjs.map +7 -0
  72. package/dist/lib/neutral/{chunk-ZTUBYOGB.mjs → chunk-TTCSATUD.mjs} +1 -1
  73. package/dist/lib/neutral/chunk-TTCSATUD.mjs.map +7 -0
  74. package/dist/lib/neutral/{chunk-OMUPQMLR.mjs → chunk-V72DY6LU.mjs} +1 -1
  75. package/dist/lib/neutral/chunk-ZFACXBY6.mjs +136 -0
  76. package/dist/lib/neutral/chunk-ZFACXBY6.mjs.map +7 -0
  77. package/dist/lib/neutral/{chunk-MXQJZCPY.mjs → chunk-ZISMEVKD.mjs} +1 -1
  78. package/dist/lib/neutral/chunk-ZISMEVKD.mjs.map +7 -0
  79. package/dist/lib/neutral/index.mjs +38 -25
  80. package/dist/lib/neutral/internal/index.mjs +50 -38
  81. package/dist/lib/neutral/meta.json +1 -1
  82. package/dist/lib/neutral/testing/index.mjs +196 -136
  83. package/dist/lib/neutral/testing/index.mjs.map +3 -3
  84. package/dist/types/src/Annotation.d.ts +3 -3
  85. package/dist/types/src/Annotation.d.ts.map +1 -1
  86. package/dist/types/src/Collection.d.ts.map +1 -1
  87. package/dist/types/src/Database.d.ts +16 -4
  88. package/dist/types/src/Database.d.ts.map +1 -1
  89. package/dist/types/src/Dataset.d.ts +2 -1
  90. package/dist/types/src/Dataset.d.ts.map +1 -1
  91. package/dist/types/src/Entity.d.ts +17 -11
  92. package/dist/types/src/Entity.d.ts.map +1 -1
  93. package/dist/types/src/Err.d.ts +18 -18
  94. package/dist/types/src/Err.d.ts.map +1 -1
  95. package/dist/types/src/Extension.d.ts +80 -0
  96. package/dist/types/src/Extension.d.ts.map +1 -0
  97. package/dist/types/src/Extension.test.d.ts +2 -0
  98. package/dist/types/src/Extension.test.d.ts.map +1 -0
  99. package/dist/types/src/Feed.d.ts +65 -24
  100. package/dist/types/src/Feed.d.ts.map +1 -1
  101. package/dist/types/src/Filter.d.ts +54 -4
  102. package/dist/types/src/Filter.d.ts.map +1 -1
  103. package/dist/types/src/Filter.test.d.ts +2 -0
  104. package/dist/types/src/Filter.test.d.ts.map +1 -0
  105. package/dist/types/src/Format.d.ts +1 -1
  106. package/dist/types/src/Format.d.ts.map +1 -1
  107. package/dist/types/src/Hypergraph.d.ts +9 -4
  108. package/dist/types/src/Hypergraph.d.ts.map +1 -1
  109. package/dist/types/src/Json.d.ts +33 -0
  110. package/dist/types/src/Json.d.ts.map +1 -0
  111. package/dist/types/src/Json.test.d.ts +2 -0
  112. package/dist/types/src/Json.test.d.ts.map +1 -0
  113. package/dist/types/src/JsonSchema.d.ts +5 -5
  114. package/dist/types/src/JsonSchema.d.ts.map +1 -1
  115. package/dist/types/src/Migration.d.ts +69 -0
  116. package/dist/types/src/Migration.d.ts.map +1 -0
  117. package/dist/types/src/Obj.d.ts +46 -30
  118. package/dist/types/src/Obj.d.ts.map +1 -1
  119. package/dist/types/src/Order.d.ts.map +1 -1
  120. package/dist/types/src/Query.d.ts +13 -2
  121. package/dist/types/src/Query.d.ts.map +1 -1
  122. package/dist/types/src/Ref.d.ts +12 -11
  123. package/dist/types/src/Ref.d.ts.map +1 -1
  124. package/dist/types/src/Relation.d.ts +16 -16
  125. package/dist/types/src/Relation.d.ts.map +1 -1
  126. package/dist/types/src/SchemaRegistry.d.ts +1 -1
  127. package/dist/types/src/Tag.d.ts +2 -2
  128. package/dist/types/src/Tag.d.ts.map +1 -1
  129. package/dist/types/src/Type.d.ts +10 -9
  130. package/dist/types/src/Type.d.ts.map +1 -1
  131. package/dist/types/src/View.d.ts +1 -1
  132. package/dist/types/src/View.d.ts.map +1 -1
  133. package/dist/types/src/exemplars.test.d.ts +2 -0
  134. package/dist/types/src/exemplars.test.d.ts.map +1 -0
  135. package/dist/types/src/index.d.ts +3 -0
  136. package/dist/types/src/index.d.ts.map +1 -1
  137. package/dist/types/src/internal/{annotations → Annotation}/annotations.d.ts +33 -2
  138. package/dist/types/src/internal/Annotation/annotations.d.ts.map +1 -0
  139. package/dist/types/src/internal/Annotation/annotations.test.d.ts.map +1 -0
  140. package/dist/types/src/internal/Annotation/index.d.ts +4 -0
  141. package/dist/types/src/internal/Annotation/index.d.ts.map +1 -0
  142. package/dist/types/src/internal/{api → Annotation}/sorting.d.ts +1 -1
  143. package/dist/types/src/internal/Annotation/sorting.d.ts.map +1 -0
  144. package/dist/types/src/internal/{annotations → Annotation}/util.d.ts +2 -2
  145. package/dist/types/src/internal/Annotation/util.d.ts.map +1 -0
  146. package/dist/types/src/internal/{api/entity.d.ts → Entity/api.d.ts} +2 -2
  147. package/dist/types/src/internal/Entity/api.d.ts.map +1 -0
  148. package/dist/types/src/internal/{entities → Entity}/entity.d.ts +2 -2
  149. package/dist/types/src/internal/Entity/entity.d.ts.map +1 -0
  150. package/dist/types/src/internal/{entities → Entity}/index.d.ts +2 -0
  151. package/dist/types/src/internal/Entity/index.d.ts.map +1 -0
  152. package/dist/types/src/internal/{entities → Entity}/model.d.ts +4 -26
  153. package/dist/types/src/internal/Entity/model.d.ts.map +1 -0
  154. package/dist/types/src/internal/{entities → Entity}/object.d.ts +2 -2
  155. package/dist/types/src/internal/Entity/object.d.ts.map +1 -0
  156. package/dist/types/src/internal/{entities → Entity}/relation.d.ts +3 -30
  157. package/dist/types/src/internal/Entity/relation.d.ts.map +1 -0
  158. package/dist/types/src/internal/Entity/util.d.ts.map +1 -0
  159. package/dist/types/src/internal/{api → Entity}/version.d.ts +1 -1
  160. package/dist/types/src/internal/Entity/version.d.ts.map +1 -0
  161. package/dist/types/src/internal/Format/date.d.ts.map +1 -0
  162. package/dist/types/src/internal/Format/date.test.d.ts.map +1 -0
  163. package/dist/types/src/internal/Format/format.d.ts.map +1 -0
  164. package/dist/types/src/internal/Format/format.test.d.ts.map +1 -0
  165. package/dist/types/src/internal/Format/index.d.ts.map +1 -0
  166. package/dist/types/src/internal/Format/number.d.ts.map +1 -0
  167. package/dist/types/src/internal/Format/object.d.ts.map +1 -0
  168. package/dist/types/src/internal/Format/select.d.ts.map +1 -0
  169. package/dist/types/src/internal/Format/string.d.ts.map +1 -0
  170. package/dist/types/src/internal/{formats → Format}/types.d.ts +1 -1
  171. package/dist/types/src/internal/Format/types.d.ts.map +1 -0
  172. package/dist/types/src/internal/{json-schema → JsonSchema}/annotations.d.ts +1 -1
  173. package/dist/types/src/internal/JsonSchema/annotations.d.ts.map +1 -0
  174. package/dist/types/src/internal/JsonSchema/effect-schema.test.d.ts.map +1 -0
  175. package/dist/types/src/internal/JsonSchema/index.d.ts.map +1 -0
  176. package/dist/types/src/internal/JsonSchema/json-schema-normalize.d.ts.map +1 -0
  177. package/dist/types/src/internal/{json-schema → JsonSchema}/json-schema-type.d.ts +23 -23
  178. package/dist/types/src/internal/JsonSchema/json-schema-type.d.ts.map +1 -0
  179. package/dist/types/src/internal/{json-schema → JsonSchema}/json-schema.d.ts +1 -1
  180. package/dist/types/src/internal/JsonSchema/json-schema.d.ts.map +1 -0
  181. package/dist/types/src/internal/JsonSchema/json-schema.test.d.ts.map +1 -0
  182. package/dist/types/src/internal/Obj/clone.d.ts.map +1 -0
  183. package/dist/types/src/internal/Obj/common.d.ts.map +1 -0
  184. package/dist/types/src/internal/{object → Obj}/create-object.d.ts +2 -2
  185. package/dist/types/src/internal/Obj/create-object.d.ts.map +1 -0
  186. package/dist/types/src/internal/Obj/create-object.test.d.ts.map +1 -0
  187. package/dist/types/src/internal/{object → Obj}/deleted.d.ts +1 -1
  188. package/dist/types/src/internal/Obj/deleted.d.ts.map +1 -0
  189. package/dist/types/src/internal/{object → Obj}/ids.d.ts +1 -1
  190. package/dist/types/src/internal/Obj/ids.d.ts.map +1 -0
  191. package/dist/types/src/internal/Obj/index.d.ts.map +1 -0
  192. package/dist/types/src/internal/Obj/inspect.d.ts.map +1 -0
  193. package/dist/types/src/internal/{object → Obj}/json-serializer.d.ts +13 -5
  194. package/dist/types/src/internal/Obj/json-serializer.d.ts.map +1 -0
  195. package/dist/types/src/internal/Obj/json-serializer.test.d.ts.map +1 -0
  196. package/dist/types/src/internal/Obj/schema-validator.d.ts +2 -0
  197. package/dist/types/src/internal/Obj/schema-validator.d.ts.map +1 -0
  198. package/dist/types/src/internal/Obj/schema-validator.test.d.ts.map +1 -0
  199. package/dist/types/src/internal/{object → Obj}/set-value.d.ts +2 -2
  200. package/dist/types/src/internal/Obj/set-value.d.ts.map +1 -0
  201. package/dist/types/src/internal/Obj/set-value.test.d.ts.map +1 -0
  202. package/dist/types/src/internal/Obj/snapshot.d.ts.map +1 -0
  203. package/dist/types/src/internal/{object → Obj}/typed-object.d.ts +2 -2
  204. package/dist/types/src/internal/Obj/typed-object.d.ts.map +1 -0
  205. package/dist/types/src/internal/Obj/typed-object.test.d.ts.map +1 -0
  206. package/dist/types/src/internal/Query.d.ts +10 -0
  207. package/dist/types/src/internal/Query.d.ts.map +1 -0
  208. package/dist/types/src/internal/Ref/index.d.ts.map +1 -0
  209. package/dist/types/src/internal/{ref → Ref}/ref-array.d.ts +1 -1
  210. package/dist/types/src/internal/Ref/ref-array.d.ts.map +1 -0
  211. package/dist/types/src/internal/{ref → Ref}/ref.d.ts +15 -2
  212. package/dist/types/src/internal/Ref/ref.d.ts.map +1 -0
  213. package/dist/types/src/internal/Ref/ref.test.d.ts.map +1 -0
  214. package/dist/types/src/internal/{schema → Type}/compose.d.ts +1 -1
  215. package/dist/types/src/internal/Type/compose.d.ts.map +1 -0
  216. package/dist/types/src/internal/Type/compose.test.d.ts.map +1 -0
  217. package/dist/types/src/internal/{schema → Type}/echo-schema.d.ts +6 -6
  218. package/dist/types/src/internal/Type/echo-schema.d.ts.map +1 -0
  219. package/dist/types/src/internal/Type/index.d.ts.map +1 -0
  220. package/dist/types/src/internal/Type/manipulation.d.ts.map +1 -0
  221. package/dist/types/src/internal/{schema → Type}/persistent-schema.d.ts +2 -2
  222. package/dist/types/src/internal/Type/persistent-schema.d.ts.map +1 -0
  223. package/dist/types/src/internal/{api → common/api}/index.d.ts +0 -4
  224. package/dist/types/src/internal/common/api/index.d.ts.map +1 -0
  225. package/dist/types/src/internal/{api → common/api}/meta.d.ts +3 -3
  226. package/dist/types/src/internal/common/api/meta.d.ts.map +1 -0
  227. package/dist/types/src/internal/common/index.d.ts +4 -0
  228. package/dist/types/src/internal/common/index.d.ts.map +1 -0
  229. package/dist/types/src/internal/{proxy → common/proxy}/change-context.d.ts +1 -1
  230. package/dist/types/src/internal/common/proxy/change-context.d.ts.map +1 -0
  231. package/dist/types/src/internal/common/proxy/change.test.d.ts.map +1 -0
  232. package/dist/types/src/internal/common/proxy/define-hidden-property.d.ts.map +1 -0
  233. package/dist/types/src/internal/{proxy → common/proxy}/errors.d.ts +1 -1
  234. package/dist/types/src/internal/common/proxy/errors.d.ts.map +1 -0
  235. package/dist/types/src/internal/common/proxy/event-batch.d.ts.map +1 -0
  236. package/dist/types/src/internal/common/proxy/handler.test.d.ts.map +1 -0
  237. package/dist/types/src/internal/common/proxy/index.d.ts.map +1 -0
  238. package/dist/types/src/internal/common/proxy/json-serializer.d.ts.map +1 -0
  239. package/dist/types/src/internal/common/proxy/make-object.d.ts.map +1 -0
  240. package/dist/types/src/internal/common/proxy/ownership.d.ts.map +1 -0
  241. package/dist/types/src/internal/common/proxy/proxy-types.d.ts.map +1 -0
  242. package/dist/types/src/internal/common/proxy/proxy-utils.d.ts.map +1 -0
  243. package/dist/types/src/internal/{proxy → common/proxy}/reactive-array.d.ts +1 -1
  244. package/dist/types/src/internal/common/proxy/reactive-array.d.ts.map +1 -0
  245. package/dist/types/src/internal/{proxy → common/proxy}/reactive.d.ts +2 -2
  246. package/dist/types/src/internal/{proxy → common/proxy}/reactive.d.ts.map +1 -1
  247. package/dist/types/src/internal/common/proxy/reactive.test.d.ts +2 -0
  248. package/dist/types/src/internal/common/proxy/reactive.test.d.ts.map +1 -0
  249. package/dist/types/src/internal/common/proxy/schema-validator.d.ts.map +1 -0
  250. package/dist/types/src/internal/common/proxy/schema.test.d.ts.map +1 -0
  251. package/dist/types/src/internal/common/proxy/symbols.d.ts.map +1 -0
  252. package/dist/types/src/internal/common/proxy/typed-handler.d.ts.map +1 -0
  253. package/dist/types/src/internal/common/proxy/typed-handler.test.d.ts.map +1 -0
  254. package/dist/types/src/internal/common/proxy/typed-object.test.d.ts.map +1 -0
  255. package/dist/types/src/internal/common/types/base.d.ts.map +1 -0
  256. package/dist/types/src/internal/{types → common/types}/entity.d.ts +4 -4
  257. package/dist/types/src/internal/common/types/entity.d.ts.map +1 -0
  258. package/dist/types/src/internal/{types → common/types}/index.d.ts +1 -0
  259. package/dist/types/src/internal/common/types/index.d.ts.map +1 -0
  260. package/dist/types/src/internal/{types → common/types}/meta.d.ts +13 -3
  261. package/dist/types/src/internal/common/types/meta.d.ts.map +1 -0
  262. package/dist/types/src/internal/common/types/model-symbols.d.ts +54 -0
  263. package/dist/types/src/internal/common/types/model-symbols.d.ts.map +1 -0
  264. package/dist/types/src/internal/common/types/typename.d.ts.map +1 -0
  265. package/dist/types/src/internal/{types → common/types}/version.d.ts +1 -1
  266. package/dist/types/src/internal/common/types/version.d.ts.map +1 -0
  267. package/dist/types/src/internal/index.d.ts +9 -10
  268. package/dist/types/src/internal/index.d.ts.map +1 -1
  269. package/dist/types/src/testing/test-data.d.ts +8 -8
  270. package/dist/types/src/testing/test-data.d.ts.map +1 -1
  271. package/dist/types/src/testing/test-schema.d.ts +53 -53
  272. package/dist/types/src/testing/test-schema.d.ts.map +1 -1
  273. package/dist/types/src/testing/util.d.ts.map +1 -1
  274. package/dist/types/tsconfig.tsbuildinfo +1 -1
  275. package/package.json +25 -15
  276. package/src/Annotation.ts +6 -3
  277. package/src/Collection.ts +8 -1
  278. package/src/Database.ts +55 -18
  279. package/src/Dataset.ts +2 -0
  280. package/src/Entity.ts +20 -11
  281. package/src/Err.ts +2 -0
  282. package/src/Extension.test.ts +235 -0
  283. package/src/Extension.ts +122 -0
  284. package/src/Feed.ts +118 -37
  285. package/src/Filter.test.ts +90 -0
  286. package/src/Filter.ts +99 -3
  287. package/src/Format.ts +1 -1
  288. package/src/Hypergraph.ts +10 -5
  289. package/src/Json.test.ts +175 -0
  290. package/src/Json.ts +102 -0
  291. package/src/JsonSchema.ts +7 -5
  292. package/src/Migration.ts +106 -0
  293. package/src/Obj.test.ts +107 -15
  294. package/src/Obj.ts +167 -40
  295. package/src/Order.ts +2 -0
  296. package/src/Query.test.ts +222 -32
  297. package/src/Query.ts +62 -10
  298. package/src/Ref.ts +16 -12
  299. package/src/Relation.test.ts +2 -2
  300. package/src/Relation.ts +28 -21
  301. package/src/SchemaRegistry.ts +1 -1
  302. package/src/Tag.ts +3 -1
  303. package/src/Type.ts +14 -11
  304. package/src/View.ts +9 -2
  305. package/src/exemplars.test.ts +21 -0
  306. package/src/index.ts +4 -0
  307. package/src/internal/{annotations → Annotation}/annotations.test.ts +56 -7
  308. package/src/internal/{annotations → Annotation}/annotations.ts +84 -20
  309. package/src/internal/{annotations → Annotation}/index.ts +1 -0
  310. package/src/internal/{api → Annotation}/sorting.ts +2 -4
  311. package/src/internal/{annotations → Annotation}/util.ts +1 -1
  312. package/src/internal/{api/entity.ts → Entity/api.ts} +3 -2
  313. package/src/internal/{entities → Entity}/entity.ts +2 -2
  314. package/src/internal/{entities → Entity}/index.ts +2 -0
  315. package/src/internal/{entities → Entity}/model.ts +15 -42
  316. package/src/internal/{entities → Entity}/object.ts +2 -3
  317. package/src/internal/{entities → Entity}/relation.ts +19 -36
  318. package/src/internal/{api → Entity}/version.ts +2 -2
  319. package/src/internal/{formats → Format}/date.test.ts +1 -2
  320. package/src/internal/{formats → Format}/format.test.ts +1 -2
  321. package/src/internal/{formats → Format}/types.ts +2 -2
  322. package/src/internal/{json-schema → JsonSchema}/annotations.ts +3 -3
  323. package/src/internal/{json-schema → JsonSchema}/json-schema-type.ts +4 -4
  324. package/src/internal/{json-schema → JsonSchema}/json-schema.test.ts +48 -49
  325. package/src/internal/{json-schema → JsonSchema}/json-schema.ts +3 -4
  326. package/src/internal/{object → Obj}/clone.ts +3 -3
  327. package/src/internal/{object → Obj}/common.ts +2 -2
  328. package/src/internal/{object → Obj}/create-object.test.ts +5 -7
  329. package/src/internal/{object → Obj}/create-object.ts +5 -6
  330. package/src/internal/{object → Obj}/deleted.ts +2 -2
  331. package/src/internal/{object → Obj}/ids.ts +1 -1
  332. package/src/internal/{object → Obj}/inspect.ts +2 -2
  333. package/src/internal/{object → Obj}/json-serializer.test.ts +8 -9
  334. package/src/internal/{object → Obj}/json-serializer.ts +44 -26
  335. package/src/internal/{object → Obj}/schema-validator.ts +1 -1
  336. package/src/internal/{object → Obj}/set-value.test.ts +24 -24
  337. package/src/internal/{object → Obj}/set-value.ts +3 -3
  338. package/src/internal/{object → Obj}/snapshot.ts +14 -5
  339. package/src/internal/{object → Obj}/typed-object.test.ts +3 -3
  340. package/src/internal/{object → Obj}/typed-object.ts +2 -2
  341. package/src/internal/Query.ts +156 -0
  342. package/src/internal/{ref → Ref}/ref-array.ts +1 -2
  343. package/src/internal/{ref → Ref}/ref.test.ts +4 -5
  344. package/src/internal/{ref → Ref}/ref.ts +20 -3
  345. package/src/internal/{schema → Type}/compose.test.ts +5 -6
  346. package/src/internal/{schema → Type}/compose.ts +1 -1
  347. package/src/internal/{schema → Type}/echo-schema.ts +7 -8
  348. package/src/internal/{schema → Type}/manipulation.ts +1 -1
  349. package/src/internal/{schema → Type}/persistent-schema.ts +7 -7
  350. package/src/internal/{README.md → common/README.md} +1 -1
  351. package/src/internal/{api → common/api}/index.ts +0 -4
  352. package/src/internal/{api → common/api}/meta.ts +3 -3
  353. package/src/internal/common/index.ts +7 -0
  354. package/src/internal/{proxy → common/proxy}/change-context.ts +1 -1
  355. package/src/internal/{proxy → common/proxy}/change.test.ts +97 -97
  356. package/src/internal/{proxy → common/proxy}/errors.ts +2 -2
  357. package/src/internal/{proxy → common/proxy}/handler.test.ts +2 -4
  358. package/src/internal/{proxy → common/proxy}/json-serializer.ts +6 -3
  359. package/src/internal/{proxy → common/proxy}/make-object.ts +1 -2
  360. package/src/internal/{proxy → common/proxy}/ownership.ts +0 -1
  361. package/src/internal/{proxy → common/proxy}/reactive-array.ts +1 -1
  362. package/src/internal/common/proxy/reactive.test.ts +54 -0
  363. package/src/internal/{proxy → common/proxy}/reactive.ts +12 -4
  364. package/src/internal/{proxy → common/proxy}/schema.test.ts +10 -10
  365. package/src/internal/{proxy → common/proxy}/typed-handler.test.ts +6 -7
  366. package/src/internal/{proxy → common/proxy}/typed-handler.ts +10 -13
  367. package/src/internal/{proxy → common/proxy}/typed-object.test.ts +5 -6
  368. package/src/internal/{types → common/types}/entity.ts +1 -1
  369. package/src/internal/{types → common/types}/index.ts +1 -0
  370. package/src/internal/{types → common/types}/meta.ts +13 -2
  371. package/src/internal/common/types/model-symbols.ts +69 -0
  372. package/src/internal/index.ts +9 -31
  373. package/src/testing/api.test.ts +2 -3
  374. package/src/testing/test-data.ts +157 -98
  375. package/src/testing/test-schema.ts +9 -9
  376. package/dist/lib/neutral/chunk-5ELDDYWE.mjs.map +0 -7
  377. package/dist/lib/neutral/chunk-ALOGSVBP.mjs.map +0 -7
  378. package/dist/lib/neutral/chunk-AQP4QKYP.mjs.map +0 -7
  379. package/dist/lib/neutral/chunk-BRJSLACP.mjs.map +0 -7
  380. package/dist/lib/neutral/chunk-F7KMHDPJ.mjs.map +0 -7
  381. package/dist/lib/neutral/chunk-GAWKQ5DZ.mjs.map +0 -7
  382. package/dist/lib/neutral/chunk-GFNCSK7F.mjs +0 -101
  383. package/dist/lib/neutral/chunk-GFNCSK7F.mjs.map +0 -7
  384. package/dist/lib/neutral/chunk-KGV3QIRX.mjs.map +0 -7
  385. package/dist/lib/neutral/chunk-M2KVTHZM.mjs.map +0 -7
  386. package/dist/lib/neutral/chunk-MXQJZCPY.mjs.map +0 -7
  387. package/dist/lib/neutral/chunk-O3TZFQCT.mjs.map +0 -7
  388. package/dist/lib/neutral/chunk-OVUBTQLT.mjs.map +0 -7
  389. package/dist/lib/neutral/chunk-PP4DNUZU.mjs.map +0 -7
  390. package/dist/lib/neutral/chunk-QXF3LGN2.mjs.map +0 -7
  391. package/dist/lib/neutral/chunk-T4MPQJ7X.mjs.map +0 -7
  392. package/dist/lib/neutral/chunk-W7OP5HGZ.mjs.map +0 -7
  393. package/dist/lib/neutral/chunk-ZTUBYOGB.mjs.map +0 -7
  394. package/dist/lib/neutral/chunk-ZWKJ4LZJ.mjs.map +0 -7
  395. package/dist/types/src/internal/annotations/annotations.d.ts.map +0 -1
  396. package/dist/types/src/internal/annotations/annotations.test.d.ts.map +0 -1
  397. package/dist/types/src/internal/annotations/index.d.ts +0 -3
  398. package/dist/types/src/internal/annotations/index.d.ts.map +0 -1
  399. package/dist/types/src/internal/annotations/util.d.ts.map +0 -1
  400. package/dist/types/src/internal/api/annotations.d.ts +0 -23
  401. package/dist/types/src/internal/api/annotations.d.ts.map +0 -1
  402. package/dist/types/src/internal/api/entity.d.ts.map +0 -1
  403. package/dist/types/src/internal/api/index.d.ts.map +0 -1
  404. package/dist/types/src/internal/api/meta.d.ts.map +0 -1
  405. package/dist/types/src/internal/api/sorting.d.ts.map +0 -1
  406. package/dist/types/src/internal/api/version.d.ts.map +0 -1
  407. package/dist/types/src/internal/entities/entity.d.ts.map +0 -1
  408. package/dist/types/src/internal/entities/index.d.ts.map +0 -1
  409. package/dist/types/src/internal/entities/model.d.ts.map +0 -1
  410. package/dist/types/src/internal/entities/object.d.ts.map +0 -1
  411. package/dist/types/src/internal/entities/relation.d.ts.map +0 -1
  412. package/dist/types/src/internal/entities/util.d.ts.map +0 -1
  413. package/dist/types/src/internal/formats/date.d.ts.map +0 -1
  414. package/dist/types/src/internal/formats/date.test.d.ts.map +0 -1
  415. package/dist/types/src/internal/formats/format.d.ts.map +0 -1
  416. package/dist/types/src/internal/formats/format.test.d.ts.map +0 -1
  417. package/dist/types/src/internal/formats/index.d.ts.map +0 -1
  418. package/dist/types/src/internal/formats/number.d.ts.map +0 -1
  419. package/dist/types/src/internal/formats/object.d.ts.map +0 -1
  420. package/dist/types/src/internal/formats/select.d.ts.map +0 -1
  421. package/dist/types/src/internal/formats/string.d.ts.map +0 -1
  422. package/dist/types/src/internal/formats/types.d.ts.map +0 -1
  423. package/dist/types/src/internal/json-schema/annotations.d.ts.map +0 -1
  424. package/dist/types/src/internal/json-schema/effect-schema.test.d.ts.map +0 -1
  425. package/dist/types/src/internal/json-schema/index.d.ts.map +0 -1
  426. package/dist/types/src/internal/json-schema/json-schema-normalize.d.ts.map +0 -1
  427. package/dist/types/src/internal/json-schema/json-schema-type.d.ts.map +0 -1
  428. package/dist/types/src/internal/json-schema/json-schema.d.ts.map +0 -1
  429. package/dist/types/src/internal/json-schema/json-schema.test.d.ts.map +0 -1
  430. package/dist/types/src/internal/object/clone.d.ts.map +0 -1
  431. package/dist/types/src/internal/object/common.d.ts.map +0 -1
  432. package/dist/types/src/internal/object/create-object.d.ts.map +0 -1
  433. package/dist/types/src/internal/object/create-object.test.d.ts.map +0 -1
  434. package/dist/types/src/internal/object/deleted.d.ts.map +0 -1
  435. package/dist/types/src/internal/object/ids.d.ts.map +0 -1
  436. package/dist/types/src/internal/object/index.d.ts.map +0 -1
  437. package/dist/types/src/internal/object/inspect.d.ts.map +0 -1
  438. package/dist/types/src/internal/object/json-serializer.d.ts.map +0 -1
  439. package/dist/types/src/internal/object/json-serializer.test.d.ts.map +0 -1
  440. package/dist/types/src/internal/object/schema-validator.d.ts +0 -2
  441. package/dist/types/src/internal/object/schema-validator.d.ts.map +0 -1
  442. package/dist/types/src/internal/object/schema-validator.test.d.ts.map +0 -1
  443. package/dist/types/src/internal/object/set-value.d.ts.map +0 -1
  444. package/dist/types/src/internal/object/set-value.test.d.ts.map +0 -1
  445. package/dist/types/src/internal/object/snapshot.d.ts.map +0 -1
  446. package/dist/types/src/internal/object/typed-object.d.ts.map +0 -1
  447. package/dist/types/src/internal/object/typed-object.test.d.ts.map +0 -1
  448. package/dist/types/src/internal/proxy/change-context.d.ts.map +0 -1
  449. package/dist/types/src/internal/proxy/change.test.d.ts.map +0 -1
  450. package/dist/types/src/internal/proxy/define-hidden-property.d.ts.map +0 -1
  451. package/dist/types/src/internal/proxy/errors.d.ts.map +0 -1
  452. package/dist/types/src/internal/proxy/event-batch.d.ts.map +0 -1
  453. package/dist/types/src/internal/proxy/handler.test.d.ts.map +0 -1
  454. package/dist/types/src/internal/proxy/index.d.ts.map +0 -1
  455. package/dist/types/src/internal/proxy/json-serializer.d.ts.map +0 -1
  456. package/dist/types/src/internal/proxy/make-object.d.ts.map +0 -1
  457. package/dist/types/src/internal/proxy/ownership.d.ts.map +0 -1
  458. package/dist/types/src/internal/proxy/proxy-types.d.ts.map +0 -1
  459. package/dist/types/src/internal/proxy/proxy-utils.d.ts.map +0 -1
  460. package/dist/types/src/internal/proxy/reactive-array.d.ts.map +0 -1
  461. package/dist/types/src/internal/proxy/schema-validator.d.ts.map +0 -1
  462. package/dist/types/src/internal/proxy/schema.test.d.ts.map +0 -1
  463. package/dist/types/src/internal/proxy/symbols.d.ts.map +0 -1
  464. package/dist/types/src/internal/proxy/typed-handler.d.ts.map +0 -1
  465. package/dist/types/src/internal/proxy/typed-handler.test.d.ts.map +0 -1
  466. package/dist/types/src/internal/proxy/typed-object.test.d.ts.map +0 -1
  467. package/dist/types/src/internal/ref/index.d.ts.map +0 -1
  468. package/dist/types/src/internal/ref/ref-array.d.ts.map +0 -1
  469. package/dist/types/src/internal/ref/ref.d.ts.map +0 -1
  470. package/dist/types/src/internal/ref/ref.test.d.ts.map +0 -1
  471. package/dist/types/src/internal/schema/compose.d.ts.map +0 -1
  472. package/dist/types/src/internal/schema/compose.test.d.ts.map +0 -1
  473. package/dist/types/src/internal/schema/echo-schema.d.ts.map +0 -1
  474. package/dist/types/src/internal/schema/index.d.ts.map +0 -1
  475. package/dist/types/src/internal/schema/manipulation.d.ts.map +0 -1
  476. package/dist/types/src/internal/schema/persistent-schema.d.ts.map +0 -1
  477. package/dist/types/src/internal/types/base.d.ts.map +0 -1
  478. package/dist/types/src/internal/types/entity.d.ts.map +0 -1
  479. package/dist/types/src/internal/types/index.d.ts.map +0 -1
  480. package/dist/types/src/internal/types/meta.d.ts.map +0 -1
  481. package/dist/types/src/internal/types/typename.d.ts.map +0 -1
  482. package/dist/types/src/internal/types/version.d.ts.map +0 -1
  483. package/src/internal/api/annotations.ts +0 -60
  484. /package/dist/lib/neutral/{chunk-ANHVGJI4.mjs.map → chunk-7RVZT53K.mjs.map} +0 -0
  485. /package/dist/lib/neutral/{chunk-OMUPQMLR.mjs.map → chunk-V72DY6LU.mjs.map} +0 -0
  486. /package/dist/types/src/internal/{annotations → Annotation}/annotations.test.d.ts +0 -0
  487. /package/dist/types/src/internal/{entities → Entity}/util.d.ts +0 -0
  488. /package/dist/types/src/internal/{formats → Format}/date.d.ts +0 -0
  489. /package/dist/types/src/internal/{formats → Format}/date.test.d.ts +0 -0
  490. /package/dist/types/src/internal/{formats → Format}/format.d.ts +0 -0
  491. /package/dist/types/src/internal/{formats → Format}/format.test.d.ts +0 -0
  492. /package/dist/types/src/internal/{formats → Format}/index.d.ts +0 -0
  493. /package/dist/types/src/internal/{formats → Format}/number.d.ts +0 -0
  494. /package/dist/types/src/internal/{formats → Format}/object.d.ts +0 -0
  495. /package/dist/types/src/internal/{formats → Format}/select.d.ts +0 -0
  496. /package/dist/types/src/internal/{formats → Format}/string.d.ts +0 -0
  497. /package/dist/types/src/internal/{json-schema → JsonSchema}/effect-schema.test.d.ts +0 -0
  498. /package/dist/types/src/internal/{json-schema → JsonSchema}/index.d.ts +0 -0
  499. /package/dist/types/src/internal/{json-schema → JsonSchema}/json-schema-normalize.d.ts +0 -0
  500. /package/dist/types/src/internal/{json-schema → JsonSchema}/json-schema.test.d.ts +0 -0
  501. /package/dist/types/src/internal/{object → Obj}/clone.d.ts +0 -0
  502. /package/dist/types/src/internal/{object → Obj}/common.d.ts +0 -0
  503. /package/dist/types/src/internal/{object → Obj}/create-object.test.d.ts +0 -0
  504. /package/dist/types/src/internal/{object → Obj}/index.d.ts +0 -0
  505. /package/dist/types/src/internal/{object → Obj}/inspect.d.ts +0 -0
  506. /package/dist/types/src/internal/{object → Obj}/json-serializer.test.d.ts +0 -0
  507. /package/dist/types/src/internal/{object → Obj}/schema-validator.test.d.ts +0 -0
  508. /package/dist/types/src/internal/{object → Obj}/set-value.test.d.ts +0 -0
  509. /package/dist/types/src/internal/{object → Obj}/snapshot.d.ts +0 -0
  510. /package/dist/types/src/internal/{object → Obj}/typed-object.test.d.ts +0 -0
  511. /package/dist/types/src/internal/{ref → Ref}/index.d.ts +0 -0
  512. /package/dist/types/src/internal/{ref → Ref}/ref.test.d.ts +0 -0
  513. /package/dist/types/src/internal/{schema → Type}/compose.test.d.ts +0 -0
  514. /package/dist/types/src/internal/{schema → Type}/index.d.ts +0 -0
  515. /package/dist/types/src/internal/{schema → Type}/manipulation.d.ts +0 -0
  516. /package/dist/types/src/internal/{proxy → common/proxy}/change.test.d.ts +0 -0
  517. /package/dist/types/src/internal/{proxy → common/proxy}/define-hidden-property.d.ts +0 -0
  518. /package/dist/types/src/internal/{proxy → common/proxy}/event-batch.d.ts +0 -0
  519. /package/dist/types/src/internal/{proxy → common/proxy}/handler.test.d.ts +0 -0
  520. /package/dist/types/src/internal/{proxy → common/proxy}/index.d.ts +0 -0
  521. /package/dist/types/src/internal/{proxy → common/proxy}/json-serializer.d.ts +0 -0
  522. /package/dist/types/src/internal/{proxy → common/proxy}/make-object.d.ts +0 -0
  523. /package/dist/types/src/internal/{proxy → common/proxy}/ownership.d.ts +0 -0
  524. /package/dist/types/src/internal/{proxy → common/proxy}/proxy-types.d.ts +0 -0
  525. /package/dist/types/src/internal/{proxy → common/proxy}/proxy-utils.d.ts +0 -0
  526. /package/dist/types/src/internal/{proxy → common/proxy}/schema-validator.d.ts +0 -0
  527. /package/dist/types/src/internal/{proxy → common/proxy}/schema.test.d.ts +0 -0
  528. /package/dist/types/src/internal/{proxy → common/proxy}/symbols.d.ts +0 -0
  529. /package/dist/types/src/internal/{proxy → common/proxy}/typed-handler.d.ts +0 -0
  530. /package/dist/types/src/internal/{proxy → common/proxy}/typed-handler.test.d.ts +0 -0
  531. /package/dist/types/src/internal/{proxy → common/proxy}/typed-object.test.d.ts +0 -0
  532. /package/dist/types/src/internal/{types → common/types}/base.d.ts +0 -0
  533. /package/dist/types/src/internal/{types → common/types}/typename.d.ts +0 -0
  534. /package/src/internal/{entities → Entity}/util.ts +0 -0
  535. /package/src/internal/{formats → Format}/date.ts +0 -0
  536. /package/src/internal/{formats → Format}/format.ts +0 -0
  537. /package/src/internal/{formats → Format}/index.ts +0 -0
  538. /package/src/internal/{formats → Format}/number.ts +0 -0
  539. /package/src/internal/{formats → Format}/object.ts +0 -0
  540. /package/src/internal/{formats → Format}/select.ts +0 -0
  541. /package/src/internal/{formats → Format}/string.ts +0 -0
  542. /package/src/internal/{json-schema → JsonSchema}/effect-schema.test.ts +0 -0
  543. /package/src/internal/{json-schema → JsonSchema}/index.ts +0 -0
  544. /package/src/internal/{json-schema → JsonSchema}/json-schema-normalize.ts +0 -0
  545. /package/src/internal/{object → Obj}/index.ts +0 -0
  546. /package/src/internal/{object → Obj}/schema-validator.test.ts +0 -0
  547. /package/src/internal/{ref → Ref}/index.ts +0 -0
  548. /package/src/internal/{schema → Type}/index.ts +0 -0
  549. /package/src/internal/{proxy → common/proxy}/define-hidden-property.ts +0 -0
  550. /package/src/internal/{proxy → common/proxy}/event-batch.ts +0 -0
  551. /package/src/internal/{proxy → common/proxy}/index.ts +0 -0
  552. /package/src/internal/{proxy → common/proxy}/proxy-types.ts +0 -0
  553. /package/src/internal/{proxy → common/proxy}/proxy-utils.ts +0 -0
  554. /package/src/internal/{proxy → common/proxy}/schema-validator.ts +0 -0
  555. /package/src/internal/{proxy → common/proxy}/symbols.ts +0 -0
  556. /package/src/internal/{types → common/types}/base.ts +0 -0
  557. /package/src/internal/{types → common/types}/typename.ts +0 -0
  558. /package/src/internal/{types → common/types}/version.ts +0 -0
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dxos/echo",
3
- "version": "0.8.4-main.c85a9c8dae",
3
+ "version": "0.8.4-main.d05539e30a",
4
4
  "description": "ECHO API",
5
5
  "homepage": "https://dxos.org",
6
6
  "bugs": "https://github.com/dxos/dxos/issues",
@@ -8,7 +8,7 @@
8
8
  "type": "git",
9
9
  "url": "https://github.com/dxos/dxos"
10
10
  },
11
- "license": "MIT",
11
+ "license": "FSL-1.1-Apache-2.0",
12
12
  "author": "info@dxos.org",
13
13
  "sideEffects": false,
14
14
  "type": "module",
@@ -73,6 +73,11 @@
73
73
  "types": "./dist/types/src/Key.d.ts",
74
74
  "default": "./dist/lib/neutral/Key.mjs"
75
75
  },
76
+ "./Migration": {
77
+ "source": "./src/Migration.ts",
78
+ "types": "./dist/types/src/Migration.d.ts",
79
+ "default": "./dist/lib/neutral/Migration.mjs"
80
+ },
76
81
  "./Obj": {
77
82
  "source": "./src/Obj.ts",
78
83
  "types": "./dist/types/src/Obj.d.ts",
@@ -117,6 +122,11 @@
117
122
  "source": "./src/Type.ts",
118
123
  "types": "./dist/types/src/Type.d.ts",
119
124
  "default": "./dist/lib/neutral/Type.mjs"
125
+ },
126
+ "./Extension": {
127
+ "source": "./src/Extension.ts",
128
+ "types": "./dist/types/src/Extension.d.ts",
129
+ "default": "./dist/lib/neutral/Extension.mjs"
120
130
  }
121
131
  },
122
132
  "files": [
@@ -124,19 +134,19 @@
124
134
  "src"
125
135
  ],
126
136
  "dependencies": {
127
- "effect": "3.19.16",
128
- "@dxos/async": "0.8.4-main.c85a9c8dae",
129
- "@dxos/context": "0.8.4-main.c85a9c8dae",
130
- "@dxos/echo-protocol": "0.8.4-main.c85a9c8dae",
131
- "@dxos/debug": "0.8.4-main.c85a9c8dae",
132
- "@dxos/errors": "0.8.4-main.c85a9c8dae",
133
- "@dxos/effect": "0.8.4-main.c85a9c8dae",
134
- "@dxos/invariant": "0.8.4-main.c85a9c8dae",
135
- "@dxos/keys": "0.8.4-main.c85a9c8dae",
136
- "@dxos/node-std": "0.8.4-main.c85a9c8dae",
137
- "@dxos/protocols": "0.8.4-main.c85a9c8dae",
138
- "@dxos/util": "0.8.4-main.c85a9c8dae",
139
- "@dxos/log": "0.8.4-main.c85a9c8dae"
137
+ "effect": "3.20.0",
138
+ "@dxos/async": "0.8.4-main.d05539e30a",
139
+ "@dxos/context": "0.8.4-main.d05539e30a",
140
+ "@dxos/echo-protocol": "0.8.4-main.d05539e30a",
141
+ "@dxos/effect": "0.8.4-main.d05539e30a",
142
+ "@dxos/invariant": "0.8.4-main.d05539e30a",
143
+ "@dxos/debug": "0.8.4-main.d05539e30a",
144
+ "@dxos/keys": "0.8.4-main.d05539e30a",
145
+ "@dxos/log": "0.8.4-main.d05539e30a",
146
+ "@dxos/node-std": "0.8.4-main.d05539e30a",
147
+ "@dxos/protocols": "0.8.4-main.d05539e30a",
148
+ "@dxos/util": "0.8.4-main.d05539e30a",
149
+ "@dxos/errors": "0.8.4-main.d05539e30a"
140
150
  },
141
151
  "publishConfig": {
142
152
  "access": "public"
package/src/Annotation.ts CHANGED
@@ -2,6 +2,8 @@
2
2
  // Copyright 2025 DXOS.org
3
3
  //
4
4
 
5
+ // @import-as-namespace
6
+
5
7
  export {
6
8
  DescriptionAnnotation,
7
9
  FormInputAnnotation,
@@ -16,11 +18,12 @@ export {
16
18
  setDescriptionWithSchema,
17
19
  setLabelWithSchema,
18
20
  IconAnnotation,
19
- } from './internal/annotations';
21
+ IconFromRefAnnotation,
22
+ } from './internal/Annotation';
20
23
 
21
24
  import type * as Schema from 'effect/Schema';
22
25
 
23
- import * as internalAnnotations from './internal/annotations';
26
+ import * as internalAnnotations from './internal/Annotation';
24
27
 
25
28
  interface MakeProps<T> {
26
29
  id: string;
@@ -35,7 +38,7 @@ interface MakeProps<T> {
35
38
  * @example
36
39
  * ```ts
37
40
  * const ColorAnnotation = Annotation.make({
38
- * id: 'dxos.org/annotation/Color',
41
+ * id: 'org.dxos.annotation.color',
39
42
  * schema: Schema.String,
40
43
  * });
41
44
  *
package/src/Collection.ts CHANGED
@@ -2,8 +2,11 @@
2
2
  // Copyright 2024 DXOS.org
3
3
  //
4
4
 
5
+ // @import-as-namespace
6
+
5
7
  import * as Schema from 'effect/Schema';
6
8
 
9
+ import * as Annotation from './Annotation';
7
10
  import * as internal from './internal';
8
11
  import * as Obj from './Obj';
9
12
  import * as Ref from './Ref';
@@ -17,9 +20,13 @@ export const Collection = Schema.Struct({
17
20
  objects: Schema.Array(Ref.Ref(Obj.Unknown)).pipe(internal.FormInputAnnotation.set(false)),
18
21
  }).pipe(
19
22
  Type.object({
20
- typename: 'dxos.org/type/Collection',
23
+ typename: 'org.dxos.type.collection',
21
24
  version: '0.1.0',
22
25
  }),
26
+ Annotation.IconAnnotation.set({
27
+ icon: 'ph--folder--regular',
28
+ hue: 'amber',
29
+ }),
23
30
  );
24
31
 
25
32
  export interface Collection extends Schema.Schema.Type<typeof Collection> {}
package/src/Database.ts CHANGED
@@ -2,6 +2,8 @@
2
2
  // Copyright 2025 DXOS.org
3
3
  //
4
4
 
5
+ // @import-as-namespace
6
+
5
7
  import * as Context from 'effect/Context';
6
8
  import * as Effect from 'effect/Effect';
7
9
  import * as Layer from 'effect/Layer';
@@ -17,9 +19,9 @@ import type * as Entity from './Entity';
17
19
  import * as Err from './Err';
18
20
  import type * as Filter from './Filter';
19
21
  import type * as Hypergraph from './Hypergraph';
20
- import { isInstanceOf } from './internal/annotations';
21
- import type { Ref } from './internal/ref/ref';
22
- import { type AnyProperties } from './internal/types';
22
+ import { isInstanceOf } from './internal/Annotation';
23
+ import { type AnyProperties } from './internal/common/types';
24
+ import type { Ref } from './internal/Ref/ref';
23
25
  import type * as Obj from './Obj';
24
26
  import type * as Query from './Query';
25
27
  import type * as QueryResult from './QueryResult';
@@ -36,7 +38,7 @@ export interface QueryFn {
36
38
  }
37
39
 
38
40
  /**
39
- * Common interface for Database and Queue.
41
+ * Common interface for Database, Feed, and Hypergraph.
40
42
  */
41
43
  export interface Queryable {
42
44
  query: QueryFn;
@@ -69,7 +71,7 @@ export type FlushOptions = {
69
71
 
70
72
  /**
71
73
  * Wait for pending index updates.
72
- * @default false
74
+ * @default true
73
75
  */
74
76
  indexes?: boolean;
75
77
 
@@ -227,24 +229,28 @@ export const resolve: {
227
229
  }
228
230
  invariant(!schema || isInstanceOf(schema, object), 'Object type mismatch.');
229
231
  return object as any;
230
- })) as any;
232
+ }).pipe(Effect.withSpan('Database.resolve'))) as any;
231
233
 
232
234
  /**
233
235
  * Loads an object reference.
234
236
  */
235
- export const load: <T>(ref: Ref<T>) => Effect.Effect<T, Err.ObjectNotFoundError, never> = Effect.fn(function* (ref) {
236
- const object = yield* promiseWithCauseCapture(() => ref.tryLoad());
237
- if (!object) {
238
- return yield* Effect.fail(new Err.ObjectNotFoundError(ref.dxn));
239
- }
240
- return object;
241
- });
237
+ export const load: <T>(ref: Ref<T>) => Effect.Effect<T, Err.ObjectNotFoundError, never> = Effect.fn('Database.load')(
238
+ function* (ref) {
239
+ const object = yield* promiseWithCauseCapture(() => ref.tryLoad());
240
+ if (!object) {
241
+ return yield* Effect.fail(new Err.ObjectNotFoundError(ref.dxn));
242
+ }
243
+ return object;
244
+ },
245
+ );
242
246
 
243
247
  /**
244
248
  * Loads an object reference option.
245
249
  */
246
250
  // TODO(dmaretskyi): Do we need this -- you can just use `Effect.catchTag` in calling code instead.
247
- export const loadOption: <T>(ref: Ref<T>) => Effect.Effect<Option.Option<T>, never, never> = Effect.fn(function* (ref) {
251
+ export const loadOption: <T>(ref: Ref<T>) => Effect.Effect<Option.Option<T>, never, never> = Effect.fn(
252
+ 'Database.loadOption',
253
+ )(function* (ref) {
248
254
  const object = yield* load(ref).pipe(Effect.catchTag('ObjectNotFoundError', () => Effect.succeed(undefined)));
249
255
 
250
256
  return Option.fromNullable(object);
@@ -255,21 +261,23 @@ export const loadOption: <T>(ref: Ref<T>) => Effect.Effect<Option.Option<T>, nev
255
261
  * @see {@link Database.add}
256
262
  */
257
263
  export const add = <T extends Entity.Unknown>(obj: T): Effect.Effect<T, never, Service> =>
258
- Service.pipe(Effect.map(({ db }) => db.add(obj)));
264
+ Service.pipe(Effect.map(({ db }) => db.add(obj))).pipe(Effect.withSpan('Database.add'));
259
265
 
260
266
  /**
261
267
  * Removes an object from the database.
262
268
  * @see {@link Database.remove}
263
269
  */
264
270
  export const remove = <T extends Entity.Unknown>(obj: T): Effect.Effect<void, never, Service> =>
265
- Service.pipe(Effect.map(({ db }) => db.remove(obj)));
271
+ Service.pipe(Effect.map(({ db }) => db.remove(obj))).pipe(Effect.withSpan('Database.remove'));
266
272
 
267
273
  /**
268
274
  * Flushes pending changes to disk.
269
275
  * @see {@link Database.flush}
270
276
  */
271
277
  export const flush = (opts?: FlushOptions) =>
272
- Service.pipe(Effect.flatMap(({ db }) => promiseWithCauseCapture(() => db.flush(opts))));
278
+ Service.pipe(Effect.flatMap(({ db }) => promiseWithCauseCapture(() => db.flush(opts)))).pipe(
279
+ Effect.withSpan('Database.flush'),
280
+ );
273
281
 
274
282
  /**
275
283
  * Creates a `QueryResult` object that can be subscribed to.
@@ -290,7 +298,36 @@ export const runQuery: {
290
298
  <Q extends Query.Any>(query: Q): Effect.Effect<Query.Type<Q>[], never, Service>;
291
299
  <F extends Filter.Any>(filter: F): Effect.Effect<Filter.Type<F>[], never, Service>;
292
300
  } = (queryOrFilter: Query.Any | Filter.Any) =>
293
- query(queryOrFilter as any).pipe(Effect.flatMap((queryResult) => promiseWithCauseCapture(() => queryResult.run())));
301
+ query(queryOrFilter as any).pipe(
302
+ Effect.flatMap((queryResult) => promiseWithCauseCapture(() => queryResult.run())),
303
+ Effect.withSpan('Database.runQuery'),
304
+ );
305
+
306
+ /**
307
+ * Executes the query once and returns the first result as or None.
308
+ */
309
+ export const runQueryFirst: {
310
+ <Q extends Query.Any>(query: Q): Effect.Effect<Option.Option<Query.Type<Q>>, never, Service>;
311
+ <F extends Filter.Any>(filter: F): Effect.Effect<Option.Option<Filter.Type<F>>, never, Service>;
312
+ } = (queryOrFilter: Query.Any | Filter.Any) =>
313
+ query(queryOrFilter as any).pipe(
314
+ Effect.flatMap((queryResult) =>
315
+ promiseWithCauseCapture(async () => Option.fromNullable(await queryResult.firstOrUndefined())),
316
+ ),
317
+ Effect.withSpan('Database.runQueryFirst'),
318
+ );
319
+
320
+ /**
321
+ * Persists schemas in the database so they replicate to other clients.
322
+ * @see {@link SchemaRegistry.SchemaRegistry.register}
323
+ */
324
+ export const registerSchema = (
325
+ input: SchemaRegistry.RegisterSchemaInput[],
326
+ ): Effect.Effect<Type.RuntimeType[], never, Service> =>
327
+ Service.pipe(
328
+ Effect.flatMap(({ db }) => promiseWithCauseCapture(() => db.schemaRegistry.register(input))),
329
+ Effect.withSpan('Database.registerSchema'),
330
+ );
294
331
 
295
332
  /**
296
333
  * Creates a schema query result that can be subscribed to.
package/src/Dataset.ts CHANGED
@@ -2,6 +2,8 @@
2
2
  // Copyright 2026 DXOS.org
3
3
  //
4
4
 
5
+ // @import-as-namespace
6
+
5
7
  import { pipe } from 'effect/Function';
6
8
  import * as Predicate from 'effect/Predicate';
7
9
  import * as Schema from 'effect/Schema';
package/src/Entity.ts CHANGED
@@ -2,11 +2,14 @@
2
2
  // Copyright 2025 DXOS.org
3
3
  //
4
4
 
5
+ // @import-as-namespace
6
+
5
7
  import type { ForeignKey } from '@dxos/echo-protocol';
6
8
  import type { DXN, ObjectId } from '@dxos/keys';
7
9
 
8
10
  import * as internal from './internal';
9
11
  import type * as Relation from './Relation';
12
+ import type * as Type from './Type';
10
13
 
11
14
  // Re-export KindId and SnapshotKindId from internal.
12
15
  export const KindId = internal.KindId;
@@ -129,6 +132,12 @@ export const getDXN = (entity: Unknown | Snapshot): DXN => internal.getDXN(entit
129
132
  */
130
133
  export const getTypeDXN = internal.getTypeDXN;
131
134
 
135
+ /**
136
+ * Get the schema of an entity.
137
+ * Returns the branded ECHO schema used to create the entity.
138
+ */
139
+ export const getSchema: (entity: Unknown | Snapshot) => Type.AnyEntity | undefined = internal.getSchema as any;
140
+
132
141
  /**
133
142
  * Get the typename of an entity's type.
134
143
  */
@@ -189,7 +198,7 @@ export const subscribe = (entity: Unknown, callback: () => void): (() => void) =
189
198
  //
190
199
 
191
200
  /**
192
- * Used to provide a mutable view of an entity within `Entity.change`.
201
+ * Used to provide a mutable view of an entity within `Entity.update`.
193
202
  */
194
203
  export type Mutable<T> = internal.Mutable<T>;
195
204
 
@@ -197,7 +206,7 @@ export type Mutable<T> = internal.Mutable<T>;
197
206
  * Perform mutations on an entity (object or relation) within a change context.
198
207
  *
199
208
  * Entities are read-only by default. Mutations are batched and notifications fire
200
- * when the callback completes. Direct mutations outside of `Entity.change` will throw
209
+ * when the callback completes. Direct mutations outside of `Entity.update` will throw
201
210
  * at runtime.
202
211
  *
203
212
  * @param entity - The echo entity (object or relation) to mutate.
@@ -205,30 +214,30 @@ export type Mutable<T> = internal.Mutable<T>;
205
214
  *
206
215
  * @example
207
216
  * ```typescript
208
- * // Mutate within Entity.change
209
- * Entity.change(entity, (e) => {
210
- * e.name = 'Updated';
211
- * e.count = 42;
217
+ * // Mutate within Entity.update
218
+ * Entity.update(entity, (obj) => {
219
+ * obj.name = 'Updated';
220
+ * obj.count = 42;
212
221
  * });
213
222
  *
214
223
  * // Direct mutation throws
215
- * entity.name = 'Bob'; // Error: Cannot modify outside Entity.change()
224
+ * entity.name = 'Bob'; // Error: Cannot modify outside Entity.update()
216
225
  * ```
217
226
  *
218
- * Note: For type-specific operations, prefer `Obj.change` or `Relation.change`.
227
+ * Note: For type-specific operations, prefer `Obj.update` or `Relation.update`.
219
228
  */
220
- export const change = <T extends Unknown>(entity: T, callback: internal.ChangeCallback<T>): void => {
229
+ export const update = <T extends Unknown>(entity: T, callback: internal.ChangeCallback<T>): void => {
221
230
  internal.change(entity, callback);
222
231
  };
223
232
 
224
233
  /**
225
234
  * Add a tag to an entity.
226
- * Must be called within an `Entity.change`, `Obj.change`, or `Relation.change` callback.
235
+ * Must be called within an `Entity.update`, `Obj.update`, or `Relation.update` callback.
227
236
  */
228
237
  export const addTag = (entity: Mutable<Unknown>, tag: string): void => internal.addTag(entity, tag);
229
238
 
230
239
  /**
231
240
  * Remove a tag from an entity.
232
- * Must be called within an `Entity.change`, `Obj.change`, or `Relation.change` callback.
241
+ * Must be called within an `Entity.update`, `Obj.update`, or `Relation.update` callback.
233
242
  */
234
243
  export const removeTag = (entity: Mutable<Unknown>, tag: string): void => internal.removeTag(entity, tag);
package/src/Err.ts CHANGED
@@ -2,6 +2,8 @@
2
2
  // Copyright 2025 DXOS.org
3
3
  //
4
4
 
5
+ // @import-as-namespace
6
+
5
7
  import { BaseError, type BaseErrorOptions } from '@dxos/errors';
6
8
  import { type DXN } from '@dxos/keys';
7
9
 
@@ -0,0 +1,235 @@
1
+ //
2
+ // Copyright 2026 DXOS.org
3
+ //
4
+
5
+ import * as Option from 'effect/Option';
6
+ import * as Schema from 'effect/Schema';
7
+ import { describe, test } from 'vitest';
8
+
9
+ import * as Extension from './Extension';
10
+
11
+ describe('Extension', () => {
12
+ describe('make', () => {
13
+ test('creates an extension with a string schema', ({ expect }) => {
14
+ const ColorExtension = Extension.make('color', Schema.String);
15
+
16
+ expect(ColorExtension.key).toBe('color');
17
+ expect(ColorExtension.valueSchema).toBe(Schema.String);
18
+ expect(ColorExtension[Extension.TypeId]).toBeDefined();
19
+ });
20
+
21
+ test('creates an extension with a number schema', ({ expect }) => {
22
+ const PriorityExtension = Extension.make('priority', Schema.Number);
23
+
24
+ expect(PriorityExtension.key).toBe('priority');
25
+ expect(PriorityExtension.valueSchema).toBe(Schema.Number);
26
+ });
27
+
28
+ test('creates an extension with a complex schema', ({ expect }) => {
29
+ const MetadataSchema = Schema.Struct({
30
+ author: Schema.String,
31
+ version: Schema.Number,
32
+ tags: Schema.Array(Schema.String),
33
+ });
34
+ const MetadataExtension = Extension.make('metadata', MetadataSchema);
35
+
36
+ expect(MetadataExtension.key).toBe('metadata');
37
+ expect(MetadataExtension.valueSchema).toBe(MetadataSchema);
38
+ });
39
+ });
40
+
41
+ describe('get and set', () => {
42
+ test('set and get a string value', ({ expect }) => {
43
+ const ColorExtension = Extension.make('color', Schema.String);
44
+ const values: Extension.Values = {};
45
+
46
+ Extension.set(values, ColorExtension, 'red');
47
+ const result = Extension.get(values, ColorExtension);
48
+
49
+ expect(Option.isSome(result)).toBe(true);
50
+ expect(Option.getOrThrow(result)).toBe('red');
51
+ });
52
+
53
+ test('set and get a number value', ({ expect }) => {
54
+ const PriorityExtension = Extension.make('priority', Schema.Number);
55
+ const values: Extension.Values = {};
56
+
57
+ Extension.set(values, PriorityExtension, 42);
58
+ const result = Extension.get(values, PriorityExtension);
59
+
60
+ expect(Option.isSome(result)).toBe(true);
61
+ expect(Option.getOrThrow(result)).toBe(42);
62
+ });
63
+
64
+ test('set and get a boolean value', ({ expect }) => {
65
+ const EnabledExtension = Extension.make('enabled', Schema.Boolean);
66
+ const values: Extension.Values = {};
67
+
68
+ Extension.set(values, EnabledExtension, true);
69
+ const result = Extension.get(values, EnabledExtension);
70
+
71
+ expect(Option.isSome(result)).toBe(true);
72
+ expect(Option.getOrThrow(result)).toBe(true);
73
+ });
74
+
75
+ test('set and get a complex object value', ({ expect }) => {
76
+ const ConfigSchema = Schema.Struct({
77
+ theme: Schema.String,
78
+ fontSize: Schema.Number,
79
+ darkMode: Schema.Boolean,
80
+ });
81
+ const ConfigExtension = Extension.make('config', ConfigSchema);
82
+ const values: Extension.Values = {};
83
+
84
+ const config = { theme: 'modern', fontSize: 14, darkMode: true };
85
+ Extension.set(values, ConfigExtension, config);
86
+ const result = Extension.get(values, ConfigExtension);
87
+
88
+ expect(Option.isSome(result)).toBe(true);
89
+ expect(Option.getOrThrow(result)).toEqual(config);
90
+ });
91
+
92
+ test('set and get an array value', ({ expect }) => {
93
+ const TagsExtension = Extension.make('tags', Schema.Array(Schema.String));
94
+ const values: Extension.Values = {};
95
+
96
+ const tags = ['important', 'urgent', 'review'];
97
+ Extension.set(values, TagsExtension, tags);
98
+ const result = Extension.get(values, TagsExtension);
99
+
100
+ expect(Option.isSome(result)).toBe(true);
101
+ expect(Option.getOrThrow(result)).toEqual(tags);
102
+ });
103
+
104
+ test('get returns None for missing extension', ({ expect }) => {
105
+ const ColorExtension = Extension.make('color', Schema.String);
106
+ const values: Extension.Values = {};
107
+
108
+ const result = Extension.get(values, ColorExtension);
109
+
110
+ expect(Option.isNone(result)).toBe(true);
111
+ });
112
+
113
+ test('overwriting an extension value', ({ expect }) => {
114
+ const ColorExtension = Extension.make('color', Schema.String);
115
+ const values: Extension.Values = {};
116
+
117
+ Extension.set(values, ColorExtension, 'red');
118
+ Extension.set(values, ColorExtension, 'blue');
119
+ const result = Extension.get(values, ColorExtension);
120
+
121
+ expect(Option.isSome(result)).toBe(true);
122
+ expect(Option.getOrThrow(result)).toBe('blue');
123
+ });
124
+
125
+ test('multiple extensions on the same values object', ({ expect }) => {
126
+ const ColorExtension = Extension.make('color', Schema.String);
127
+ const PriorityExtension = Extension.make('priority', Schema.Number);
128
+ const EnabledExtension = Extension.make('enabled', Schema.Boolean);
129
+ const values: Extension.Values = {};
130
+
131
+ Extension.set(values, ColorExtension, 'green');
132
+ Extension.set(values, PriorityExtension, 5);
133
+ Extension.set(values, EnabledExtension, false);
134
+
135
+ expect(Option.getOrThrow(Extension.get(values, ColorExtension))).toBe('green');
136
+ expect(Option.getOrThrow(Extension.get(values, PriorityExtension))).toBe(5);
137
+ expect(Option.getOrThrow(Extension.get(values, EnabledExtension))).toBe(false);
138
+ });
139
+ });
140
+
141
+ describe('curried forms', () => {
142
+ test('get curried form', ({ expect }) => {
143
+ const ColorExtension = Extension.make('color', Schema.String);
144
+ const values: Extension.Values = {};
145
+ Extension.set(values, ColorExtension, 'purple');
146
+
147
+ const getColor = Extension.get(ColorExtension);
148
+ const result = getColor(values);
149
+
150
+ expect(Option.isSome(result)).toBe(true);
151
+ expect(Option.getOrThrow(result)).toBe('purple');
152
+ });
153
+
154
+ test('set curried form', ({ expect }) => {
155
+ const ColorExtension = Extension.make('color', Schema.String);
156
+ const values: Extension.Values = {};
157
+
158
+ const setOrange = Extension.set(ColorExtension, 'orange');
159
+ setOrange(values);
160
+ const result = Extension.get(values, ColorExtension);
161
+
162
+ expect(Option.isSome(result)).toBe(true);
163
+ expect(Option.getOrThrow(result)).toBe('orange');
164
+ });
165
+
166
+ test('curried forms work in pipelines', ({ expect }) => {
167
+ const ColorExtension = Extension.make('color', Schema.String);
168
+ const values: Extension.Values = {};
169
+
170
+ Extension.set(ColorExtension, 'cyan')(values);
171
+ const result = Extension.get(ColorExtension)(values);
172
+
173
+ expect(Option.isSome(result)).toBe(true);
174
+ expect(Option.getOrThrow(result)).toBe('cyan');
175
+ });
176
+ });
177
+
178
+ describe('Key', () => {
179
+ test('Key.make creates a branded key', ({ expect }) => {
180
+ const key = Extension.Key.make('my-extension');
181
+
182
+ expect(key).toBe('my-extension');
183
+ expect(typeof key).toBe('string');
184
+ });
185
+ });
186
+
187
+ describe('Values schema', () => {
188
+ test('Values can be used as a schema', ({ expect }) => {
189
+ const PersonWithExtensions = Schema.Struct({
190
+ name: Schema.String,
191
+ extensions: Extension.Values,
192
+ });
193
+
194
+ const person = Schema.decodeUnknownSync(PersonWithExtensions)({
195
+ name: 'Alice',
196
+ extensions: {},
197
+ });
198
+
199
+ expect(person.name).toBe('Alice');
200
+ expect(person.extensions).toEqual({});
201
+ });
202
+
203
+ test('Values schema accepts extension data', ({ expect }) => {
204
+ const ColorExtension = Extension.make('color', Schema.String);
205
+ const values: Extension.Values = {};
206
+ Extension.set(values, ColorExtension, 'red');
207
+
208
+ const PersonWithExtensions = Schema.Struct({
209
+ name: Schema.String,
210
+ extensions: Extension.Values,
211
+ });
212
+
213
+ const person = Schema.decodeUnknownSync(PersonWithExtensions)({
214
+ name: 'Bob',
215
+ extensions: values,
216
+ });
217
+
218
+ expect(person.name).toBe('Bob');
219
+ const color = Extension.get(person.extensions, ColorExtension);
220
+ expect(Option.getOrThrow(color)).toBe('red');
221
+ });
222
+ });
223
+
224
+ describe('TypeId', () => {
225
+ test('TypeId is a unique symbol-like string', ({ expect }) => {
226
+ expect(Extension.TypeId).toBe('~@dxos/echo/Extension');
227
+ });
228
+
229
+ test('extensions have TypeId property', ({ expect }) => {
230
+ const ColorExtension = Extension.make('color', Schema.String);
231
+
232
+ expect(Extension.TypeId in ColorExtension).toBe(true);
233
+ });
234
+ });
235
+ });