@dxos/echo 0.8.4-main.ef1bc66f44 → 0.8.4-main.effb148878

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (602) hide show
  1. package/LICENSE +102 -5
  2. package/README.md +9 -9
  3. package/dist/lib/neutral/Annotation.mjs +7 -3
  4. package/dist/lib/neutral/Database.mjs +8 -4
  5. package/dist/lib/neutral/Entity.mjs +35 -18
  6. package/dist/lib/neutral/Err.mjs +3 -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 +54 -0
  10. package/dist/lib/neutral/Feed.mjs.map +7 -0
  11. package/dist/lib/neutral/Filter.mjs +25 -12
  12. package/dist/lib/neutral/Format.mjs +23 -3
  13. package/dist/lib/neutral/JsonSchema.mjs +9 -9
  14. package/dist/lib/neutral/Key.mjs +7 -3
  15. package/dist/lib/neutral/Migration.mjs +18 -0
  16. package/dist/lib/neutral/Migration.mjs.map +7 -0
  17. package/dist/lib/neutral/Obj.mjs +41 -23
  18. package/dist/lib/neutral/Order.mjs +1 -1
  19. package/dist/lib/neutral/Query.mjs +21 -9
  20. package/dist/lib/neutral/QueryResult.mjs +1 -1
  21. package/dist/lib/neutral/Ref.mjs +13 -9
  22. package/dist/lib/neutral/Relation.mjs +34 -23
  23. package/dist/lib/neutral/SchemaRegistry.mjs +1 -1
  24. package/dist/lib/neutral/Tag.mjs +14 -10
  25. package/dist/lib/neutral/Type.mjs +52 -36
  26. package/dist/lib/neutral/{chunk-K5K3Z62A.mjs → chunk-4SYHDOQA.mjs} +14 -6
  27. package/dist/lib/neutral/chunk-4SYHDOQA.mjs.map +7 -0
  28. package/dist/lib/neutral/{chunk-XAJMXQ4H.mjs → chunk-4U7OD55H.mjs} +6 -2
  29. package/dist/lib/neutral/chunk-4U7OD55H.mjs.map +7 -0
  30. package/dist/lib/neutral/chunk-52NG2XEE.mjs +34 -0
  31. package/dist/lib/neutral/chunk-52NG2XEE.mjs.map +7 -0
  32. package/dist/lib/neutral/{chunk-KB7RIVLK.mjs → chunk-A5HDDVKS.mjs} +33 -6
  33. package/dist/lib/neutral/chunk-A5HDDVKS.mjs.map +7 -0
  34. package/dist/lib/neutral/{chunk-DLPC7DHQ.mjs → chunk-EZ4XJFHJ.mjs} +9 -11
  35. package/dist/lib/neutral/chunk-EZ4XJFHJ.mjs.map +7 -0
  36. package/dist/lib/neutral/{chunk-ZAHWXGK4.mjs → chunk-F625JEZB.mjs} +97 -19
  37. package/dist/lib/neutral/chunk-F625JEZB.mjs.map +7 -0
  38. package/dist/lib/neutral/chunk-FFCN66OF.mjs +420 -0
  39. package/dist/lib/neutral/chunk-FFCN66OF.mjs.map +7 -0
  40. package/dist/lib/neutral/{chunk-RPB6V4BE.mjs → chunk-GOHDOJE3.mjs} +16 -3
  41. package/dist/lib/neutral/chunk-GOHDOJE3.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-J7QWJQQV.mjs +318 -0
  45. package/dist/lib/neutral/chunk-J7QWJQQV.mjs.map +7 -0
  46. package/dist/lib/neutral/{chunk-QARLJVDB.mjs → chunk-JTHNDGAR.mjs} +8 -4
  47. package/dist/lib/neutral/chunk-JTHNDGAR.mjs.map +7 -0
  48. package/dist/lib/neutral/chunk-K5RH2PBH.mjs +361 -0
  49. package/dist/lib/neutral/chunk-K5RH2PBH.mjs.map +7 -0
  50. package/dist/lib/neutral/{chunk-RIMHNJ3E.mjs → chunk-KHRAQDYX.mjs} +138 -91
  51. package/dist/lib/neutral/chunk-KHRAQDYX.mjs.map +7 -0
  52. package/dist/lib/neutral/chunk-L65CW5EI.mjs +156 -0
  53. package/dist/lib/neutral/chunk-L65CW5EI.mjs.map +7 -0
  54. package/dist/lib/neutral/chunk-LNZIPZX6.mjs +2186 -0
  55. package/dist/lib/neutral/chunk-LNZIPZX6.mjs.map +7 -0
  56. package/dist/lib/neutral/chunk-MPXUNTME.mjs +41 -0
  57. package/dist/lib/neutral/chunk-MPXUNTME.mjs.map +7 -0
  58. package/dist/lib/neutral/{chunk-7WE7SBA2.mjs → chunk-O2EOH7XQ.mjs} +152 -134
  59. package/dist/lib/neutral/chunk-O2EOH7XQ.mjs.map +7 -0
  60. package/dist/lib/neutral/{chunk-MTEHHY62.mjs → chunk-Q7ID37KF.mjs} +121 -94
  61. package/dist/lib/neutral/chunk-Q7ID37KF.mjs.map +7 -0
  62. package/dist/lib/neutral/chunk-QLYEQ5VA.mjs +205 -0
  63. package/dist/lib/neutral/chunk-QLYEQ5VA.mjs.map +7 -0
  64. package/dist/lib/neutral/chunk-SSDGRJ3A.mjs +747 -0
  65. package/dist/lib/neutral/chunk-SSDGRJ3A.mjs.map +7 -0
  66. package/dist/lib/neutral/{chunk-ROKO4RKJ.mjs → chunk-TTCSATUD.mjs} +2 -2
  67. package/dist/lib/neutral/chunk-TTCSATUD.mjs.map +7 -0
  68. package/dist/lib/neutral/{chunk-ANHVGJI4.mjs → chunk-UEFRFUYC.mjs} +8 -4
  69. package/dist/lib/neutral/chunk-UEFRFUYC.mjs.map +7 -0
  70. package/dist/lib/neutral/chunk-UN7K472Q.mjs +132 -0
  71. package/dist/lib/neutral/chunk-UN7K472Q.mjs.map +7 -0
  72. package/dist/lib/neutral/chunk-UQAMAXDU.mjs +243 -0
  73. package/dist/lib/neutral/chunk-UQAMAXDU.mjs.map +7 -0
  74. package/dist/lib/neutral/{chunk-4L6DOFXP.mjs → chunk-V5NE2X7Y.mjs} +1 -1
  75. package/dist/lib/neutral/chunk-V5NE2X7Y.mjs.map +7 -0
  76. package/dist/lib/neutral/{chunk-OMUPQMLR.mjs → chunk-V72DY6LU.mjs} +1 -1
  77. package/dist/lib/neutral/chunk-ZII2BGPM.mjs +269 -0
  78. package/dist/lib/neutral/chunk-ZII2BGPM.mjs.map +7 -0
  79. package/dist/lib/neutral/{chunk-N2QNHMT5.mjs → chunk-ZM7VFIS2.mjs} +22 -2
  80. package/dist/lib/neutral/chunk-ZM7VFIS2.mjs.map +7 -0
  81. package/dist/lib/neutral/index.mjs +56 -29
  82. package/dist/lib/neutral/internal/index.mjs +128 -77
  83. package/dist/lib/neutral/meta.json +1 -1
  84. package/dist/lib/neutral/testing/index.mjs +226 -174
  85. package/dist/lib/neutral/testing/index.mjs.map +3 -3
  86. package/dist/types/src/Annotation.d.ts +3 -3
  87. package/dist/types/src/Annotation.d.ts.map +1 -1
  88. package/dist/types/src/Collection.d.ts +15 -0
  89. package/dist/types/src/Collection.d.ts.map +1 -0
  90. package/dist/types/src/Database.d.ts +27 -42
  91. package/dist/types/src/Database.d.ts.map +1 -1
  92. package/dist/types/src/Dataset.d.ts +29 -0
  93. package/dist/types/src/Dataset.d.ts.map +1 -0
  94. package/dist/types/src/Entity.d.ts +123 -29
  95. package/dist/types/src/Entity.d.ts.map +1 -1
  96. package/dist/types/src/Err.d.ts +56 -13
  97. package/dist/types/src/Err.d.ts.map +1 -1
  98. package/dist/types/src/Extension.d.ts +80 -0
  99. package/dist/types/src/Extension.d.ts.map +1 -0
  100. package/dist/types/src/Extension.test.d.ts +2 -0
  101. package/dist/types/src/Extension.test.d.ts.map +1 -0
  102. package/dist/types/src/Feed.d.ts +229 -0
  103. package/dist/types/src/Feed.d.ts.map +1 -0
  104. package/dist/types/src/Filter.d.ts +74 -11
  105. package/dist/types/src/Filter.d.ts.map +1 -1
  106. package/dist/types/src/Filter.test.d.ts +2 -0
  107. package/dist/types/src/Filter.test.d.ts.map +1 -0
  108. package/dist/types/src/Format.d.ts +3 -3
  109. package/dist/types/src/Format.d.ts.map +1 -1
  110. package/dist/types/src/Hypergraph.d.ts +15 -10
  111. package/dist/types/src/Hypergraph.d.ts.map +1 -1
  112. package/dist/types/src/Json.d.ts +33 -0
  113. package/dist/types/src/Json.d.ts.map +1 -0
  114. package/dist/types/src/Json.test.d.ts +2 -0
  115. package/dist/types/src/Json.test.d.ts.map +1 -0
  116. package/dist/types/src/JsonSchema.d.ts +11 -4
  117. package/dist/types/src/JsonSchema.d.ts.map +1 -1
  118. package/dist/types/src/Key.d.ts +1 -1
  119. package/dist/types/src/Key.d.ts.map +1 -1
  120. package/dist/types/src/Migration.d.ts +72 -0
  121. package/dist/types/src/Migration.d.ts.map +1 -0
  122. package/dist/types/src/Obj.d.ts +201 -77
  123. package/dist/types/src/Obj.d.ts.map +1 -1
  124. package/dist/types/src/Order.d.ts.map +1 -1
  125. package/dist/types/src/Query.d.ts +117 -17
  126. package/dist/types/src/Query.d.ts.map +1 -1
  127. package/dist/types/src/Ref.d.ts +66 -10
  128. package/dist/types/src/Ref.d.ts.map +1 -1
  129. package/dist/types/src/Relation.d.ts +127 -54
  130. package/dist/types/src/Relation.d.ts.map +1 -1
  131. package/dist/types/src/SchemaRegistry.d.ts +12 -13
  132. package/dist/types/src/SchemaRegistry.d.ts.map +1 -1
  133. package/dist/types/src/Tag.d.ts +4 -3
  134. package/dist/types/src/Tag.d.ts.map +1 -1
  135. package/dist/types/src/Type.d.ts +337 -218
  136. package/dist/types/src/Type.d.ts.map +1 -1
  137. package/dist/types/src/View.d.ts +65 -0
  138. package/dist/types/src/View.d.ts.map +1 -0
  139. package/dist/types/src/exemplars.test.d.ts +2 -0
  140. package/dist/types/src/exemplars.test.d.ts.map +1 -0
  141. package/dist/types/src/index.d.ts +8 -1
  142. package/dist/types/src/index.d.ts.map +1 -1
  143. package/dist/types/src/internal/{annotations → Annotation}/annotations.d.ts +98 -24
  144. package/dist/types/src/internal/Annotation/annotations.d.ts.map +1 -0
  145. package/dist/types/src/internal/Annotation/annotations.test.d.ts.map +1 -0
  146. package/dist/types/src/internal/Annotation/index.d.ts +4 -0
  147. package/dist/types/src/internal/Annotation/index.d.ts.map +1 -0
  148. package/dist/types/src/internal/{api → Annotation}/sorting.d.ts +1 -1
  149. package/dist/types/src/internal/Annotation/sorting.d.ts.map +1 -0
  150. package/dist/types/src/internal/{annotations → Annotation}/util.d.ts +15 -6
  151. package/dist/types/src/internal/Annotation/util.d.ts.map +1 -0
  152. package/dist/types/src/internal/Entity/api.d.ts +13 -0
  153. package/dist/types/src/internal/Entity/api.d.ts.map +1 -0
  154. package/dist/types/src/internal/Entity/entity.d.ts +67 -0
  155. package/dist/types/src/internal/Entity/entity.d.ts.map +1 -0
  156. package/dist/types/src/internal/Entity/index.d.ts +10 -0
  157. package/dist/types/src/internal/Entity/index.d.ts.map +1 -0
  158. package/dist/types/src/internal/Entity/model.d.ts +57 -0
  159. package/dist/types/src/internal/Entity/model.d.ts.map +1 -0
  160. package/dist/types/src/internal/{entities → Entity}/object.d.ts +3 -3
  161. package/dist/types/src/internal/Entity/object.d.ts.map +1 -0
  162. package/dist/types/src/internal/Entity/relation.d.ts +51 -0
  163. package/dist/types/src/internal/Entity/relation.d.ts.map +1 -0
  164. package/dist/types/src/internal/Entity/type-kind.d.ts +24 -0
  165. package/dist/types/src/internal/Entity/type-kind.d.ts.map +1 -0
  166. package/dist/types/src/internal/Entity/type-uri.d.ts +25 -0
  167. package/dist/types/src/internal/Entity/type-uri.d.ts.map +1 -0
  168. package/dist/types/src/internal/Entity/util.d.ts.map +1 -0
  169. package/dist/types/src/internal/{api → Entity}/version.d.ts +1 -1
  170. package/dist/types/src/internal/Entity/version.d.ts.map +1 -0
  171. package/dist/types/src/internal/Format/date.d.ts.map +1 -0
  172. package/dist/types/src/internal/Format/date.test.d.ts.map +1 -0
  173. package/dist/types/src/internal/{formats → Format}/format.d.ts +2 -1
  174. package/dist/types/src/internal/Format/format.d.ts.map +1 -0
  175. package/dist/types/src/internal/Format/format.test.d.ts.map +1 -0
  176. package/dist/types/src/internal/{formats → Format}/index.d.ts +2 -2
  177. package/dist/types/src/internal/Format/index.d.ts.map +1 -0
  178. package/dist/types/src/internal/Format/number.d.ts.map +1 -0
  179. package/dist/types/src/internal/Format/object.d.ts.map +1 -0
  180. package/dist/types/src/internal/Format/select.d.ts.map +1 -0
  181. package/dist/types/src/internal/Format/string.d.ts.map +1 -0
  182. package/dist/types/src/internal/{formats → Format}/types.d.ts +1 -1
  183. package/dist/types/src/internal/Format/types.d.ts.map +1 -0
  184. package/dist/types/src/internal/{json-schema → JsonSchema}/annotations.d.ts +1 -1
  185. package/dist/types/src/internal/JsonSchema/annotations.d.ts.map +1 -0
  186. package/dist/types/src/internal/JsonSchema/effect-schema.test.d.ts.map +1 -0
  187. package/dist/types/src/internal/JsonSchema/index.d.ts.map +1 -0
  188. package/dist/types/src/internal/JsonSchema/json-schema-normalize.d.ts.map +1 -0
  189. package/dist/types/src/internal/{json-schema → JsonSchema}/json-schema-type.d.ts +37 -37
  190. package/dist/types/src/internal/JsonSchema/json-schema-type.d.ts.map +1 -0
  191. package/dist/types/src/internal/{json-schema → JsonSchema}/json-schema.d.ts +3 -2
  192. package/dist/types/src/internal/JsonSchema/json-schema.d.ts.map +1 -0
  193. package/dist/types/src/internal/JsonSchema/json-schema.test.d.ts.map +1 -0
  194. package/dist/types/src/internal/Obj/clone.d.ts.map +1 -0
  195. package/dist/types/src/internal/Obj/common.d.ts.map +1 -0
  196. package/dist/types/src/internal/{object → Obj}/create-object.d.ts +10 -12
  197. package/dist/types/src/internal/Obj/create-object.d.ts.map +1 -0
  198. package/dist/types/src/internal/Obj/create-object.test.d.ts.map +1 -0
  199. package/dist/types/src/internal/{object → Obj}/deleted.d.ts +1 -1
  200. package/dist/types/src/internal/Obj/deleted.d.ts.map +1 -0
  201. package/dist/types/src/internal/{object → Obj}/index.d.ts +0 -1
  202. package/dist/types/src/internal/Obj/index.d.ts.map +1 -0
  203. package/dist/types/src/internal/Obj/inspect.d.ts.map +1 -0
  204. package/dist/types/src/internal/{object → Obj}/json-serializer.d.ts +16 -8
  205. package/dist/types/src/internal/Obj/json-serializer.d.ts.map +1 -0
  206. package/dist/types/src/internal/Obj/json-serializer.test.d.ts.map +1 -0
  207. package/dist/types/src/internal/Obj/schema-validator.d.ts +2 -0
  208. package/dist/types/src/internal/Obj/schema-validator.d.ts.map +1 -0
  209. package/dist/types/src/internal/Obj/schema-validator.test.d.ts.map +1 -0
  210. package/dist/types/src/internal/{object → Obj}/set-value.d.ts +2 -2
  211. package/dist/types/src/internal/Obj/set-value.d.ts.map +1 -0
  212. package/dist/types/src/internal/Obj/set-value.test.d.ts.map +1 -0
  213. package/dist/types/src/internal/Obj/snapshot.d.ts.map +1 -0
  214. package/dist/types/src/internal/{object → Obj}/typed-object.d.ts +5 -5
  215. package/dist/types/src/internal/Obj/typed-object.d.ts.map +1 -0
  216. package/dist/types/src/internal/Obj/typed-object.test.d.ts.map +1 -0
  217. package/dist/types/src/internal/Query.d.ts +10 -0
  218. package/dist/types/src/internal/Query.d.ts.map +1 -0
  219. package/dist/types/src/internal/Ref/index.d.ts.map +1 -0
  220. package/dist/types/src/internal/{ref → Ref}/ref-array.d.ts +1 -1
  221. package/dist/types/src/internal/Ref/ref-array.d.ts.map +1 -0
  222. package/dist/types/src/internal/{ref → Ref}/ref.d.ts +42 -19
  223. package/dist/types/src/internal/Ref/ref.d.ts.map +1 -0
  224. package/dist/types/src/internal/Ref/ref.test.d.ts.map +1 -0
  225. package/dist/types/src/internal/{schema → Type}/compose.d.ts +1 -1
  226. package/dist/types/src/internal/Type/compose.d.ts.map +1 -0
  227. package/dist/types/src/internal/Type/compose.test.d.ts.map +1 -0
  228. package/dist/types/src/internal/Type/index.d.ts +3 -0
  229. package/dist/types/src/internal/Type/index.d.ts.map +1 -0
  230. package/dist/types/src/internal/{schema → Type}/manipulation.d.ts +0 -1
  231. package/dist/types/src/internal/Type/manipulation.d.ts.map +1 -0
  232. package/dist/types/src/internal/Type/type-schema.d.ts +52 -0
  233. package/dist/types/src/internal/Type/type-schema.d.ts.map +1 -0
  234. package/dist/types/src/internal/{api → common/api}/index.d.ts +0 -4
  235. package/dist/types/src/internal/common/api/index.d.ts.map +1 -0
  236. package/dist/types/src/internal/{api → common/api}/meta.d.ts +3 -3
  237. package/dist/types/src/internal/common/api/meta.d.ts.map +1 -0
  238. package/dist/types/src/internal/common/index.d.ts +4 -0
  239. package/dist/types/src/internal/common/index.d.ts.map +1 -0
  240. package/dist/types/src/internal/{proxy → common/proxy}/change-context.d.ts +1 -1
  241. package/dist/types/src/internal/common/proxy/change-context.d.ts.map +1 -0
  242. package/dist/types/src/internal/common/proxy/change.test.d.ts.map +1 -0
  243. package/dist/types/src/internal/common/proxy/define-hidden-property.d.ts.map +1 -0
  244. package/dist/types/src/internal/{proxy → common/proxy}/errors.d.ts +1 -1
  245. package/dist/types/src/internal/common/proxy/errors.d.ts.map +1 -0
  246. package/dist/types/src/internal/common/proxy/event-batch.d.ts.map +1 -0
  247. package/dist/types/src/internal/common/proxy/handler.test.d.ts.map +1 -0
  248. package/dist/types/src/internal/common/proxy/index.d.ts.map +1 -0
  249. package/dist/types/src/internal/common/proxy/json-serializer.d.ts.map +1 -0
  250. package/dist/types/src/internal/common/proxy/make-object.d.ts +19 -0
  251. package/dist/types/src/internal/common/proxy/make-object.d.ts.map +1 -0
  252. package/dist/types/src/internal/common/proxy/ownership.d.ts.map +1 -0
  253. package/dist/types/src/internal/common/proxy/proxy-types.d.ts.map +1 -0
  254. package/dist/types/src/internal/common/proxy/proxy-utils.d.ts.map +1 -0
  255. package/dist/types/src/internal/{proxy → common/proxy}/reactive-array.d.ts +1 -1
  256. package/dist/types/src/internal/common/proxy/reactive-array.d.ts.map +1 -0
  257. package/dist/types/src/internal/{proxy → common/proxy}/reactive.d.ts +2 -2
  258. package/dist/types/src/internal/{proxy → common/proxy}/reactive.d.ts.map +1 -1
  259. package/dist/types/src/internal/common/proxy/reactive.test.d.ts +2 -0
  260. package/dist/types/src/internal/common/proxy/reactive.test.d.ts.map +1 -0
  261. package/dist/types/src/internal/common/proxy/schema-validator.d.ts.map +1 -0
  262. package/dist/types/src/internal/common/proxy/schema.test.d.ts.map +1 -0
  263. package/dist/types/src/internal/common/proxy/symbols.d.ts.map +1 -0
  264. package/dist/types/src/internal/{proxy → common/proxy}/typed-handler.d.ts +18 -2
  265. package/dist/types/src/internal/common/proxy/typed-handler.d.ts.map +1 -0
  266. package/dist/types/src/internal/common/proxy/typed-handler.test.d.ts.map +1 -0
  267. package/dist/types/src/internal/common/proxy/typed-object.test.d.ts.map +1 -0
  268. package/dist/types/src/internal/{types → common/types}/base.d.ts +1 -0
  269. package/dist/types/src/internal/common/types/base.d.ts.map +1 -0
  270. package/dist/types/src/internal/common/types/entity.d.ts +94 -0
  271. package/dist/types/src/internal/common/types/entity.d.ts.map +1 -0
  272. package/dist/types/src/internal/{types → common/types}/index.d.ts +1 -0
  273. package/dist/types/src/internal/common/types/index.d.ts.map +1 -0
  274. package/dist/types/src/internal/{types → common/types}/meta.d.ts +12 -1
  275. package/dist/types/src/internal/common/types/meta.d.ts.map +1 -0
  276. package/dist/types/src/internal/common/types/model-symbols.d.ts +58 -0
  277. package/dist/types/src/internal/common/types/model-symbols.d.ts.map +1 -0
  278. package/dist/types/src/internal/{types → common/types}/typename.d.ts +7 -0
  279. package/dist/types/src/internal/common/types/typename.d.ts.map +1 -0
  280. package/dist/types/src/internal/{types → common/types}/version.d.ts +2 -2
  281. package/dist/types/src/internal/common/types/version.d.ts.map +1 -0
  282. package/dist/types/src/internal/index.d.ts +9 -10
  283. package/dist/types/src/internal/index.d.ts.map +1 -1
  284. package/dist/types/src/testing/test-data.d.ts +8 -8
  285. package/dist/types/src/testing/test-data.d.ts.map +1 -1
  286. package/dist/types/src/testing/test-schema.d.ts +77 -82
  287. package/dist/types/src/testing/test-schema.d.ts.map +1 -1
  288. package/dist/types/src/testing/util.d.ts +5 -3
  289. package/dist/types/src/testing/util.d.ts.map +1 -1
  290. package/dist/types/tsconfig.tsbuildinfo +1 -1
  291. package/package.json +30 -15
  292. package/src/Annotation.ts +7 -3
  293. package/src/Collection.ts +36 -0
  294. package/src/Database.ts +80 -77
  295. package/src/Dataset.ts +34 -0
  296. package/src/Entity.test.ts +116 -6
  297. package/src/Entity.ts +181 -66
  298. package/src/Err.ts +25 -3
  299. package/src/Extension.test.ts +235 -0
  300. package/src/Extension.ts +122 -0
  301. package/src/Feed.ts +356 -0
  302. package/src/Filter.test.ts +90 -0
  303. package/src/Filter.ts +152 -21
  304. package/src/Format.ts +3 -3
  305. package/src/Hypergraph.ts +16 -11
  306. package/src/Json.test.ts +175 -0
  307. package/src/Json.ts +103 -0
  308. package/src/JsonSchema.ts +14 -4
  309. package/src/Key.ts +1 -1
  310. package/src/Migration.ts +114 -0
  311. package/src/Obj.test.ts +158 -20
  312. package/src/Obj.ts +451 -183
  313. package/src/Order.ts +3 -1
  314. package/src/Query.test.ts +446 -89
  315. package/src/Query.ts +300 -35
  316. package/src/Ref.ts +83 -12
  317. package/src/Relation.test.ts +16 -10
  318. package/src/Relation.ts +236 -165
  319. package/src/SchemaRegistry.ts +13 -17
  320. package/src/Tag.ts +9 -9
  321. package/src/Type.test.ts +169 -24
  322. package/src/Type.ts +561 -354
  323. package/src/View.ts +101 -0
  324. package/src/exemplars.test.ts +21 -0
  325. package/src/index.ts +9 -2
  326. package/src/internal/Annotation/annotations.test.ts +165 -0
  327. package/src/internal/{annotations → Annotation}/annotations.ts +181 -101
  328. package/src/internal/{annotations → Annotation}/index.ts +1 -0
  329. package/src/internal/{api → Annotation}/sorting.ts +2 -4
  330. package/src/internal/{annotations → Annotation}/util.ts +17 -9
  331. package/src/internal/{api/entity.ts → Entity/api.ts} +9 -8
  332. package/src/internal/Entity/entity.ts +246 -0
  333. package/src/internal/{entities → Entity}/index.ts +4 -0
  334. package/src/internal/{entities → Entity}/model.ts +42 -60
  335. package/src/internal/{entities → Entity}/object.ts +13 -6
  336. package/src/internal/Entity/relation.ts +179 -0
  337. package/src/internal/Entity/type-kind.ts +67 -0
  338. package/src/internal/Entity/type-uri.ts +87 -0
  339. package/src/internal/Entity/util.ts +34 -0
  340. package/src/internal/{api → Entity}/version.ts +2 -2
  341. package/src/internal/{formats → Format}/date.test.ts +1 -2
  342. package/src/internal/{formats → Format}/date.ts +0 -4
  343. package/src/internal/{formats → Format}/format.test.ts +1 -2
  344. package/src/internal/{formats → Format}/index.ts +2 -3
  345. package/src/internal/{formats → Format}/types.ts +2 -2
  346. package/src/internal/{json-schema → JsonSchema}/annotations.ts +3 -3
  347. package/src/internal/{json-schema → JsonSchema}/json-schema-type.ts +4 -4
  348. package/src/internal/{json-schema → JsonSchema}/json-schema.test.ts +64 -151
  349. package/src/internal/{json-schema → JsonSchema}/json-schema.ts +47 -28
  350. package/src/internal/{object → Obj}/clone.ts +10 -6
  351. package/src/internal/{object → Obj}/common.ts +2 -2
  352. package/src/internal/{object → Obj}/create-object.test.ts +13 -14
  353. package/src/internal/Obj/create-object.ts +135 -0
  354. package/src/internal/{object → Obj}/deleted.ts +2 -2
  355. package/src/internal/{object → Obj}/index.ts +0 -1
  356. package/src/internal/{object → Obj}/inspect.ts +3 -3
  357. package/src/internal/Obj/json-serializer.test.ts +185 -0
  358. package/src/internal/{object → Obj}/json-serializer.ts +108 -45
  359. package/src/internal/{object → Obj}/schema-validator.ts +1 -1
  360. package/src/internal/{object → Obj}/set-value.test.ts +31 -54
  361. package/src/internal/{object → Obj}/set-value.ts +3 -3
  362. package/src/internal/{object → Obj}/snapshot.ts +41 -23
  363. package/src/internal/Obj/typed-object.test.ts +32 -0
  364. package/src/internal/{object → Obj}/typed-object.ts +5 -5
  365. package/src/internal/Query.ts +156 -0
  366. package/src/internal/{ref → Ref}/ref-array.ts +1 -2
  367. package/src/internal/{ref → Ref}/ref.test.ts +16 -26
  368. package/src/internal/{ref → Ref}/ref.ts +117 -57
  369. package/src/internal/{schema → Type}/compose.test.ts +6 -5
  370. package/src/internal/{schema → Type}/compose.ts +1 -1
  371. package/src/internal/Type/index.ts +6 -0
  372. package/src/internal/{schema → Type}/manipulation.ts +0 -25
  373. package/src/internal/Type/type-schema.ts +60 -0
  374. package/src/internal/{README.md → common/README.md} +2 -2
  375. package/src/internal/{api → common/api}/index.ts +0 -4
  376. package/src/internal/{api → common/api}/meta.ts +3 -3
  377. package/src/internal/common/index.ts +7 -0
  378. package/src/internal/{proxy → common/proxy}/change-context.ts +1 -1
  379. package/src/internal/{proxy → common/proxy}/change.test.ts +97 -97
  380. package/src/internal/{proxy → common/proxy}/errors.ts +2 -2
  381. package/src/internal/{proxy → common/proxy}/handler.test.ts +2 -4
  382. package/src/internal/{proxy → common/proxy}/json-serializer.ts +20 -14
  383. package/src/internal/{proxy → common/proxy}/make-object.ts +37 -15
  384. package/src/internal/{proxy → common/proxy}/ownership.ts +0 -1
  385. package/src/internal/{proxy → common/proxy}/reactive-array.ts +1 -1
  386. package/src/internal/common/proxy/reactive.test.ts +54 -0
  387. package/src/internal/{proxy → common/proxy}/reactive.ts +12 -4
  388. package/src/internal/common/proxy/schema.test.ts +107 -0
  389. package/src/internal/{proxy → common/proxy}/typed-handler.test.ts +15 -15
  390. package/src/internal/{proxy → common/proxy}/typed-handler.ts +75 -18
  391. package/src/internal/{proxy → common/proxy}/typed-object.test.ts +17 -30
  392. package/src/internal/{types → common/types}/base.ts +1 -1
  393. package/src/internal/common/types/entity.ts +133 -0
  394. package/src/internal/{types → common/types}/index.ts +1 -0
  395. package/src/internal/{types → common/types}/meta.ts +15 -1
  396. package/src/internal/common/types/model-symbols.ts +74 -0
  397. package/src/internal/common/types/typename.ts +91 -0
  398. package/src/internal/{types → common/types}/version.ts +2 -3
  399. package/src/internal/index.ts +9 -31
  400. package/src/testing/api.test.ts +15 -12
  401. package/src/testing/test-data.ts +158 -99
  402. package/src/testing/test-schema.ts +33 -67
  403. package/src/testing/util.ts +14 -11
  404. package/dist/lib/neutral/chunk-2AF5GMG6.mjs +0 -171
  405. package/dist/lib/neutral/chunk-2AF5GMG6.mjs.map +0 -7
  406. package/dist/lib/neutral/chunk-4L6DOFXP.mjs.map +0 -7
  407. package/dist/lib/neutral/chunk-7WE7SBA2.mjs.map +0 -7
  408. package/dist/lib/neutral/chunk-ANHVGJI4.mjs.map +0 -7
  409. package/dist/lib/neutral/chunk-DLPC7DHQ.mjs.map +0 -7
  410. package/dist/lib/neutral/chunk-EBUAT5ID.mjs +0 -229
  411. package/dist/lib/neutral/chunk-EBUAT5ID.mjs.map +0 -7
  412. package/dist/lib/neutral/chunk-K5K3Z62A.mjs.map +0 -7
  413. package/dist/lib/neutral/chunk-KB7RIVLK.mjs.map +0 -7
  414. package/dist/lib/neutral/chunk-LKFNEFHF.mjs +0 -130
  415. package/dist/lib/neutral/chunk-LKFNEFHF.mjs.map +0 -7
  416. package/dist/lib/neutral/chunk-MTEHHY62.mjs.map +0 -7
  417. package/dist/lib/neutral/chunk-N2QNHMT5.mjs.map +0 -7
  418. package/dist/lib/neutral/chunk-QARLJVDB.mjs.map +0 -7
  419. package/dist/lib/neutral/chunk-RIMHNJ3E.mjs.map +0 -7
  420. package/dist/lib/neutral/chunk-ROKO4RKJ.mjs.map +0 -7
  421. package/dist/lib/neutral/chunk-RPB6V4BE.mjs.map +0 -7
  422. package/dist/lib/neutral/chunk-TLGNKUUG.mjs +0 -3905
  423. package/dist/lib/neutral/chunk-TLGNKUUG.mjs.map +0 -7
  424. package/dist/lib/neutral/chunk-TQT6WTIJ.mjs +0 -142
  425. package/dist/lib/neutral/chunk-TQT6WTIJ.mjs.map +0 -7
  426. package/dist/lib/neutral/chunk-VUQGRDRI.mjs +0 -97
  427. package/dist/lib/neutral/chunk-VUQGRDRI.mjs.map +0 -7
  428. package/dist/lib/neutral/chunk-X2MPMYYN.mjs +0 -13
  429. package/dist/lib/neutral/chunk-X2MPMYYN.mjs.map +0 -7
  430. package/dist/lib/neutral/chunk-XAJMXQ4H.mjs.map +0 -7
  431. package/dist/lib/neutral/chunk-ZAHWXGK4.mjs.map +0 -7
  432. package/dist/types/src/internal/annotations/annotations.d.ts.map +0 -1
  433. package/dist/types/src/internal/annotations/annotations.test.d.ts.map +0 -1
  434. package/dist/types/src/internal/annotations/index.d.ts +0 -3
  435. package/dist/types/src/internal/annotations/index.d.ts.map +0 -1
  436. package/dist/types/src/internal/annotations/util.d.ts.map +0 -1
  437. package/dist/types/src/internal/api/annotations.d.ts +0 -23
  438. package/dist/types/src/internal/api/annotations.d.ts.map +0 -1
  439. package/dist/types/src/internal/api/entity.d.ts +0 -13
  440. package/dist/types/src/internal/api/entity.d.ts.map +0 -1
  441. package/dist/types/src/internal/api/index.d.ts.map +0 -1
  442. package/dist/types/src/internal/api/meta.d.ts.map +0 -1
  443. package/dist/types/src/internal/api/sorting.d.ts.map +0 -1
  444. package/dist/types/src/internal/api/version.d.ts.map +0 -1
  445. package/dist/types/src/internal/entities/entity.d.ts +0 -20
  446. package/dist/types/src/internal/entities/entity.d.ts.map +0 -1
  447. package/dist/types/src/internal/entities/index.d.ts +0 -6
  448. package/dist/types/src/internal/entities/index.d.ts.map +0 -1
  449. package/dist/types/src/internal/entities/model.d.ts +0 -79
  450. package/dist/types/src/internal/entities/model.d.ts.map +0 -1
  451. package/dist/types/src/internal/entities/object.d.ts.map +0 -1
  452. package/dist/types/src/internal/entities/relation.d.ts +0 -62
  453. package/dist/types/src/internal/entities/relation.d.ts.map +0 -1
  454. package/dist/types/src/internal/entities/util.d.ts.map +0 -1
  455. package/dist/types/src/internal/formats/date.d.ts.map +0 -1
  456. package/dist/types/src/internal/formats/date.test.d.ts.map +0 -1
  457. package/dist/types/src/internal/formats/format.d.ts.map +0 -1
  458. package/dist/types/src/internal/formats/format.test.d.ts.map +0 -1
  459. package/dist/types/src/internal/formats/index.d.ts.map +0 -1
  460. package/dist/types/src/internal/formats/number.d.ts.map +0 -1
  461. package/dist/types/src/internal/formats/object.d.ts.map +0 -1
  462. package/dist/types/src/internal/formats/select.d.ts.map +0 -1
  463. package/dist/types/src/internal/formats/string.d.ts.map +0 -1
  464. package/dist/types/src/internal/formats/types.d.ts.map +0 -1
  465. package/dist/types/src/internal/json-schema/annotations.d.ts.map +0 -1
  466. package/dist/types/src/internal/json-schema/effect-schema.test.d.ts.map +0 -1
  467. package/dist/types/src/internal/json-schema/index.d.ts.map +0 -1
  468. package/dist/types/src/internal/json-schema/json-schema-normalize.d.ts.map +0 -1
  469. package/dist/types/src/internal/json-schema/json-schema-type.d.ts.map +0 -1
  470. package/dist/types/src/internal/json-schema/json-schema.d.ts.map +0 -1
  471. package/dist/types/src/internal/json-schema/json-schema.test.d.ts.map +0 -1
  472. package/dist/types/src/internal/object/clone.d.ts.map +0 -1
  473. package/dist/types/src/internal/object/common.d.ts.map +0 -1
  474. package/dist/types/src/internal/object/create-object.d.ts.map +0 -1
  475. package/dist/types/src/internal/object/create-object.test.d.ts.map +0 -1
  476. package/dist/types/src/internal/object/deleted.d.ts.map +0 -1
  477. package/dist/types/src/internal/object/ids.d.ts +0 -6
  478. package/dist/types/src/internal/object/ids.d.ts.map +0 -1
  479. package/dist/types/src/internal/object/index.d.ts.map +0 -1
  480. package/dist/types/src/internal/object/inspect.d.ts.map +0 -1
  481. package/dist/types/src/internal/object/json-serializer.d.ts.map +0 -1
  482. package/dist/types/src/internal/object/json-serializer.test.d.ts.map +0 -1
  483. package/dist/types/src/internal/object/schema-validator.d.ts +0 -2
  484. package/dist/types/src/internal/object/schema-validator.d.ts.map +0 -1
  485. package/dist/types/src/internal/object/schema-validator.test.d.ts.map +0 -1
  486. package/dist/types/src/internal/object/set-value.d.ts.map +0 -1
  487. package/dist/types/src/internal/object/set-value.test.d.ts.map +0 -1
  488. package/dist/types/src/internal/object/snapshot.d.ts.map +0 -1
  489. package/dist/types/src/internal/object/typed-object.d.ts.map +0 -1
  490. package/dist/types/src/internal/object/typed-object.test.d.ts.map +0 -1
  491. package/dist/types/src/internal/proxy/change-context.d.ts.map +0 -1
  492. package/dist/types/src/internal/proxy/change.test.d.ts.map +0 -1
  493. package/dist/types/src/internal/proxy/define-hidden-property.d.ts.map +0 -1
  494. package/dist/types/src/internal/proxy/errors.d.ts.map +0 -1
  495. package/dist/types/src/internal/proxy/event-batch.d.ts.map +0 -1
  496. package/dist/types/src/internal/proxy/handler.test.d.ts.map +0 -1
  497. package/dist/types/src/internal/proxy/index.d.ts.map +0 -1
  498. package/dist/types/src/internal/proxy/json-serializer.d.ts.map +0 -1
  499. package/dist/types/src/internal/proxy/make-object.d.ts +0 -14
  500. package/dist/types/src/internal/proxy/make-object.d.ts.map +0 -1
  501. package/dist/types/src/internal/proxy/ownership.d.ts.map +0 -1
  502. package/dist/types/src/internal/proxy/proxy-types.d.ts.map +0 -1
  503. package/dist/types/src/internal/proxy/proxy-utils.d.ts.map +0 -1
  504. package/dist/types/src/internal/proxy/reactive-array.d.ts.map +0 -1
  505. package/dist/types/src/internal/proxy/schema-validator.d.ts.map +0 -1
  506. package/dist/types/src/internal/proxy/schema.test.d.ts.map +0 -1
  507. package/dist/types/src/internal/proxy/symbols.d.ts.map +0 -1
  508. package/dist/types/src/internal/proxy/typed-handler.d.ts.map +0 -1
  509. package/dist/types/src/internal/proxy/typed-handler.test.d.ts.map +0 -1
  510. package/dist/types/src/internal/proxy/typed-object.test.d.ts.map +0 -1
  511. package/dist/types/src/internal/ref/index.d.ts.map +0 -1
  512. package/dist/types/src/internal/ref/ref-array.d.ts.map +0 -1
  513. package/dist/types/src/internal/ref/ref.d.ts.map +0 -1
  514. package/dist/types/src/internal/ref/ref.test.d.ts.map +0 -1
  515. package/dist/types/src/internal/schema/compose.d.ts.map +0 -1
  516. package/dist/types/src/internal/schema/compose.test.d.ts.map +0 -1
  517. package/dist/types/src/internal/schema/echo-schema.d.ts +0 -181
  518. package/dist/types/src/internal/schema/echo-schema.d.ts.map +0 -1
  519. package/dist/types/src/internal/schema/index.d.ts +0 -4
  520. package/dist/types/src/internal/schema/index.d.ts.map +0 -1
  521. package/dist/types/src/internal/schema/manipulation.d.ts.map +0 -1
  522. package/dist/types/src/internal/schema/persistent-schema.d.ts +0 -20
  523. package/dist/types/src/internal/schema/persistent-schema.d.ts.map +0 -1
  524. package/dist/types/src/internal/types/base.d.ts.map +0 -1
  525. package/dist/types/src/internal/types/entity.d.ts +0 -37
  526. package/dist/types/src/internal/types/entity.d.ts.map +0 -1
  527. package/dist/types/src/internal/types/index.d.ts.map +0 -1
  528. package/dist/types/src/internal/types/meta.d.ts.map +0 -1
  529. package/dist/types/src/internal/types/typename.d.ts.map +0 -1
  530. package/dist/types/src/internal/types/version.d.ts.map +0 -1
  531. package/src/internal/annotations/annotations.test.ts +0 -96
  532. package/src/internal/api/annotations.ts +0 -60
  533. package/src/internal/entities/entity.ts +0 -126
  534. package/src/internal/entities/relation.ts +0 -171
  535. package/src/internal/entities/util.ts +0 -33
  536. package/src/internal/object/create-object.ts +0 -95
  537. package/src/internal/object/ids.ts +0 -12
  538. package/src/internal/object/json-serializer.test.ts +0 -98
  539. package/src/internal/object/typed-object.test.ts +0 -34
  540. package/src/internal/proxy/schema.test.ts +0 -145
  541. package/src/internal/schema/echo-schema.ts +0 -424
  542. package/src/internal/schema/index.ts +0 -7
  543. package/src/internal/schema/persistent-schema.ts +0 -28
  544. package/src/internal/types/entity.ts +0 -54
  545. package/src/internal/types/typename.ts +0 -55
  546. /package/dist/lib/neutral/{chunk-OMUPQMLR.mjs.map → chunk-V72DY6LU.mjs.map} +0 -0
  547. /package/dist/types/src/internal/{annotations → Annotation}/annotations.test.d.ts +0 -0
  548. /package/dist/types/src/internal/{entities → Entity}/util.d.ts +0 -0
  549. /package/dist/types/src/internal/{formats → Format}/date.d.ts +0 -0
  550. /package/dist/types/src/internal/{formats → Format}/date.test.d.ts +0 -0
  551. /package/dist/types/src/internal/{formats → Format}/format.test.d.ts +0 -0
  552. /package/dist/types/src/internal/{formats → Format}/number.d.ts +0 -0
  553. /package/dist/types/src/internal/{formats → Format}/object.d.ts +0 -0
  554. /package/dist/types/src/internal/{formats → Format}/select.d.ts +0 -0
  555. /package/dist/types/src/internal/{formats → Format}/string.d.ts +0 -0
  556. /package/dist/types/src/internal/{json-schema → JsonSchema}/effect-schema.test.d.ts +0 -0
  557. /package/dist/types/src/internal/{json-schema → JsonSchema}/index.d.ts +0 -0
  558. /package/dist/types/src/internal/{json-schema → JsonSchema}/json-schema-normalize.d.ts +0 -0
  559. /package/dist/types/src/internal/{json-schema → JsonSchema}/json-schema.test.d.ts +0 -0
  560. /package/dist/types/src/internal/{object → Obj}/clone.d.ts +0 -0
  561. /package/dist/types/src/internal/{object → Obj}/common.d.ts +0 -0
  562. /package/dist/types/src/internal/{object → Obj}/create-object.test.d.ts +0 -0
  563. /package/dist/types/src/internal/{object → Obj}/inspect.d.ts +0 -0
  564. /package/dist/types/src/internal/{object → Obj}/json-serializer.test.d.ts +0 -0
  565. /package/dist/types/src/internal/{object → Obj}/schema-validator.test.d.ts +0 -0
  566. /package/dist/types/src/internal/{object → Obj}/set-value.test.d.ts +0 -0
  567. /package/dist/types/src/internal/{object → Obj}/snapshot.d.ts +0 -0
  568. /package/dist/types/src/internal/{object → Obj}/typed-object.test.d.ts +0 -0
  569. /package/dist/types/src/internal/{ref → Ref}/index.d.ts +0 -0
  570. /package/dist/types/src/internal/{ref → Ref}/ref.test.d.ts +0 -0
  571. /package/dist/types/src/internal/{schema → Type}/compose.test.d.ts +0 -0
  572. /package/dist/types/src/internal/{proxy → common/proxy}/change.test.d.ts +0 -0
  573. /package/dist/types/src/internal/{proxy → common/proxy}/define-hidden-property.d.ts +0 -0
  574. /package/dist/types/src/internal/{proxy → common/proxy}/event-batch.d.ts +0 -0
  575. /package/dist/types/src/internal/{proxy → common/proxy}/handler.test.d.ts +0 -0
  576. /package/dist/types/src/internal/{proxy → common/proxy}/index.d.ts +0 -0
  577. /package/dist/types/src/internal/{proxy → common/proxy}/json-serializer.d.ts +0 -0
  578. /package/dist/types/src/internal/{proxy → common/proxy}/ownership.d.ts +0 -0
  579. /package/dist/types/src/internal/{proxy → common/proxy}/proxy-types.d.ts +0 -0
  580. /package/dist/types/src/internal/{proxy → common/proxy}/proxy-utils.d.ts +0 -0
  581. /package/dist/types/src/internal/{proxy → common/proxy}/schema-validator.d.ts +0 -0
  582. /package/dist/types/src/internal/{proxy → common/proxy}/schema.test.d.ts +0 -0
  583. /package/dist/types/src/internal/{proxy → common/proxy}/symbols.d.ts +0 -0
  584. /package/dist/types/src/internal/{proxy → common/proxy}/typed-handler.test.d.ts +0 -0
  585. /package/dist/types/src/internal/{proxy → common/proxy}/typed-object.test.d.ts +0 -0
  586. /package/src/internal/{formats → Format}/format.ts +0 -0
  587. /package/src/internal/{formats → Format}/number.ts +0 -0
  588. /package/src/internal/{formats → Format}/object.ts +0 -0
  589. /package/src/internal/{formats → Format}/select.ts +0 -0
  590. /package/src/internal/{formats → Format}/string.ts +0 -0
  591. /package/src/internal/{json-schema → JsonSchema}/effect-schema.test.ts +0 -0
  592. /package/src/internal/{json-schema → JsonSchema}/index.ts +0 -0
  593. /package/src/internal/{json-schema → JsonSchema}/json-schema-normalize.ts +0 -0
  594. /package/src/internal/{object → Obj}/schema-validator.test.ts +0 -0
  595. /package/src/internal/{ref → Ref}/index.ts +0 -0
  596. /package/src/internal/{proxy → common/proxy}/define-hidden-property.ts +0 -0
  597. /package/src/internal/{proxy → common/proxy}/event-batch.ts +0 -0
  598. /package/src/internal/{proxy → common/proxy}/index.ts +0 -0
  599. /package/src/internal/{proxy → common/proxy}/proxy-types.ts +0 -0
  600. /package/src/internal/{proxy → common/proxy}/proxy-utils.ts +0 -0
  601. /package/src/internal/{proxy → common/proxy}/schema-validator.ts +0 -0
  602. /package/src/internal/{proxy → common/proxy}/symbols.ts +0 -0
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "@dxos/echo",
3
- "version": "0.8.4-main.ef1bc66f44",
3
+ "version": "0.8.4-main.effb148878",
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",
@@ -48,6 +48,11 @@
48
48
  "types": "./dist/types/src/Err.d.ts",
49
49
  "default": "./dist/lib/neutral/Err.mjs"
50
50
  },
51
+ "./Feed": {
52
+ "source": "./src/Feed.ts",
53
+ "types": "./dist/types/src/Feed.d.ts",
54
+ "default": "./dist/lib/neutral/Feed.mjs"
55
+ },
51
56
  "./Filter": {
52
57
  "source": "./src/Filter.ts",
53
58
  "types": "./dist/types/src/Filter.d.ts",
@@ -68,6 +73,11 @@
68
73
  "types": "./dist/types/src/Key.d.ts",
69
74
  "default": "./dist/lib/neutral/Key.mjs"
70
75
  },
76
+ "./Migration": {
77
+ "source": "./src/Migration.ts",
78
+ "types": "./dist/types/src/Migration.d.ts",
79
+ "default": "./dist/lib/neutral/Migration.mjs"
80
+ },
71
81
  "./Obj": {
72
82
  "source": "./src/Obj.ts",
73
83
  "types": "./dist/types/src/Obj.d.ts",
@@ -112,6 +122,11 @@
112
122
  "source": "./src/Type.ts",
113
123
  "types": "./dist/types/src/Type.d.ts",
114
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"
115
130
  }
116
131
  },
117
132
  "files": [
@@ -119,19 +134,19 @@
119
134
  "src"
120
135
  ],
121
136
  "dependencies": {
122
- "effect": "3.19.16",
123
- "@dxos/async": "0.8.4-main.ef1bc66f44",
124
- "@dxos/debug": "0.8.4-main.ef1bc66f44",
125
- "@dxos/context": "0.8.4-main.ef1bc66f44",
126
- "@dxos/effect": "0.8.4-main.ef1bc66f44",
127
- "@dxos/echo-protocol": "0.8.4-main.ef1bc66f44",
128
- "@dxos/errors": "0.8.4-main.ef1bc66f44",
129
- "@dxos/invariant": "0.8.4-main.ef1bc66f44",
130
- "@dxos/log": "0.8.4-main.ef1bc66f44",
131
- "@dxos/protocols": "0.8.4-main.ef1bc66f44",
132
- "@dxos/keys": "0.8.4-main.ef1bc66f44",
133
- "@dxos/node-std": "0.8.4-main.ef1bc66f44",
134
- "@dxos/util": "0.8.4-main.ef1bc66f44"
137
+ "effect": "3.20.0",
138
+ "@dxos/async": "0.8.4-main.effb148878",
139
+ "@dxos/debug": "0.8.4-main.effb148878",
140
+ "@dxos/echo-protocol": "0.8.4-main.effb148878",
141
+ "@dxos/effect": "0.8.4-main.effb148878",
142
+ "@dxos/context": "0.8.4-main.effb148878",
143
+ "@dxos/errors": "0.8.4-main.effb148878",
144
+ "@dxos/invariant": "0.8.4-main.effb148878",
145
+ "@dxos/keys": "0.8.4-main.effb148878",
146
+ "@dxos/log": "0.8.4-main.effb148878",
147
+ "@dxos/node-std": "0.8.4-main.effb148878",
148
+ "@dxos/protocols": "0.8.4-main.effb148878",
149
+ "@dxos/util": "0.8.4-main.effb148878"
135
150
  },
136
151
  "publishConfig": {
137
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,
@@ -15,11 +17,13 @@ export {
15
17
  getTypeAnnotation,
16
18
  setDescriptionWithSchema,
17
19
  setLabelWithSchema,
18
- } from './internal/annotations';
20
+ IconAnnotation,
21
+ IconFromRefAnnotation,
22
+ } from './internal/Annotation';
19
23
 
20
24
  import type * as Schema from 'effect/Schema';
21
25
 
22
- import * as internalAnnotations from './internal/annotations';
26
+ import * as internalAnnotations from './internal/Annotation';
23
27
 
24
28
  interface MakeProps<T> {
25
29
  id: string;
@@ -34,7 +38,7 @@ interface MakeProps<T> {
34
38
  * @example
35
39
  * ```ts
36
40
  * const ColorAnnotation = Annotation.make({
37
- * id: 'dxos.org/annotation/Color',
41
+ * id: 'org.dxos.annotation.color',
38
42
  * schema: Schema.String,
39
43
  * });
40
44
  *
@@ -0,0 +1,36 @@
1
+ //
2
+ // Copyright 2024 DXOS.org
3
+ //
4
+
5
+ // @import-as-namespace
6
+
7
+ import * as Schema from 'effect/Schema';
8
+
9
+ import { DXN } from '@dxos/keys';
10
+
11
+ import * as Annotation from './Annotation';
12
+ import * as internal from './internal';
13
+ import * as Obj from './Obj';
14
+ import * as Ref from './Ref';
15
+ import * as Type from './Type';
16
+
17
+ /**
18
+ * A an ordered set of objects.
19
+ */
20
+ export const Collection = Schema.Struct({
21
+ name: Schema.String.pipe(Schema.optional),
22
+ objects: Schema.Array(Ref.Ref(Obj.Unknown)).pipe(internal.FormInputAnnotation.set(false)),
23
+ }).pipe(
24
+ Annotation.IconAnnotation.set({
25
+ icon: 'ph--folder--regular',
26
+ hue: 'amber',
27
+ }),
28
+ Type.makeObject(DXN.make('org.dxos.type.collection', '0.1.0')),
29
+ );
30
+
31
+ export type Collection = Type.InstanceType<typeof Collection>;
32
+
33
+ export const make = (props: Partial<Obj.MakeProps<typeof Collection>> = {}): Collection =>
34
+ Obj.make(Collection, { objects: [], ...props });
35
+
36
+ export const isCollection: (value: unknown) => value is Collection = Obj.instanceOf(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';
@@ -9,75 +11,36 @@ import * as Option from 'effect/Option';
9
11
  import * as Schema from 'effect/Schema';
10
12
  import type * as Types from 'effect/Types';
11
13
 
12
- import { type QueryAST } from '@dxos/echo-protocol';
13
14
  import { promiseWithCauseCapture } from '@dxos/effect';
14
15
  import { invariant } from '@dxos/invariant';
15
- import { DXN, type PublicKey, type SpaceId } from '@dxos/keys';
16
- import { type QueryOptions as QueryOptionsProto } from '@dxos/protocols/proto/dxos/echo/filter';
16
+ import { type SpaceId, type URI } from '@dxos/keys';
17
17
 
18
18
  import type * as Entity from './Entity';
19
19
  import * as Err from './Err';
20
20
  import type * as Filter from './Filter';
21
21
  import type * as Hypergraph from './Hypergraph';
22
- import { isInstanceOf } from './internal/annotations';
23
- import type { Ref } from './internal/ref/ref';
24
- import { type AnyProperties } from './internal/types';
22
+ import { type AnyProperties } from './internal/common/types';
23
+ // Deep import (not the `./internal/Entity` barrel) to avoid a cycle:
24
+ // Database internal/Entity entity → JsonSchema → Ref → Database.
25
+ import { isInstanceOf } from './internal/Entity/type-uri';
26
+ import type { Ref } from './internal/Ref/ref';
25
27
  import type * as Obj from './Obj';
26
28
  import type * as Query from './Query';
27
29
  import type * as QueryResult from './QueryResult';
28
30
  import type * as SchemaRegistry from './SchemaRegistry';
29
31
  import type * as Type from './Type';
30
32
 
31
- /**
32
- * @deprecated Use `QueryAST.QueryOptions` instead.
33
- */
34
- export type QueryOptions = {
35
- /**
36
- * @deprecated Use `spaceIds` instead.
37
- */
38
- spaces?: PublicKey[];
39
-
40
- /**
41
- * Query only in specific spaces.
42
- */
43
- // TODO(dmaretskyi): Change this to SpaceId.
44
- spaceIds?: string[];
45
-
46
- /**
47
- * Return only the first `limit` results.
48
- */
49
- limit?: number;
50
-
51
- /**
52
- * Query only local spaces, or remote on agent.
53
- * @default `QueryOptions.DataLocation.LOCAL`
54
- *
55
- * Options:
56
- * - proto3_optional = true
57
- */
58
- // TODO(burdon): Remove?
59
- dataLocation?: QueryOptionsProto.DataLocation;
60
- };
61
-
62
33
  /**
63
34
  * `query` API function declaration.
64
35
  */
65
36
  // TODO(burdon): Reconcile Query and Filter (should only have one root type).
66
- // TODO(dmaretskyi): Remove query options.
67
37
  export interface QueryFn {
68
- <Q extends Query.Any>(
69
- query: Q,
70
- options?: (QueryAST.QueryOptions & QueryOptions) | undefined,
71
- ): QueryResult.QueryResult<Query.Type<Q>>;
72
-
73
- <F extends Filter.Any>(
74
- filter: F,
75
- options?: (QueryAST.QueryOptions & QueryOptions) | undefined,
76
- ): QueryResult.QueryResult<Filter.Type<F>>;
38
+ <Q extends Query.Any>(query: Q): QueryResult.QueryResult<Query.Type<Q>>;
39
+ <F extends Filter.Any>(filter: F): QueryResult.QueryResult<Filter.Type<F>>;
77
40
  }
78
41
 
79
42
  /**
80
- * Common interface for Database and Queue.
43
+ * Common interface for Database, Feed, and Hypergraph.
81
44
  */
82
45
  export interface Queryable {
83
46
  query: QueryFn;
@@ -110,7 +73,7 @@ export type FlushOptions = {
110
73
 
111
74
  /**
112
75
  * Wait for pending index updates.
113
- * @default false
76
+ * @default true
114
77
  */
115
78
  indexes?: boolean;
116
79
 
@@ -145,7 +108,10 @@ export interface Database extends Queryable {
145
108
  /**
146
109
  * Return object by local ID.
147
110
  */
148
- getObjectById<T extends Obj.Unknown = Obj.Obj<AnyProperties>>(id: string, opts?: GetObjectByIdOptions): T | undefined;
111
+ getObjectById<T extends Obj.Unknown = Obj.OfShape<AnyProperties>>(
112
+ id: string,
113
+ opts?: GetObjectByIdOptions,
114
+ ): T | undefined;
149
115
 
150
116
  /**
151
117
  * Query objects.
@@ -156,11 +122,11 @@ export interface Database extends Queryable {
156
122
  * Creates a reference to an existing object in the database.
157
123
  *
158
124
  * NOTE: The reference may be dangling if the object is not present in the database.
159
- * NOTE: Difference from `Ref.fromDXN`
160
- * `Ref.fromDXN(dxn)` returns an unhydrated reference. The `.load` and `.target` APIs will not work.
125
+ * NOTE: Difference from `Ref.fromURI`
126
+ * `Ref.fromURI(dxn)` returns an unhydrated reference. The `.load` and `.target` APIs will not work.
161
127
  * `db.makeRef(dxn)` is preferable in cases with access to the database.
162
128
  */
163
- makeRef<T extends Entity.Unknown = Entity.Unknown>(dxn: DXN): Ref<T>;
129
+ makeRef<T extends Entity.Unknown = Entity.Unknown>(uri: URI.URI): Ref<T>;
164
130
 
165
131
  /**
166
132
  * Adds object to the database.
@@ -237,19 +203,19 @@ export const spaceId = Effect.gen(function* () {
237
203
  */
238
204
  export const resolve: {
239
205
  // No type check.
240
- (ref: DXN | Ref<any>): Effect.Effect<Entity.Unknown, never, Service>;
206
+ (ref: URI.URI | Ref<any>): Effect.Effect<Entity.Unknown, never, Service>;
241
207
  // Check matches schema.
242
- <S extends Type.Entity.Any>(
243
- ref: DXN | Ref<any>,
208
+ <S extends Type.AnyEntity>(
209
+ ref: URI.URI | Ref<any>,
244
210
  schema: S,
245
- ): Effect.Effect<Schema.Schema.Type<S>, Err.ObjectNotFoundError, Service>;
246
- } = (<S extends Type.Entity.Any>(
247
- ref: DXN | Ref<any>,
211
+ ): Effect.Effect<Type.InstanceType<S>, Err.ObjectNotFoundError, Service>;
212
+ } = (<S extends Type.AnyEntity>(
213
+ ref: URI.URI | Ref<any>,
248
214
  schema?: S,
249
- ): Effect.Effect<Schema.Schema.Type<S>, Err.ObjectNotFoundError, Service> =>
215
+ ): Effect.Effect<Type.InstanceType<S>, Err.ObjectNotFoundError, Service> =>
250
216
  Effect.gen(function* () {
251
217
  const { db } = yield* Service;
252
- const dxn = ref instanceof DXN ? ref : ref.dxn;
218
+ const dxn = typeof ref === 'string' ? ref : ref.uri;
253
219
  const object = yield* promiseWithCauseCapture(() =>
254
220
  db.graph
255
221
  .createRefResolver({
@@ -263,26 +229,32 @@ export const resolve: {
263
229
  if (!object) {
264
230
  return yield* Effect.fail(new Err.ObjectNotFoundError(dxn));
265
231
  }
266
- invariant(!schema || isInstanceOf(schema, object), 'Object type mismatch.');
232
+ // `isInstanceOf` uses a conditional generic that TS can't resolve through
233
+ // the local `S extends Type.AnyEntity` parameter — runtime accepts it fine.
234
+ invariant(!schema || isInstanceOf(schema as any, object), 'Object type mismatch.');
267
235
  return object as any;
268
- })) as any;
236
+ }).pipe(Effect.withSpan('Database.resolve'))) as any;
269
237
 
270
238
  /**
271
239
  * Loads an object reference.
272
240
  */
273
- export const load: <T>(ref: Ref<T>) => Effect.Effect<T, Err.ObjectNotFoundError, never> = Effect.fn(function* (ref) {
274
- const object = yield* promiseWithCauseCapture(() => ref.tryLoad());
275
- if (!object) {
276
- return yield* Effect.fail(new Err.ObjectNotFoundError(ref.dxn));
277
- }
278
- return object;
279
- });
241
+ export const load: <T>(ref: Ref<T>) => Effect.Effect<T, Err.ObjectNotFoundError, never> = Effect.fn('Database.load')(
242
+ function* (ref) {
243
+ const object = yield* promiseWithCauseCapture(() => ref.tryLoad());
244
+ if (!object) {
245
+ return yield* Effect.fail(new Err.ObjectNotFoundError(ref.uri));
246
+ }
247
+ return object;
248
+ },
249
+ );
280
250
 
281
251
  /**
282
252
  * Loads an object reference option.
283
253
  */
284
254
  // TODO(dmaretskyi): Do we need this -- you can just use `Effect.catchTag` in calling code instead.
285
- export const loadOption: <T>(ref: Ref<T>) => Effect.Effect<Option.Option<T>, never, never> = Effect.fn(function* (ref) {
255
+ export const loadOption: <T>(ref: Ref<T>) => Effect.Effect<Option.Option<T>, never, never> = Effect.fn(
256
+ 'Database.loadOption',
257
+ )(function* (ref) {
286
258
  const object = yield* load(ref).pipe(Effect.catchTag('ObjectNotFoundError', () => Effect.succeed(undefined)));
287
259
 
288
260
  return Option.fromNullable(object);
@@ -293,21 +265,23 @@ export const loadOption: <T>(ref: Ref<T>) => Effect.Effect<Option.Option<T>, nev
293
265
  * @see {@link Database.add}
294
266
  */
295
267
  export const add = <T extends Entity.Unknown>(obj: T): Effect.Effect<T, never, Service> =>
296
- Service.pipe(Effect.map(({ db }) => db.add(obj)));
268
+ Service.pipe(Effect.map(({ db }) => db.add(obj))).pipe(Effect.withSpan('Database.add'));
297
269
 
298
270
  /**
299
271
  * Removes an object from the database.
300
272
  * @see {@link Database.remove}
301
273
  */
302
274
  export const remove = <T extends Entity.Unknown>(obj: T): Effect.Effect<void, never, Service> =>
303
- Service.pipe(Effect.map(({ db }) => db.remove(obj)));
275
+ Service.pipe(Effect.map(({ db }) => db.remove(obj))).pipe(Effect.withSpan('Database.remove'));
304
276
 
305
277
  /**
306
278
  * Flushes pending changes to disk.
307
279
  * @see {@link Database.flush}
308
280
  */
309
281
  export const flush = (opts?: FlushOptions) =>
310
- Service.pipe(Effect.flatMap(({ db }) => promiseWithCauseCapture(() => db.flush(opts))));
282
+ Service.pipe(Effect.flatMap(({ db }) => promiseWithCauseCapture(() => db.flush(opts)))).pipe(
283
+ Effect.withSpan('Database.flush'),
284
+ );
311
285
 
312
286
  /**
313
287
  * Creates a `QueryResult` object that can be subscribed to.
@@ -328,7 +302,36 @@ export const runQuery: {
328
302
  <Q extends Query.Any>(query: Q): Effect.Effect<Query.Type<Q>[], never, Service>;
329
303
  <F extends Filter.Any>(filter: F): Effect.Effect<Filter.Type<F>[], never, Service>;
330
304
  } = (queryOrFilter: Query.Any | Filter.Any) =>
331
- query(queryOrFilter as any).pipe(Effect.flatMap((queryResult) => promiseWithCauseCapture(() => queryResult.run())));
305
+ query(queryOrFilter as any).pipe(
306
+ Effect.flatMap((queryResult) => promiseWithCauseCapture(() => queryResult.run())),
307
+ Effect.withSpan('Database.runQuery'),
308
+ );
309
+
310
+ /**
311
+ * Executes the query once and returns the first result as or None.
312
+ */
313
+ export const runQueryFirst: {
314
+ <Q extends Query.Any>(query: Q): Effect.Effect<Option.Option<Query.Type<Q>>, never, Service>;
315
+ <F extends Filter.Any>(filter: F): Effect.Effect<Option.Option<Filter.Type<F>>, never, Service>;
316
+ } = (queryOrFilter: Query.Any | Filter.Any) =>
317
+ query(queryOrFilter as any).pipe(
318
+ Effect.flatMap((queryResult) =>
319
+ promiseWithCauseCapture(async () => Option.fromNullable(await queryResult.firstOrUndefined())),
320
+ ),
321
+ Effect.withSpan('Database.runQueryFirst'),
322
+ );
323
+
324
+ /**
325
+ * Persists schemas in the database so they replicate to other clients.
326
+ * @see {@link SchemaRegistry.SchemaRegistry.register}
327
+ */
328
+ export const registerSchema = (
329
+ input: SchemaRegistry.RegisterSchemaInput[],
330
+ ): Effect.Effect<Type.Type[], never, Service> =>
331
+ Service.pipe(
332
+ Effect.flatMap(({ db }) => promiseWithCauseCapture(() => db.schemaRegistry.register(input))),
333
+ Effect.withSpan('Database.registerSchema'),
334
+ );
332
335
 
333
336
  /**
334
337
  * Creates a schema query result that can be subscribed to.
@@ -336,7 +339,7 @@ export const runQuery: {
336
339
  // TODO(dmaretskyi): Change API to `yield* Database.querySchema(...).first` and `yield* Database.querySchema(...).schema`.
337
340
  export const schemaQuery = <Q extends Types.NoExcessProperties<SchemaRegistry.Query, Q>>(
338
341
  schemaQueryOptions?: Q & SchemaRegistry.Query,
339
- ): Effect.Effect<QueryResult.QueryResult<SchemaRegistry.ExtractQueryResult<Q>>, never, Service> =>
342
+ ): Effect.Effect<QueryResult.QueryResult<Type.Type>, never, Service> =>
340
343
  Service.pipe(
341
344
  Effect.map(({ db }) => db.schemaRegistry.query(schemaQueryOptions)),
342
345
  Effect.withSpan('Database.schemaQuery'),
@@ -347,7 +350,7 @@ export const schemaQuery = <Q extends Types.NoExcessProperties<SchemaRegistry.Qu
347
350
  */
348
351
  export const runSchemaQuery = <Q extends Types.NoExcessProperties<SchemaRegistry.Query, Q>>(
349
352
  schemaQueryOptions?: Q & SchemaRegistry.Query,
350
- ): Effect.Effect<SchemaRegistry.ExtractQueryResult<Q>[], never, Service> =>
353
+ ): Effect.Effect<Type.Type[], never, Service> =>
351
354
  schemaQuery(schemaQueryOptions).pipe(
352
355
  Effect.flatMap((queryResult) => promiseWithCauseCapture(() => queryResult.run())),
353
356
  );
package/src/Dataset.ts ADDED
@@ -0,0 +1,34 @@
1
+ //
2
+ // Copyright 2026 DXOS.org
3
+ //
4
+
5
+ // @import-as-namespace
6
+
7
+ import { pipe } from 'effect/Function';
8
+ import * as Predicate from 'effect/Predicate';
9
+ import * as Schema from 'effect/Schema';
10
+
11
+ import * as Collection from './Collection';
12
+ import * as Feed from './Feed';
13
+ import * as Obj from './Obj';
14
+ import * as Type from './Type';
15
+ import * as View from './View';
16
+
17
+ /**
18
+ * Abstract set of objects, represented by a view, feed, or collection.
19
+ * Schema-level union of the underlying type entities (rebuilt via
20
+ * `Type.getSchema`) so this can still be consumed by Schema-side APIs such
21
+ * as `Filter.type(...)` on a union.
22
+ */
23
+ export type Dataset = Feed.Feed | Collection.Collection | View.View;
24
+ export const Dataset = Schema.Union(
25
+ Type.getSchema(Feed.Feed),
26
+ Type.getSchema(Collection.Collection),
27
+ Type.getSchema(View.View),
28
+ );
29
+
30
+ export const isDataset: (value: unknown) => value is Dataset = pipe(
31
+ Obj.instanceOf(Feed.Feed),
32
+ Predicate.or(Obj.instanceOf(Collection.Collection)),
33
+ Predicate.or(Obj.instanceOf(View.View)),
34
+ );
@@ -4,19 +4,129 @@
4
4
 
5
5
  import { describe, expect, test } from 'vitest';
6
6
 
7
- import type * as Entity from './Entity';
7
+ import * as Entity from './Entity';
8
8
  import * as Obj from './Obj';
9
9
  import * as Relation from './Relation';
10
10
  import { TestSchema } from './testing';
11
+ import * as Type from './Type';
12
+
13
+ const makeObject = () =>
14
+ Obj.make(TestSchema.Person, {
15
+ name: 'Test',
16
+ username: 'test',
17
+ email: 'test@example.com',
18
+ tasks: [],
19
+ });
20
+
21
+ const makeRelation = (obj: TestSchema.Person) =>
22
+ Relation.make(TestSchema.HasManager, { [Relation.Source]: obj, [Relation.Target]: obj });
11
23
 
12
24
  describe('Entity', () => {
13
25
  test('Entity.Unknown accepts any object or relation', () => {
14
- const obj = Obj.make(TestSchema.Person, { name: 'Test' });
15
- const rel = Relation.make(TestSchema.HasManager, { [Relation.Source]: obj, [Relation.Target]: obj });
16
- const doSomething = (entity: Entity.Unknown) => {
17
- return entity;
18
- };
26
+ const obj = makeObject();
27
+ const rel = makeRelation(obj);
28
+ const doSomething = (entity: Entity.Unknown) => entity;
19
29
  expect(doSomething(obj)).toBe(obj);
20
30
  expect(doSomething(rel)).toBe(rel);
21
31
  });
32
+
33
+ // `isEntity` is a bare brand check (`[KindId] !== undefined`). All three entity
34
+ // kinds — objects, relations, and type entities — carry the brand, so all three
35
+ // are recognised as entities. (Type entities brand with `EntityKind.Type`.)
36
+ describe('isEntity / isSnapshot', () => {
37
+ test('object instance is an entity', () => {
38
+ const obj = makeObject();
39
+ expect(Entity.isEntity(obj)).toBe(true);
40
+ expect(Entity.isSnapshot(obj)).toBe(false);
41
+ });
42
+
43
+ test('relation instance is an entity', () => {
44
+ const rel = makeRelation(makeObject());
45
+ expect(Entity.isEntity(rel)).toBe(true);
46
+ expect(Entity.isSnapshot(rel)).toBe(false);
47
+ });
48
+
49
+ test('type entity is an entity', () => {
50
+ expect(Entity.isEntity(TestSchema.Person)).toBe(true);
51
+ expect(Entity.isSnapshot(TestSchema.Person)).toBe(false);
52
+ });
53
+
54
+ test('non-entities are rejected', () => {
55
+ expect(Entity.isEntity(null)).toBe(false);
56
+ expect(Entity.isEntity({})).toBe(false);
57
+ expect(Entity.isEntity({ id: 'x' })).toBe(false);
58
+ expect(Entity.isEntity('string')).toBe(false);
59
+ });
60
+ });
61
+
62
+ // Object and relation instances behave identically across the Entity.* accessor
63
+ // surface: these accessors are written for runtime instances and read the
64
+ // instance's identity, type pointer and metadata.
65
+ describe.each([
66
+ ['object', () => makeObject(), 'com.example.type.person'],
67
+ ['relation', () => makeRelation(makeObject()), 'com.example.type.hasManager'],
68
+ ] as const)('instance accessors (%s)', (_label, make, typename) => {
69
+ test('getURI returns an echo URI', () => {
70
+ const entity = make();
71
+ expect(Entity.getURI(entity)).toMatch(/^echo:/);
72
+ });
73
+
74
+ test('getTypename returns the typename', () => {
75
+ expect(Entity.getTypename(make())).toBe(typename);
76
+ });
77
+
78
+ test('getTypeURI returns the type DXN', () => {
79
+ expect(Entity.getTypeURI(make())).toBe(`dxn:${typename}:0.1.0`);
80
+ });
81
+
82
+ test('getType resolves back to the type entity', () => {
83
+ const type = Entity.getType(make());
84
+ expect(type).toBeDefined();
85
+ expect(Type.getTypename(type!)).toBe(typename);
86
+ });
87
+
88
+ test('getMeta returns metadata', () => {
89
+ expect(Entity.getMeta(make())).toBeDefined();
90
+ });
91
+
92
+ test('isDeleted is false for a live entity', () => {
93
+ expect(Entity.isDeleted(make())).toBe(false);
94
+ });
95
+
96
+ test('toJSON serializes the entity', () => {
97
+ const json = Entity.toJSON(make());
98
+ expect(json).toMatchObject({ '@type': expect.stringContaining(typename) });
99
+ });
100
+ });
101
+
102
+ // Type entities are first-class entities: the Entity.* accessors work on them too.
103
+ // `getURI`/`getTypename` return the type's OWN identity, while `getType`/`getTypeURI`
104
+ // (which mean "the type this entity is an instance of") resolve to the meta-type
105
+ // `Type.Type`.
106
+ describe('type entity', () => {
107
+ test('isEntity / getMeta / isDeleted', () => {
108
+ expect(Entity.isEntity(TestSchema.Person)).toBe(true);
109
+ expect(Entity.getMeta(TestSchema.Person)).toBeDefined();
110
+ expect(Entity.isDeleted(TestSchema.Person)).toBe(false);
111
+ });
112
+
113
+ test('getURI / getTypename return the type entity’s own identity', () => {
114
+ expect(Entity.getURI(TestSchema.Person)).toBe('dxn:com.example.type.person:0.1.0');
115
+ expect(Entity.getTypename(TestSchema.Person)).toBe('com.example.type.person');
116
+ });
117
+
118
+ test('getType / getTypeURI resolve to the meta-type (Type.Type)', () => {
119
+ expect(Entity.getType(TestSchema.Person)).toBe(Type.Type);
120
+ expect(Entity.getTypeURI(TestSchema.Person)).toBe('dxn:org.dxos.type.schema:0.1.0');
121
+ });
122
+
123
+ test('Entity.* and Type.* agree on type identity', () => {
124
+ expect(Entity.getURI(TestSchema.Person)).toBe(Type.getURI(TestSchema.Person));
125
+ expect(Entity.getTypename(TestSchema.Person)).toBe(Type.getTypename(TestSchema.Person));
126
+ expect(Type.isType(TestSchema.Person)).toBe(true);
127
+ expect(Type.isObject(TestSchema.Person)).toBe(true);
128
+ expect(Type.isRelation(TestSchema.HasManager)).toBe(true);
129
+ expect(Type.getVersion(TestSchema.Person)).toBe('0.1.0');
130
+ });
131
+ });
22
132
  });