@dxos/echo 0.8.4-main.84f28bd → 0.8.4-main.8baae0fced

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 (540) hide show
  1. package/LICENSE +102 -5
  2. package/README.md +7 -8
  3. package/dist/lib/neutral/Annotation.mjs +39 -0
  4. package/dist/lib/neutral/Database.mjs +49 -0
  5. package/dist/lib/neutral/Entity.mjs +61 -0
  6. package/dist/lib/neutral/Entity.mjs.map +7 -0
  7. package/dist/lib/neutral/Err.mjs +12 -0
  8. package/dist/lib/neutral/Err.mjs.map +7 -0
  9. package/dist/lib/neutral/Extension.mjs +18 -0
  10. package/dist/lib/neutral/Extension.mjs.map +7 -0
  11. package/dist/lib/neutral/Feed.mjs +52 -0
  12. package/dist/lib/neutral/Feed.mjs.map +7 -0
  13. package/dist/lib/neutral/Filter.mjs +74 -0
  14. package/dist/lib/neutral/Filter.mjs.map +7 -0
  15. package/dist/lib/neutral/Format.mjs +66 -0
  16. package/dist/lib/neutral/Format.mjs.map +7 -0
  17. package/dist/lib/neutral/JsonSchema.mjs +19 -0
  18. package/dist/lib/neutral/JsonSchema.mjs.map +7 -0
  19. package/dist/lib/neutral/Key.mjs +12 -0
  20. package/dist/lib/neutral/Key.mjs.map +7 -0
  21. package/dist/lib/neutral/Migration.mjs +17 -0
  22. package/dist/lib/neutral/Migration.mjs.map +7 -0
  23. package/dist/lib/neutral/Obj.mjs +113 -0
  24. package/dist/lib/neutral/Obj.mjs.map +7 -0
  25. package/dist/lib/neutral/Order.mjs +12 -0
  26. package/dist/lib/neutral/Order.mjs.map +7 -0
  27. package/dist/lib/neutral/Query.mjs +38 -0
  28. package/dist/lib/neutral/Query.mjs.map +7 -0
  29. package/dist/lib/neutral/QueryResult.mjs +2 -0
  30. package/dist/lib/neutral/QueryResult.mjs.map +7 -0
  31. package/dist/lib/neutral/Ref.mjs +26 -0
  32. package/dist/lib/neutral/Ref.mjs.map +7 -0
  33. package/dist/lib/neutral/Relation.mjs +94 -0
  34. package/dist/lib/neutral/Relation.mjs.map +7 -0
  35. package/dist/lib/neutral/SchemaRegistry.mjs +2 -0
  36. package/dist/lib/neutral/SchemaRegistry.mjs.map +7 -0
  37. package/dist/lib/neutral/Tag.mjs +29 -0
  38. package/dist/lib/neutral/Tag.mjs.map +7 -0
  39. package/dist/lib/neutral/Type.mjs +37 -0
  40. package/dist/lib/neutral/Type.mjs.map +7 -0
  41. package/dist/lib/neutral/chunk-44HT3MEC.mjs +73 -0
  42. package/dist/lib/neutral/chunk-44HT3MEC.mjs.map +7 -0
  43. package/dist/lib/neutral/chunk-4A2GS5LQ.mjs +125 -0
  44. package/dist/lib/neutral/chunk-4A2GS5LQ.mjs.map +7 -0
  45. package/dist/lib/neutral/chunk-5SL5LDLD.mjs +47 -0
  46. package/dist/lib/neutral/chunk-5SL5LDLD.mjs.map +7 -0
  47. package/dist/lib/neutral/chunk-7RVZT53K.mjs +21 -0
  48. package/dist/lib/neutral/chunk-7RVZT53K.mjs.map +7 -0
  49. package/dist/lib/neutral/chunk-APHSOTIX.mjs +34 -0
  50. package/dist/lib/neutral/chunk-APHSOTIX.mjs.map +7 -0
  51. package/dist/lib/neutral/chunk-B2P7IVG3.mjs +206 -0
  52. package/dist/lib/neutral/chunk-B2P7IVG3.mjs.map +7 -0
  53. package/dist/lib/neutral/chunk-BICZKPQG.mjs +7 -0
  54. package/dist/lib/neutral/chunk-BICZKPQG.mjs.map +7 -0
  55. package/dist/lib/neutral/chunk-BMB7IHGB.mjs +346 -0
  56. package/dist/lib/neutral/chunk-BMB7IHGB.mjs.map +7 -0
  57. package/dist/lib/neutral/chunk-BUBEC474.mjs +56 -0
  58. package/dist/lib/neutral/chunk-BUBEC474.mjs.map +7 -0
  59. package/dist/lib/neutral/chunk-C4PSESGN.mjs +81 -0
  60. package/dist/lib/neutral/chunk-C4PSESGN.mjs.map +7 -0
  61. package/dist/lib/neutral/chunk-FIWO2FZK.mjs +36 -0
  62. package/dist/lib/neutral/chunk-FIWO2FZK.mjs.map +7 -0
  63. package/dist/lib/neutral/chunk-GWFFC34K.mjs +50 -0
  64. package/dist/lib/neutral/chunk-GWFFC34K.mjs.map +7 -0
  65. package/dist/lib/neutral/chunk-HKETO4L4.mjs +365 -0
  66. package/dist/lib/neutral/chunk-HKETO4L4.mjs.map +7 -0
  67. package/dist/lib/neutral/chunk-I2DARWPX.mjs +128 -0
  68. package/dist/lib/neutral/chunk-I2DARWPX.mjs.map +7 -0
  69. package/dist/lib/neutral/chunk-IVSI7QO6.mjs +136 -0
  70. package/dist/lib/neutral/chunk-IVSI7QO6.mjs.map +7 -0
  71. package/dist/lib/neutral/chunk-J5LGTIGS.mjs +10 -0
  72. package/dist/lib/neutral/chunk-J5LGTIGS.mjs.map +7 -0
  73. package/dist/lib/neutral/chunk-MLS7U7AT.mjs +734 -0
  74. package/dist/lib/neutral/chunk-MLS7U7AT.mjs.map +7 -0
  75. package/dist/lib/neutral/chunk-N4B7FHQT.mjs +67 -0
  76. package/dist/lib/neutral/chunk-N4B7FHQT.mjs.map +7 -0
  77. package/dist/lib/neutral/chunk-N7VOEPSV.mjs +48 -0
  78. package/dist/lib/neutral/chunk-N7VOEPSV.mjs.map +7 -0
  79. package/dist/lib/neutral/chunk-QRZ2I3ZM.mjs +27 -0
  80. package/dist/lib/neutral/chunk-QRZ2I3ZM.mjs.map +7 -0
  81. package/dist/lib/neutral/chunk-TNBK56IN.mjs +350 -0
  82. package/dist/lib/neutral/chunk-TNBK56IN.mjs.map +7 -0
  83. package/dist/lib/neutral/chunk-TRPZU2HV.mjs +402 -0
  84. package/dist/lib/neutral/chunk-TRPZU2HV.mjs.map +7 -0
  85. package/dist/lib/neutral/chunk-TTCSATUD.mjs +42 -0
  86. package/dist/lib/neutral/chunk-TTCSATUD.mjs.map +7 -0
  87. package/dist/lib/neutral/chunk-V72DY6LU.mjs +7 -0
  88. package/dist/lib/neutral/chunk-V72DY6LU.mjs.map +7 -0
  89. package/dist/lib/neutral/chunk-VW42HESL.mjs +320 -0
  90. package/dist/lib/neutral/chunk-VW42HESL.mjs.map +7 -0
  91. package/dist/lib/neutral/chunk-X3356HPV.mjs +421 -0
  92. package/dist/lib/neutral/chunk-X3356HPV.mjs.map +7 -0
  93. package/dist/lib/neutral/chunk-XEXM5HWQ.mjs +270 -0
  94. package/dist/lib/neutral/chunk-XEXM5HWQ.mjs.map +7 -0
  95. package/dist/lib/neutral/chunk-Z5GKP74O.mjs +2464 -0
  96. package/dist/lib/neutral/chunk-Z5GKP74O.mjs.map +7 -0
  97. package/dist/lib/neutral/chunk-ZISMEVKD.mjs +51 -0
  98. package/dist/lib/neutral/chunk-ZISMEVKD.mjs.map +7 -0
  99. package/dist/lib/neutral/index.mjs +107 -0
  100. package/dist/lib/neutral/index.mjs.map +7 -0
  101. package/dist/lib/neutral/internal/index.mjs +476 -0
  102. package/dist/lib/neutral/internal/index.mjs.map +7 -0
  103. package/dist/lib/neutral/meta.json +1 -0
  104. package/dist/lib/neutral/testing/index.mjs +429 -0
  105. package/dist/lib/neutral/testing/index.mjs.map +7 -0
  106. package/dist/types/src/Annotation.d.ts +24 -0
  107. package/dist/types/src/Annotation.d.ts.map +1 -0
  108. package/dist/types/src/Collection.d.ts +16 -0
  109. package/dist/types/src/Collection.d.ts.map +1 -0
  110. package/dist/types/src/Database.d.ts +201 -0
  111. package/dist/types/src/Database.d.ts.map +1 -0
  112. package/dist/types/src/Dataset.d.ts +19 -0
  113. package/dist/types/src/Dataset.d.ts.map +1 -0
  114. package/dist/types/src/Entity.d.ts +174 -0
  115. package/dist/types/src/Entity.d.ts.map +1 -0
  116. package/dist/types/src/Entity.test.d.ts +2 -0
  117. package/dist/types/src/Entity.test.d.ts.map +1 -0
  118. package/dist/types/src/Err.d.ts +107 -0
  119. package/dist/types/src/Err.d.ts.map +1 -0
  120. package/dist/types/src/Extension.d.ts +80 -0
  121. package/dist/types/src/Extension.d.ts.map +1 -0
  122. package/dist/types/src/Extension.test.d.ts +2 -0
  123. package/dist/types/src/Extension.test.d.ts.map +1 -0
  124. package/dist/types/src/Feed.d.ts +206 -0
  125. package/dist/types/src/Feed.d.ts.map +1 -0
  126. package/dist/types/src/Filter.d.ts +170 -0
  127. package/dist/types/src/Filter.d.ts.map +1 -0
  128. package/dist/types/src/Filter.test.d.ts +2 -0
  129. package/dist/types/src/Filter.test.d.ts.map +1 -0
  130. package/dist/types/src/Format.d.ts +4 -0
  131. package/dist/types/src/Format.d.ts.map +1 -0
  132. package/dist/types/src/Hypergraph.d.ts +65 -0
  133. package/dist/types/src/Hypergraph.d.ts.map +1 -0
  134. package/dist/types/src/Json.d.ts +33 -0
  135. package/dist/types/src/Json.d.ts.map +1 -0
  136. package/dist/types/src/Json.test.d.ts +2 -0
  137. package/dist/types/src/Json.test.d.ts.map +1 -0
  138. package/dist/types/src/JsonSchema.d.ts +16 -0
  139. package/dist/types/src/JsonSchema.d.ts.map +1 -0
  140. package/dist/types/src/Key.d.ts +1 -0
  141. package/dist/types/src/Key.d.ts.map +1 -1
  142. package/dist/types/src/Migration.d.ts +69 -0
  143. package/dist/types/src/Migration.d.ts.map +1 -0
  144. package/dist/types/src/Obj.d.ts +474 -35
  145. package/dist/types/src/Obj.d.ts.map +1 -1
  146. package/dist/types/src/Obj.test.d.ts +2 -0
  147. package/dist/types/src/Obj.test.d.ts.map +1 -0
  148. package/dist/types/src/Order.d.ts +16 -0
  149. package/dist/types/src/Order.d.ts.map +1 -0
  150. package/dist/types/src/Query.d.ts +213 -0
  151. package/dist/types/src/Query.d.ts.map +1 -0
  152. package/dist/types/src/Query.test.d.ts +2 -0
  153. package/dist/types/src/Query.test.d.ts.map +1 -0
  154. package/dist/types/src/QueryResult.d.ts +80 -0
  155. package/dist/types/src/QueryResult.d.ts.map +1 -0
  156. package/dist/types/src/Ref.d.ts +62 -11
  157. package/dist/types/src/Ref.d.ts.map +1 -1
  158. package/dist/types/src/Relation.d.ts +290 -21
  159. package/dist/types/src/Relation.d.ts.map +1 -1
  160. package/dist/types/src/Relation.test.d.ts +2 -0
  161. package/dist/types/src/Relation.test.d.ts.map +1 -0
  162. package/dist/types/src/SchemaRegistry.d.ts +84 -0
  163. package/dist/types/src/SchemaRegistry.d.ts.map +1 -0
  164. package/dist/types/src/Tag.d.ts +18 -0
  165. package/dist/types/src/Tag.d.ts.map +1 -0
  166. package/dist/types/src/Type.d.ts +123 -100
  167. package/dist/types/src/Type.d.ts.map +1 -1
  168. package/dist/types/src/Type.test.d.ts +2 -0
  169. package/dist/types/src/Type.test.d.ts.map +1 -0
  170. package/dist/types/src/View.d.ts +68 -0
  171. package/dist/types/src/View.d.ts.map +1 -0
  172. package/dist/types/src/exemplars.test.d.ts +2 -0
  173. package/dist/types/src/exemplars.test.d.ts.map +1 -0
  174. package/dist/types/src/hierarchy.test.d.ts +2 -0
  175. package/dist/types/src/hierarchy.test.d.ts.map +1 -0
  176. package/dist/types/src/index.d.ts +22 -3
  177. package/dist/types/src/index.d.ts.map +1 -1
  178. package/dist/types/src/internal/Annotation/annotations.d.ts +240 -0
  179. package/dist/types/src/internal/Annotation/annotations.d.ts.map +1 -0
  180. package/dist/types/src/internal/Annotation/annotations.test.d.ts +2 -0
  181. package/dist/types/src/internal/Annotation/annotations.test.d.ts.map +1 -0
  182. package/dist/types/src/internal/Annotation/index.d.ts +4 -0
  183. package/dist/types/src/internal/Annotation/index.d.ts.map +1 -0
  184. package/dist/types/src/internal/Annotation/sorting.d.ts +24 -0
  185. package/dist/types/src/internal/Annotation/sorting.d.ts.map +1 -0
  186. package/dist/types/src/internal/Annotation/util.d.ts +39 -0
  187. package/dist/types/src/internal/Annotation/util.d.ts.map +1 -0
  188. package/dist/types/src/internal/Entity/api.d.ts +13 -0
  189. package/dist/types/src/internal/Entity/api.d.ts.map +1 -0
  190. package/dist/types/src/internal/Entity/entity.d.ts +20 -0
  191. package/dist/types/src/internal/Entity/entity.d.ts.map +1 -0
  192. package/dist/types/src/internal/Entity/index.d.ts +8 -0
  193. package/dist/types/src/internal/Entity/index.d.ts.map +1 -0
  194. package/dist/types/src/internal/Entity/model.d.ts +57 -0
  195. package/dist/types/src/internal/Entity/model.d.ts.map +1 -0
  196. package/dist/types/src/internal/Entity/object.d.ts +18 -0
  197. package/dist/types/src/internal/Entity/object.d.ts.map +1 -0
  198. package/dist/types/src/internal/Entity/relation.d.ts +35 -0
  199. package/dist/types/src/internal/Entity/relation.d.ts.map +1 -0
  200. package/dist/types/src/internal/Entity/util.d.ts +2 -0
  201. package/dist/types/src/internal/Entity/util.d.ts.map +1 -0
  202. package/dist/types/src/internal/Entity/version.d.ts +42 -0
  203. package/dist/types/src/internal/Entity/version.d.ts.map +1 -0
  204. package/dist/types/src/internal/Format/date.d.ts +63 -0
  205. package/dist/types/src/internal/Format/date.d.ts.map +1 -0
  206. package/dist/types/src/internal/Format/date.test.d.ts +2 -0
  207. package/dist/types/src/internal/Format/date.test.d.ts.map +1 -0
  208. package/dist/types/src/internal/Format/format.d.ts +32 -0
  209. package/dist/types/src/internal/Format/format.d.ts.map +1 -0
  210. package/dist/types/src/internal/Format/format.test.d.ts +2 -0
  211. package/dist/types/src/internal/Format/format.test.d.ts.map +1 -0
  212. package/dist/types/src/internal/Format/index.d.ts +8 -0
  213. package/dist/types/src/internal/Format/index.d.ts.map +1 -0
  214. package/dist/types/src/internal/Format/number.d.ts +31 -0
  215. package/dist/types/src/internal/Format/number.d.ts.map +1 -0
  216. package/dist/types/src/internal/Format/object.d.ts +35 -0
  217. package/dist/types/src/internal/Format/object.d.ts.map +1 -0
  218. package/dist/types/src/internal/Format/select.d.ts +13 -0
  219. package/dist/types/src/internal/Format/select.d.ts.map +1 -0
  220. package/dist/types/src/internal/Format/string.d.ts +42 -0
  221. package/dist/types/src/internal/Format/string.d.ts.map +1 -0
  222. package/dist/types/src/internal/Format/types.d.ts +72 -0
  223. package/dist/types/src/internal/Format/types.d.ts.map +1 -0
  224. package/dist/types/src/internal/JsonSchema/annotations.d.ts +19 -0
  225. package/dist/types/src/internal/JsonSchema/annotations.d.ts.map +1 -0
  226. package/dist/types/src/internal/JsonSchema/effect-schema.test.d.ts +2 -0
  227. package/dist/types/src/internal/JsonSchema/effect-schema.test.d.ts.map +1 -0
  228. package/dist/types/src/internal/JsonSchema/index.d.ts +5 -0
  229. package/dist/types/src/internal/JsonSchema/index.d.ts.map +1 -0
  230. package/dist/types/src/internal/JsonSchema/json-schema-normalize.d.ts +7 -0
  231. package/dist/types/src/internal/JsonSchema/json-schema-normalize.d.ts.map +1 -0
  232. package/dist/types/src/internal/JsonSchema/json-schema-type.d.ts +351 -0
  233. package/dist/types/src/internal/JsonSchema/json-schema-type.d.ts.map +1 -0
  234. package/dist/types/src/internal/JsonSchema/json-schema.d.ts +30 -0
  235. package/dist/types/src/internal/JsonSchema/json-schema.d.ts.map +1 -0
  236. package/dist/types/src/internal/JsonSchema/json-schema.test.d.ts +2 -0
  237. package/dist/types/src/internal/JsonSchema/json-schema.test.d.ts.map +1 -0
  238. package/dist/types/src/internal/Obj/clone.d.ts +8 -0
  239. package/dist/types/src/internal/Obj/clone.d.ts.map +1 -0
  240. package/dist/types/src/internal/Obj/common.d.ts +18 -0
  241. package/dist/types/src/internal/Obj/common.d.ts.map +1 -0
  242. package/dist/types/src/internal/Obj/create-object.d.ts +39 -0
  243. package/dist/types/src/internal/Obj/create-object.d.ts.map +1 -0
  244. package/dist/types/src/internal/Obj/create-object.test.d.ts +2 -0
  245. package/dist/types/src/internal/Obj/create-object.test.d.ts.map +1 -0
  246. package/dist/types/src/internal/Obj/deleted.d.ts +6 -0
  247. package/dist/types/src/internal/Obj/deleted.d.ts.map +1 -0
  248. package/dist/types/src/internal/Obj/ids.d.ts +6 -0
  249. package/dist/types/src/internal/Obj/ids.d.ts.map +1 -0
  250. package/dist/types/src/internal/Obj/index.d.ts +11 -0
  251. package/dist/types/src/internal/Obj/index.d.ts.map +1 -0
  252. package/dist/types/src/internal/Obj/inspect.d.ts +2 -0
  253. package/dist/types/src/internal/Obj/inspect.d.ts.map +1 -0
  254. package/dist/types/src/internal/Obj/json-serializer.d.ts +45 -0
  255. package/dist/types/src/internal/Obj/json-serializer.d.ts.map +1 -0
  256. package/dist/types/src/internal/Obj/json-serializer.test.d.ts +2 -0
  257. package/dist/types/src/internal/Obj/json-serializer.test.d.ts.map +1 -0
  258. package/dist/types/src/internal/Obj/schema-validator.d.ts +2 -0
  259. package/dist/types/src/internal/Obj/schema-validator.d.ts.map +1 -0
  260. package/dist/types/src/internal/Obj/schema-validator.test.d.ts +2 -0
  261. package/dist/types/src/internal/Obj/schema-validator.test.d.ts.map +1 -0
  262. package/dist/types/src/internal/Obj/set-value.d.ts +7 -0
  263. package/dist/types/src/internal/Obj/set-value.d.ts.map +1 -0
  264. package/dist/types/src/internal/Obj/set-value.test.d.ts +2 -0
  265. package/dist/types/src/internal/Obj/set-value.test.d.ts.map +1 -0
  266. package/dist/types/src/internal/Obj/snapshot.d.ts +6 -0
  267. package/dist/types/src/internal/Obj/snapshot.d.ts.map +1 -0
  268. package/dist/types/src/internal/Obj/typed-object.d.ts +25 -0
  269. package/dist/types/src/internal/Obj/typed-object.d.ts.map +1 -0
  270. package/dist/types/src/internal/Obj/typed-object.test.d.ts +2 -0
  271. package/dist/types/src/internal/Obj/typed-object.test.d.ts.map +1 -0
  272. package/dist/types/src/internal/Query.d.ts +10 -0
  273. package/dist/types/src/internal/Query.d.ts.map +1 -0
  274. package/dist/types/src/internal/Ref/index.d.ts +3 -0
  275. package/dist/types/src/internal/Ref/index.d.ts.map +1 -0
  276. package/dist/types/src/internal/Ref/ref-array.d.ts +21 -0
  277. package/dist/types/src/internal/Ref/ref-array.d.ts.map +1 -0
  278. package/dist/types/src/internal/Ref/ref.d.ts +244 -0
  279. package/dist/types/src/internal/Ref/ref.d.ts.map +1 -0
  280. package/dist/types/src/internal/Ref/ref.test.d.ts +2 -0
  281. package/dist/types/src/internal/Ref/ref.test.d.ts.map +1 -0
  282. package/dist/types/src/internal/Type/compose.d.ts +7 -0
  283. package/dist/types/src/internal/Type/compose.d.ts.map +1 -0
  284. package/dist/types/src/internal/Type/compose.test.d.ts +2 -0
  285. package/dist/types/src/internal/Type/compose.test.d.ts.map +1 -0
  286. package/dist/types/src/internal/Type/echo-schema.d.ts +181 -0
  287. package/dist/types/src/internal/Type/echo-schema.d.ts.map +1 -0
  288. package/dist/types/src/internal/Type/index.d.ts +4 -0
  289. package/dist/types/src/internal/Type/index.d.ts.map +1 -0
  290. package/dist/types/src/internal/Type/manipulation.d.ts +10 -0
  291. package/dist/types/src/internal/Type/manipulation.d.ts.map +1 -0
  292. package/dist/types/src/internal/Type/persistent-schema.d.ts +20 -0
  293. package/dist/types/src/internal/Type/persistent-schema.d.ts.map +1 -0
  294. package/dist/types/src/internal/common/api/index.d.ts +11 -0
  295. package/dist/types/src/internal/common/api/index.d.ts.map +1 -0
  296. package/dist/types/src/internal/common/api/meta.d.ts +42 -0
  297. package/dist/types/src/internal/common/api/meta.d.ts.map +1 -0
  298. package/dist/types/src/internal/common/index.d.ts +4 -0
  299. package/dist/types/src/internal/common/index.d.ts.map +1 -0
  300. package/dist/types/src/internal/common/proxy/change-context.d.ts +55 -0
  301. package/dist/types/src/internal/common/proxy/change-context.d.ts.map +1 -0
  302. package/dist/types/src/internal/common/proxy/change.test.d.ts +2 -0
  303. package/dist/types/src/internal/common/proxy/change.test.d.ts.map +1 -0
  304. package/dist/types/src/internal/common/proxy/define-hidden-property.d.ts +5 -0
  305. package/dist/types/src/internal/common/proxy/define-hidden-property.d.ts.map +1 -0
  306. package/dist/types/src/internal/common/proxy/errors.d.ts +19 -0
  307. package/dist/types/src/internal/common/proxy/errors.d.ts.map +1 -0
  308. package/dist/types/src/internal/common/proxy/event-batch.d.ts +10 -0
  309. package/dist/types/src/internal/common/proxy/event-batch.d.ts.map +1 -0
  310. package/dist/types/src/internal/common/proxy/handler.test.d.ts +2 -0
  311. package/dist/types/src/internal/common/proxy/handler.test.d.ts.map +1 -0
  312. package/dist/types/src/internal/common/proxy/index.d.ts +14 -0
  313. package/dist/types/src/internal/common/proxy/index.d.ts.map +1 -0
  314. package/dist/types/src/internal/common/proxy/json-serializer.d.ts +6 -0
  315. package/dist/types/src/internal/common/proxy/json-serializer.d.ts.map +1 -0
  316. package/dist/types/src/internal/common/proxy/make-object.d.ts +14 -0
  317. package/dist/types/src/internal/common/proxy/make-object.d.ts.map +1 -0
  318. package/dist/types/src/internal/common/proxy/ownership.d.ts +57 -0
  319. package/dist/types/src/internal/common/proxy/ownership.d.ts.map +1 -0
  320. package/dist/types/src/internal/common/proxy/proxy-types.d.ts +18 -0
  321. package/dist/types/src/internal/common/proxy/proxy-types.d.ts.map +1 -0
  322. package/dist/types/src/internal/common/proxy/proxy-utils.d.ts +47 -0
  323. package/dist/types/src/internal/common/proxy/proxy-utils.d.ts.map +1 -0
  324. package/dist/types/src/internal/common/proxy/reactive-array.d.ts +8 -0
  325. package/dist/types/src/internal/common/proxy/reactive-array.d.ts.map +1 -0
  326. package/dist/types/src/internal/common/proxy/reactive.d.ts +39 -0
  327. package/dist/types/src/internal/common/proxy/reactive.d.ts.map +1 -0
  328. package/dist/types/src/internal/common/proxy/reactive.test.d.ts +2 -0
  329. package/dist/types/src/internal/common/proxy/reactive.test.d.ts.map +1 -0
  330. package/dist/types/src/internal/common/proxy/schema-validator.d.ts +15 -0
  331. package/dist/types/src/internal/common/proxy/schema-validator.d.ts.map +1 -0
  332. package/dist/types/src/internal/common/proxy/schema.test.d.ts +2 -0
  333. package/dist/types/src/internal/common/proxy/schema.test.d.ts.map +1 -0
  334. package/dist/types/src/internal/common/proxy/symbols.d.ts +3 -0
  335. package/dist/types/src/internal/common/proxy/symbols.d.ts.map +1 -0
  336. package/dist/types/src/internal/common/proxy/typed-handler.d.ts +48 -0
  337. package/dist/types/src/internal/common/proxy/typed-handler.d.ts.map +1 -0
  338. package/dist/types/src/internal/common/proxy/typed-handler.test.d.ts +2 -0
  339. package/dist/types/src/internal/common/proxy/typed-handler.test.d.ts.map +1 -0
  340. package/dist/types/src/internal/common/proxy/typed-object.test.d.ts +2 -0
  341. package/dist/types/src/internal/common/proxy/typed-object.test.d.ts.map +1 -0
  342. package/dist/types/src/internal/common/types/base.d.ts +27 -0
  343. package/dist/types/src/internal/common/types/base.d.ts.map +1 -0
  344. package/dist/types/src/internal/common/types/entity.d.ts +37 -0
  345. package/dist/types/src/internal/common/types/entity.d.ts.map +1 -0
  346. package/dist/types/src/internal/common/types/index.d.ts +7 -0
  347. package/dist/types/src/internal/common/types/index.d.ts.map +1 -0
  348. package/dist/types/src/internal/common/types/meta.d.ts +43 -0
  349. package/dist/types/src/internal/common/types/meta.d.ts.map +1 -0
  350. package/dist/types/src/internal/common/types/model-symbols.d.ts +54 -0
  351. package/dist/types/src/internal/common/types/model-symbols.d.ts.map +1 -0
  352. package/dist/types/src/internal/common/types/typename.d.ts +21 -0
  353. package/dist/types/src/internal/common/types/typename.d.ts.map +1 -0
  354. package/dist/types/src/internal/common/types/version.d.ts +15 -0
  355. package/dist/types/src/internal/common/types/version.d.ts.map +1 -0
  356. package/dist/types/src/internal/index.d.ts +11 -0
  357. package/dist/types/src/internal/index.d.ts.map +1 -0
  358. package/dist/types/src/{test → testing}/api.test.d.ts.map +1 -1
  359. package/dist/types/src/testing/index.d.ts +3 -1
  360. package/dist/types/src/testing/index.d.ts.map +1 -1
  361. package/dist/types/src/testing/test-data.d.ts +18 -0
  362. package/dist/types/src/testing/test-data.d.ts.map +1 -0
  363. package/dist/types/src/testing/test-schema.d.ts +304 -0
  364. package/dist/types/src/testing/test-schema.d.ts.map +1 -0
  365. package/dist/types/src/testing/util.d.ts +21 -0
  366. package/dist/types/src/testing/util.d.ts.map +1 -0
  367. package/dist/types/tsconfig.tsbuildinfo +1 -1
  368. package/package.json +123 -54
  369. package/src/Annotation.ts +49 -0
  370. package/src/Collection.ts +37 -0
  371. package/src/Database.ts +352 -0
  372. package/src/Dataset.ts +26 -0
  373. package/src/Entity.test.ts +22 -0
  374. package/src/Entity.ts +243 -0
  375. package/src/Err.ts +40 -0
  376. package/src/Extension.test.ts +235 -0
  377. package/src/Extension.ts +122 -0
  378. package/src/Feed.ts +335 -0
  379. package/src/Filter.test.ts +90 -0
  380. package/src/Filter.ts +485 -0
  381. package/src/Format.ts +9 -0
  382. package/src/Hypergraph.ts +79 -0
  383. package/src/Json.test.ts +175 -0
  384. package/src/Json.ts +102 -0
  385. package/src/JsonSchema.ts +26 -0
  386. package/src/Key.ts +3 -0
  387. package/src/Migration.ts +106 -0
  388. package/src/Obj.test.ts +539 -0
  389. package/src/Obj.ts +769 -79
  390. package/src/Order.ts +46 -0
  391. package/src/Query.test.ts +822 -0
  392. package/src/Query.ts +572 -0
  393. package/src/QueryResult.ts +106 -0
  394. package/src/Ref.ts +80 -9
  395. package/src/Relation.test.ts +88 -0
  396. package/src/Relation.ts +455 -54
  397. package/src/SchemaRegistry.ts +106 -0
  398. package/src/Tag.ts +41 -0
  399. package/src/Type.test.ts +52 -0
  400. package/src/Type.ts +168 -153
  401. package/src/View.ts +107 -0
  402. package/src/exemplars.test.ts +21 -0
  403. package/src/hierarchy.test.ts +33 -0
  404. package/src/index.ts +25 -4
  405. package/src/internal/Annotation/annotations.test.ts +145 -0
  406. package/src/internal/Annotation/annotations.ts +590 -0
  407. package/src/internal/Annotation/index.ts +7 -0
  408. package/src/internal/Annotation/sorting.ts +51 -0
  409. package/src/internal/Annotation/util.ts +85 -0
  410. package/src/internal/Entity/api.ts +30 -0
  411. package/src/internal/Entity/entity.ts +128 -0
  412. package/src/internal/Entity/index.ts +11 -0
  413. package/src/internal/Entity/model.ts +111 -0
  414. package/src/internal/Entity/object.ts +57 -0
  415. package/src/internal/Entity/relation.ts +154 -0
  416. package/src/internal/Entity/util.ts +33 -0
  417. package/src/internal/Entity/version.ts +96 -0
  418. package/src/internal/Format/date.test.ts +55 -0
  419. package/src/internal/Format/date.ts +217 -0
  420. package/src/internal/Format/format.test.ts +76 -0
  421. package/src/internal/Format/format.ts +54 -0
  422. package/src/internal/Format/index.ts +12 -0
  423. package/src/internal/Format/number.ts +89 -0
  424. package/src/internal/Format/object.ts +80 -0
  425. package/src/internal/Format/select.ts +18 -0
  426. package/src/internal/Format/string.ts +81 -0
  427. package/src/internal/Format/types.ts +186 -0
  428. package/src/internal/JsonSchema/annotations.ts +50 -0
  429. package/src/internal/JsonSchema/effect-schema.test.ts +143 -0
  430. package/src/internal/JsonSchema/index.ts +8 -0
  431. package/src/internal/JsonSchema/json-schema-normalize.ts +111 -0
  432. package/src/internal/JsonSchema/json-schema-type.ts +403 -0
  433. package/src/internal/JsonSchema/json-schema.test.ts +860 -0
  434. package/src/internal/JsonSchema/json-schema.ts +533 -0
  435. package/src/internal/Obj/clone.ts +48 -0
  436. package/src/internal/Obj/common.ts +75 -0
  437. package/src/internal/Obj/create-object.test.ts +114 -0
  438. package/src/internal/Obj/create-object.ts +94 -0
  439. package/src/internal/Obj/deleted.ts +19 -0
  440. package/src/internal/Obj/ids.ts +12 -0
  441. package/src/internal/Obj/index.ts +14 -0
  442. package/src/internal/Obj/inspect.ts +46 -0
  443. package/src/internal/Obj/json-serializer.test.ts +165 -0
  444. package/src/internal/Obj/json-serializer.ts +237 -0
  445. package/src/internal/Obj/schema-validator.test.ts +182 -0
  446. package/src/internal/Obj/schema-validator.ts +6 -0
  447. package/src/internal/Obj/set-value.test.ts +281 -0
  448. package/src/internal/Obj/set-value.ts +165 -0
  449. package/src/internal/Obj/snapshot.ts +105 -0
  450. package/src/internal/Obj/typed-object.test.ts +34 -0
  451. package/src/internal/Obj/typed-object.ts +30 -0
  452. package/src/internal/Query.ts +156 -0
  453. package/src/internal/Ref/index.ts +6 -0
  454. package/src/internal/Ref/ref-array.ts +38 -0
  455. package/src/internal/Ref/ref.test.ts +100 -0
  456. package/src/internal/Ref/ref.ts +589 -0
  457. package/src/internal/Type/compose.test.ts +41 -0
  458. package/src/internal/Type/compose.ts +41 -0
  459. package/src/internal/Type/echo-schema.ts +423 -0
  460. package/src/internal/Type/index.ts +7 -0
  461. package/src/internal/Type/manipulation.ts +92 -0
  462. package/src/internal/Type/persistent-schema.ts +33 -0
  463. package/src/internal/common/README.md +102 -0
  464. package/src/internal/common/api/index.ts +15 -0
  465. package/src/internal/common/api/meta.ts +88 -0
  466. package/src/internal/common/index.ts +7 -0
  467. package/src/internal/common/proxy/change-context.ts +138 -0
  468. package/src/internal/common/proxy/change.test.ts +519 -0
  469. package/src/internal/common/proxy/define-hidden-property.ts +14 -0
  470. package/src/internal/common/proxy/errors.ts +42 -0
  471. package/src/internal/common/proxy/event-batch.ts +44 -0
  472. package/src/internal/common/proxy/handler.test.ts +121 -0
  473. package/src/internal/common/proxy/index.ts +17 -0
  474. package/src/internal/common/proxy/json-serializer.ts +93 -0
  475. package/src/internal/common/proxy/make-object.ts +105 -0
  476. package/src/internal/common/proxy/ownership.ts +252 -0
  477. package/src/internal/common/proxy/proxy-types.ts +23 -0
  478. package/src/internal/common/proxy/proxy-utils.ts +150 -0
  479. package/src/internal/common/proxy/reactive-array.ts +71 -0
  480. package/src/internal/common/proxy/reactive.test.ts +54 -0
  481. package/src/internal/common/proxy/reactive.ts +77 -0
  482. package/src/internal/common/proxy/schema-validator.ts +244 -0
  483. package/src/internal/common/proxy/schema.test.ts +145 -0
  484. package/src/internal/common/proxy/symbols.ts +7 -0
  485. package/src/internal/common/proxy/typed-handler.test.ts +313 -0
  486. package/src/internal/common/proxy/typed-handler.ts +447 -0
  487. package/src/internal/common/proxy/typed-object.test.ts +115 -0
  488. package/src/internal/common/types/base.ts +43 -0
  489. package/src/internal/common/types/entity.ts +54 -0
  490. package/src/internal/common/types/index.ts +10 -0
  491. package/src/internal/common/types/meta.ts +79 -0
  492. package/src/internal/common/types/model-symbols.ts +69 -0
  493. package/src/internal/common/types/typename.ts +55 -0
  494. package/src/internal/common/types/version.ts +19 -0
  495. package/src/internal/index.ts +17 -0
  496. package/src/testing/api.test.ts +125 -0
  497. package/src/testing/index.ts +3 -1
  498. package/src/testing/test-data.ts +189 -0
  499. package/src/testing/test-schema.ts +240 -0
  500. package/src/testing/util.ts +85 -0
  501. package/dist/lib/browser/chunk-SVSJEELN.mjs +0 -619
  502. package/dist/lib/browser/chunk-SVSJEELN.mjs.map +0 -7
  503. package/dist/lib/browser/index.mjs +0 -22
  504. package/dist/lib/browser/meta.json +0 -1
  505. package/dist/lib/browser/testing/index.mjs +0 -70
  506. package/dist/lib/browser/testing/index.mjs.map +0 -7
  507. package/dist/lib/node-esm/chunk-53HXWYR6.mjs +0 -619
  508. package/dist/lib/node-esm/chunk-53HXWYR6.mjs.map +0 -7
  509. package/dist/lib/node-esm/index.mjs +0 -22
  510. package/dist/lib/node-esm/meta.json +0 -1
  511. package/dist/lib/node-esm/testing/index.mjs +0 -70
  512. package/dist/lib/node-esm/testing/index.mjs.map +0 -7
  513. package/dist/types/src/experimental/database.d.ts +0 -8
  514. package/dist/types/src/experimental/database.d.ts.map +0 -1
  515. package/dist/types/src/experimental/index.d.ts +0 -1
  516. package/dist/types/src/experimental/index.d.ts.map +0 -1
  517. package/dist/types/src/experimental/queue.d.ts +0 -8
  518. package/dist/types/src/experimental/queue.d.ts.map +0 -1
  519. package/dist/types/src/experimental/space.d.ts +0 -8
  520. package/dist/types/src/experimental/space.d.ts.map +0 -1
  521. package/dist/types/src/query/dsl.d.ts +0 -218
  522. package/dist/types/src/query/dsl.d.ts.map +0 -1
  523. package/dist/types/src/query/dsl.test.d.ts +0 -2
  524. package/dist/types/src/query/dsl.test.d.ts.map +0 -1
  525. package/dist/types/src/query/index.d.ts +0 -2
  526. package/dist/types/src/query/index.d.ts.map +0 -1
  527. package/dist/types/src/testing/types.d.ts +0 -113
  528. package/dist/types/src/testing/types.d.ts.map +0 -1
  529. package/src/experimental/database.ts +0 -11
  530. package/src/experimental/index.ts +0 -7
  531. package/src/experimental/queue.ts +0 -11
  532. package/src/experimental/space.ts +0 -11
  533. package/src/query/dsl.test.ts +0 -323
  534. package/src/query/dsl.ts +0 -646
  535. package/src/query/index.ts +0 -5
  536. package/src/test/api.test.ts +0 -173
  537. package/src/testing/types.ts +0 -91
  538. /package/dist/lib/{browser/index.mjs.map → neutral/Annotation.mjs.map} +0 -0
  539. /package/dist/lib/{node-esm/index.mjs.map → neutral/Database.mjs.map} +0 -0
  540. /package/dist/types/src/{test → testing}/api.test.d.ts +0 -0
@@ -0,0 +1,79 @@
1
+ //
2
+ // Copyright 2024 DXOS.org
3
+ //
4
+
5
+ import * as Schema from 'effect/Schema';
6
+
7
+ import { ForeignKey } from '@dxos/echo-protocol';
8
+ import { invariant } from '@dxos/invariant';
9
+ import { type Comparator, intersection } from '@dxos/util';
10
+
11
+ import type * as Entity from '../../../Entity';
12
+ import { type AnyProperties } from './base';
13
+
14
+ /**
15
+ * Property name for meta when object is serialized to JSON.
16
+ */
17
+ export const ATTR_META = '@meta';
18
+
19
+ /**
20
+ * Metadata section.
21
+ */
22
+ export const MetaId: Entity.Meta = Symbol.for('@dxos/echo/Meta') as any;
23
+
24
+ //
25
+ // ObjectMeta
26
+ //
27
+
28
+ // TODO(dmaretskyi): Rename to ObjectMeta
29
+ export const ObjectMetaSchema = Schema.Struct({
30
+ keys: Schema.Array(ForeignKey),
31
+
32
+ /**
33
+ * A set of tags.
34
+ * Tags are arbitrary application-defined strings.
35
+ * ECHO makes no assumptions about the tag structure.
36
+ */
37
+ // TODO(dmaretskyi): Has to be optional for compatibility with old data.
38
+ // Defaulting to an empty array is possible but requires a bit more work.
39
+ // TODO(dmaretskyi): In automerge this should be a map of { [tag]: boolean } for uniqueness and conflict resolution.
40
+ tags: Schema.optional(Schema.Array(Schema.String)),
41
+
42
+ /**
43
+ * Fully-qualified registry key for the object (FQN format, e.g. `org.example.type.foo`).
44
+ * Identifies the canonical registry entry the object instance was created from.
45
+ */
46
+ key: Schema.optional(Schema.String),
47
+
48
+ /**
49
+ * Semantic version of the registry entry the object was created from.
50
+ * Must be a valid semver string (e.g. `1.2.3`).
51
+ */
52
+ version: Schema.optional(Schema.String),
53
+ });
54
+
55
+ export type ObjectMeta = Schema.Schema.Type<typeof ObjectMetaSchema>;
56
+
57
+ /*
58
+ * Get metadata from object.
59
+ * Only callable on the object root.
60
+ *
61
+ * @internal (use Obj.getMeta or Relation.getMeta)
62
+ */
63
+ // TODO(burdon): Refine type to BaseObj.
64
+ export const getMeta = (obj: AnyProperties): ObjectMeta => {
65
+ const metadata = (obj as any)[MetaId];
66
+ invariant(metadata, 'ObjectMeta not found.');
67
+ return metadata;
68
+ };
69
+
70
+ //
71
+ // Foreign keys
72
+ //
73
+
74
+ export const foreignKey = (source: string, id: string): ForeignKey => ({ source, id });
75
+ export const foreignKeyEquals = (a: ForeignKey, b: ForeignKey) => a.source === b.source && a.id === b.id;
76
+
77
+ // TODO(dmaretskyi): Move to echo-schema.
78
+ export const compareForeignKeys: Comparator<AnyProperties> = (a: AnyProperties, b: AnyProperties) =>
79
+ intersection(getMeta(a).keys, getMeta(b).keys, foreignKeyEquals).length > 0;
@@ -0,0 +1,69 @@
1
+ //
2
+ // Copyright 2025 DXOS.org
3
+ //
4
+
5
+ /**
6
+ * Internal symbol/string constants for the echo object model.
7
+ * Defined in common/ so proxy/ can use them without importing from Entity/.
8
+ * Entity/ re-exports these for external consumers.
9
+ */
10
+
11
+ /**
12
+ * Property name for self DXN when object is serialized to JSON.
13
+ */
14
+ export const ATTR_SELF_DXN = '@dxn';
15
+
16
+ /**
17
+ * DXN to the object itself.
18
+ */
19
+ export const SelfDXNId = Symbol.for('@dxos/echo/DXN');
20
+
21
+ /**
22
+ * Property name for deleted when object is serialized to JSON.
23
+ */
24
+ export const ATTR_DELETED = '@deleted';
25
+
26
+ /**
27
+ * Deletion marker.
28
+ */
29
+ export const ObjectDeletedId = Symbol.for('@dxos/echo/Deleted');
30
+
31
+ /**
32
+ * Object version accessor symbol.
33
+ */
34
+ export const ObjectVersionId: unique symbol = Symbol.for('@dxos/echo/Version');
35
+
36
+ /**
37
+ * Object database accessor symbol.
38
+ */
39
+ export const ObjectDatabaseId = Symbol.for('@dxos/echo/Database');
40
+
41
+ /**
42
+ * Property name for relation source when object is serialized to JSON.
43
+ */
44
+ export const ATTR_RELATION_SOURCE = '@relationSource';
45
+
46
+ /**
47
+ * Used to access relation source ref on live ECHO objects.
48
+ */
49
+ export const RelationSourceId: unique symbol = Symbol.for('@dxos/echo/RelationSource');
50
+
51
+ /**
52
+ * Used to access relation source DXN on live ECHO objects.
53
+ */
54
+ export const RelationSourceDXNId: unique symbol = Symbol.for('@dxos/echo/RelationSourceDXN');
55
+
56
+ /**
57
+ * Property name for relation target when object is serialized to JSON.
58
+ */
59
+ export const ATTR_RELATION_TARGET = '@relationTarget';
60
+
61
+ /**
62
+ * Used to access relation target ref on live ECHO objects.
63
+ */
64
+ export const RelationTargetId: unique symbol = Symbol.for('@dxos/echo/RelationTarget');
65
+
66
+ /**
67
+ * Used to access relation target DXN on live ECHO objects.
68
+ */
69
+ export const RelationTargetDXNId: unique symbol = Symbol.for('@dxos/echo/RelationTargetDXN');
@@ -0,0 +1,55 @@
1
+ //
2
+ // Copyright 2024 DXOS.org
3
+ //
4
+
5
+ import type * as Schema from 'effect/Schema';
6
+
7
+ /**
8
+ * Property name for typename when object is serialized to JSON.
9
+ */
10
+ export const ATTR_TYPE = '@type';
11
+
12
+ /**
13
+ * DXN to the object type.
14
+ */
15
+ export const TypeId = Symbol.for('@dxos/echo/Type');
16
+
17
+ /**
18
+ * Reference to the object schema.
19
+ */
20
+ export const SchemaId = Symbol.for('@dxos/echo/Schema');
21
+
22
+ /**
23
+ * Property name for parent when object is serialized to JSON.
24
+ */
25
+ export const ATTR_PARENT = '@parent';
26
+
27
+ /**
28
+ * Reference to the object parent.
29
+ */
30
+ export const ParentId = Symbol.for('@dxos/echo/Parent');
31
+
32
+ /**
33
+ * Returns the schema for the given object if one is defined.
34
+ *
35
+ * @internal (Use Obj.getSchema)
36
+ */
37
+ // TODO(burdon): Narrow type.
38
+ // TODO(dmaretskyi): For echo objects, this always returns the root schema.
39
+ export const getSchema = (obj: unknown | undefined): Schema.Schema.AnyNoContext | undefined => {
40
+ if (obj) {
41
+ return (obj as any)[SchemaId];
42
+ }
43
+ };
44
+
45
+ /**
46
+ * @internal
47
+ */
48
+ export const setSchema = (obj: any, schema: Schema.Schema.AnyNoContext): void => {
49
+ Object.defineProperty(obj, SchemaId, {
50
+ value: schema,
51
+ writable: false,
52
+ enumerable: false,
53
+ configurable: false,
54
+ });
55
+ };
@@ -0,0 +1,19 @@
1
+ //
2
+ // Copyright 2025 DXOS.org
3
+ //
4
+
5
+ /**
6
+ * Version type identifier.
7
+ */
8
+ export const VersionTypeId = '~@dxos/echo/VersionTypeId' as const;
9
+ export type VersionTypeId = typeof VersionTypeId;
10
+
11
+ /**
12
+ * Represents the object version.
13
+ * May be backed by Automerge.
14
+ * Objects with no history are not versioned.
15
+ */
16
+ export interface Version {
17
+ [VersionTypeId]: {};
18
+ automergeHeads?: string[];
19
+ }
@@ -0,0 +1,17 @@
1
+ //
2
+ // Copyright 2024 DXOS.org
3
+ //
4
+
5
+ // TODO(burdon): Import directly (not part of ECHO API).
6
+ export { JsonPath, JsonProp, getValue, splitJsonPath } from '@dxos/effect';
7
+
8
+ export * from './Annotation';
9
+ export * from './common';
10
+ export * from './Entity';
11
+ export * from './Format';
12
+ export * from './JsonSchema';
13
+ // TODO(wittjosiah): Required to ensure types are portable (need to export all types required for downstream inference).
14
+ export * from './Obj';
15
+ export * from './Query';
16
+ export * from './Ref';
17
+ export * from './Type';
@@ -0,0 +1,125 @@
1
+ //
2
+ // Copyright 2025 DXOS.org
3
+ //
4
+
5
+ import * as Schema from 'effect/Schema';
6
+ import { describe, test } from 'vitest';
7
+
8
+ import { raise } from '@dxos/debug';
9
+
10
+ import { Entity, Obj, Ref, Relation, Type } from '../index';
11
+ import { TestSchema } from './test-schema';
12
+
13
+ describe('Experimental API review', () => {
14
+ test('type checks', ({ expect }) => {
15
+ const contact = Obj.make(TestSchema.Person, { name: 'Test' });
16
+ const schema = Obj.getSchema(contact) ?? raise(new Error('No schema found'));
17
+
18
+ expect(Type.getDXN(schema)?.typename).to.eq(TestSchema.Person.typename);
19
+ expect(Type.getTypename(schema)).to.eq('com.example.type.person');
20
+ expect(Type.getVersion(schema)).to.eq('0.1.0');
21
+ expect(Type.getMeta(schema)).to.deep.eq({
22
+ kind: Entity.Kind.Object,
23
+ typename: 'com.example.type.person',
24
+ version: '0.1.0',
25
+ });
26
+ });
27
+
28
+ test('instance checks', ({ expect }) => {
29
+ const organization = Obj.make(TestSchema.Organization, { name: 'DXOS' });
30
+ const contact = Obj.make(TestSchema.Person, {
31
+ name: 'Test',
32
+ employer: Ref.make(organization),
33
+ });
34
+
35
+ expect(Schema.is(TestSchema.Person)(contact)).to.be.true;
36
+ expect(Obj.instanceOf(TestSchema.Person, contact)).to.be.true;
37
+ expect(Obj.instanceOf(TestSchema.Organization, organization)).to.be.true;
38
+
39
+ const isPerson = Obj.instanceOf(TestSchema.Person);
40
+ const x: any = {};
41
+ if (isPerson(x)) {
42
+ x.name;
43
+ }
44
+ });
45
+
46
+ test('default props', ({ expect }) => {
47
+ const message = Obj.make(TestSchema.Message, TestSchema.MessageStruct.make({}));
48
+ expect(message.timestamp).to.exist;
49
+ });
50
+
51
+ test('Obj.isObject', ({ expect }) => {
52
+ const guy = Obj.make(TestSchema.Person, { name: 'Test' });
53
+ expect(Obj.isObject(guy)).to.be.true;
54
+ expect(Obj.isObject(null)).to.be.false;
55
+ expect(Obj.isObject(undefined)).to.be.false;
56
+ expect(Obj.isObject(1)).to.be.false;
57
+ expect(Obj.isObject('string')).to.be.false;
58
+ });
59
+
60
+ test('create relation', ({ expect }) => {
61
+ const person = Obj.make(TestSchema.Person, { name: 'Test' });
62
+ const organization = Obj.make(TestSchema.Organization, { name: 'DXOS' });
63
+ const worksFor = Relation.make(TestSchema.EmployedBy, {
64
+ [Relation.Source]: person,
65
+ [Relation.Target]: organization,
66
+ role: 'CEO',
67
+ });
68
+ expect(Relation.getSource(worksFor)).to.eq(person);
69
+ expect(Relation.getTarget(worksFor)).to.eq(organization);
70
+ });
71
+
72
+ test('version', ({ expect }) => {
73
+ const person = Obj.make(TestSchema.Person, { name: 'Test' });
74
+ const version = Obj.version(person);
75
+ expect(Obj.isVersion(version)).to.be.true;
76
+ expect(Obj.versionValid(version)).to.be.false;
77
+ });
78
+
79
+ // TODO(burdon): Implement test.
80
+ test.skip('type narrowing', () => {
81
+ const any: Entity.Unknown = null as any;
82
+
83
+ {
84
+ if (Obj.isObject(any)) {
85
+ any;
86
+ } else {
87
+ any;
88
+ }
89
+ }
90
+
91
+ {
92
+ if (Relation.isRelation(any)) {
93
+ any;
94
+ } else {
95
+ any;
96
+ }
97
+ }
98
+ });
99
+
100
+ /**
101
+ * Test that Obj.make return types are clean and don't expose internal markers like OfKind.
102
+ * The return type of Obj.make(Schema, props) should be assignable to Obj.Obj<InstanceType>.
103
+ */
104
+ describe('Obj.make return type', () => {
105
+ test('Obj.make with custom schema should be assignable to Obj.Obj<Person>', ({ expect }) => {
106
+ {
107
+ const expando = Obj.make(TestSchema.Expando, { content: 'Test' });
108
+ expect(Obj.isObject(expando)).to.be.true;
109
+ expect(expando.content).to.eq('Test');
110
+
111
+ // This should work: assign to Obj.Obj of the schema's instance type
112
+ const _typed: Obj.OfShape<TestSchema.Expando> = expando;
113
+ }
114
+
115
+ {
116
+ const person = Obj.make(TestSchema.Person, { name: 'Test' });
117
+ expect(Obj.isObject(person)).to.be.true;
118
+ expect(person.name).to.eq('Test');
119
+
120
+ // This should work: assign to Obj.Obj of the schema's instance type
121
+ const _typed: Obj.OfShape<TestSchema.Person> = person;
122
+ }
123
+ });
124
+ });
125
+ });
@@ -2,4 +2,6 @@
2
2
  // Copyright 2025 DXOS.org
3
3
  //
4
4
 
5
- export * from './types';
5
+ export * from './test-data';
6
+ export * from './test-schema';
7
+ export * from './util';
@@ -0,0 +1,189 @@
1
+ //
2
+ // Copyright 2025 DXOS.org
3
+ //
4
+
5
+ import { DatabaseDirectory, ObjectStructure } from '@dxos/echo-protocol';
6
+ import { DXN, ObjectId, PublicKey } from '@dxos/keys';
7
+
8
+ import { Type } from '../index';
9
+ import { TestSchema } from './test-schema';
10
+
11
+ // Lazy init: Cloudflare workers disallow non-determinism at module scope (e.g. random keys).
12
+ let cachedSpaceKeyHex: string | undefined;
13
+ const getSpaceKeyHex = (): string => {
14
+ if (cachedSpaceKeyHex === undefined) {
15
+ cachedSpaceKeyHex = PublicKey.random().toHex();
16
+ }
17
+ return cachedSpaceKeyHex;
18
+ };
19
+
20
+ let cachedPeopleAlice: DatabaseDirectory | undefined;
21
+ let cachedPeopleBob: DatabaseDirectory | undefined;
22
+ let cachedOrgsDxos: DatabaseDirectory | undefined;
23
+ let cachedOrgsCyberdyne: DatabaseDirectory | undefined;
24
+ let cachedWorksFredCyberdyne: DatabaseDirectory | undefined;
25
+ let cachedWorksAliceAperture: DatabaseDirectory | undefined;
26
+ let cachedTasksTask1: DatabaseDirectory | undefined;
27
+ let cachedTasksTask2: DatabaseDirectory | undefined;
28
+
29
+ // TODO(burdon): Use Obj.make.
30
+
31
+ export const PEOPLE = {
32
+ get alice(): DatabaseDirectory {
33
+ if (cachedPeopleAlice === undefined) {
34
+ cachedPeopleAlice = DatabaseDirectory.make({
35
+ spaceKey: getSpaceKeyHex(),
36
+ objects: {
37
+ [ObjectId.random()]: ObjectStructure.makeObject({
38
+ type: Type.getDXN(TestSchema.Person)!.toString(),
39
+ data: {
40
+ name: 'Alice',
41
+ },
42
+ }),
43
+ },
44
+ });
45
+ }
46
+ return cachedPeopleAlice;
47
+ },
48
+
49
+ get bob(): DatabaseDirectory {
50
+ if (cachedPeopleBob === undefined) {
51
+ cachedPeopleBob = DatabaseDirectory.make({
52
+ spaceKey: getSpaceKeyHex(),
53
+ objects: {
54
+ [ObjectId.random()]: ObjectStructure.makeObject({
55
+ type: Type.getDXN(TestSchema.Person)!.toString(),
56
+ data: {
57
+ name: 'Bob',
58
+ },
59
+ }),
60
+ },
61
+ });
62
+ }
63
+ return cachedPeopleBob;
64
+ },
65
+ };
66
+
67
+ export const ORGS = {
68
+ get dxos(): DatabaseDirectory {
69
+ if (cachedOrgsDxos === undefined) {
70
+ cachedOrgsDxos = DatabaseDirectory.make({
71
+ spaceKey: getSpaceKeyHex(),
72
+ objects: {
73
+ [ObjectId.random()]: ObjectStructure.makeObject({
74
+ type: Type.getDXN(TestSchema.Organization)!.toString(),
75
+ data: {
76
+ name: 'DXOS',
77
+ founded: '2023',
78
+ },
79
+ }),
80
+ },
81
+ });
82
+ }
83
+ return cachedOrgsDxos;
84
+ },
85
+
86
+ get cyberdyne(): DatabaseDirectory {
87
+ if (cachedOrgsCyberdyne === undefined) {
88
+ cachedOrgsCyberdyne = DatabaseDirectory.make({
89
+ spaceKey: getSpaceKeyHex(),
90
+ objects: {
91
+ [ObjectId.random()]: ObjectStructure.makeObject({
92
+ type: Type.getDXN(TestSchema.Organization)!.toString(),
93
+ data: {
94
+ name: 'Cyberdyne Systems',
95
+ founded: '1984',
96
+ },
97
+ }),
98
+ },
99
+ });
100
+ }
101
+ return cachedOrgsCyberdyne;
102
+ },
103
+ };
104
+
105
+ export const WORKS_FOR = {
106
+ get fredWorksForCyberdyne(): DatabaseDirectory {
107
+ if (cachedWorksFredCyberdyne === undefined) {
108
+ cachedWorksFredCyberdyne = DatabaseDirectory.make({
109
+ spaceKey: getSpaceKeyHex(),
110
+ objects: {
111
+ [ObjectId.random()]: ObjectStructure.makeRelation({
112
+ type: Type.getDXN(TestSchema.EmployedBy)!.toString(),
113
+ source: { '/': DXN.fromLocalObjectId(Object.keys(PEOPLE.bob.objects!)[0]).toString() },
114
+ target: { '/': DXN.fromLocalObjectId(Object.keys(ORGS.cyberdyne.objects!)[0]).toString() },
115
+ data: {
116
+ since: '2020',
117
+ position: 'Engineer',
118
+ },
119
+ }),
120
+ },
121
+ });
122
+ }
123
+ return cachedWorksFredCyberdyne;
124
+ },
125
+
126
+ get aliceWorksForAperture(): DatabaseDirectory {
127
+ if (cachedWorksAliceAperture === undefined) {
128
+ cachedWorksAliceAperture = DatabaseDirectory.make({
129
+ spaceKey: getSpaceKeyHex(),
130
+ objects: {
131
+ [ObjectId.random()]: ObjectStructure.makeRelation({
132
+ type: Type.getDXN(TestSchema.EmployedBy)!.toString(),
133
+ source: { '/': DXN.fromLocalObjectId(Object.keys(PEOPLE.alice.objects!)[0]).toString() },
134
+ target: { '/': DXN.fromLocalObjectId(Object.keys(ORGS.dxos.objects!)[0]).toString() },
135
+ data: {
136
+ since: '2018',
137
+ position: 'Research Scientist',
138
+ },
139
+ }),
140
+ },
141
+ });
142
+ }
143
+ return cachedWorksAliceAperture;
144
+ },
145
+ };
146
+
147
+ export const TASKS = {
148
+ get task1(): DatabaseDirectory {
149
+ if (cachedTasksTask1 === undefined) {
150
+ cachedTasksTask1 = DatabaseDirectory.make({
151
+ spaceKey: getSpaceKeyHex(),
152
+ objects: {
153
+ [ObjectId.random()]: ObjectStructure.makeObject({
154
+ type: Type.getDXN(TestSchema.Task)!.toString(),
155
+ data: {
156
+ title: 'Complete project documentation',
157
+ description: 'Write comprehensive documentation for the new system',
158
+ status: 'in-progress',
159
+ dueDate: '2023-12-31',
160
+ assignee: { '/': DXN.fromLocalObjectId(Object.keys(PEOPLE.bob.objects!)[0]).toString() },
161
+ },
162
+ }),
163
+ },
164
+ });
165
+ }
166
+ return cachedTasksTask1;
167
+ },
168
+
169
+ get task2(): DatabaseDirectory {
170
+ if (cachedTasksTask2 === undefined) {
171
+ cachedTasksTask2 = DatabaseDirectory.make({
172
+ spaceKey: getSpaceKeyHex(),
173
+ objects: {
174
+ [ObjectId.random()]: ObjectStructure.makeObject({
175
+ type: Type.getDXN(TestSchema.Task)!.toString(),
176
+ data: {
177
+ title: 'Run experiments',
178
+ description: 'Conduct series of experiments on the portal device',
179
+ status: 'pending',
180
+ dueDate: '2023-11-15',
181
+ assignee: { '/': DXN.fromLocalObjectId(Object.keys(PEOPLE.alice.objects!)[0]).toString() },
182
+ },
183
+ }),
184
+ },
185
+ });
186
+ }
187
+ return cachedTasksTask2;
188
+ },
189
+ };