@dxos/echo 0.8.4-main.b97322e → 0.8.4-main.c4373fc

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 (315) hide show
  1. package/README.md +1 -1
  2. package/dist/lib/browser/chunk-MWLA34S5.mjs +3843 -0
  3. package/dist/lib/browser/chunk-MWLA34S5.mjs.map +7 -0
  4. package/dist/lib/browser/chunk-OAZJQHVO.mjs +453 -0
  5. package/dist/lib/browser/chunk-OAZJQHVO.mjs.map +7 -0
  6. package/dist/lib/browser/chunk-ORIE2FMS.mjs +514 -0
  7. package/dist/lib/browser/chunk-ORIE2FMS.mjs.map +7 -0
  8. package/dist/lib/browser/index.mjs +26 -5
  9. package/dist/lib/browser/internal/index.mjs +326 -0
  10. package/dist/lib/browser/internal/index.mjs.map +7 -0
  11. package/dist/lib/browser/meta.json +1 -1
  12. package/dist/lib/browser/query/index.mjs +23 -0
  13. package/dist/lib/browser/query/index.mjs.map +7 -0
  14. package/dist/lib/browser/testing/index.mjs +260 -32
  15. package/dist/lib/browser/testing/index.mjs.map +4 -4
  16. package/dist/lib/node-esm/chunk-AXWVDOP7.mjs +453 -0
  17. package/dist/lib/node-esm/chunk-AXWVDOP7.mjs.map +7 -0
  18. package/dist/lib/node-esm/chunk-L4PBAJDP.mjs +514 -0
  19. package/dist/lib/node-esm/chunk-L4PBAJDP.mjs.map +7 -0
  20. package/dist/lib/node-esm/chunk-YTNLFBIK.mjs +3843 -0
  21. package/dist/lib/node-esm/chunk-YTNLFBIK.mjs.map +7 -0
  22. package/dist/lib/node-esm/index.mjs +26 -5
  23. package/dist/lib/node-esm/internal/index.mjs +326 -0
  24. package/dist/lib/node-esm/internal/index.mjs.map +7 -0
  25. package/dist/lib/node-esm/meta.json +1 -1
  26. package/dist/lib/node-esm/query/index.mjs +23 -0
  27. package/dist/lib/node-esm/query/index.mjs.map +7 -0
  28. package/dist/lib/node-esm/testing/index.mjs +260 -32
  29. package/dist/lib/node-esm/testing/index.mjs.map +4 -4
  30. package/dist/types/src/Obj.d.ts +111 -17
  31. package/dist/types/src/Obj.d.ts.map +1 -1
  32. package/dist/types/src/Ref.d.ts +1 -1
  33. package/dist/types/src/Ref.d.ts.map +1 -1
  34. package/dist/types/src/Relation.d.ts +11 -8
  35. package/dist/types/src/Relation.d.ts.map +1 -1
  36. package/dist/types/src/Type.d.ts +17 -18
  37. package/dist/types/src/Type.d.ts.map +1 -1
  38. package/dist/types/src/errors.d.ts +72 -0
  39. package/dist/types/src/errors.d.ts.map +1 -0
  40. package/dist/types/src/index.d.ts +3 -1
  41. package/dist/types/src/index.d.ts.map +1 -1
  42. package/dist/types/src/internal/ast/annotation-helper.d.ts +8 -0
  43. package/dist/types/src/internal/ast/annotation-helper.d.ts.map +1 -0
  44. package/dist/types/src/internal/ast/annotations.d.ts +119 -0
  45. package/dist/types/src/internal/ast/annotations.d.ts.map +1 -0
  46. package/dist/types/src/internal/ast/annotations.test.d.ts +2 -0
  47. package/dist/types/src/internal/ast/annotations.test.d.ts.map +1 -0
  48. package/dist/types/src/internal/ast/entity-kind.d.ts +10 -0
  49. package/dist/types/src/internal/ast/entity-kind.d.ts.map +1 -0
  50. package/dist/types/src/internal/ast/index.d.ts +5 -0
  51. package/dist/types/src/internal/ast/index.d.ts.map +1 -0
  52. package/dist/types/src/internal/ast/types.d.ts +6 -0
  53. package/dist/types/src/internal/ast/types.d.ts.map +1 -0
  54. package/dist/types/src/internal/formats/date.d.ts +63 -0
  55. package/dist/types/src/internal/formats/date.d.ts.map +1 -0
  56. package/dist/types/src/internal/formats/date.test.d.ts +2 -0
  57. package/dist/types/src/internal/formats/date.test.d.ts.map +1 -0
  58. package/dist/types/src/internal/formats/format.d.ts +30 -0
  59. package/dist/types/src/internal/formats/format.d.ts.map +1 -0
  60. package/dist/types/src/internal/formats/format.test.d.ts +2 -0
  61. package/dist/types/src/internal/formats/format.test.d.ts.map +1 -0
  62. package/dist/types/src/internal/formats/index.d.ts +8 -0
  63. package/dist/types/src/internal/formats/index.d.ts.map +1 -0
  64. package/dist/types/src/internal/formats/number.d.ts +31 -0
  65. package/dist/types/src/internal/formats/number.d.ts.map +1 -0
  66. package/dist/types/src/internal/formats/object.d.ts +35 -0
  67. package/dist/types/src/internal/formats/object.d.ts.map +1 -0
  68. package/dist/types/src/internal/formats/select.d.ts +11 -0
  69. package/dist/types/src/internal/formats/select.d.ts.map +1 -0
  70. package/dist/types/src/internal/formats/string.d.ts +38 -0
  71. package/dist/types/src/internal/formats/string.d.ts.map +1 -0
  72. package/dist/types/src/internal/formats/types.d.ts +68 -0
  73. package/dist/types/src/internal/formats/types.d.ts.map +1 -0
  74. package/dist/types/src/internal/index.d.ts +15 -0
  75. package/dist/types/src/internal/index.d.ts.map +1 -0
  76. package/dist/types/src/internal/json/annotations.d.ts +19 -0
  77. package/dist/types/src/internal/json/annotations.d.ts.map +1 -0
  78. package/dist/types/src/internal/json/effect-schema.test.d.ts +2 -0
  79. package/dist/types/src/internal/json/effect-schema.test.d.ts.map +1 -0
  80. package/dist/types/src/internal/json/index.d.ts +2 -0
  81. package/dist/types/src/internal/json/index.d.ts.map +1 -0
  82. package/dist/types/src/internal/json/json-schema.d.ts +32 -0
  83. package/dist/types/src/internal/json/json-schema.d.ts.map +1 -0
  84. package/dist/types/src/internal/json/json-schema.test.d.ts +2 -0
  85. package/dist/types/src/internal/json/json-schema.test.d.ts.map +1 -0
  86. package/dist/types/src/internal/json-schema/index.d.ts +3 -0
  87. package/dist/types/src/internal/json-schema/index.d.ts.map +1 -0
  88. package/dist/types/src/internal/json-schema/json-schema-normalize.d.ts +7 -0
  89. package/dist/types/src/internal/json-schema/json-schema-normalize.d.ts.map +1 -0
  90. package/dist/types/src/internal/json-schema/json-schema-type.d.ts +250 -0
  91. package/dist/types/src/internal/json-schema/json-schema-type.d.ts.map +1 -0
  92. package/dist/types/src/internal/object/accessors.d.ts +29 -0
  93. package/dist/types/src/internal/object/accessors.d.ts.map +1 -0
  94. package/dist/types/src/internal/object/common.d.ts +18 -0
  95. package/dist/types/src/internal/object/common.d.ts.map +1 -0
  96. package/dist/types/src/internal/object/create.d.ts +40 -0
  97. package/dist/types/src/internal/object/create.d.ts.map +1 -0
  98. package/dist/types/src/internal/object/create.test.d.ts +2 -0
  99. package/dist/types/src/internal/object/create.test.d.ts.map +1 -0
  100. package/dist/types/src/internal/object/deleted.d.ts +6 -0
  101. package/dist/types/src/internal/object/deleted.d.ts.map +1 -0
  102. package/dist/types/src/internal/object/entity.d.ts +22 -0
  103. package/dist/types/src/internal/object/entity.d.ts.map +1 -0
  104. package/dist/types/src/internal/object/expando.d.ts +14 -0
  105. package/dist/types/src/internal/object/expando.d.ts.map +1 -0
  106. package/dist/types/src/internal/object/ids.d.ts +6 -0
  107. package/dist/types/src/internal/object/ids.d.ts.map +1 -0
  108. package/dist/types/src/internal/object/index.d.ts +17 -0
  109. package/dist/types/src/internal/object/index.d.ts.map +1 -0
  110. package/dist/types/src/internal/object/inspect.d.ts +2 -0
  111. package/dist/types/src/internal/object/inspect.d.ts.map +1 -0
  112. package/dist/types/src/internal/object/json-serializer.d.ts +32 -0
  113. package/dist/types/src/internal/object/json-serializer.d.ts.map +1 -0
  114. package/dist/types/src/internal/object/json-serializer.test.d.ts +2 -0
  115. package/dist/types/src/internal/object/json-serializer.test.d.ts.map +1 -0
  116. package/dist/types/src/internal/object/meta.d.ts +31 -0
  117. package/dist/types/src/internal/object/meta.d.ts.map +1 -0
  118. package/dist/types/src/internal/object/model.d.ts +117 -0
  119. package/dist/types/src/internal/object/model.d.ts.map +1 -0
  120. package/dist/types/src/internal/object/relation.d.ts +17 -0
  121. package/dist/types/src/internal/object/relation.d.ts.map +1 -0
  122. package/dist/types/src/internal/object/schema-validator.d.ts +15 -0
  123. package/dist/types/src/internal/object/schema-validator.d.ts.map +1 -0
  124. package/dist/types/src/internal/object/schema-validator.test.d.ts +2 -0
  125. package/dist/types/src/internal/object/schema-validator.test.d.ts.map +1 -0
  126. package/dist/types/src/internal/object/typed-object.d.ts +31 -0
  127. package/dist/types/src/internal/object/typed-object.d.ts.map +1 -0
  128. package/dist/types/src/internal/object/typed-object.test.d.ts +2 -0
  129. package/dist/types/src/internal/object/typed-object.test.d.ts.map +1 -0
  130. package/dist/types/src/internal/object/typed-relation.d.ts +32 -0
  131. package/dist/types/src/internal/object/typed-relation.d.ts.map +1 -0
  132. package/dist/types/src/internal/object/typename.d.ts +15 -0
  133. package/dist/types/src/internal/object/typename.d.ts.map +1 -0
  134. package/dist/types/src/internal/object/version.d.ts +14 -0
  135. package/dist/types/src/internal/object/version.d.ts.map +1 -0
  136. package/dist/types/src/internal/projection/compose.d.ts +6 -0
  137. package/dist/types/src/internal/projection/compose.d.ts.map +1 -0
  138. package/dist/types/src/internal/projection/compose.test.d.ts +2 -0
  139. package/dist/types/src/internal/projection/compose.test.d.ts.map +1 -0
  140. package/dist/types/src/internal/projection/index.d.ts +2 -0
  141. package/dist/types/src/internal/projection/index.d.ts.map +1 -0
  142. package/dist/types/src/internal/proxy/handler.test.d.ts +2 -0
  143. package/dist/types/src/internal/proxy/handler.test.d.ts.map +1 -0
  144. package/dist/types/src/internal/proxy/reactive-object.d.ts +15 -0
  145. package/dist/types/src/internal/proxy/reactive-object.d.ts.map +1 -0
  146. package/dist/types/src/internal/proxy/schema.test.d.ts +2 -0
  147. package/dist/types/src/internal/proxy/schema.test.d.ts.map +1 -0
  148. package/dist/types/src/internal/proxy/typed-handler.d.ts +44 -0
  149. package/dist/types/src/internal/proxy/typed-handler.d.ts.map +1 -0
  150. package/dist/types/src/internal/proxy/typed-handler.test.d.ts +2 -0
  151. package/dist/types/src/internal/proxy/typed-handler.test.d.ts.map +1 -0
  152. package/dist/types/src/internal/proxy/typed-object.test.d.ts +2 -0
  153. package/dist/types/src/internal/proxy/typed-object.test.d.ts.map +1 -0
  154. package/dist/types/src/internal/query/index.d.ts +2 -0
  155. package/dist/types/src/internal/query/index.d.ts.map +1 -0
  156. package/dist/types/src/internal/query/query.d.ts +17 -0
  157. package/dist/types/src/internal/query/query.d.ts.map +1 -0
  158. package/dist/types/src/internal/ref/index.d.ts +3 -0
  159. package/dist/types/src/internal/ref/index.d.ts.map +1 -0
  160. package/dist/types/src/internal/ref/ref-array.d.ts +21 -0
  161. package/dist/types/src/internal/ref/ref-array.d.ts.map +1 -0
  162. package/dist/types/src/internal/ref/ref.d.ts +206 -0
  163. package/dist/types/src/internal/ref/ref.d.ts.map +1 -0
  164. package/dist/types/src/internal/ref/ref.test.d.ts +2 -0
  165. package/dist/types/src/internal/ref/ref.test.d.ts.map +1 -0
  166. package/dist/types/src/internal/schema/echo-schema.d.ts +168 -0
  167. package/dist/types/src/internal/schema/echo-schema.d.ts.map +1 -0
  168. package/dist/types/src/internal/schema/index.d.ts +7 -0
  169. package/dist/types/src/internal/schema/index.d.ts.map +1 -0
  170. package/dist/types/src/internal/schema/manipulation.d.ts +10 -0
  171. package/dist/types/src/internal/schema/manipulation.d.ts.map +1 -0
  172. package/dist/types/src/internal/schema/runtime-schema-registry.d.ts +18 -0
  173. package/dist/types/src/internal/schema/runtime-schema-registry.d.ts.map +1 -0
  174. package/dist/types/src/internal/schema/snapshot.d.ts +6 -0
  175. package/dist/types/src/internal/schema/snapshot.d.ts.map +1 -0
  176. package/dist/types/src/internal/schema/stored-schema.d.ts +13 -0
  177. package/dist/types/src/internal/schema/stored-schema.d.ts.map +1 -0
  178. package/dist/types/src/internal/testing/index.d.ts +3 -0
  179. package/dist/types/src/internal/testing/index.d.ts.map +1 -0
  180. package/dist/types/src/internal/testing/types.d.ts +455 -0
  181. package/dist/types/src/internal/testing/types.d.ts.map +1 -0
  182. package/dist/types/src/internal/testing/utils.d.ts +10 -0
  183. package/dist/types/src/internal/testing/utils.d.ts.map +1 -0
  184. package/dist/types/src/internal/types/index.d.ts +3 -0
  185. package/dist/types/src/internal/types/index.d.ts.map +1 -0
  186. package/dist/types/src/internal/types/types.d.ts +79 -0
  187. package/dist/types/src/internal/types/types.d.ts.map +1 -0
  188. package/dist/types/src/internal/types/types.test.d.ts +2 -0
  189. package/dist/types/src/internal/types/types.test.d.ts.map +1 -0
  190. package/dist/types/src/internal/types/util.d.ts +5 -0
  191. package/dist/types/src/internal/types/util.d.ts.map +1 -0
  192. package/dist/types/src/query/index.d.ts +2 -1
  193. package/dist/types/src/query/index.d.ts.map +1 -1
  194. package/dist/types/src/query/{dsl.d.ts → query.d.ts} +44 -15
  195. package/dist/types/src/query/query.d.ts.map +1 -0
  196. package/dist/types/src/query/query.test.d.ts +2 -0
  197. package/dist/types/src/query/query.test.d.ts.map +1 -0
  198. package/dist/types/src/query/tag.d.ts +18 -0
  199. package/dist/types/src/query/tag.d.ts.map +1 -0
  200. package/dist/types/src/testing/echo-schema.d.ts +7 -0
  201. package/dist/types/src/testing/echo-schema.d.ts.map +1 -0
  202. package/dist/types/src/testing/index.d.ts +2 -0
  203. package/dist/types/src/testing/index.d.ts.map +1 -1
  204. package/dist/types/src/testing/types.d.ts +18 -18
  205. package/dist/types/src/testing/types.d.ts.map +1 -1
  206. package/dist/types/tsconfig.tsbuildinfo +1 -1
  207. package/package.json +34 -16
  208. package/src/Obj.ts +250 -27
  209. package/src/Ref.ts +1 -2
  210. package/src/Relation.ts +25 -13
  211. package/src/Type.ts +32 -31
  212. package/src/errors.ts +18 -0
  213. package/src/index.ts +4 -1
  214. package/src/internal/ast/annotation-helper.ts +22 -0
  215. package/src/internal/ast/annotations.test.ts +98 -0
  216. package/src/internal/ast/annotations.ts +212 -0
  217. package/src/internal/ast/entity-kind.ts +15 -0
  218. package/src/internal/ast/index.ts +8 -0
  219. package/src/internal/ast/types.ts +17 -0
  220. package/src/internal/formats/date.test.ts +56 -0
  221. package/src/internal/formats/date.ts +217 -0
  222. package/src/internal/formats/format.test.ts +77 -0
  223. package/src/internal/formats/format.ts +52 -0
  224. package/src/internal/formats/index.ts +12 -0
  225. package/src/internal/formats/number.ts +89 -0
  226. package/src/internal/formats/object.ts +80 -0
  227. package/src/internal/formats/select.ts +16 -0
  228. package/src/internal/formats/string.ts +76 -0
  229. package/src/internal/formats/types.ts +175 -0
  230. package/src/internal/index.ts +22 -0
  231. package/src/internal/json/annotations.ts +50 -0
  232. package/src/internal/json/effect-schema.test.ts +143 -0
  233. package/src/internal/json/index.ts +5 -0
  234. package/src/internal/json/json-schema.test.ts +726 -0
  235. package/src/internal/json/json-schema.ts +548 -0
  236. package/src/internal/json-schema/index.ts +6 -0
  237. package/src/internal/json-schema/json-schema-normalize.ts +109 -0
  238. package/src/internal/json-schema/json-schema-type.ts +403 -0
  239. package/src/internal/object/accessors.ts +115 -0
  240. package/src/internal/object/common.ts +76 -0
  241. package/src/internal/object/create.test.ts +118 -0
  242. package/src/internal/object/create.ts +96 -0
  243. package/src/internal/object/deleted.ts +19 -0
  244. package/src/internal/object/entity.ts +204 -0
  245. package/src/internal/object/expando.ts +21 -0
  246. package/src/internal/object/ids.ts +12 -0
  247. package/src/internal/object/index.ts +20 -0
  248. package/src/internal/object/inspect.ts +48 -0
  249. package/src/internal/object/json-serializer.test.ts +99 -0
  250. package/src/internal/object/json-serializer.ts +225 -0
  251. package/src/internal/object/meta.ts +62 -0
  252. package/src/internal/object/model.ts +170 -0
  253. package/src/internal/object/relation.ts +24 -0
  254. package/src/internal/object/schema-validator.test.ts +186 -0
  255. package/src/internal/object/schema-validator.ts +241 -0
  256. package/src/internal/object/typed-object.test.ts +34 -0
  257. package/src/internal/object/typed-object.ts +81 -0
  258. package/src/internal/object/typed-relation.ts +85 -0
  259. package/src/internal/object/typename.ts +61 -0
  260. package/src/internal/object/version.ts +22 -0
  261. package/src/internal/projection/compose.test.ts +43 -0
  262. package/src/internal/projection/compose.ts +36 -0
  263. package/src/internal/projection/index.ts +5 -0
  264. package/src/internal/proxy/handler.test.ts +163 -0
  265. package/src/internal/proxy/reactive-object.ts +108 -0
  266. package/src/internal/proxy/schema.test.ts +136 -0
  267. package/src/internal/proxy/typed-handler.test.ts +102 -0
  268. package/src/internal/proxy/typed-handler.ts +228 -0
  269. package/src/internal/proxy/typed-object.test.ts +100 -0
  270. package/src/internal/query/index.ts +5 -0
  271. package/src/internal/query/query.ts +23 -0
  272. package/src/internal/ref/index.ts +6 -0
  273. package/src/internal/ref/ref-array.ts +39 -0
  274. package/src/internal/ref/ref.test.ts +100 -0
  275. package/src/internal/ref/ref.ts +521 -0
  276. package/src/internal/schema/echo-schema.ts +383 -0
  277. package/src/internal/schema/index.ts +10 -0
  278. package/src/internal/schema/manipulation.ts +86 -0
  279. package/src/internal/schema/runtime-schema-registry.ts +78 -0
  280. package/src/internal/schema/snapshot.ts +25 -0
  281. package/src/internal/schema/stored-schema.ts +26 -0
  282. package/src/internal/testing/index.ts +6 -0
  283. package/src/internal/testing/types.ts +211 -0
  284. package/src/internal/testing/utils.ts +54 -0
  285. package/src/internal/types/index.ts +6 -0
  286. package/src/internal/types/types.test.ts +48 -0
  287. package/src/internal/types/types.ts +176 -0
  288. package/src/internal/types/util.ts +9 -0
  289. package/src/query/index.ts +2 -1
  290. package/src/query/{dsl.test.ts → query.test.ts} +41 -2
  291. package/src/query/{dsl.ts → query.ts} +170 -32
  292. package/src/query/tag.ts +35 -0
  293. package/src/test/api.test.ts +17 -10
  294. package/src/testing/echo-schema.ts +39 -0
  295. package/src/testing/index.ts +2 -0
  296. package/src/testing/types.ts +1 -1
  297. package/dist/lib/browser/chunk-EUA7CM23.mjs +0 -619
  298. package/dist/lib/browser/chunk-EUA7CM23.mjs.map +0 -7
  299. package/dist/lib/node-esm/chunk-IV6BWGHK.mjs +0 -619
  300. package/dist/lib/node-esm/chunk-IV6BWGHK.mjs.map +0 -7
  301. package/dist/types/src/experimental/database.d.ts +0 -8
  302. package/dist/types/src/experimental/database.d.ts.map +0 -1
  303. package/dist/types/src/experimental/index.d.ts +0 -1
  304. package/dist/types/src/experimental/index.d.ts.map +0 -1
  305. package/dist/types/src/experimental/queue.d.ts +0 -8
  306. package/dist/types/src/experimental/queue.d.ts.map +0 -1
  307. package/dist/types/src/experimental/space.d.ts +0 -8
  308. package/dist/types/src/experimental/space.d.ts.map +0 -1
  309. package/dist/types/src/query/dsl.d.ts.map +0 -1
  310. package/dist/types/src/query/dsl.test.d.ts +0 -2
  311. package/dist/types/src/query/dsl.test.d.ts.map +0 -1
  312. package/src/experimental/database.ts +0 -11
  313. package/src/experimental/index.ts +0 -7
  314. package/src/experimental/queue.ts +0 -11
  315. package/src/experimental/space.ts +0 -11
package/package.json CHANGED
@@ -1,41 +1,59 @@
1
1
  {
2
2
  "name": "@dxos/echo",
3
- "version": "0.8.4-main.b97322e",
3
+ "version": "0.8.4-main.c4373fc",
4
4
  "description": "ECHO API",
5
5
  "homepage": "https://dxos.org",
6
6
  "bugs": "https://github.com/dxos/dxos/issues",
7
7
  "license": "MIT",
8
8
  "author": "info@dxos.org",
9
- "sideEffects": true,
9
+ "sideEffects": false,
10
10
  "type": "module",
11
11
  "exports": {
12
12
  ".": {
13
+ "source": "./src/index.ts",
13
14
  "types": "./dist/types/src/index.d.ts",
14
15
  "browser": "./dist/lib/browser/index.mjs",
15
16
  "node": "./dist/lib/node-esm/index.mjs"
16
17
  },
17
18
  "./Type": {
19
+ "source": "./src/Type.ts",
18
20
  "types": "./dist/types/src/Type.d.ts",
19
21
  "browser": "./dist/lib/browser/Type.mjs",
20
22
  "node": "./dist/lib/node-esm/Type.mjs"
21
23
  },
22
24
  "./Obj": {
25
+ "source": "./src/Obj.ts",
23
26
  "types": "./dist/types/src/Obj.d.ts",
24
27
  "browser": "./dist/lib/browser/Obj.mjs",
25
28
  "node": "./dist/lib/node-esm/Obj.mjs"
26
29
  },
27
30
  "./Relation": {
31
+ "source": "./src/Relation.ts",
28
32
  "types": "./dist/types/src/Relation.d.ts",
29
33
  "browser": "./dist/lib/browser/Relation.mjs",
30
34
  "node": "./dist/lib/node-esm/Relation.mjs"
31
35
  },
32
36
  "./Ref": {
37
+ "source": "./src/Ref.ts",
33
38
  "types": "./dist/types/src/Ref.d.ts",
34
39
  "browser": "./dist/lib/browser/Ref.mjs",
35
40
  "node": "./dist/lib/node-esm/Ref.mjs"
36
41
  },
42
+ "./internal": {
43
+ "source": "./src/internal/index.ts",
44
+ "types": "./dist/types/src/internal/index.d.ts",
45
+ "browser": "./dist/lib/browser/internal/index.mjs",
46
+ "node": "./dist/lib/node-esm/internal/index.mjs"
47
+ },
48
+ "./query": {
49
+ "source": "./src/query/index.ts",
50
+ "types": "./dist/types/src/query/index.d.ts",
51
+ "browser": "./dist/lib/browser/query/index.mjs",
52
+ "node": "./dist/lib/node-esm/query/index.mjs"
53
+ },
37
54
  "./testing": {
38
- "types": "./dist/types/src/testing/types.d.ts",
55
+ "source": "./src/testing/index.ts",
56
+ "types": "./dist/types/src/testing/index.d.ts",
39
57
  "browser": "./dist/lib/browser/testing/index.mjs",
40
58
  "node": "./dist/lib/node-esm/testing/index.mjs"
41
59
  }
@@ -65,19 +83,19 @@
65
83
  "src"
66
84
  ],
67
85
  "dependencies": {
68
- "@preact/signals-core": "^1.9.0",
69
- "effect": "3.17.0",
70
- "@dxos/debug": "0.8.4-main.b97322e",
71
- "@dxos/echo-schema": "0.8.4-main.b97322e",
72
- "@dxos/echo-signals": "0.8.4-main.b97322e",
73
- "@dxos/echo-protocol": "0.8.4-main.b97322e",
74
- "@dxos/invariant": "0.8.4-main.b97322e",
75
- "@dxos/keys": "0.8.4-main.b97322e",
76
- "@dxos/effect": "0.8.4-main.b97322e",
77
- "@dxos/live-object": "0.8.4-main.b97322e",
78
- "@dxos/log": "0.8.4-main.b97322e",
79
- "@dxos/node-std": "0.8.4-main.b97322e",
80
- "@dxos/util": "0.8.4-main.b97322e"
86
+ "@preact/signals-core": "^1.12.1",
87
+ "effect": "3.18.3",
88
+ "@dxos/debug": "0.8.4-main.c4373fc",
89
+ "@dxos/effect": "0.8.4-main.c4373fc",
90
+ "@dxos/echo-protocol": "0.8.4-main.c4373fc",
91
+ "@dxos/echo-signals": "0.8.4-main.c4373fc",
92
+ "@dxos/invariant": "0.8.4-main.c4373fc",
93
+ "@dxos/errors": "0.8.4-main.c4373fc",
94
+ "@dxos/keys": "0.8.4-main.c4373fc",
95
+ "@dxos/live-object": "0.8.4-main.c4373fc",
96
+ "@dxos/node-std": "0.8.4-main.c4373fc",
97
+ "@dxos/util": "0.8.4-main.c4373fc",
98
+ "@dxos/log": "0.8.4-main.c4373fc"
81
99
  },
82
100
  "publishConfig": {
83
101
  "access": "public"
package/src/Obj.ts CHANGED
@@ -2,58 +2,85 @@
2
2
  // Copyright 2025 DXOS.org
3
3
  //
4
4
 
5
- import { Schema } from 'effect';
5
+ import * as Function from 'effect/Function';
6
+ import * as Schema from 'effect/Schema';
6
7
 
7
- import * as EchoSchema from '@dxos/echo-schema';
8
8
  import { assertArgument, invariant } from '@dxos/invariant';
9
9
  import { type DXN } from '@dxos/keys';
10
- import type * as LiveObject from '@dxos/live-object';
11
- import { live } from '@dxos/live-object';
12
- import { assumeType } from '@dxos/util';
10
+ import * as LiveObject from '@dxos/live-object';
11
+ import { assumeType, deepMapValues } from '@dxos/util';
13
12
 
13
+ import { live } from './internal';
14
+ import * as EchoSchema from './internal';
14
15
  import type * as Ref from './Ref';
15
16
  import type * as Relation from './Relation';
16
- import type * as Type from './Type';
17
+ import * as Type from './Type';
17
18
 
18
- // NOTE: Don't export: Obj.Any and Obj.Obj form the public API.
19
- interface ObjBase extends Type.OfKind<EchoSchema.EntityKind.Object> {
20
- readonly id: EchoSchema.ObjectId;
21
- }
19
+ /**
20
+ * NOTE: Don't export: Obj.Any and Obj.Obj form the public API.
21
+ */
22
+ interface BaseObj extends EchoSchema.HasId, Type.OfKind<EchoSchema.EntityKind.Object> {}
22
23
 
23
24
  /**
24
25
  * Object type with specific properties.
25
26
  */
26
- export type Obj<Props> = ObjBase & Props;
27
+ export type Obj<Props> = BaseObj & Props;
27
28
 
28
29
  /**
29
30
  * Base type for all ECHO objects.
30
31
  */
31
- export interface Any extends ObjBase {}
32
+ export interface Any extends BaseObj {}
32
33
 
33
- type Props<T> = { id?: EchoSchema.ObjectId } & Type.Properties<T>;
34
+ export const Any = Schema.Struct({}).pipe(
35
+ Type.Obj({
36
+ typename: 'dxos.org/types/Any',
37
+ version: '0.1.0',
38
+ }),
39
+ );
40
+
41
+ type Props<T = any> = { id?: EchoSchema.ObjectId } & Type.Properties<T>;
42
+
43
+ export type MakeProps<T extends Type.Obj.Any> = NoInfer<Props<Schema.Schema.Type<T>>> & {
44
+ [Meta]?: Partial<EchoSchema.ObjectMeta>;
45
+ };
34
46
 
35
- export type MakeProps<S extends Type.Obj.Any> = NoInfer<Props<Schema.Schema.Type<S>>>;
47
+ export const Meta: unique symbol = EchoSchema.MetaId as any;
48
+
49
+ const DEFAULT_META: EchoSchema.ObjectMeta = {
50
+ keys: [],
51
+ };
36
52
 
37
53
  /**
38
54
  * Creates new object.
55
+ * @param schema - Object schema.
56
+ * @param props - Object properties.
57
+ * @param meta - Object metadata (deprecated) -- pass with Obj.Meta.
58
+ *
59
+ * Meta can be passed as a symbol in `props`.
60
+ *
61
+ * Example:
62
+ * ```ts
63
+ * const obj = Obj.make(Person, { [Obj.Meta]: { keys: [...] }, name: 'John' });
64
+ * ```
39
65
  */
40
- // TODO(dmaretskyi): Move meta into props.
41
66
  export const make = <S extends Type.Obj.Any>(
42
67
  schema: S,
43
68
  props: MakeProps<S>,
44
- meta?: EchoSchema.ObjectMeta,
69
+ meta?: Partial<EchoSchema.ObjectMeta>,
45
70
  ): LiveObject.Live<Schema.Schema.Type<S>> => {
46
71
  assertArgument(
47
72
  EchoSchema.getTypeAnnotation(schema)?.kind === EchoSchema.EntityKind.Object,
73
+ 'schema',
48
74
  'Expected an object schema',
49
75
  );
50
76
 
51
77
  if (props[EchoSchema.MetaId] != null) {
52
- meta = props[EchoSchema.MetaId] as any;
78
+ // Set default fields on meta on creation.
79
+ meta = { ...structuredClone(DEFAULT_META), ...props[EchoSchema.MetaId] };
53
80
  delete props[EchoSchema.MetaId];
54
81
  }
55
82
 
56
- return live<Schema.Schema.Type<S>>(schema, props as any, meta);
83
+ return live<Schema.Schema.Type<S>>(schema, props as any, { keys: [], ...meta });
57
84
  };
58
85
 
59
86
  export const isObject = (obj: unknown): obj is Any => {
@@ -69,7 +96,7 @@ export const isObject = (obj: unknown): obj is Any => {
69
96
  * const johnIsPerson = Obj.instanceOf(Person)(john);
70
97
  *
71
98
  * const isPerson = Obj.instanceOf(Person);
72
- * if(isPerson(john)) {
99
+ * if (isPerson(john)) {
73
100
  * // john is Person
74
101
  * }
75
102
  * ```
@@ -90,8 +117,8 @@ export const instanceOf: {
90
117
  export const getSchema = EchoSchema.getSchema;
91
118
 
92
119
  // TODO(dmaretskyi): Allow returning undefined.
93
- export const getDXN = (obj: Any): DXN => {
94
- assertArgument(!Schema.isSchema(obj), 'Object should not be a schema.');
120
+ export const getDXN = (obj: Any | Relation.Any): DXN => {
121
+ assertArgument(!Schema.isSchema(obj), 'obj', 'Object should not be a schema.');
95
122
  const dxn = EchoSchema.getObjectDXN(obj);
96
123
  invariant(dxn != null, 'Invalid object.');
97
124
  return dxn;
@@ -108,7 +135,7 @@ export const getTypeDXN = EchoSchema.getType;
108
135
  * @returns The typename of the object's type.
109
136
  * @example `example.com/type/Contact`
110
137
  */
111
- export const getTypename = (obj: Any): string | undefined => {
138
+ export const getTypename = (obj: Any | Relation.Any): string | undefined => {
112
139
  const schema = getSchema(obj);
113
140
  if (schema == null) {
114
141
  // Try to extract typename from DXN.
@@ -119,27 +146,89 @@ export const getTypename = (obj: Any): string | undefined => {
119
146
  };
120
147
 
121
148
  // TODO(dmaretskyi): Allow returning undefined.
122
- export const getMeta = (obj: Any): EchoSchema.ObjectMeta => {
149
+ export const getMeta = (obj: Any | Relation.Any): EchoSchema.ObjectMeta => {
123
150
  const meta = EchoSchema.getMeta(obj);
124
151
  invariant(meta != null, 'Invalid object.');
125
152
  return meta;
126
153
  };
127
154
 
155
+ /**
156
+ * @returns Foreign keys for the object from the specified source.
157
+ */
158
+ export const getKeys: {
159
+ (obj: Any | Relation.Any, source: string): EchoSchema.ForeignKey[];
160
+ (source: string): (obj: Any | Relation.Any) => EchoSchema.ForeignKey[];
161
+ } = Function.dual(2, (obj: Any | Relation.Any, source?: string): EchoSchema.ForeignKey[] => {
162
+ const meta = EchoSchema.getMeta(obj);
163
+ invariant(meta != null, 'Invalid object.');
164
+ return meta.keys.filter((key) => key.source === source);
165
+ });
166
+
167
+ /**
168
+ * Delete all keys from the object for the specified source.
169
+ * @param obj
170
+ * @param source
171
+ */
172
+ export const deleteKeys = (obj: Any | Relation.Any, source: string) => {
173
+ const meta = EchoSchema.getMeta(obj);
174
+ for (let i = 0; i < meta.keys.length; i++) {
175
+ if (meta.keys[i].source === source) {
176
+ meta.keys.splice(i, 1);
177
+ i--;
178
+ }
179
+ }
180
+ };
181
+
128
182
  // TODO(dmaretskyi): Default to `false`.
129
- export const isDeleted = (obj: Any): boolean => {
183
+ export const isDeleted = (obj: Any | Relation.Any): boolean => {
130
184
  const deleted = EchoSchema.isDeleted(obj);
131
185
  invariant(typeof deleted === 'boolean', 'Invalid object.');
132
186
  return deleted;
133
187
  };
134
188
 
135
- // TODO(burdon): Rename "label"
136
- export const getLabel = (obj: Any): string | undefined => {
189
+ export const getLabel = (obj: Any | Relation.Any): string | undefined => {
137
190
  const schema = getSchema(obj);
138
191
  if (schema != null) {
139
192
  return EchoSchema.getLabel(schema, obj);
140
193
  }
141
194
  };
142
195
 
196
+ export const setLabel = (obj: Any | Relation.Any, label: string) => {
197
+ const schema = getSchema(obj);
198
+ if (schema != null) {
199
+ EchoSchema.setLabel(schema, obj, label);
200
+ }
201
+ };
202
+
203
+ const compare = (a?: string, b?: string) => {
204
+ if (a == null) {
205
+ return b == null ? 0 : 1;
206
+ }
207
+
208
+ if (b == null) {
209
+ return -1;
210
+ }
211
+
212
+ return a.localeCompare(b);
213
+ };
214
+
215
+ export type Comparator = (a: Any, b: Any) => number;
216
+
217
+ export const sortByLabel: Comparator = (a: Any, b: Any) => compare(getLabel(a), getLabel(b));
218
+ export const sortByTypename: Comparator = (a: Any, b: Any) => compare(getTypename(a), getTypename(b));
219
+ export const sort = (...comparators: Comparator[]): Comparator => {
220
+ return (a: Any, b: Any) => {
221
+ for (const comparator of comparators) {
222
+ const result = comparator(a, b);
223
+ if (result !== 0) {
224
+ return result;
225
+ }
226
+ }
227
+
228
+ return 0;
229
+ };
230
+ };
231
+
143
232
  /**
144
233
  * JSON representation of an object.
145
234
  */
@@ -150,6 +239,7 @@ export type JSON = EchoSchema.ObjectJSON;
150
239
  *
151
240
  * The same algorithm is used when calling the standard `JSON.stringify(obj)` function.
152
241
  */
242
+ // TODO(burdon): Base util type for Obj/Relation?
153
243
  export const toJSON = (obj: Any | Relation.Any): JSON => EchoSchema.objectToJSON(obj);
154
244
 
155
245
  /**
@@ -157,6 +247,139 @@ export const toJSON = (obj: Any | Relation.Any): JSON => EchoSchema.objectToJSON
157
247
  * References and schemas will be resolvable if the `refResolver` is provided.
158
248
  *
159
249
  * The function need to be async to support resolving the schema as well as the relation endpoints.
250
+ *
251
+ * @param options.refResolver - Resolver for references. Produces hydrated references that can be resolved.
252
+ * @param options.dxn - Override object DXN. Changes the result of `Obj.getDXN`.
160
253
  */
161
- export const fromJSON: (json: unknown, options?: { refResolver?: Ref.Resolver }) => Promise<Any> =
254
+ export const fromJSON: (json: unknown, options?: { refResolver?: Ref.Resolver; dxn?: DXN }) => Promise<Any> =
162
255
  EchoSchema.objectFromJSON as any;
256
+
257
+ /**
258
+ * Returns an immutable snapshot of an object.
259
+ */
260
+ export const getSnapshot: <T extends Any>(obj: Obj<T>) => T = LiveObject.getSnapshot;
261
+
262
+ export type CloneOptions = {
263
+ /**
264
+ * Retain the original object's ID.
265
+ * @default false
266
+ */
267
+ retainId?: boolean;
268
+ };
269
+
270
+ /**
271
+ * Clones an object or relation.
272
+ * This does not clone referenced objects, only the properties in the object.
273
+ * @returns A new object with the same schema and properties.
274
+ */
275
+ export const clone = <T extends Any | Relation.Any>(obj: T, opts?: CloneOptions): T => {
276
+ const { id, ...data } = obj;
277
+ const schema = getSchema(obj);
278
+ invariant(schema != null, 'Object should have a schema');
279
+ const props: any = deepMapValues(data, (value, recurse) => {
280
+ if (EchoSchema.Ref.isRef(value)) {
281
+ return value;
282
+ }
283
+ return recurse(value);
284
+ });
285
+ if (opts?.retainId) {
286
+ props.id = id;
287
+ }
288
+ const meta = getMeta(obj);
289
+ props[EchoSchema.MetaId] = deepMapValues(meta, (value, recurse) => {
290
+ if (EchoSchema.Ref.isRef(value)) {
291
+ return value;
292
+ }
293
+ return recurse(value);
294
+ });
295
+ return make(schema, props);
296
+ };
297
+
298
+ export const VersionTypeId = EchoSchema.VersionTypeId;
299
+ export type VersionType = typeof VersionTypeId;
300
+
301
+ /**
302
+ * Represent object version.
303
+ * May be backed by Automerge.
304
+ * Objects with no history are not versioned.
305
+ */
306
+ export interface Version {
307
+ [VersionTypeId]: {};
308
+
309
+ /**
310
+ * Whether the object is versioned.
311
+ */
312
+ versioned: boolean;
313
+
314
+ /**
315
+ * Automerge heads.
316
+ */
317
+ automergeHeads?: string[];
318
+ }
319
+
320
+ const unversioned: Version = {
321
+ [VersionTypeId]: {},
322
+ versioned: false,
323
+ };
324
+
325
+ /**
326
+ * Checks that `obj` is a version object.
327
+ */
328
+ export const isVersion = (obj: unknown): obj is Version => {
329
+ return obj != null && typeof obj === 'object' && VersionTypeId in obj;
330
+ };
331
+
332
+ /**
333
+ * Returns the version of the object.
334
+ */
335
+ export const version = (obj: Any | Relation.Any): Version => {
336
+ const version = (obj as any)[EchoSchema.ObjectVersionId];
337
+ if (version === undefined) {
338
+ return unversioned;
339
+ }
340
+ return version;
341
+ };
342
+
343
+ /**
344
+ * Checks that `version` is a valid version object.
345
+ */
346
+ export const versionValid = (version: Version): boolean => {
347
+ assertArgument(isVersion(version), 'version', 'Invalid version object');
348
+ return !!version.versioned;
349
+ };
350
+
351
+ export type VersionCompareResult = 'unversioned' | 'equal' | 'different';
352
+
353
+ /**
354
+ * Compares two versions.
355
+ * @param version1
356
+ * @param version2
357
+ * @returns 'unversioned' if either object is unversioned, 'equal' if the versions are equal, 'different' if the versions are different.
358
+ */
359
+ export const compareVersions = (version1: Version, version2: Version): VersionCompareResult => {
360
+ assertArgument(isVersion(version1), 'version1', 'Invalid version object');
361
+ assertArgument(isVersion(version2), 'version2', 'Invalid version object');
362
+
363
+ if (!versionValid(version1) || !versionValid(version2)) {
364
+ return 'unversioned';
365
+ }
366
+
367
+ if (version1.automergeHeads?.length !== version2.automergeHeads?.length) {
368
+ return 'different';
369
+ }
370
+ if (version1.automergeHeads?.some((head) => !version2.automergeHeads?.includes(head))) {
371
+ return 'different';
372
+ }
373
+
374
+ return 'equal';
375
+ };
376
+
377
+ export const encodeVersion = (version: Version): string => {
378
+ return JSON.stringify(version);
379
+ };
380
+
381
+ export const decodeVersion = (version: string): Version => {
382
+ const parsed = JSON.parse(version);
383
+ parsed[VersionTypeId] = {};
384
+ return parsed;
385
+ };
package/src/Ref.ts CHANGED
@@ -2,8 +2,7 @@
2
2
  // Copyright 2025 DXOS.org
3
3
  //
4
4
 
5
- import * as EchoSchema from '@dxos/echo-schema';
6
-
5
+ import * as EchoSchema from './internal';
7
6
  import type * as Obj from './Obj';
8
7
 
9
8
  export type Ref<T> = EchoSchema.Ref<T>;
package/src/Relation.ts CHANGED
@@ -2,34 +2,45 @@
2
2
  // Copyright 2025 DXOS.org
3
3
  //
4
4
 
5
- import { type Schema } from 'effect';
5
+ import * as Schema from 'effect/Schema';
6
6
 
7
7
  import { raise } from '@dxos/debug';
8
- import * as EchoSchema from '@dxos/echo-schema';
9
8
  import { assertArgument, invariant } from '@dxos/invariant';
10
9
  import { DXN } from '@dxos/keys';
11
- import { type Live, live } from '@dxos/live-object';
10
+ import { type Live } from '@dxos/live-object';
12
11
  import { assumeType } from '@dxos/util';
13
12
 
14
- import type * as Obj from './Obj';
15
- import type * as Type from './Type';
13
+ import { live } from './internal';
14
+ import * as EchoSchema from './internal';
15
+ import * as Obj from './Obj';
16
+ import * as Type from './Type';
16
17
 
17
- // NOTE: Don't export: Relation.Relation and Relation.Any form the public API.
18
- interface RelationBase<Source, Target>
19
- extends Type.Relation.Endpoints<Source, Target>,
20
- Type.OfKind<EchoSchema.EntityKind.Relation> {
21
- readonly id: EchoSchema.ObjectId;
22
- }
18
+ /**
19
+ * NOTE: Don't export: Relation.Relation and Relation.Any form the public API.
20
+ */
21
+ interface BaseRelation<Source, Target>
22
+ extends EchoSchema.HasId,
23
+ Type.Relation.Endpoints<Source, Target>,
24
+ Type.OfKind<EchoSchema.EntityKind.Relation> {}
23
25
 
24
26
  /**
25
27
  * Relation type with specific properties.
26
28
  */
27
- export type Relation<Source extends Obj.Any, Target extends Obj.Any, Props> = RelationBase<Source, Target> & Props;
29
+ export type Relation<Source extends Obj.Any, Target extends Obj.Any, Props> = BaseRelation<Source, Target> & Props;
28
30
 
29
31
  /**
30
32
  * Base type for all ECHO relations.
31
33
  */
32
- export interface Any extends RelationBase<Obj.Any, Obj.Any> {}
34
+ export interface Any extends BaseRelation<Obj.Any, Obj.Any> {}
35
+
36
+ export const Any = Schema.Struct({}).pipe(
37
+ Type.Relation({
38
+ typename: 'dxos.org/types/Any',
39
+ version: '0.1.0',
40
+ source: Obj.Any,
41
+ target: Obj.Any,
42
+ }),
43
+ );
33
44
 
34
45
  // TODO(dmaretskyi): Has to be `unique symbol`.
35
46
  export const Source: unique symbol = EchoSchema.RelationSourceId as any;
@@ -59,6 +70,7 @@ export const make = <S extends Type.Relation.Any>(
59
70
  ): Live<Schema.Schema.Type<S> & Type.OfKind<EchoSchema.EntityKind.Relation>> => {
60
71
  assertArgument(
61
72
  EchoSchema.getTypeAnnotation(schema)?.kind === EchoSchema.EntityKind.Relation,
73
+ 'schema',
62
74
  'Expected a relation schema',
63
75
  );
64
76