@dxos/echo 0.8.4-main.5ad4a44 → 0.8.4-main.66e292d

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 (343) hide show
  1. package/dist/lib/browser/{chunk-MWLA34S5.mjs → chunk-7GH6RXJ3.mjs} +2513 -2673
  2. package/dist/lib/browser/chunk-7GH6RXJ3.mjs.map +7 -0
  3. package/dist/lib/browser/chunk-E4UTVJNF.mjs +1111 -0
  4. package/dist/lib/browser/chunk-E4UTVJNF.mjs.map +7 -0
  5. package/dist/lib/browser/index.mjs +21 -19
  6. package/dist/lib/browser/internal/index.mjs +55 -45
  7. package/dist/lib/browser/meta.json +1 -1
  8. package/dist/lib/browser/testing/index.mjs +247 -217
  9. package/dist/lib/browser/testing/index.mjs.map +4 -4
  10. package/dist/lib/node-esm/chunk-JE5RXM2I.mjs +1111 -0
  11. package/dist/lib/node-esm/chunk-JE5RXM2I.mjs.map +7 -0
  12. package/dist/lib/node-esm/{chunk-YTNLFBIK.mjs → chunk-M4B6BMD2.mjs} +2513 -2673
  13. package/dist/lib/node-esm/chunk-M4B6BMD2.mjs.map +7 -0
  14. package/dist/lib/node-esm/index.mjs +21 -19
  15. package/dist/lib/node-esm/internal/index.mjs +55 -45
  16. package/dist/lib/node-esm/meta.json +1 -1
  17. package/dist/lib/node-esm/testing/index.mjs +247 -217
  18. package/dist/lib/node-esm/testing/index.mjs.map +4 -4
  19. package/dist/types/src/Annotation.d.ts +2 -0
  20. package/dist/types/src/Annotation.d.ts.map +1 -0
  21. package/dist/types/src/Database.d.ts +137 -0
  22. package/dist/types/src/Database.d.ts.map +1 -0
  23. package/dist/types/src/Entity.d.ts +36 -0
  24. package/dist/types/src/Entity.d.ts.map +1 -0
  25. package/dist/types/src/Format.d.ts +4 -0
  26. package/dist/types/src/Format.d.ts.map +1 -0
  27. package/dist/types/src/JsonSchema.d.ts +9 -0
  28. package/dist/types/src/JsonSchema.d.ts.map +1 -0
  29. package/dist/types/src/Key.d.ts +1 -0
  30. package/dist/types/src/Key.d.ts.map +1 -1
  31. package/dist/types/src/Obj.d.ts +85 -62
  32. package/dist/types/src/Obj.d.ts.map +1 -1
  33. package/dist/types/src/Ref.d.ts +10 -10
  34. package/dist/types/src/Ref.d.ts.map +1 -1
  35. package/dist/types/src/Relation.d.ts +14 -11
  36. package/dist/types/src/Relation.d.ts.map +1 -1
  37. package/dist/types/src/Tag.d.ts +17 -0
  38. package/dist/types/src/Tag.d.ts.map +1 -0
  39. package/dist/types/src/Type.d.ts +39 -49
  40. package/dist/types/src/Type.d.ts.map +1 -1
  41. package/dist/types/src/errors.d.ts +14 -18
  42. package/dist/types/src/errors.d.ts.map +1 -1
  43. package/dist/types/src/index.d.ts +7 -3
  44. package/dist/types/src/index.d.ts.map +1 -1
  45. package/dist/types/src/internal/annotations/annotations.d.ts +174 -0
  46. package/dist/types/src/internal/annotations/annotations.d.ts.map +1 -0
  47. package/dist/types/src/internal/annotations/annotations.test.d.ts.map +1 -0
  48. package/dist/types/src/internal/annotations/index.d.ts +3 -0
  49. package/dist/types/src/internal/annotations/index.d.ts.map +1 -0
  50. package/dist/types/src/internal/annotations/util.d.ts +26 -0
  51. package/dist/types/src/internal/annotations/util.d.ts.map +1 -0
  52. package/dist/types/src/internal/entities/entity.d.ts +10 -0
  53. package/dist/types/src/internal/entities/entity.d.ts.map +1 -0
  54. package/dist/types/src/internal/{object → entities}/expando.d.ts +3 -1
  55. package/dist/types/src/internal/entities/expando.d.ts.map +1 -0
  56. package/dist/types/src/internal/entities/index.d.ts +6 -0
  57. package/dist/types/src/internal/entities/index.d.ts.map +1 -0
  58. package/dist/types/src/internal/entities/model.d.ts +70 -0
  59. package/dist/types/src/internal/entities/model.d.ts.map +1 -0
  60. package/dist/types/src/internal/entities/object.d.ts +11 -0
  61. package/dist/types/src/internal/entities/object.d.ts.map +1 -0
  62. package/dist/types/src/internal/entities/relation.d.ts +55 -0
  63. package/dist/types/src/internal/entities/relation.d.ts.map +1 -0
  64. package/dist/types/src/internal/entities/util.d.ts +2 -0
  65. package/dist/types/src/internal/entities/util.d.ts.map +1 -0
  66. package/dist/types/src/internal/formats/format.d.ts +2 -0
  67. package/dist/types/src/internal/formats/format.d.ts.map +1 -1
  68. package/dist/types/src/internal/formats/types.d.ts +7 -7
  69. package/dist/types/src/internal/formats/types.d.ts.map +1 -1
  70. package/dist/types/src/internal/index.d.ts +6 -10
  71. package/dist/types/src/internal/index.d.ts.map +1 -1
  72. package/dist/types/src/internal/json-schema/annotations.d.ts.map +1 -0
  73. package/dist/types/src/internal/json-schema/effect-schema.test.d.ts.map +1 -0
  74. package/dist/types/src/internal/json-schema/index.d.ts +2 -0
  75. package/dist/types/src/internal/json-schema/index.d.ts.map +1 -1
  76. package/dist/types/src/internal/json-schema/json-schema-type.d.ts.map +1 -1
  77. package/dist/types/src/internal/{json → json-schema}/json-schema.d.ts +2 -5
  78. package/dist/types/src/internal/json-schema/json-schema.d.ts.map +1 -0
  79. package/dist/types/src/internal/json-schema/json-schema.test.d.ts.map +1 -0
  80. package/dist/types/src/internal/object/common.d.ts.map +1 -1
  81. package/dist/types/src/internal/object/{create.d.ts → create-object.d.ts} +9 -10
  82. package/dist/types/src/internal/object/create-object.d.ts.map +1 -0
  83. package/dist/types/src/internal/object/create-object.test.d.ts +2 -0
  84. package/dist/types/src/internal/object/create-object.test.d.ts.map +1 -0
  85. package/dist/types/src/internal/object/deleted.d.ts +2 -2
  86. package/dist/types/src/internal/object/deleted.d.ts.map +1 -1
  87. package/dist/types/src/internal/object/ids.d.ts.map +1 -1
  88. package/dist/types/src/internal/object/index.d.ts +3 -12
  89. package/dist/types/src/internal/object/index.d.ts.map +1 -1
  90. package/dist/types/src/internal/object/json-serializer.d.ts +1 -2
  91. package/dist/types/src/internal/object/json-serializer.d.ts.map +1 -1
  92. package/dist/types/src/internal/object/schema-validator.d.ts.map +1 -1
  93. package/dist/types/src/internal/object/typed-object.d.ts +1 -1
  94. package/dist/types/src/internal/object/typed-object.d.ts.map +1 -1
  95. package/dist/types/src/internal/proxy/index.d.ts +3 -0
  96. package/dist/types/src/internal/proxy/index.d.ts.map +1 -0
  97. package/dist/types/src/internal/proxy/make-object.d.ts +16 -0
  98. package/dist/types/src/internal/proxy/make-object.d.ts.map +1 -0
  99. package/dist/types/src/internal/proxy/typed-handler.d.ts +1 -1
  100. package/dist/types/src/internal/proxy/typed-handler.d.ts.map +1 -1
  101. package/dist/types/src/internal/ref/ref.d.ts +15 -12
  102. package/dist/types/src/internal/ref/ref.d.ts.map +1 -1
  103. package/dist/types/src/internal/schema/compose.d.ts.map +1 -0
  104. package/dist/types/src/internal/schema/compose.test.d.ts.map +1 -0
  105. package/dist/types/src/internal/schema/echo-schema.d.ts +9 -9
  106. package/dist/types/src/internal/schema/echo-schema.d.ts.map +1 -1
  107. package/dist/types/src/internal/schema/index.d.ts +3 -4
  108. package/dist/types/src/internal/schema/index.d.ts.map +1 -1
  109. package/dist/types/src/internal/schema/manipulation.d.ts.map +1 -1
  110. package/dist/types/src/internal/schema/persistent-schema.d.ts +18 -0
  111. package/dist/types/src/internal/schema/persistent-schema.d.ts.map +1 -0
  112. package/dist/types/src/internal/schema/runtime-schema-registry.d.ts +1 -1
  113. package/dist/types/src/internal/schema/runtime-schema-registry.d.ts.map +1 -1
  114. package/dist/types/src/internal/types/base.d.ts +37 -0
  115. package/dist/types/src/internal/types/base.d.ts.map +1 -0
  116. package/dist/types/src/internal/{ast/entity-kind.d.ts → types/entity.d.ts} +3 -1
  117. package/dist/types/src/internal/types/entity.d.ts.map +1 -0
  118. package/dist/types/src/internal/types/index.d.ts +5 -2
  119. package/dist/types/src/internal/types/index.d.ts.map +1 -1
  120. package/dist/types/src/internal/{object → types}/meta.d.ts +20 -11
  121. package/dist/types/src/internal/types/meta.d.ts.map +1 -0
  122. package/dist/types/src/internal/types/typename.d.ts +13 -0
  123. package/dist/types/src/internal/types/typename.d.ts.map +1 -0
  124. package/dist/types/src/internal/{object → types}/version.d.ts +3 -2
  125. package/dist/types/src/internal/types/version.d.ts.map +1 -0
  126. package/dist/types/src/query/filter.d.ts +167 -0
  127. package/dist/types/src/query/filter.d.ts.map +1 -0
  128. package/dist/types/src/query/index.d.ts +3 -1
  129. package/dist/types/src/query/index.d.ts.map +1 -1
  130. package/dist/types/src/query/order.d.ts +12 -0
  131. package/dist/types/src/query/order.d.ts.map +1 -0
  132. package/dist/types/src/query/query.d.ts +9 -144
  133. package/dist/types/src/query/query.d.ts.map +1 -1
  134. package/dist/types/src/query/testing.d.ts +51 -0
  135. package/dist/types/src/query/testing.d.ts.map +1 -0
  136. package/dist/types/src/{internal/query/query.d.ts → query/types.d.ts} +1 -1
  137. package/dist/types/src/query/types.d.ts.map +1 -0
  138. package/dist/types/src/query/util.d.ts +8 -0
  139. package/dist/types/src/query/util.d.ts.map +1 -0
  140. package/dist/types/src/{test → testing}/api.test.d.ts.map +1 -1
  141. package/dist/types/src/testing/index.d.ts +3 -3
  142. package/dist/types/src/testing/index.d.ts.map +1 -1
  143. package/dist/types/src/testing/test-data.d.ts +18 -0
  144. package/dist/types/src/testing/test-data.d.ts.map +1 -0
  145. package/dist/types/src/testing/test-schema.d.ts +337 -0
  146. package/dist/types/src/testing/test-schema.d.ts.map +1 -0
  147. package/dist/types/src/{internal/testing/utils.d.ts → testing/util.d.ts} +11 -5
  148. package/dist/types/src/testing/util.d.ts.map +1 -0
  149. package/dist/types/tsconfig.tsbuildinfo +1 -1
  150. package/package.json +46 -38
  151. package/src/Annotation.ts +17 -0
  152. package/src/Database.ts +189 -0
  153. package/src/Entity.ts +51 -0
  154. package/src/Format.ts +11 -0
  155. package/src/JsonSchema.ts +16 -0
  156. package/src/Key.ts +3 -0
  157. package/src/Obj.ts +260 -147
  158. package/src/Ref.ts +9 -9
  159. package/src/Relation.ts +58 -44
  160. package/src/Tag.ts +40 -0
  161. package/src/Type.ts +96 -83
  162. package/src/index.ts +10 -4
  163. package/src/internal/README.md +83 -0
  164. package/src/internal/{ast → annotations}/annotations.test.ts +13 -15
  165. package/src/internal/annotations/annotations.ts +463 -0
  166. package/src/internal/annotations/index.ts +6 -0
  167. package/src/internal/annotations/util.ts +70 -0
  168. package/src/internal/entities/entity.ts +109 -0
  169. package/src/internal/{object → entities}/expando.ts +7 -5
  170. package/src/internal/entities/index.ts +9 -0
  171. package/src/internal/entities/model.ts +129 -0
  172. package/src/internal/entities/object.ts +45 -0
  173. package/src/internal/entities/relation.ts +155 -0
  174. package/src/internal/entities/util.ts +33 -0
  175. package/src/internal/formats/date.test.ts +1 -1
  176. package/src/internal/formats/date.ts +5 -5
  177. package/src/internal/formats/format.test.ts +5 -5
  178. package/src/internal/formats/format.ts +3 -0
  179. package/src/internal/formats/number.ts +5 -5
  180. package/src/internal/formats/object.ts +2 -2
  181. package/src/internal/formats/string.ts +9 -9
  182. package/src/internal/formats/types.ts +44 -39
  183. package/src/internal/index.ts +29 -13
  184. package/src/internal/{json → json-schema}/annotations.ts +1 -1
  185. package/src/internal/json-schema/index.ts +2 -0
  186. package/src/internal/json-schema/json-schema-type.ts +4 -3
  187. package/src/internal/{json → json-schema}/json-schema.test.ts +230 -97
  188. package/src/internal/{json → json-schema}/json-schema.ts +67 -87
  189. package/src/internal/object/common.ts +3 -4
  190. package/src/internal/object/{create.test.ts → create-object.test.ts} +31 -33
  191. package/src/internal/object/{create.ts → create-object.ts} +34 -35
  192. package/src/internal/object/deleted.ts +6 -6
  193. package/src/internal/object/ids.ts +1 -1
  194. package/src/internal/object/index.ts +3 -12
  195. package/src/internal/object/inspect.ts +3 -5
  196. package/src/internal/object/json-serializer.test.ts +33 -38
  197. package/src/internal/object/json-serializer.ts +43 -38
  198. package/src/internal/object/schema-validator.ts +3 -2
  199. package/src/internal/object/typed-object.test.ts +1 -1
  200. package/src/internal/object/typed-object.ts +17 -4
  201. package/src/internal/proxy/handler.test.ts +30 -20
  202. package/src/internal/proxy/index.ts +6 -0
  203. package/src/internal/proxy/{reactive-object.ts → make-object.ts} +19 -14
  204. package/src/internal/proxy/schema.test.ts +5 -4
  205. package/src/internal/proxy/typed-handler.test.ts +28 -28
  206. package/src/internal/proxy/typed-handler.ts +11 -6
  207. package/src/internal/proxy/typed-object.test.ts +17 -12
  208. package/src/internal/ref/ref.test.ts +9 -8
  209. package/src/internal/ref/ref.ts +24 -20
  210. package/src/internal/{projection → schema}/compose.test.ts +5 -6
  211. package/src/internal/{projection → schema}/compose.ts +2 -1
  212. package/src/internal/schema/echo-schema.ts +30 -28
  213. package/src/internal/schema/index.ts +3 -4
  214. package/src/internal/schema/manipulation.ts +7 -1
  215. package/src/internal/schema/persistent-schema.ts +28 -0
  216. package/src/internal/schema/runtime-schema-registry.ts +4 -4
  217. package/src/internal/types/base.ts +58 -0
  218. package/src/internal/{ast/entity-kind.ts → types/entity.ts} +8 -0
  219. package/src/internal/types/index.ts +5 -2
  220. package/src/internal/{object → types}/meta.ts +32 -18
  221. package/src/internal/types/typename.ts +45 -0
  222. package/src/internal/types/version.ts +20 -0
  223. package/src/query/filter.ts +455 -0
  224. package/src/query/index.ts +4 -1
  225. package/src/query/order.ts +34 -0
  226. package/src/query/query.test.ts +188 -216
  227. package/src/query/query.ts +24 -505
  228. package/src/query/testing.ts +64 -0
  229. package/src/query/util.ts +25 -0
  230. package/src/testing/api.test.ts +100 -0
  231. package/src/testing/index.ts +3 -3
  232. package/src/testing/test-data.ts +130 -0
  233. package/src/testing/test-schema.ts +213 -0
  234. package/src/{internal/testing/utils.ts → testing/util.ts} +38 -14
  235. package/dist/lib/browser/chunk-MWLA34S5.mjs.map +0 -7
  236. package/dist/lib/browser/chunk-OAZJQHVO.mjs +0 -453
  237. package/dist/lib/browser/chunk-OAZJQHVO.mjs.map +0 -7
  238. package/dist/lib/browser/chunk-ORIE2FMS.mjs +0 -514
  239. package/dist/lib/browser/chunk-ORIE2FMS.mjs.map +0 -7
  240. package/dist/lib/browser/query/index.mjs +0 -23
  241. package/dist/lib/browser/query/index.mjs.map +0 -7
  242. package/dist/lib/node-esm/chunk-AXWVDOP7.mjs +0 -453
  243. package/dist/lib/node-esm/chunk-AXWVDOP7.mjs.map +0 -7
  244. package/dist/lib/node-esm/chunk-L4PBAJDP.mjs +0 -514
  245. package/dist/lib/node-esm/chunk-L4PBAJDP.mjs.map +0 -7
  246. package/dist/lib/node-esm/chunk-YTNLFBIK.mjs.map +0 -7
  247. package/dist/lib/node-esm/query/index.mjs +0 -23
  248. package/dist/lib/node-esm/query/index.mjs.map +0 -7
  249. package/dist/types/src/internal/ast/annotation-helper.d.ts +0 -8
  250. package/dist/types/src/internal/ast/annotation-helper.d.ts.map +0 -1
  251. package/dist/types/src/internal/ast/annotations.d.ts +0 -119
  252. package/dist/types/src/internal/ast/annotations.d.ts.map +0 -1
  253. package/dist/types/src/internal/ast/annotations.test.d.ts.map +0 -1
  254. package/dist/types/src/internal/ast/entity-kind.d.ts.map +0 -1
  255. package/dist/types/src/internal/ast/index.d.ts +0 -5
  256. package/dist/types/src/internal/ast/index.d.ts.map +0 -1
  257. package/dist/types/src/internal/ast/types.d.ts +0 -6
  258. package/dist/types/src/internal/ast/types.d.ts.map +0 -1
  259. package/dist/types/src/internal/json/annotations.d.ts.map +0 -1
  260. package/dist/types/src/internal/json/effect-schema.test.d.ts.map +0 -1
  261. package/dist/types/src/internal/json/index.d.ts +0 -2
  262. package/dist/types/src/internal/json/index.d.ts.map +0 -1
  263. package/dist/types/src/internal/json/json-schema.d.ts.map +0 -1
  264. package/dist/types/src/internal/json/json-schema.test.d.ts.map +0 -1
  265. package/dist/types/src/internal/object/accessors.d.ts +0 -29
  266. package/dist/types/src/internal/object/accessors.d.ts.map +0 -1
  267. package/dist/types/src/internal/object/create.d.ts.map +0 -1
  268. package/dist/types/src/internal/object/create.test.d.ts +0 -2
  269. package/dist/types/src/internal/object/create.test.d.ts.map +0 -1
  270. package/dist/types/src/internal/object/entity.d.ts +0 -22
  271. package/dist/types/src/internal/object/entity.d.ts.map +0 -1
  272. package/dist/types/src/internal/object/expando.d.ts.map +0 -1
  273. package/dist/types/src/internal/object/meta.d.ts.map +0 -1
  274. package/dist/types/src/internal/object/model.d.ts +0 -117
  275. package/dist/types/src/internal/object/model.d.ts.map +0 -1
  276. package/dist/types/src/internal/object/relation.d.ts +0 -17
  277. package/dist/types/src/internal/object/relation.d.ts.map +0 -1
  278. package/dist/types/src/internal/object/typed-relation.d.ts +0 -32
  279. package/dist/types/src/internal/object/typed-relation.d.ts.map +0 -1
  280. package/dist/types/src/internal/object/typename.d.ts +0 -15
  281. package/dist/types/src/internal/object/typename.d.ts.map +0 -1
  282. package/dist/types/src/internal/object/version.d.ts.map +0 -1
  283. package/dist/types/src/internal/projection/compose.d.ts.map +0 -1
  284. package/dist/types/src/internal/projection/compose.test.d.ts.map +0 -1
  285. package/dist/types/src/internal/projection/index.d.ts +0 -2
  286. package/dist/types/src/internal/projection/index.d.ts.map +0 -1
  287. package/dist/types/src/internal/proxy/reactive-object.d.ts +0 -15
  288. package/dist/types/src/internal/proxy/reactive-object.d.ts.map +0 -1
  289. package/dist/types/src/internal/query/index.d.ts +0 -2
  290. package/dist/types/src/internal/query/index.d.ts.map +0 -1
  291. package/dist/types/src/internal/query/query.d.ts.map +0 -1
  292. package/dist/types/src/internal/schema/stored-schema.d.ts +0 -13
  293. package/dist/types/src/internal/schema/stored-schema.d.ts.map +0 -1
  294. package/dist/types/src/internal/testing/index.d.ts +0 -3
  295. package/dist/types/src/internal/testing/index.d.ts.map +0 -1
  296. package/dist/types/src/internal/testing/types.d.ts +0 -455
  297. package/dist/types/src/internal/testing/types.d.ts.map +0 -1
  298. package/dist/types/src/internal/testing/utils.d.ts.map +0 -1
  299. package/dist/types/src/internal/types/types.d.ts +0 -79
  300. package/dist/types/src/internal/types/types.d.ts.map +0 -1
  301. package/dist/types/src/internal/types/types.test.d.ts +0 -2
  302. package/dist/types/src/internal/types/types.test.d.ts.map +0 -1
  303. package/dist/types/src/internal/types/util.d.ts +0 -5
  304. package/dist/types/src/internal/types/util.d.ts.map +0 -1
  305. package/dist/types/src/query/tag.d.ts +0 -18
  306. package/dist/types/src/query/tag.d.ts.map +0 -1
  307. package/dist/types/src/testing/echo-schema.d.ts +0 -7
  308. package/dist/types/src/testing/echo-schema.d.ts.map +0 -1
  309. package/dist/types/src/testing/types.d.ts +0 -113
  310. package/dist/types/src/testing/types.d.ts.map +0 -1
  311. package/src/internal/ast/annotation-helper.ts +0 -22
  312. package/src/internal/ast/annotations.ts +0 -212
  313. package/src/internal/ast/index.ts +0 -8
  314. package/src/internal/ast/types.ts +0 -17
  315. package/src/internal/json/index.ts +0 -5
  316. package/src/internal/object/accessors.ts +0 -115
  317. package/src/internal/object/entity.ts +0 -204
  318. package/src/internal/object/model.ts +0 -170
  319. package/src/internal/object/relation.ts +0 -24
  320. package/src/internal/object/typed-relation.ts +0 -85
  321. package/src/internal/object/typename.ts +0 -61
  322. package/src/internal/object/version.ts +0 -22
  323. package/src/internal/projection/index.ts +0 -5
  324. package/src/internal/query/index.ts +0 -5
  325. package/src/internal/schema/stored-schema.ts +0 -26
  326. package/src/internal/testing/index.ts +0 -6
  327. package/src/internal/testing/types.ts +0 -211
  328. package/src/internal/types/types.test.ts +0 -48
  329. package/src/internal/types/types.ts +0 -176
  330. package/src/internal/types/util.ts +0 -9
  331. package/src/query/tag.ts +0 -35
  332. package/src/test/api.test.ts +0 -180
  333. package/src/testing/echo-schema.ts +0 -39
  334. package/src/testing/types.ts +0 -91
  335. /package/dist/types/src/internal/{ast → annotations}/annotations.test.d.ts +0 -0
  336. /package/dist/types/src/internal/{json → json-schema}/annotations.d.ts +0 -0
  337. /package/dist/types/src/internal/{json → json-schema}/effect-schema.test.d.ts +0 -0
  338. /package/dist/types/src/internal/{json → json-schema}/json-schema.test.d.ts +0 -0
  339. /package/dist/types/src/internal/{projection → schema}/compose.d.ts +0 -0
  340. /package/dist/types/src/internal/{projection → schema}/compose.test.d.ts +0 -0
  341. /package/dist/types/src/{test → testing}/api.test.d.ts +0 -0
  342. /package/src/internal/{json → json-schema}/effect-schema.test.ts +0 -0
  343. /package/src/{internal/query/query.ts → query/types.ts} +0 -0
@@ -6,26 +6,23 @@ import { describe, expect, test } from 'vitest';
6
6
 
7
7
  import { DXN } from '@dxos/keys';
8
8
 
9
- import { EntityKind, getSchemaDXN, getSchemaTypename } from '../ast';
9
+ import { TestSchema } from '../../testing';
10
+ import { getSchemaDXN, getSchemaTypename, getTypeDXN, getTypename } from '../annotations';
11
+ import { RelationSourceId, RelationTargetId, getObjectDXN } from '../entities';
12
+ import { makeObject } from '../proxy';
10
13
  import { Ref, StaticRefResolver } from '../ref';
11
- import { Testing } from '../testing';
14
+ import { ATTR_TYPE, EntityKind, KindId, MetaId, TypeId, getMeta, getSchema } from '../types';
12
15
 
13
- import { getObjectDXN, getSchema } from './accessors';
14
- import { create } from './create';
16
+ import { createObject } from './create-object';
15
17
  import { objectFromJSON, objectToJSON } from './json-serializer';
16
- import { getMeta } from './meta';
17
- import { ATTR_TYPE, EntityKindId, MetaId, RelationSourceId, RelationTargetId, TypeId } from './model';
18
- import { getType, getTypename } from './typename';
19
18
 
20
19
  describe('Object JSON serializer', () => {
21
20
  test('should serialize and deserialize object', async () => {
22
- const contact = create(Testing.Contact, {
23
- name: 'John Doe',
24
- });
25
- getMeta(contact).keys.push({ id: '12345', source: 'crm.example.com' });
21
+ const contact = makeObject(TestSchema.Person, { name: 'Alice' });
22
+ getMeta(contact).keys.push({ id: '12345', source: 'example.com' });
26
23
 
27
- const task = create(Testing.Task, {
28
- title: 'Polish my shoes',
24
+ const task = createObject(TestSchema.Task, {
25
+ title: 'Fix the tests',
29
26
  assignee: Ref.make(contact),
30
27
  });
31
28
 
@@ -33,67 +30,65 @@ describe('Object JSON serializer', () => {
33
30
  const taskJson = objectToJSON(task);
34
31
 
35
32
  expect(contactJson.id).toBe(contact.id);
36
- expect(contactJson[ATTR_TYPE]).toEqual(getSchemaDXN(Testing.Contact)!.toString());
37
- expect(contactJson.name).toEqual('John Doe');
33
+ expect(contactJson[ATTR_TYPE]).toEqual(getSchemaDXN(TestSchema.Person)!.toString());
34
+ expect(contactJson.name).toEqual('Alice');
38
35
 
39
36
  expect(taskJson.id).toBe(task.id);
40
- expect(taskJson[ATTR_TYPE]).toEqual(getSchemaDXN(Testing.Task)!.toString());
41
- expect(taskJson.title).toEqual('Polish my shoes');
37
+ expect(taskJson[ATTR_TYPE]).toEqual(getSchemaDXN(TestSchema.Task)!.toString());
38
+ expect(taskJson.title).toEqual('Fix the tests');
42
39
  expect(taskJson.assignee).toEqual({ '/': DXN.fromLocalObjectId(contact.id).toString() });
43
40
 
44
41
  const refResolver = new StaticRefResolver()
45
- .addSchema(Testing.Contact)
46
- .addSchema(Testing.Task)
42
+ .addSchema(TestSchema.Person)
43
+ .addSchema(TestSchema.Task)
47
44
  .addObject(contact)
48
45
  .addObject(task);
49
46
 
50
- const contactFromJson = (await objectFromJSON(contactJson, { refResolver })) as Testing.Contact;
51
- const taskFromJson = (await objectFromJSON(taskJson, { refResolver })) as Testing.Task;
47
+ const contactFromJson = (await objectFromJSON(contactJson, { refResolver })) as TestSchema.Person;
48
+ const taskFromJson = (await objectFromJSON(taskJson, { refResolver })) as TestSchema.Task;
52
49
 
53
50
  expect(contactFromJson.id).toBe(contact.id);
54
- expect(contactFromJson.name).toBe('John Doe');
55
- expect((contactFromJson as any)[TypeId]).toEqual(getSchemaDXN(Testing.Contact));
56
- expect((contactFromJson as any)[EntityKindId]).toBe(EntityKind.Object);
51
+ expect(contactFromJson.name).toBe('Alice');
52
+ expect((contactFromJson as any)[TypeId]).toEqual(getSchemaDXN(TestSchema.Person));
53
+ expect((contactFromJson as any)[KindId]).toBe(EntityKind.Object);
57
54
  expect((contactFromJson as any)[RelationSourceId]).toBeUndefined();
58
55
  expect((contactFromJson as any)[RelationTargetId]).toBeUndefined();
59
56
  expect((contactFromJson as any)[MetaId]).toEqual({
60
57
  keys: [
61
58
  {
62
59
  id: '12345',
63
- source: 'crm.example.com',
60
+ source: 'example.com',
64
61
  },
65
62
  ],
66
63
  });
67
- expect(getType(contactFromJson)?.toString()).toBe(getSchemaDXN(Testing.Contact)!.toString());
68
- expect(getTypename(contactFromJson)).toBe(getSchemaTypename(Testing.Contact));
64
+ expect(getTypeDXN(contactFromJson)?.toString()).toBe(getSchemaDXN(TestSchema.Person)!.toString());
65
+ expect(getTypename(contactFromJson)).toBe(getSchemaTypename(TestSchema.Person));
69
66
  expect(getObjectDXN(contactFromJson)?.toString()).toEqual(getObjectDXN(contact)?.toString());
70
- expect(getSchema(contactFromJson)).toEqual(Testing.Contact);
67
+ expect(getSchema(contactFromJson)).toEqual(TestSchema.Person);
71
68
 
72
69
  expect(taskFromJson.id).toBe(task.id);
73
- expect(taskFromJson.title).toBe('Polish my shoes');
70
+ expect(taskFromJson.title).toBe('Fix the tests');
74
71
  expect(taskFromJson.assignee!.dxn).toEqual(DXN.fromLocalObjectId(contact.id));
75
72
  expect(taskFromJson.assignee!.target).toEqual(contact);
76
73
  expect(await taskFromJson.assignee!.load()).toEqual(contact);
77
- expect((taskFromJson as any)[TypeId]).toEqual(getSchemaDXN(Testing.Task));
78
- expect((taskFromJson as any)[EntityKindId]).toBe(EntityKind.Object);
74
+ expect((taskFromJson as any)[TypeId]).toEqual(getSchemaDXN(TestSchema.Task));
75
+ expect((taskFromJson as any)[KindId]).toBe(EntityKind.Object);
79
76
  expect((taskFromJson as any)[RelationSourceId]).toBeUndefined();
80
77
  expect((taskFromJson as any)[RelationTargetId]).toBeUndefined();
81
78
  expect((taskFromJson as any)[MetaId]).toEqual({ keys: [] });
82
- expect(getSchema(taskFromJson)).toEqual(Testing.Task);
79
+ expect(getSchema(taskFromJson)).toEqual(TestSchema.Task);
83
80
  });
84
81
 
85
82
  test('serialize with unresolved schema', async () => {
86
- const contact = create(Testing.Contact, {
87
- name: 'John Doe',
88
- });
83
+ const contact = createObject(TestSchema.Person, { name: 'Alice' });
89
84
  const contactJson = objectToJSON(contact);
90
85
  const contactFromJson: any = await objectFromJSON(contactJson);
91
86
 
92
87
  expect(contactFromJson.id).toBe(contact.id);
93
- expect(contactFromJson.name).toBe('John Doe');
88
+ expect(contactFromJson.name).toBe('Alice');
94
89
  expect(getSchema(contactFromJson)).toBeUndefined();
95
- expect(getTypename(contactFromJson)).toEqual(getSchemaTypename(Testing.Contact));
90
+ expect(getTypename(contactFromJson)).toEqual(getSchemaTypename(TestSchema.Person));
96
91
  expect(getObjectDXN(contactFromJson)).toEqual(getObjectDXN(contact));
97
- expect(getType(contactFromJson)).toEqual(getSchemaDXN(Testing.Contact));
92
+ expect(getTypeDXN(contactFromJson)).toEqual(getSchemaDXN(TestSchema.Person));
98
93
  });
99
94
  });
@@ -11,42 +11,51 @@ import { DXN, ObjectId } from '@dxos/keys';
11
11
  import { defineHiddenProperty } from '@dxos/live-object';
12
12
  import { assumeType, deepMapValues, visitValues } from '@dxos/util';
13
13
 
14
- import { EntityKind } from '../ast';
15
- import { Ref, type RefResolver, refFromEncodedReference, setRefResolver } from '../ref';
16
- import { type AnyEchoObject } from '../types';
17
-
18
- import { setSchema } from './accessors';
19
- import { ObjectMetaSchema } from './meta';
14
+ import { getTypeDXN, setTypename } from '../annotations';
20
15
  import {
21
16
  ATTR_DELETED,
22
- ATTR_META,
23
17
  ATTR_RELATION_SOURCE,
24
18
  ATTR_RELATION_TARGET,
25
19
  ATTR_SELF_DXN,
26
- ATTR_TYPE,
27
- EntityKindId,
28
- MetaId,
29
20
  type ObjectJSON,
30
21
  RelationSourceDXNId,
31
22
  RelationSourceId,
32
23
  RelationTargetDXNId,
33
24
  RelationTargetId,
34
25
  SelfDXNId,
26
+ assertObjectModel,
27
+ } from '../entities';
28
+ import { Ref, type RefResolver, refFromEncodedReference, setRefResolver } from '../ref';
29
+ import {
30
+ ATTR_META,
31
+ ATTR_TYPE,
32
+ type AnyEchoObject,
33
+ EntityKind,
34
+ KindId,
35
+ MetaId,
36
+ ObjectMetaSchema,
35
37
  TypeId,
36
- assertObjectModelShape,
37
- } from './model';
38
- import { getType, setTypename } from './typename';
38
+ setSchema,
39
+ } from '../types';
39
40
 
40
41
  type DeepReplaceRef<T> =
41
- T extends Ref<any> ? EncodedReference : T extends object ? { [K in keyof T]: DeepReplaceRef<T[K]> } : T;
42
-
43
- type SerializedObject<T extends { id: string }> = { [K in keyof T]: DeepReplaceRef<T[K]> } & ObjectJSON;
42
+ T extends Ref<any>
43
+ ? EncodedReference
44
+ : T extends object
45
+ ? {
46
+ [K in keyof T]: DeepReplaceRef<T[K]>;
47
+ }
48
+ : T;
49
+
50
+ type SerializedObject<T extends { id: string }> = {
51
+ [K in keyof T]: DeepReplaceRef<T[K]>;
52
+ } & ObjectJSON;
44
53
 
45
54
  /**
46
55
  * Converts object to it's JSON representation.
47
56
  */
48
57
  export const objectToJSON = <T extends AnyEchoObject>(obj: T): SerializedObject<T> => {
49
- const typename = getType(obj)?.toString();
58
+ const typename = getTypeDXN(obj)?.toString();
50
59
  invariant(typename && typeof typename === 'string');
51
60
  return typedJsonSerializer.call(obj);
52
61
  };
@@ -55,7 +64,6 @@ export const objectToJSON = <T extends AnyEchoObject>(obj: T): SerializedObject<
55
64
  * Creates an object from it's json representation.
56
65
  * Performs schema validation.
57
66
  * References and schema will be resolvable if the `refResolver` is provided.
58
- *
59
67
  * The function need to be async to support resolving the schema as well as the relation endpoints.
60
68
  */
61
69
  export const objectFromJSON = async (
@@ -82,7 +90,6 @@ export const objectFromJSON = async (
82
90
  }
83
91
 
84
92
  invariant(ObjectId.isValid(obj.id), 'Invalid object id');
85
-
86
93
  setTypename(obj, type);
87
94
  if (schema) {
88
95
  setSchema(obj, schema);
@@ -94,25 +101,21 @@ export const objectFromJSON = async (
94
101
  const sourceDxn: DXN = DXN.parse(jsonData[ATTR_RELATION_SOURCE] ?? raise(new TypeError('Missing relation source')));
95
102
  const targetDxn: DXN = DXN.parse(jsonData[ATTR_RELATION_TARGET] ?? raise(new TypeError('Missing relation target')));
96
103
 
97
- // TODO(dmaretskyi): Async!
98
104
  const source = (await refResolver?.resolve(sourceDxn)) as AnyEchoObject | undefined;
99
105
  const target = (await refResolver?.resolve(targetDxn)) as AnyEchoObject | undefined;
100
106
 
101
- defineHiddenProperty(obj, EntityKindId, EntityKind.Relation);
107
+ defineHiddenProperty(obj, KindId, EntityKind.Relation);
102
108
  defineHiddenProperty(obj, RelationSourceDXNId, sourceDxn);
103
109
  defineHiddenProperty(obj, RelationTargetDXNId, targetDxn);
104
110
  defineHiddenProperty(obj, RelationSourceId, source);
105
111
  defineHiddenProperty(obj, RelationTargetId, target);
106
112
  } else {
107
- defineHiddenProperty(obj, EntityKindId, EntityKind.Object);
113
+ defineHiddenProperty(obj, KindId, EntityKind.Object);
108
114
  }
109
115
 
110
116
  if (typeof jsonData[ATTR_META] === 'object') {
111
117
  const meta = await ObjectMetaSchema.pipe(Schema.decodeUnknownPromise)(jsonData[ATTR_META]);
112
-
113
- // Defensive programming.
114
118
  invariant(Array.isArray(meta.keys));
115
-
116
119
  defineHiddenProperty(obj, MetaId, meta);
117
120
  }
118
121
 
@@ -120,13 +123,13 @@ export const objectFromJSON = async (
120
123
  defineHiddenProperty(obj, SelfDXNId, dxn);
121
124
  }
122
125
 
123
- assertObjectModelShape(obj);
126
+ assertObjectModel(obj);
124
127
  invariant((obj as any)[ATTR_TYPE] === undefined, 'Invalid object model');
125
- invariant((obj as any)[ATTR_SELF_DXN] === undefined, 'Invalid object model');
128
+ invariant((obj as any)[ATTR_META] === undefined, 'Invalid object model');
126
129
  invariant((obj as any)[ATTR_DELETED] === undefined, 'Invalid object model');
130
+ invariant((obj as any)[ATTR_SELF_DXN] === undefined, 'Invalid object model');
127
131
  invariant((obj as any)[ATTR_RELATION_SOURCE] === undefined, 'Invalid object model');
128
132
  invariant((obj as any)[ATTR_RELATION_TARGET] === undefined, 'Invalid object model');
129
- invariant((obj as any)[ATTR_META] === undefined, 'Invalid object model');
130
133
  return obj;
131
134
  };
132
135
 
@@ -135,30 +138,31 @@ const decodeGeneric = (jsonData: unknown, options: { refResolver?: RefResolver }
135
138
  [ATTR_TYPE]: _type,
136
139
  [ATTR_META]: _meta,
137
140
  [ATTR_DELETED]: _deleted,
141
+ [ATTR_SELF_DXN]: _selfDxn,
138
142
  [ATTR_RELATION_SOURCE]: _relationSource,
139
143
  [ATTR_RELATION_TARGET]: _relationTarget,
140
- [ATTR_SELF_DXN]: _selfDxn,
141
144
  ...props
142
145
  } = jsonData as any;
143
146
 
144
- return deepMapValues(props, (value, recurse) => {
147
+ return deepMapValues(props, (value, visitor) => {
145
148
  if (isEncodedReference(value)) {
146
149
  return refFromEncodedReference(value, options.refResolver);
147
150
  }
148
- return recurse(value);
151
+
152
+ return visitor(value);
149
153
  });
150
154
  };
151
155
 
152
156
  export const setRefResolverOnData = (obj: AnyEchoObject, refResolver: RefResolver) => {
153
- const go = (value: unknown) => {
157
+ const visitor = (value: unknown) => {
154
158
  if (Ref.isRef(value)) {
155
159
  setRefResolver(value, refResolver);
156
160
  } else {
157
- visitValues(value, go);
161
+ visitValues(value, visitor);
158
162
  }
159
163
  };
160
164
 
161
- go(obj);
165
+ visitor(obj);
162
166
  };
163
167
 
164
168
  export const attachTypedJsonSerializer = (obj: any) => {
@@ -187,6 +191,10 @@ const typedJsonSerializer = function (this: any) {
187
191
  result[ATTR_TYPE] = this[TypeId].toString();
188
192
  }
189
193
 
194
+ if (this[MetaId]) {
195
+ result[ATTR_META] = serializeMeta(this[MetaId]);
196
+ }
197
+
190
198
  if (this[SelfDXNId]) {
191
199
  result[ATTR_SELF_DXN] = this[SelfDXNId].toString();
192
200
  }
@@ -202,10 +210,6 @@ const typedJsonSerializer = function (this: any) {
202
210
  result[ATTR_RELATION_TARGET] = targetDXN.toString();
203
211
  }
204
212
 
205
- if (this[MetaId]) {
206
- result[ATTR_META] = serializeMeta(this[MetaId]);
207
- }
208
-
209
213
  Object.assign(result, serializeData(rest));
210
214
  return result;
211
215
  };
@@ -216,6 +220,7 @@ const serializeData = (data: unknown) => {
216
220
  // TODO(dmaretskyi): Should this be configurable?
217
221
  return value.noInline().encode();
218
222
  }
223
+
219
224
  return recurse(value);
220
225
  });
221
226
  };
@@ -7,7 +7,7 @@ import * as SchemaAST from 'effect/SchemaAST';
7
7
 
8
8
  import { invariant } from '@dxos/invariant';
9
9
 
10
- import { SchemaId } from './model';
10
+ import { SchemaId } from '../types';
11
11
 
12
12
  // TODO(burdon): Reconcile with @dxos/effect visit().
13
13
 
@@ -46,7 +46,7 @@ export class SchemaValidator {
46
46
  }
47
47
 
48
48
  return type.ast.annotations[annotation] != null;
49
- } catch (err) {
49
+ } catch {
50
50
  return false;
51
51
  }
52
52
  }
@@ -238,4 +238,5 @@ export const checkIdNotPresentOnSchema = (schema: Schema.Schema<any, any, any>)
238
238
  }
239
239
  };
240
240
 
241
+ // TODO(burdon): Reconcile with JsonPath.
241
242
  type KeyPath = readonly (string | number)[];
@@ -15,7 +15,7 @@ class Organization extends TypedObject({
15
15
  name: Schema.String,
16
16
  }) {}
17
17
 
18
- describe('EchoObject class DSL', () => {
18
+ describe('EchoObjectSchema class DSL', () => {
19
19
  test('type is a valid schema', async () => {
20
20
  expect(Schema.isSchema(Organization)).to.be.true;
21
21
  });
@@ -3,11 +3,19 @@
3
3
  //
4
4
 
5
5
  import * as Schema from 'effect/Schema';
6
+ import * as SchemaAST from 'effect/SchemaAST';
6
7
 
7
8
  import { invariant } from '@dxos/invariant';
8
9
 
9
- import { EntityKind, SchemaVersion, type TypeAnnotation, TypeAnnotationId, type TypeMeta, Typename } from '../ast';
10
- import { type HasId } from '../types';
10
+ import {
11
+ type TypeAnnotation,
12
+ TypeAnnotationId,
13
+ type TypeMeta,
14
+ TypenameSchema,
15
+ VersionSchema,
16
+ makeTypeJsonSchemaAnnotation,
17
+ } from '../annotations';
18
+ import { EntityKind, type HasId } from '../types';
11
19
 
12
20
  import { type TypedObjectFields, type TypedObjectOptions, makeTypedEntityClass } from './common';
13
21
 
@@ -44,8 +52,8 @@ export const TypedObject = ({
44
52
  version: versionParam,
45
53
  disableValidation,
46
54
  }: TypedObjectProps) => {
47
- const typename = Typename.make(typenameParam, { disableValidation });
48
- const version = SchemaVersion.make(versionParam, { disableValidation });
55
+ const typename = TypenameSchema.make(typenameParam, { disableValidation });
56
+ const version = VersionSchema.make(versionParam, { disableValidation });
49
57
 
50
58
  /**
51
59
  * Return class definition factory.
@@ -69,6 +77,11 @@ export const TypedObject = ({
69
77
  invariant(typeof EntityKind.Object === 'string');
70
78
  const annotatedSchema = typeSchema.annotations({
71
79
  [TypeAnnotationId]: { kind: EntityKind.Object, typename, version } satisfies TypeAnnotation,
80
+ [SchemaAST.JSONSchemaAnnotationId]: makeTypeJsonSchemaAnnotation({
81
+ kind: EntityKind.Object,
82
+ typename,
83
+ version,
84
+ }),
72
85
  });
73
86
 
74
87
  /**
@@ -7,29 +7,39 @@ import { inspect } from 'node:util';
7
7
  import { describe, expect, test } from 'vitest';
8
8
 
9
9
  import { registerSignalsRuntime } from '@dxos/echo-signals';
10
- import type { Live } from '@dxos/live-object';
11
- import { objectData } from '@dxos/live-object';
10
+ import { type Live, objectData } from '@dxos/live-object';
12
11
  import { isNode } from '@dxos/util';
13
12
 
14
- import { ATTR_META } from '..';
15
- import { Testing, updateCounter } from '../testing';
13
+ import { TestSchema, updateCounter } from '../../testing';
14
+ import { createObject } from '../object';
15
+ import { ATTR_META } from '../types';
16
16
 
17
- import { live } from './reactive-object';
17
+ import { makeObject } from './make-object';
18
18
 
19
19
  registerSignalsRuntime();
20
20
 
21
- const TEST_OBJECT: Testing.TestSchema = {
21
+ describe('proxy', () => {
22
+ test.skipIf(!isNode())('inspect', ({ expect }) => {
23
+ const obj = createObject(TestSchema.Message, { timestamp: new Date().toISOString() });
24
+ const str = inspect(obj, { colors: true });
25
+ expect(str).to.exist;
26
+ });
27
+ });
28
+
29
+ const TEST_OBJECT: TestSchema.ExampleSchema = {
22
30
  string: 'foo',
23
31
  number: 42,
24
32
  boolean: true,
25
33
  null: null,
26
34
  stringArray: ['1', '2', '3'],
27
- object: { field: 'bar' },
35
+ nested: {
36
+ field: 'bar',
37
+ },
28
38
  };
29
39
 
30
- for (const schema of [undefined, Testing.TestSchemaWithClass]) {
31
- const createObject = (props: Partial<Testing.TestSchemaWithClass> = {}): Live<Testing.TestSchemaWithClass> => {
32
- return schema == null ? (live(props) as Testing.TestSchemaWithClass) : live(schema, props);
40
+ for (const schema of [undefined, TestSchema.ExampleSchema]) {
41
+ const createObject = (props: Partial<TestSchema.ExampleSchema> = {}): Live<TestSchema.ExampleSchema> => {
42
+ return schema == null ? (makeObject(props) as TestSchema.ExampleSchema) : makeObject(schema, props);
33
43
  };
34
44
 
35
45
  describe(`Non-echo specific proxy properties${schema == null ? '' : ' with schema'}`, () => {
@@ -51,10 +61,10 @@ for (const schema of [undefined, Testing.TestSchemaWithClass]) {
51
61
  test('can assign class instances', () => {
52
62
  const obj = createObject();
53
63
 
54
- const classInstance = new Testing.TestClass();
64
+ const classInstance = new TestSchema.TestClass();
55
65
  obj.classInstance = classInstance;
56
66
  expect(obj.classInstance!.field).to.eq('value');
57
- expect(obj.classInstance instanceof Testing.TestClass).to.eq(true);
67
+ expect(obj.classInstance instanceof TestSchema.TestClass).to.eq(true);
58
68
  expect(obj.classInstance === classInstance).to.be.true;
59
69
 
60
70
  obj.classInstance!.field = 'baz';
@@ -63,7 +73,7 @@ for (const schema of [undefined, Testing.TestSchemaWithClass]) {
63
73
 
64
74
  describe('class instance equality', () => {
65
75
  test('toJSON', () => {
66
- const original = { classInstance: new Testing.TestClass() };
76
+ const original = { classInstance: new TestSchema.TestClass() };
67
77
  const reactive = createObject(original);
68
78
  if (!schema) {
69
79
  expect(JSON.stringify(reactive)).to.eq(JSON.stringify(original));
@@ -80,14 +90,14 @@ for (const schema of [undefined, Testing.TestSchemaWithClass]) {
80
90
  });
81
91
 
82
92
  test('chai deep equal works', () => {
83
- const original = { classInstance: new Testing.TestClass() };
93
+ const original = { classInstance: new TestSchema.TestClass() };
84
94
  const reactive = createObject(original);
85
95
  expect(reactive).to.deep.eq(original);
86
96
  expect(reactive).to.not.deep.eq({ ...original, number: 11 });
87
97
  });
88
98
 
89
99
  test('jest deep equal works', () => {
90
- const original = { classInstance: new Testing.TestClass() };
100
+ const original = { classInstance: new TestSchema.TestClass() };
91
101
  const reactive = createObject(original);
92
102
  expect(reactive).toEqual(original);
93
103
  expect(reactive).not.toEqual({ ...original, number: 11 });
@@ -96,7 +106,7 @@ for (const schema of [undefined, Testing.TestSchemaWithClass]) {
96
106
 
97
107
  describe('signal updates', () => {
98
108
  test('not in nested class instances', () => {
99
- const obj = createObject({ classInstance: new Testing.TestClass() });
109
+ const obj = createObject({ classInstance: new TestSchema.TestClass() });
100
110
  using updates = updateCounter(() => {
101
111
  obj.classInstance!.field;
102
112
  });
@@ -112,7 +122,7 @@ for (const schema of [undefined, Testing.TestSchemaWithClass]) {
112
122
  describe('getters', () => {
113
123
  test('add getter to object', () => {
114
124
  let value = 'foo';
115
- const obj = live({
125
+ const obj = makeObject({
116
126
  get getter() {
117
127
  return value;
118
128
  },
@@ -124,11 +134,11 @@ describe('getters', () => {
124
134
  });
125
135
 
126
136
  test('signal updates', () => {
127
- const innerObj = live({
137
+ const innerObj = makeObject({
128
138
  string: 'bar',
129
139
  });
130
140
 
131
- const obj = live({
141
+ const obj = makeObject({
132
142
  field: 1,
133
143
  get getter() {
134
144
  return innerObj.string;
@@ -150,7 +160,7 @@ describe('getters', () => {
150
160
 
151
161
  test('getter for array', () => {
152
162
  const value = [1];
153
- const obj = live({
163
+ const obj = makeObject({
154
164
  get getter() {
155
165
  return value;
156
166
  },
@@ -0,0 +1,6 @@
1
+ //
2
+ // Copyright 2025 DXOS.org
3
+ //
4
+
5
+ export * from './make-object';
6
+ export * from './typed-handler';
@@ -13,32 +13,37 @@ import {
13
13
  isValidProxyTarget,
14
14
  } from '@dxos/live-object';
15
15
 
16
- import { getTypeAnnotation } from '../ast';
17
- import { EntityKindId, Expando, MetaId, type ObjectMeta, ObjectMetaSchema, attachTypedJsonSerializer } from '../object';
18
- import type { BaseObject, CreationProps } from '../types';
16
+ import { getTypeAnnotation } from '../annotations';
17
+ import { Expando } from '../entities';
18
+ import { attachTypedJsonSerializer } from '../object';
19
+ import { type AnyProperties, KindId, MetaId, type ObjectMeta, ObjectMetaSchema } from '../types';
19
20
 
20
21
  import { TypedReactiveHandler, prepareTypedTarget } from './typed-handler';
21
22
 
23
+ /**
24
+ *
25
+ */
26
+ // TODO(burdon): Make internal
27
+ export type MakeObjectProps<T extends AnyProperties> = Omit<T, 'id' | KindId>;
28
+
22
29
  /**
23
30
  * Creates a reactive object from a plain Javascript object.
24
31
  * Optionally provides a TS-effect schema.
25
- *
26
- * @depreacted Use `Obj.make`.
27
32
  */
33
+ // TODO(burdon): Make internal
28
34
  // TODO(dmaretskyi): Deep mutability.
29
35
  // TODO(dmaretskyi): Invert generics (generic over schema) to have better error messages.
30
36
  // TODO(dmaretskyi): Could mutate original object making it unusable.
31
- // TODO(burdon): Use Schema.make() to handle defaults?
32
- export const live: {
33
- <T extends BaseObject>(obj: T): Live<T>;
34
- <T extends BaseObject>(
37
+ export const makeObject: {
38
+ <T extends AnyProperties>(obj: T): Live<T>;
39
+ <T extends AnyProperties>(
35
40
  schema: Schema.Schema<T, any, never>,
36
- obj: NoInfer<CreationProps<T>>,
41
+ obj: NoInfer<MakeObjectProps<T>>,
37
42
  meta?: ObjectMeta,
38
43
  ): Live<T>;
39
- } = <T extends BaseObject>(
44
+ } = <T extends AnyProperties>(
40
45
  objOrSchema: Schema.Schema<T, any> | T,
41
- obj?: CreationProps<T>,
46
+ obj?: MakeObjectProps<T>,
42
47
  meta?: ObjectMeta,
43
48
  ): Live<T> => {
44
49
  // TODO(dmaretskyi): Remove Expando special case.
@@ -51,7 +56,7 @@ export const live: {
51
56
  }
52
57
  };
53
58
 
54
- const createReactiveObject = <T extends BaseObject>(
59
+ const createReactiveObject = <T extends AnyProperties>(
55
60
  obj: T,
56
61
  meta?: ObjectMeta,
57
62
  schema?: Schema.Schema<T>,
@@ -68,7 +73,7 @@ const createReactiveObject = <T extends BaseObject>(
68
73
  setIdOnTarget(obj);
69
74
  }
70
75
  if (annotation) {
71
- defineHiddenProperty(obj, EntityKindId, annotation.kind);
76
+ defineHiddenProperty(obj, KindId, annotation.kind);
72
77
  }
73
78
  initMeta(obj, meta);
74
79
  prepareTypedTarget(obj, schema);
@@ -6,8 +6,9 @@ import * as Schema from 'effect/Schema';
6
6
  import * as SchemaAST from 'effect/SchemaAST';
7
7
  import { describe, expect, test } from 'vitest';
8
8
 
9
- import { PropertyMeta, TypedObject, getPropertyMetaAnnotation, getTypeAnnotation } from '..';
10
- import { createEchoSchema } from '../../testing/echo-schema';
9
+ import { createEchoSchema } from '../../testing';
10
+ import { PropertyMeta, getPropertyMetaAnnotation, getTypeAnnotation } from '../annotations';
11
+ import { TypedObject } from '../object';
11
12
 
12
13
  // TODO(dmaretskyi): Comment.
13
14
  class EmptySchemaType extends TypedObject({
@@ -95,7 +96,7 @@ describe('dynamic schema', () => {
95
96
  test('updates typename', async ({ expect }) => {
96
97
  // Create schema with some fields and annotations.
97
98
  const registered = createEchoSchema(EmptySchemaType);
98
- const originalVersion = registered.storedSchema.version;
99
+ const originalVersion = registered.persistentSchema.version;
99
100
  registered.addFields({
100
101
  name: Schema.String.pipe(PropertyMeta('test', { maxLength: 10 })),
101
102
  age: Schema.Number,
@@ -111,7 +112,7 @@ describe('dynamic schema', () => {
111
112
  expect(registered.jsonSchema.typename).toBe(newTypename1);
112
113
 
113
114
  // Version preservation check.
114
- expect(registered.storedSchema.version).toBe(originalVersion);
115
+ expect(registered.persistentSchema.version).toBe(originalVersion);
115
116
 
116
117
  // Field preservation check.
117
118
  const properties = registered.getProperties();