@dxos/echo 0.8.4-main.ae835ea → 0.8.4-main.bc674ce

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 (532) hide show
  1. package/README.md +1 -2
  2. package/dist/lib/neutral/Annotation.mjs +32 -0
  3. package/dist/lib/neutral/Database.mjs +17 -0
  4. package/dist/lib/neutral/Entity.mjs +51 -0
  5. package/dist/lib/neutral/Err.mjs +10 -0
  6. package/dist/lib/neutral/Filter.mjs +61 -0
  7. package/dist/lib/neutral/Format.mjs +66 -0
  8. package/dist/lib/neutral/JsonSchema.mjs +19 -0
  9. package/dist/lib/neutral/JsonSchema.mjs.map +7 -0
  10. package/dist/lib/neutral/Key.mjs +12 -0
  11. package/dist/lib/neutral/Key.mjs.map +7 -0
  12. package/dist/lib/neutral/Obj.mjs +90 -0
  13. package/dist/lib/neutral/Obj.mjs.map +7 -0
  14. package/dist/lib/neutral/Order.mjs +12 -0
  15. package/dist/lib/neutral/Order.mjs.map +7 -0
  16. package/dist/lib/neutral/Query.mjs +26 -0
  17. package/dist/lib/neutral/Query.mjs.map +7 -0
  18. package/dist/lib/neutral/QueryResult.mjs +2 -0
  19. package/dist/lib/neutral/QueryResult.mjs.map +7 -0
  20. package/dist/lib/neutral/Ref.mjs +22 -0
  21. package/dist/lib/neutral/Ref.mjs.map +7 -0
  22. package/dist/lib/neutral/Relation.mjs +84 -0
  23. package/dist/lib/neutral/Relation.mjs.map +7 -0
  24. package/dist/lib/neutral/SchemaRegistry.mjs +2 -0
  25. package/dist/lib/neutral/SchemaRegistry.mjs.map +7 -0
  26. package/dist/lib/neutral/Tag.mjs +25 -0
  27. package/dist/lib/neutral/Tag.mjs.map +7 -0
  28. package/dist/lib/neutral/Type.mjs +47 -0
  29. package/dist/lib/neutral/Type.mjs.map +7 -0
  30. package/dist/lib/neutral/chunk-2MTHJ5UW.mjs +203 -0
  31. package/dist/lib/neutral/chunk-2MTHJ5UW.mjs.map +7 -0
  32. package/dist/lib/neutral/chunk-3ZEAZF7T.mjs +23 -0
  33. package/dist/lib/neutral/chunk-3ZEAZF7T.mjs.map +7 -0
  34. package/dist/lib/neutral/chunk-4L6DOFXP.mjs +7 -0
  35. package/dist/lib/neutral/chunk-4L6DOFXP.mjs.map +7 -0
  36. package/dist/lib/neutral/chunk-4TT624YA.mjs +73 -0
  37. package/dist/lib/neutral/chunk-4TT624YA.mjs.map +7 -0
  38. package/dist/lib/neutral/chunk-62DWJ6CE.mjs +402 -0
  39. package/dist/lib/neutral/chunk-62DWJ6CE.mjs.map +7 -0
  40. package/dist/lib/neutral/chunk-6QPSGMEF.mjs +97 -0
  41. package/dist/lib/neutral/chunk-6QPSGMEF.mjs.map +7 -0
  42. package/dist/lib/neutral/chunk-ANHVGJI4.mjs +21 -0
  43. package/dist/lib/neutral/chunk-ANHVGJI4.mjs.map +7 -0
  44. package/dist/lib/neutral/chunk-CUDIBUM4.mjs +282 -0
  45. package/dist/lib/neutral/chunk-CUDIBUM4.mjs.map +7 -0
  46. package/dist/lib/neutral/chunk-HMOXCO27.mjs +40 -0
  47. package/dist/lib/neutral/chunk-HMOXCO27.mjs.map +7 -0
  48. package/dist/lib/neutral/chunk-IP2GHXWA.mjs +56 -0
  49. package/dist/lib/neutral/chunk-IP2GHXWA.mjs.map +7 -0
  50. package/dist/lib/neutral/chunk-J5LGTIGS.mjs +10 -0
  51. package/dist/lib/neutral/chunk-J5LGTIGS.mjs.map +7 -0
  52. package/dist/lib/neutral/chunk-KRHDMXSU.mjs +132 -0
  53. package/dist/lib/neutral/chunk-KRHDMXSU.mjs.map +7 -0
  54. package/dist/lib/neutral/chunk-NWUO5FKZ.mjs +39 -0
  55. package/dist/lib/neutral/chunk-NWUO5FKZ.mjs.map +7 -0
  56. package/dist/lib/neutral/chunk-OMUPQMLR.mjs +7 -0
  57. package/dist/lib/neutral/chunk-OMUPQMLR.mjs.map +7 -0
  58. package/dist/lib/neutral/chunk-ROKO4RKJ.mjs +42 -0
  59. package/dist/lib/neutral/chunk-ROKO4RKJ.mjs.map +7 -0
  60. package/dist/lib/neutral/chunk-RPB6V4BE.mjs +38 -0
  61. package/dist/lib/neutral/chunk-RPB6V4BE.mjs.map +7 -0
  62. package/dist/lib/neutral/chunk-SU2LVM7J.mjs +3846 -0
  63. package/dist/lib/neutral/chunk-SU2LVM7J.mjs.map +7 -0
  64. package/dist/lib/neutral/chunk-VB5HVDCA.mjs +287 -0
  65. package/dist/lib/neutral/chunk-VB5HVDCA.mjs.map +7 -0
  66. package/dist/lib/neutral/chunk-VR4A4WGG.mjs +249 -0
  67. package/dist/lib/neutral/chunk-VR4A4WGG.mjs.map +7 -0
  68. package/dist/lib/neutral/chunk-X2MPMYYN.mjs +13 -0
  69. package/dist/lib/neutral/chunk-X2MPMYYN.mjs.map +7 -0
  70. package/dist/lib/neutral/chunk-XK5OUUBY.mjs +157 -0
  71. package/dist/lib/neutral/chunk-XK5OUUBY.mjs.map +7 -0
  72. package/dist/lib/neutral/chunk-XMIDBDE6.mjs +142 -0
  73. package/dist/lib/neutral/chunk-XMIDBDE6.mjs.map +7 -0
  74. package/dist/lib/neutral/chunk-YQYMWZAD.mjs +67 -0
  75. package/dist/lib/neutral/chunk-YQYMWZAD.mjs.map +7 -0
  76. package/dist/lib/neutral/index.mjs +84 -0
  77. package/dist/lib/neutral/index.mjs.map +7 -0
  78. package/dist/lib/{node-esm → neutral}/internal/index.mjs +245 -125
  79. package/dist/lib/neutral/internal/index.mjs.map +7 -0
  80. package/dist/lib/neutral/meta.json +1 -0
  81. package/dist/lib/neutral/testing/index.mjs +366 -0
  82. package/dist/lib/neutral/testing/index.mjs.map +7 -0
  83. package/dist/types/src/Annotation.d.ts +2 -0
  84. package/dist/types/src/Annotation.d.ts.map +1 -0
  85. package/dist/types/src/Database.d.ts +194 -0
  86. package/dist/types/src/Database.d.ts.map +1 -0
  87. package/dist/types/src/Entity.d.ts +142 -0
  88. package/dist/types/src/Entity.d.ts.map +1 -0
  89. package/dist/types/src/Entity.test.d.ts +2 -0
  90. package/dist/types/src/Entity.test.d.ts.map +1 -0
  91. package/dist/types/src/{errors.d.ts → Err.d.ts} +23 -31
  92. package/dist/types/src/Err.d.ts.map +1 -0
  93. package/dist/types/src/Filter.d.ts +120 -0
  94. package/dist/types/src/Filter.d.ts.map +1 -0
  95. package/dist/types/src/Format.d.ts +4 -0
  96. package/dist/types/src/Format.d.ts.map +1 -0
  97. package/dist/types/src/Hypergraph.d.ts +60 -0
  98. package/dist/types/src/Hypergraph.d.ts.map +1 -0
  99. package/dist/types/src/JsonSchema.d.ts +9 -0
  100. package/dist/types/src/JsonSchema.d.ts.map +1 -0
  101. package/dist/types/src/Key.d.ts +1 -0
  102. package/dist/types/src/Key.d.ts.map +1 -1
  103. package/dist/types/src/Obj.d.ts +302 -99
  104. package/dist/types/src/Obj.d.ts.map +1 -1
  105. package/dist/types/src/Obj.test.d.ts +2 -0
  106. package/dist/types/src/Obj.test.d.ts.map +1 -0
  107. package/dist/types/src/Order.d.ts +16 -0
  108. package/dist/types/src/Order.d.ts.map +1 -0
  109. package/dist/types/src/Query.d.ts +115 -0
  110. package/dist/types/src/Query.d.ts.map +1 -0
  111. package/dist/types/src/Query.test.d.ts +2 -0
  112. package/dist/types/src/Query.test.d.ts.map +1 -0
  113. package/dist/types/src/QueryResult.d.ts +80 -0
  114. package/dist/types/src/QueryResult.d.ts.map +1 -0
  115. package/dist/types/src/Ref.d.ts +13 -11
  116. package/dist/types/src/Ref.d.ts.map +1 -1
  117. package/dist/types/src/Relation.d.ts +242 -22
  118. package/dist/types/src/Relation.d.ts.map +1 -1
  119. package/dist/types/src/Relation.test.d.ts +2 -0
  120. package/dist/types/src/Relation.test.d.ts.map +1 -0
  121. package/dist/types/src/SchemaRegistry.d.ts +84 -0
  122. package/dist/types/src/SchemaRegistry.d.ts.map +1 -0
  123. package/dist/types/src/Tag.d.ts +17 -0
  124. package/dist/types/src/Tag.d.ts.map +1 -0
  125. package/dist/types/src/Type.d.ts +225 -72
  126. package/dist/types/src/Type.d.ts.map +1 -1
  127. package/dist/types/src/Type.test.d.ts +2 -0
  128. package/dist/types/src/Type.test.d.ts.map +1 -0
  129. package/dist/types/src/index.d.ts +15 -5
  130. package/dist/types/src/index.d.ts.map +1 -1
  131. package/dist/types/src/internal/annotations/annotations.d.ts +170 -0
  132. package/dist/types/src/internal/annotations/annotations.d.ts.map +1 -0
  133. package/dist/types/src/internal/annotations/annotations.test.d.ts.map +1 -0
  134. package/dist/types/src/internal/annotations/index.d.ts +3 -0
  135. package/dist/types/src/internal/annotations/index.d.ts.map +1 -0
  136. package/dist/types/src/internal/annotations/util.d.ts +27 -0
  137. package/dist/types/src/internal/annotations/util.d.ts.map +1 -0
  138. package/dist/types/src/internal/api/annotations.d.ts +23 -0
  139. package/dist/types/src/internal/api/annotations.d.ts.map +1 -0
  140. package/dist/types/src/internal/api/entity.d.ts +13 -0
  141. package/dist/types/src/internal/api/entity.d.ts.map +1 -0
  142. package/dist/types/src/internal/api/index.d.ts +15 -0
  143. package/dist/types/src/internal/api/index.d.ts.map +1 -0
  144. package/dist/types/src/internal/api/meta.d.ts +42 -0
  145. package/dist/types/src/internal/api/meta.d.ts.map +1 -0
  146. package/dist/types/src/internal/api/sorting.d.ts +24 -0
  147. package/dist/types/src/internal/api/sorting.d.ts.map +1 -0
  148. package/dist/types/src/internal/api/version.d.ts +42 -0
  149. package/dist/types/src/internal/api/version.d.ts.map +1 -0
  150. package/dist/types/src/internal/entities/entity.d.ts +20 -0
  151. package/dist/types/src/internal/entities/entity.d.ts.map +1 -0
  152. package/dist/types/src/internal/entities/index.d.ts +6 -0
  153. package/dist/types/src/internal/entities/index.d.ts.map +1 -0
  154. package/dist/types/src/internal/entities/model.d.ts +77 -0
  155. package/dist/types/src/internal/entities/model.d.ts.map +1 -0
  156. package/dist/types/src/internal/entities/object.d.ts +18 -0
  157. package/dist/types/src/internal/entities/object.d.ts.map +1 -0
  158. package/dist/types/src/internal/entities/relation.d.ts +62 -0
  159. package/dist/types/src/internal/entities/relation.d.ts.map +1 -0
  160. package/dist/types/src/internal/entities/util.d.ts +2 -0
  161. package/dist/types/src/internal/entities/util.d.ts.map +1 -0
  162. package/dist/types/src/internal/formats/format.d.ts +4 -2
  163. package/dist/types/src/internal/formats/format.d.ts.map +1 -1
  164. package/dist/types/src/internal/formats/select.d.ts +6 -4
  165. package/dist/types/src/internal/formats/select.d.ts.map +1 -1
  166. package/dist/types/src/internal/formats/string.d.ts +4 -0
  167. package/dist/types/src/internal/formats/string.d.ts.map +1 -1
  168. package/dist/types/src/internal/formats/types.d.ts +13 -9
  169. package/dist/types/src/internal/formats/types.d.ts.map +1 -1
  170. package/dist/types/src/internal/index.d.ts +7 -10
  171. package/dist/types/src/internal/index.d.ts.map +1 -1
  172. package/dist/types/src/internal/json-schema/annotations.d.ts.map +1 -0
  173. package/dist/types/src/internal/json-schema/effect-schema.test.d.ts.map +1 -0
  174. package/dist/types/src/internal/json-schema/index.d.ts +2 -0
  175. package/dist/types/src/internal/json-schema/index.d.ts.map +1 -1
  176. package/dist/types/src/internal/json-schema/json-schema-normalize.d.ts.map +1 -1
  177. package/dist/types/src/internal/json-schema/json-schema-type.d.ts +130 -29
  178. package/dist/types/src/internal/json-schema/json-schema-type.d.ts.map +1 -1
  179. package/dist/types/src/internal/{json → json-schema}/json-schema.d.ts +4 -2
  180. package/dist/types/src/internal/json-schema/json-schema.d.ts.map +1 -0
  181. package/dist/types/src/internal/json-schema/json-schema.test.d.ts.map +1 -0
  182. package/dist/types/src/internal/object/clone.d.ts +8 -0
  183. package/dist/types/src/internal/object/clone.d.ts.map +1 -0
  184. package/dist/types/src/internal/object/common.d.ts.map +1 -1
  185. package/dist/types/src/internal/object/{create.d.ts → create-object.d.ts} +10 -11
  186. package/dist/types/src/internal/object/create-object.d.ts.map +1 -0
  187. package/dist/types/src/internal/object/create-object.test.d.ts +2 -0
  188. package/dist/types/src/internal/object/create-object.test.d.ts.map +1 -0
  189. package/dist/types/src/internal/object/deleted.d.ts +2 -2
  190. package/dist/types/src/internal/object/deleted.d.ts.map +1 -1
  191. package/dist/types/src/internal/object/ids.d.ts.map +1 -1
  192. package/dist/types/src/internal/object/index.d.ts +6 -11
  193. package/dist/types/src/internal/object/index.d.ts.map +1 -1
  194. package/dist/types/src/internal/object/json-serializer.d.ts +14 -9
  195. package/dist/types/src/internal/object/json-serializer.d.ts.map +1 -1
  196. package/dist/types/src/internal/object/schema-validator.d.ts +1 -14
  197. package/dist/types/src/internal/object/schema-validator.d.ts.map +1 -1
  198. package/dist/types/src/internal/object/set-value.d.ts +7 -0
  199. package/dist/types/src/internal/object/set-value.d.ts.map +1 -0
  200. package/dist/types/src/internal/object/set-value.test.d.ts +2 -0
  201. package/dist/types/src/internal/object/set-value.test.d.ts.map +1 -0
  202. package/dist/types/src/internal/object/snapshot.d.ts +6 -0
  203. package/dist/types/src/internal/object/snapshot.d.ts.map +1 -0
  204. package/dist/types/src/internal/object/typed-object.d.ts +8 -14
  205. package/dist/types/src/internal/object/typed-object.d.ts.map +1 -1
  206. package/dist/types/src/internal/proxy/change-context.d.ts +55 -0
  207. package/dist/types/src/internal/proxy/change-context.d.ts.map +1 -0
  208. package/dist/types/src/internal/proxy/change.test.d.ts +2 -0
  209. package/dist/types/src/internal/proxy/change.test.d.ts.map +1 -0
  210. package/dist/types/src/internal/proxy/define-hidden-property.d.ts +5 -0
  211. package/dist/types/src/internal/proxy/define-hidden-property.d.ts.map +1 -0
  212. package/dist/types/src/internal/proxy/errors.d.ts +19 -0
  213. package/dist/types/src/internal/proxy/errors.d.ts.map +1 -0
  214. package/dist/types/src/internal/proxy/event-batch.d.ts +10 -0
  215. package/dist/types/src/internal/proxy/event-batch.d.ts.map +1 -0
  216. package/dist/types/src/internal/proxy/index.d.ts +14 -0
  217. package/dist/types/src/internal/proxy/index.d.ts.map +1 -0
  218. package/dist/types/src/internal/proxy/json-serializer.d.ts +6 -0
  219. package/dist/types/src/internal/proxy/json-serializer.d.ts.map +1 -0
  220. package/dist/types/src/internal/proxy/make-object.d.ts +14 -0
  221. package/dist/types/src/internal/proxy/make-object.d.ts.map +1 -0
  222. package/dist/types/src/internal/proxy/ownership.d.ts +57 -0
  223. package/dist/types/src/internal/proxy/ownership.d.ts.map +1 -0
  224. package/dist/types/src/internal/proxy/proxy-types.d.ts +18 -0
  225. package/dist/types/src/internal/proxy/proxy-types.d.ts.map +1 -0
  226. package/dist/types/src/internal/proxy/proxy-utils.d.ts +47 -0
  227. package/dist/types/src/internal/proxy/proxy-utils.d.ts.map +1 -0
  228. package/dist/types/src/internal/proxy/reactive-array.d.ts +8 -0
  229. package/dist/types/src/internal/proxy/reactive-array.d.ts.map +1 -0
  230. package/dist/types/src/internal/proxy/reactive.d.ts +39 -0
  231. package/dist/types/src/internal/proxy/reactive.d.ts.map +1 -0
  232. package/dist/types/src/internal/proxy/schema-validator.d.ts +15 -0
  233. package/dist/types/src/internal/proxy/schema-validator.d.ts.map +1 -0
  234. package/dist/types/src/internal/proxy/symbols.d.ts +3 -0
  235. package/dist/types/src/internal/proxy/symbols.d.ts.map +1 -0
  236. package/dist/types/src/internal/proxy/typed-handler.d.ts +15 -12
  237. package/dist/types/src/internal/proxy/typed-handler.d.ts.map +1 -1
  238. package/dist/types/src/internal/ref/ref-array.d.ts +4 -4
  239. package/dist/types/src/internal/ref/ref-array.d.ts.map +1 -1
  240. package/dist/types/src/internal/ref/ref.d.ts +29 -17
  241. package/dist/types/src/internal/ref/ref.d.ts.map +1 -1
  242. package/dist/types/src/internal/schema/compose.d.ts +7 -0
  243. package/dist/types/src/internal/schema/compose.d.ts.map +1 -0
  244. package/dist/types/src/internal/schema/compose.test.d.ts.map +1 -0
  245. package/dist/types/src/internal/schema/echo-schema.d.ts +24 -12
  246. package/dist/types/src/internal/schema/echo-schema.d.ts.map +1 -1
  247. package/dist/types/src/internal/schema/index.d.ts +1 -4
  248. package/dist/types/src/internal/schema/index.d.ts.map +1 -1
  249. package/dist/types/src/internal/schema/persistent-schema.d.ts +20 -0
  250. package/dist/types/src/internal/schema/persistent-schema.d.ts.map +1 -0
  251. package/dist/types/src/internal/types/base.d.ts +26 -0
  252. package/dist/types/src/internal/types/base.d.ts.map +1 -0
  253. package/dist/types/src/internal/types/entity.d.ts +37 -0
  254. package/dist/types/src/internal/types/entity.d.ts.map +1 -0
  255. package/dist/types/src/internal/types/index.d.ts +5 -2
  256. package/dist/types/src/internal/types/index.d.ts.map +1 -1
  257. package/dist/types/src/internal/{object → types}/meta.d.ts +17 -16
  258. package/dist/types/src/internal/types/meta.d.ts.map +1 -0
  259. package/dist/types/src/internal/types/typename.d.ts +13 -0
  260. package/dist/types/src/internal/types/typename.d.ts.map +1 -0
  261. package/dist/types/src/internal/{object → types}/version.d.ts +3 -2
  262. package/dist/types/src/internal/types/version.d.ts.map +1 -0
  263. package/dist/types/src/{test → testing}/api.test.d.ts.map +1 -1
  264. package/dist/types/src/testing/index.d.ts +3 -3
  265. package/dist/types/src/testing/index.d.ts.map +1 -1
  266. package/dist/types/src/testing/test-data.d.ts +18 -0
  267. package/dist/types/src/testing/test-data.d.ts.map +1 -0
  268. package/dist/types/src/testing/test-schema.d.ts +303 -0
  269. package/dist/types/src/testing/test-schema.d.ts.map +1 -0
  270. package/dist/types/src/testing/util.d.ts +21 -0
  271. package/dist/types/src/testing/util.d.ts.map +1 -0
  272. package/dist/types/tsconfig.tsbuildinfo +1 -1
  273. package/package.json +101 -65
  274. package/src/Annotation.ts +18 -0
  275. package/src/Database.ts +336 -0
  276. package/src/Entity.test.ts +22 -0
  277. package/src/Entity.ts +217 -0
  278. package/src/{errors.ts → Err.ts} +2 -2
  279. package/src/Filter.ts +376 -0
  280. package/src/Format.ts +9 -0
  281. package/src/Hypergraph.ts +74 -0
  282. package/src/JsonSchema.ts +16 -0
  283. package/src/Key.ts +3 -0
  284. package/src/Obj.test.ts +386 -0
  285. package/src/Obj.ts +449 -275
  286. package/src/Order.ts +44 -0
  287. package/src/Query.test.ts +465 -0
  288. package/src/Query.ts +296 -0
  289. package/src/QueryResult.ts +106 -0
  290. package/src/Ref.ts +26 -9
  291. package/src/Relation.test.ts +82 -0
  292. package/src/Relation.ts +411 -60
  293. package/src/SchemaRegistry.ts +105 -0
  294. package/src/{query/tag.ts → Tag.ts} +10 -7
  295. package/src/Type.test.ts +52 -0
  296. package/src/Type.ts +361 -114
  297. package/src/index.ts +16 -6
  298. package/src/internal/README.md +102 -0
  299. package/src/internal/{ast → annotations}/annotations.test.ts +18 -20
  300. package/src/internal/annotations/annotations.ts +460 -0
  301. package/src/internal/annotations/index.ts +6 -0
  302. package/src/internal/annotations/util.ts +72 -0
  303. package/src/internal/api/annotations.ts +60 -0
  304. package/src/internal/api/entity.ts +29 -0
  305. package/src/internal/api/index.ts +19 -0
  306. package/src/internal/api/meta.ts +88 -0
  307. package/src/internal/api/sorting.ts +53 -0
  308. package/src/internal/api/version.ts +96 -0
  309. package/src/internal/entities/entity.ts +126 -0
  310. package/src/internal/entities/index.ts +9 -0
  311. package/src/internal/entities/model.ts +134 -0
  312. package/src/internal/entities/object.ts +58 -0
  313. package/src/internal/entities/relation.ts +171 -0
  314. package/src/internal/entities/util.ts +33 -0
  315. package/src/internal/formats/date.test.ts +1 -1
  316. package/src/internal/formats/date.ts +5 -5
  317. package/src/internal/formats/format.test.ts +6 -6
  318. package/src/internal/formats/format.ts +8 -6
  319. package/src/internal/formats/number.ts +5 -5
  320. package/src/internal/formats/object.ts +4 -4
  321. package/src/internal/formats/select.ts +6 -4
  322. package/src/internal/formats/string.ts +14 -9
  323. package/src/internal/formats/types.ts +53 -42
  324. package/src/internal/index.ts +30 -13
  325. package/src/internal/{json → json-schema}/annotations.ts +1 -1
  326. package/src/internal/json-schema/index.ts +2 -0
  327. package/src/internal/json-schema/json-schema-normalize.ts +4 -2
  328. package/src/internal/json-schema/json-schema-type.ts +35 -35
  329. package/src/internal/{json → json-schema}/json-schema.test.ts +73 -69
  330. package/src/internal/{json → json-schema}/json-schema.ts +27 -14
  331. package/src/internal/object/clone.ts +48 -0
  332. package/src/internal/object/common.ts +3 -4
  333. package/src/internal/object/{create.test.ts → create-object.test.ts} +31 -33
  334. package/src/internal/object/{create.ts → create-object.ts} +36 -37
  335. package/src/internal/object/deleted.ts +6 -6
  336. package/src/internal/object/ids.ts +1 -1
  337. package/src/internal/object/index.ts +6 -11
  338. package/src/internal/object/inspect.ts +5 -7
  339. package/src/internal/object/json-serializer.test.ts +36 -37
  340. package/src/internal/object/json-serializer.ts +65 -102
  341. package/src/internal/object/schema-validator.test.ts +3 -7
  342. package/src/internal/object/schema-validator.ts +2 -237
  343. package/src/internal/object/set-value.test.ts +281 -0
  344. package/src/internal/object/set-value.ts +165 -0
  345. package/src/internal/object/snapshot.ts +70 -0
  346. package/src/internal/object/typed-object.test.ts +11 -11
  347. package/src/internal/object/typed-object.ts +8 -66
  348. package/src/internal/proxy/change-context.ts +138 -0
  349. package/src/internal/proxy/change.test.ts +519 -0
  350. package/src/internal/proxy/define-hidden-property.ts +14 -0
  351. package/src/internal/proxy/errors.ts +42 -0
  352. package/src/internal/proxy/event-batch.ts +44 -0
  353. package/src/internal/proxy/handler.test.ts +51 -91
  354. package/src/internal/proxy/index.ts +17 -0
  355. package/src/internal/proxy/json-serializer.ts +87 -0
  356. package/src/internal/proxy/make-object.ts +96 -0
  357. package/src/internal/proxy/ownership.ts +253 -0
  358. package/src/internal/proxy/proxy-types.ts +23 -0
  359. package/src/internal/proxy/proxy-utils.ts +150 -0
  360. package/src/internal/proxy/reactive-array.ts +71 -0
  361. package/src/internal/proxy/reactive.ts +69 -0
  362. package/src/internal/proxy/schema-validator.ts +244 -0
  363. package/src/internal/proxy/schema.test.ts +27 -18
  364. package/src/internal/proxy/symbols.ts +7 -0
  365. package/src/internal/proxy/typed-handler.test.ts +260 -48
  366. package/src/internal/proxy/typed-handler.ts +275 -61
  367. package/src/internal/proxy/typed-object.test.ts +54 -38
  368. package/src/internal/ref/ref-array.ts +4 -4
  369. package/src/internal/ref/ref.test.ts +10 -9
  370. package/src/internal/ref/ref.ts +83 -55
  371. package/src/internal/{projection → schema}/compose.test.ts +8 -9
  372. package/src/internal/{projection → schema}/compose.ts +13 -8
  373. package/src/internal/schema/echo-schema.ts +73 -33
  374. package/src/internal/schema/index.ts +1 -4
  375. package/src/internal/schema/manipulation.ts +1 -1
  376. package/src/internal/schema/persistent-schema.ts +27 -0
  377. package/src/internal/types/base.ts +43 -0
  378. package/src/internal/types/entity.ts +54 -0
  379. package/src/internal/types/index.ts +5 -2
  380. package/src/internal/types/meta.ts +65 -0
  381. package/src/internal/types/typename.ts +45 -0
  382. package/src/internal/types/version.ts +20 -0
  383. package/src/testing/api.test.ts +126 -0
  384. package/src/testing/index.ts +3 -3
  385. package/src/testing/test-data.ts +130 -0
  386. package/src/testing/test-schema.ts +238 -0
  387. package/src/testing/util.ts +85 -0
  388. package/dist/lib/browser/chunk-JUTFUT73.mjs +0 -175
  389. package/dist/lib/browser/chunk-JUTFUT73.mjs.map +0 -7
  390. package/dist/lib/browser/chunk-KEBVBR65.mjs +0 -3727
  391. package/dist/lib/browser/chunk-KEBVBR65.mjs.map +0 -7
  392. package/dist/lib/browser/chunk-WO76TDT6.mjs +0 -814
  393. package/dist/lib/browser/chunk-WO76TDT6.mjs.map +0 -7
  394. package/dist/lib/browser/index.mjs +0 -35
  395. package/dist/lib/browser/internal/index.mjs +0 -336
  396. package/dist/lib/browser/meta.json +0 -1
  397. package/dist/lib/browser/query/index.mjs +0 -15
  398. package/dist/lib/browser/testing/index.mjs +0 -283
  399. package/dist/lib/browser/testing/index.mjs.map +0 -7
  400. package/dist/lib/node-esm/chunk-DWZYQ2UR.mjs +0 -3727
  401. package/dist/lib/node-esm/chunk-DWZYQ2UR.mjs.map +0 -7
  402. package/dist/lib/node-esm/chunk-KBD3A2I6.mjs +0 -175
  403. package/dist/lib/node-esm/chunk-KBD3A2I6.mjs.map +0 -7
  404. package/dist/lib/node-esm/chunk-ZSSII3JW.mjs +0 -814
  405. package/dist/lib/node-esm/chunk-ZSSII3JW.mjs.map +0 -7
  406. package/dist/lib/node-esm/index.mjs +0 -35
  407. package/dist/lib/node-esm/meta.json +0 -1
  408. package/dist/lib/node-esm/query/index.mjs +0 -15
  409. package/dist/lib/node-esm/testing/index.mjs +0 -283
  410. package/dist/lib/node-esm/testing/index.mjs.map +0 -7
  411. package/dist/types/src/errors.d.ts.map +0 -1
  412. package/dist/types/src/internal/ast/annotation-helper.d.ts +0 -8
  413. package/dist/types/src/internal/ast/annotation-helper.d.ts.map +0 -1
  414. package/dist/types/src/internal/ast/annotations.d.ts +0 -131
  415. package/dist/types/src/internal/ast/annotations.d.ts.map +0 -1
  416. package/dist/types/src/internal/ast/annotations.test.d.ts.map +0 -1
  417. package/dist/types/src/internal/ast/entity-kind.d.ts +0 -10
  418. package/dist/types/src/internal/ast/entity-kind.d.ts.map +0 -1
  419. package/dist/types/src/internal/ast/index.d.ts +0 -5
  420. package/dist/types/src/internal/ast/index.d.ts.map +0 -1
  421. package/dist/types/src/internal/ast/types.d.ts +0 -6
  422. package/dist/types/src/internal/ast/types.d.ts.map +0 -1
  423. package/dist/types/src/internal/json/annotations.d.ts.map +0 -1
  424. package/dist/types/src/internal/json/effect-schema.test.d.ts.map +0 -1
  425. package/dist/types/src/internal/json/index.d.ts +0 -2
  426. package/dist/types/src/internal/json/index.d.ts.map +0 -1
  427. package/dist/types/src/internal/json/json-schema.d.ts.map +0 -1
  428. package/dist/types/src/internal/json/json-schema.test.d.ts.map +0 -1
  429. package/dist/types/src/internal/object/accessors.d.ts +0 -37
  430. package/dist/types/src/internal/object/accessors.d.ts.map +0 -1
  431. package/dist/types/src/internal/object/create.d.ts.map +0 -1
  432. package/dist/types/src/internal/object/create.test.d.ts +0 -2
  433. package/dist/types/src/internal/object/create.test.d.ts.map +0 -1
  434. package/dist/types/src/internal/object/entity.d.ts +0 -33
  435. package/dist/types/src/internal/object/entity.d.ts.map +0 -1
  436. package/dist/types/src/internal/object/expando.d.ts +0 -14
  437. package/dist/types/src/internal/object/expando.d.ts.map +0 -1
  438. package/dist/types/src/internal/object/meta.d.ts.map +0 -1
  439. package/dist/types/src/internal/object/model.d.ts +0 -117
  440. package/dist/types/src/internal/object/model.d.ts.map +0 -1
  441. package/dist/types/src/internal/object/relation.d.ts +0 -17
  442. package/dist/types/src/internal/object/relation.d.ts.map +0 -1
  443. package/dist/types/src/internal/object/typename.d.ts +0 -15
  444. package/dist/types/src/internal/object/typename.d.ts.map +0 -1
  445. package/dist/types/src/internal/object/version.d.ts.map +0 -1
  446. package/dist/types/src/internal/projection/compose.d.ts +0 -6
  447. package/dist/types/src/internal/projection/compose.d.ts.map +0 -1
  448. package/dist/types/src/internal/projection/compose.test.d.ts.map +0 -1
  449. package/dist/types/src/internal/projection/index.d.ts +0 -2
  450. package/dist/types/src/internal/projection/index.d.ts.map +0 -1
  451. package/dist/types/src/internal/proxy/reactive-object.d.ts +0 -15
  452. package/dist/types/src/internal/proxy/reactive-object.d.ts.map +0 -1
  453. package/dist/types/src/internal/query/index.d.ts +0 -2
  454. package/dist/types/src/internal/query/index.d.ts.map +0 -1
  455. package/dist/types/src/internal/query/query.d.ts +0 -17
  456. package/dist/types/src/internal/query/query.d.ts.map +0 -1
  457. package/dist/types/src/internal/schema/runtime-schema-registry.d.ts +0 -18
  458. package/dist/types/src/internal/schema/runtime-schema-registry.d.ts.map +0 -1
  459. package/dist/types/src/internal/schema/snapshot.d.ts +0 -6
  460. package/dist/types/src/internal/schema/snapshot.d.ts.map +0 -1
  461. package/dist/types/src/internal/schema/stored-schema.d.ts +0 -13
  462. package/dist/types/src/internal/schema/stored-schema.d.ts.map +0 -1
  463. package/dist/types/src/internal/testing/index.d.ts +0 -3
  464. package/dist/types/src/internal/testing/index.d.ts.map +0 -1
  465. package/dist/types/src/internal/testing/types.d.ts +0 -455
  466. package/dist/types/src/internal/testing/types.d.ts.map +0 -1
  467. package/dist/types/src/internal/testing/utils.d.ts +0 -10
  468. package/dist/types/src/internal/testing/utils.d.ts.map +0 -1
  469. package/dist/types/src/internal/types/types.d.ts +0 -79
  470. package/dist/types/src/internal/types/types.d.ts.map +0 -1
  471. package/dist/types/src/internal/types/types.test.d.ts +0 -2
  472. package/dist/types/src/internal/types/types.test.d.ts.map +0 -1
  473. package/dist/types/src/internal/types/util.d.ts +0 -5
  474. package/dist/types/src/internal/types/util.d.ts.map +0 -1
  475. package/dist/types/src/query/index.d.ts +0 -3
  476. package/dist/types/src/query/index.d.ts.map +0 -1
  477. package/dist/types/src/query/query.d.ts +0 -248
  478. package/dist/types/src/query/query.d.ts.map +0 -1
  479. package/dist/types/src/query/query.test.d.ts +0 -2
  480. package/dist/types/src/query/query.test.d.ts.map +0 -1
  481. package/dist/types/src/query/tag.d.ts +0 -17
  482. package/dist/types/src/query/tag.d.ts.map +0 -1
  483. package/dist/types/src/testing/echo-schema.d.ts +0 -7
  484. package/dist/types/src/testing/echo-schema.d.ts.map +0 -1
  485. package/dist/types/src/testing/types.d.ts +0 -113
  486. package/dist/types/src/testing/types.d.ts.map +0 -1
  487. package/src/internal/ast/annotation-helper.ts +0 -22
  488. package/src/internal/ast/annotations.ts +0 -226
  489. package/src/internal/ast/entity-kind.ts +0 -15
  490. package/src/internal/ast/index.ts +0 -8
  491. package/src/internal/ast/types.ts +0 -17
  492. package/src/internal/json/index.ts +0 -5
  493. package/src/internal/object/accessors.ts +0 -153
  494. package/src/internal/object/entity.ts +0 -248
  495. package/src/internal/object/expando.ts +0 -21
  496. package/src/internal/object/meta.ts +0 -61
  497. package/src/internal/object/model.ts +0 -170
  498. package/src/internal/object/relation.ts +0 -24
  499. package/src/internal/object/typename.ts +0 -61
  500. package/src/internal/object/version.ts +0 -22
  501. package/src/internal/projection/index.ts +0 -5
  502. package/src/internal/proxy/reactive-object.ts +0 -108
  503. package/src/internal/query/index.ts +0 -5
  504. package/src/internal/query/query.ts +0 -23
  505. package/src/internal/schema/runtime-schema-registry.ts +0 -78
  506. package/src/internal/schema/snapshot.ts +0 -25
  507. package/src/internal/schema/stored-schema.ts +0 -26
  508. package/src/internal/testing/index.ts +0 -6
  509. package/src/internal/testing/types.ts +0 -211
  510. package/src/internal/testing/utils.ts +0 -54
  511. package/src/internal/types/types.test.ts +0 -48
  512. package/src/internal/types/types.ts +0 -176
  513. package/src/internal/types/util.ts +0 -9
  514. package/src/query/index.ts +0 -6
  515. package/src/query/query.test.ts +0 -401
  516. package/src/query/query.ts +0 -789
  517. package/src/test/api.test.ts +0 -180
  518. package/src/testing/echo-schema.ts +0 -39
  519. package/src/testing/types.ts +0 -91
  520. /package/dist/lib/{browser/index.mjs.map → neutral/Annotation.mjs.map} +0 -0
  521. /package/dist/lib/{browser/internal/index.mjs.map → neutral/Database.mjs.map} +0 -0
  522. /package/dist/lib/{browser/query/index.mjs.map → neutral/Entity.mjs.map} +0 -0
  523. /package/dist/lib/{node-esm/index.mjs.map → neutral/Err.mjs.map} +0 -0
  524. /package/dist/lib/{node-esm/internal/index.mjs.map → neutral/Filter.mjs.map} +0 -0
  525. /package/dist/lib/{node-esm/query/index.mjs.map → neutral/Format.mjs.map} +0 -0
  526. /package/dist/types/src/internal/{ast → annotations}/annotations.test.d.ts +0 -0
  527. /package/dist/types/src/internal/{json → json-schema}/annotations.d.ts +0 -0
  528. /package/dist/types/src/internal/{json → json-schema}/effect-schema.test.d.ts +0 -0
  529. /package/dist/types/src/internal/{json → json-schema}/json-schema.test.d.ts +0 -0
  530. /package/dist/types/src/internal/{projection → schema}/compose.test.d.ts +0 -0
  531. /package/dist/types/src/{test → testing}/api.test.d.ts +0 -0
  532. /package/src/internal/{json → json-schema}/effect-schema.test.ts +0 -0
@@ -11,22 +11,22 @@ import { type JsonProp, findAnnotation } from '@dxos/effect';
11
11
  import { ObjectId } from '@dxos/keys';
12
12
  import { log } from '@dxos/log';
13
13
 
14
- import { Type } from '../..';
14
+ import { TestSchema, prepareAstForCompare } from '../../testing';
15
+ import * as Type from '../../Type';
15
16
  import {
16
- EntityKind,
17
17
  FieldLookupAnnotationId,
18
18
  GeneratorAnnotation,
19
19
  LabelAnnotation,
20
20
  PropertyMeta,
21
21
  getTypeAnnotation,
22
22
  getTypeIdentifierAnnotation,
23
- } from '../ast';
24
- import { Email, FormatAnnotation, FormatEnum } from '../formats';
23
+ } from '../annotations';
24
+ import { EchoObjectSchema } from '../entities';
25
+ import { Email, FormatAnnotation, TypeFormat } from '../formats';
25
26
  import { JsonSchemaType, getNormalizedEchoAnnotations, getSchemaProperty, setSchemaProperty } from '../json-schema';
26
- import { EchoObject } from '../object';
27
27
  import { Ref, createSchemaReference, getReferenceAst, getSchemaReference } from '../ref';
28
- import { StoredSchema } from '../schema';
29
- import { Testing, prepareAstForCompare } from '../testing';
28
+ import { PersistentSchema } from '../schema';
29
+ import { EntityKind } from '../types';
30
30
 
31
31
  import { toEffectSchema, toJsonSchema } from './json-schema';
32
32
 
@@ -35,7 +35,7 @@ const EXAMPLE_NAMESPACE = '@example';
35
35
  describe('effect-to-json', () => {
36
36
  test('type annotation', () => {
37
37
  const Test = Schema.Struct({ name: Schema.String }).pipe(
38
- Type.Obj({
38
+ Type.object({
39
39
  typename: 'example.com/type/Test',
40
40
  version: '0.1.0',
41
41
  }),
@@ -50,7 +50,7 @@ describe('effect-to-json', () => {
50
50
  const Test = Schema.Struct({
51
51
  name: Schema.String.pipe(PropertyMeta(EXAMPLE_NAMESPACE, meta)),
52
52
  }).pipe(
53
- Type.Obj({
53
+ Type.object({
54
54
  typename: 'example.com/type/Test',
55
55
  version: '0.1.0',
56
56
  }),
@@ -63,7 +63,7 @@ describe('effect-to-json', () => {
63
63
  const Nested = Schema.Struct({
64
64
  name: Schema.String,
65
65
  }).pipe(
66
- Type.Obj({
66
+ Type.object({
67
67
  typename: 'example.com/type/TestNested',
68
68
  version: '0.1.0',
69
69
  }),
@@ -71,7 +71,7 @@ describe('effect-to-json', () => {
71
71
  const Test = Schema.Struct({
72
72
  name: Ref(Nested),
73
73
  }).pipe(
74
- Type.Obj({
74
+ Type.object({
75
75
  typename: 'example.com/type/Test',
76
76
  version: '0.1.0',
77
77
  }),
@@ -88,7 +88,7 @@ describe('effect-to-json', () => {
88
88
  const Nested = Schema.Struct({
89
89
  name: Schema.String,
90
90
  }).pipe(
91
- Type.Obj({
91
+ Type.object({
92
92
  typename: 'example.com/type/TestNested',
93
93
  version: '0.1.0',
94
94
  }),
@@ -96,7 +96,7 @@ describe('effect-to-json', () => {
96
96
  const Test = Schema.Struct({
97
97
  name: Ref(Nested).annotations({ [FieldLookupAnnotationId]: 'name' }),
98
98
  }).pipe(
99
- Type.Obj({
99
+ Type.object({
100
100
  typename: 'example.com/type/Test',
101
101
  version: '0.1.0',
102
102
  }),
@@ -112,7 +112,7 @@ describe('effect-to-json', () => {
112
112
  const Nested = Schema.Struct({
113
113
  name: Schema.String,
114
114
  }).pipe(
115
- Type.Obj({
115
+ Type.object({
116
116
  typename: 'example.com/type/TestNested',
117
117
  version: '0.1.0',
118
118
  }),
@@ -120,7 +120,7 @@ describe('effect-to-json', () => {
120
120
  const Test = Schema.Struct({
121
121
  name: Schema.Array(Ref(Nested)),
122
122
  }).pipe(
123
- Type.Obj({
123
+ Type.object({
124
124
  typename: 'example.com/type/Test',
125
125
  version: '0.1.0',
126
126
  }),
@@ -134,7 +134,7 @@ describe('effect-to-json', () => {
134
134
  const Nested = Schema.Struct({
135
135
  name: Schema.String,
136
136
  }).pipe(
137
- Type.Obj({
137
+ Type.object({
138
138
  typename: 'example.com/type/TestNested',
139
139
  version: '0.1.0',
140
140
  }),
@@ -142,7 +142,7 @@ describe('effect-to-json', () => {
142
142
  const Test = Schema.Struct({
143
143
  name: Schema.optional(Ref(Nested)),
144
144
  }).pipe(
145
- Type.Obj({
145
+ Type.object({
146
146
  typename: 'example.com/type/Test',
147
147
  version: '0.1.0',
148
148
  }),
@@ -159,24 +159,25 @@ describe('effect-to-json', () => {
159
159
  });
160
160
 
161
161
  test('annotations', () => {
162
- const TestSchema = Schema.Struct({
162
+ const TempSchema = Schema.Struct({
163
163
  name: Schema.String.annotations({ description: 'Person name', title: 'Name' }),
164
- email: Schema.String.pipe(FormatAnnotation.set(FormatEnum.Email)).annotations({
164
+ email: Schema.String.pipe(FormatAnnotation.set(TypeFormat.Email)).annotations({
165
165
  description: 'Email address',
166
166
  }),
167
167
  }).pipe(
168
- Type.Obj({
169
- typename: 'example.com/type/Contact',
168
+ Type.object({
169
+ typename: 'example.com/type/Person',
170
170
  version: '0.1.0',
171
171
  }),
172
172
  );
173
- const jsonSchema = toJsonSchema(TestSchema);
173
+
174
+ const jsonSchema = toJsonSchema(TempSchema);
174
175
  expect(jsonSchema).to.deep.eq({
175
176
  $schema: 'http://json-schema.org/draft-07/schema#',
176
- $id: 'dxn:type:example.com/type/Contact',
177
+ $id: 'dxn:type:example.com/type/Person',
177
178
 
178
179
  entityKind: EntityKind.Object,
179
- typename: 'example.com/type/Contact',
180
+ typename: 'example.com/type/Person',
180
181
  version: '0.1.0',
181
182
 
182
183
  type: 'object',
@@ -197,15 +198,17 @@ describe('effect-to-json', () => {
197
198
  });
198
199
 
199
200
  test('handles suspend -- Contact schema serialization', () => {
200
- const schema = toJsonSchema(Testing.Contact);
201
+ const schema = toJsonSchema(TestSchema.Person);
201
202
  expect(Object.keys(schema.properties!)).toEqual([
202
203
  'id',
203
204
  'name',
204
205
  'username',
205
206
  'email',
206
- 'phoneNumbers',
207
+ 'age',
207
208
  'tasks',
209
+ 'employer',
208
210
  'address',
211
+ 'fields',
209
212
  ]);
210
213
  });
211
214
 
@@ -213,7 +216,7 @@ describe('effect-to-json', () => {
213
216
  const Organization = Schema.Struct({
214
217
  field: Schema.String,
215
218
  }).pipe(
216
- Type.Obj({
219
+ Type.object({
217
220
  typename: 'example.com/type/Organization',
218
221
  version: '0.1.0',
219
222
  }),
@@ -223,8 +226,8 @@ describe('effect-to-json', () => {
223
226
  name: Schema.String,
224
227
  organization: Ref(Organization).annotations({ description: 'Contact organization' }),
225
228
  }).pipe(
226
- Type.Obj({
227
- typename: 'example.com/type/Contact',
229
+ Type.object({
230
+ typename: 'example.com/type/Person',
228
231
  version: '0.1.0',
229
232
  }),
230
233
  );
@@ -234,10 +237,10 @@ describe('effect-to-json', () => {
234
237
  const jsonSchema = toJsonSchema(Contact);
235
238
  expect(jsonSchema).toEqual({
236
239
  $schema: 'http://json-schema.org/draft-07/schema#',
237
- $id: 'dxn:type:example.com/type/Contact',
240
+ $id: 'dxn:type:example.com/type/Person',
238
241
 
239
242
  entityKind: EntityKind.Object,
240
- typename: 'example.com/type/Contact',
243
+ typename: 'example.com/type/Person',
241
244
  version: '0.1.0',
242
245
 
243
246
  type: 'object',
@@ -275,7 +278,7 @@ describe('effect-to-json', () => {
275
278
  const Organization = Schema.Struct({
276
279
  field: Schema.String,
277
280
  }).pipe(
278
- Type.Obj({
281
+ Type.object({
279
282
  typename: 'example.com/type/Organization',
280
283
  version: '0.1.0',
281
284
  }),
@@ -285,8 +288,8 @@ describe('effect-to-json', () => {
285
288
  name: Schema.String,
286
289
  organization: Ref(Organization).annotations({ description: 'Contact organization' }),
287
290
  }).pipe(
288
- Type.Obj({
289
- typename: 'example.com/type/Contact',
291
+ Type.object({
292
+ typename: 'example.com/type/Person',
290
293
  version: '0.1.0',
291
294
  }),
292
295
  );
@@ -297,8 +300,8 @@ describe('effect-to-json', () => {
297
300
  expect(typename).to.eq(Organization.typename);
298
301
  });
299
302
 
300
- test('serialize circular schema (StoredSchema)', () => {
301
- const jsonSchema = toJsonSchema(StoredSchema);
303
+ test('serialize circular schema (PersistentSchema)', () => {
304
+ const jsonSchema = toJsonSchema(PersistentSchema);
302
305
  expect(Object.keys(jsonSchema.properties!).length).toBeGreaterThan(0);
303
306
 
304
307
  // TODO(dmaretskyi): Currently unable to deserialize.
@@ -321,7 +324,7 @@ describe('effect-to-json', () => {
321
324
 
322
325
  test('reference with title annotation', () => {
323
326
  const schema = Schema.Struct({
324
- contact: Ref(Testing.Contact).annotations({ title: 'Custom Title' }),
327
+ contact: Ref(TestSchema.Person).annotations({ title: 'Custom Title' }),
325
328
  });
326
329
 
327
330
  // log.info('schema before', { ast: schema.ast });
@@ -344,33 +347,36 @@ describe('effect-to-json', () => {
344
347
  });
345
348
 
346
349
  test('relation schema', () => {
347
- const schema = Testing.HasManager;
350
+ const schema = TestSchema.EmployedBy;
348
351
  const jsonSchema = toJsonSchema(schema);
349
352
  expect(jsonSchema).toEqual({
350
- $id: 'dxn:type:example.com/type/HasManager',
353
+ $id: 'dxn:type:example.com/type/EmployedBy',
351
354
  $schema: 'http://json-schema.org/draft-07/schema#',
352
355
  entityKind: 'relation',
353
- typename: 'example.com/type/HasManager',
356
+ typename: 'example.com/type/EmployedBy',
354
357
  version: '0.1.0',
355
358
  relationSource: {
356
359
  // TODO(dmaretskyi): Should those point to specific schema version?
357
- $ref: 'dxn:type:example.com/type/Contact',
360
+ $ref: 'dxn:type:example.com/type/Person',
358
361
  },
359
362
  relationTarget: {
360
363
  // TODO(dmaretskyi): Should those point to specific schema version?
361
- $ref: 'dxn:type:example.com/type/Contact',
364
+ $ref: 'dxn:type:example.com/type/Organization',
362
365
  },
363
366
  type: 'object',
364
367
  properties: {
365
368
  id: {
366
369
  type: 'string',
367
370
  },
371
+ role: {
372
+ type: 'string',
373
+ },
368
374
  since: {
369
375
  type: 'string',
370
376
  },
371
377
  },
372
- propertyOrder: ['since', 'id'],
373
- required: ['id'],
378
+ propertyOrder: ['role', 'since', 'id'],
379
+ required: ['role', 'id'],
374
380
  additionalProperties: false,
375
381
  });
376
382
  });
@@ -380,7 +386,7 @@ describe('effect-to-json', () => {
380
386
  id: ObjectId,
381
387
  name: Schema.String,
382
388
  }).pipe(
383
- EchoObject({
389
+ EchoObjectSchema({
384
390
  typename: 'example.com/type/Organization',
385
391
  version: '0.1.0',
386
392
  }),
@@ -490,7 +496,7 @@ describe('json-to-effect', () => {
490
496
  const Organization = Schema.Struct({
491
497
  field: Schema.String,
492
498
  }).pipe(
493
- Type.Obj({
499
+ Type.object({
494
500
  typename: 'example.com/type/Organization',
495
501
  version: '0.1.0',
496
502
  }),
@@ -506,12 +512,12 @@ describe('json-to-effect', () => {
506
512
  object: Schema.Struct({ id: Schema.String, field: Ref(Organization) }),
507
513
  echoObject: Ref(Organization),
508
514
  echoObjectArray: Schema.Array(Ref(Organization)),
509
- email: Schema.String.pipe(FormatAnnotation.set(FormatEnum.Email)),
515
+ email: Schema.String.pipe(FormatAnnotation.set(TypeFormat.Email)),
510
516
  null: Schema.Null,
511
517
  } as const;
512
518
 
513
519
  const Test = (partial ? Schema.partial(Schema.Struct(fields)) : Schema.Struct(fields)).pipe(
514
- Type.Obj({
520
+ Type.object({
515
521
  typename: 'example.com/type/Test',
516
522
  version: '0.1.0',
517
523
  }),
@@ -578,8 +584,8 @@ describe('json-to-effect', () => {
578
584
  });
579
585
 
580
586
  test('symbol annotations get compared', () => {
581
- const schema1 = Schema.String.pipe(FormatAnnotation.set(FormatEnum.Email));
582
- const schema2 = Schema.String.pipe(FormatAnnotation.set(FormatEnum.Currency));
587
+ const schema1 = Schema.String.pipe(FormatAnnotation.set(TypeFormat.Email));
588
+ const schema2 = Schema.String.pipe(FormatAnnotation.set(TypeFormat.Currency));
583
589
  expect(prepareAstForCompare(schema1.ast)).not.to.deep.eq(prepareAstForCompare(schema2.ast));
584
590
  });
585
591
 
@@ -594,7 +600,7 @@ describe('json-to-effect', () => {
594
600
  });
595
601
 
596
602
  test('relation schema roundtrip', () => {
597
- const schema = Testing.HasManager;
603
+ const schema = TestSchema.HasManager;
598
604
  const jsonSchema = toJsonSchema(schema);
599
605
  const effectSchema = toEffectSchema(jsonSchema);
600
606
  expect(prepareAstForCompare(effectSchema.ast)).to.deep.eq(prepareAstForCompare(schema.ast));
@@ -697,10 +703,8 @@ describe('json-to-effect', () => {
697
703
  });
698
704
 
699
705
  test('schema with optional referece', () => {
700
- const TestSchema = Schema.Struct({
701
- contact: Schema.optional(Ref(Testing.Contact)),
702
- });
703
- const jsonSchema = toJsonSchema(TestSchema);
706
+ const TempSchema = Schema.Struct({ contact: Schema.optional(Ref(TestSchema.Person)) });
707
+ const jsonSchema = toJsonSchema(TempSchema);
704
708
  expect(jsonSchema).toMatchInlineSnapshot(`
705
709
  {
706
710
  "$schema": "http://json-schema.org/draft-07/schema#",
@@ -711,7 +715,7 @@ describe('json-to-effect', () => {
711
715
  "$ref": "/schemas/echo/ref",
712
716
  "reference": {
713
717
  "schema": {
714
- "$ref": "dxn:type:example.com/type/Contact",
718
+ "$ref": "dxn:type:example.com/type/Person",
715
719
  },
716
720
  "schemaVersion": "0.1.0",
717
721
  },
@@ -726,13 +730,13 @@ describe('json-to-effect', () => {
726
730
  `);
727
731
 
728
732
  const effectSchema = toEffectSchema(jsonSchema);
729
- expect(prepareAstForCompare(effectSchema.ast)).to.deep.eq(prepareAstForCompare(TestSchema.ast));
733
+ expect(prepareAstForCompare(effectSchema.ast)).to.deep.eq(prepareAstForCompare(TempSchema.ast));
730
734
  });
731
735
 
732
736
  test('object nested inside another struct', () => {
733
737
  const Contact = Schema.Struct({
734
738
  name: Schema.String,
735
- }).pipe(EchoObject({ typename: 'example.com/type/Contact', version: '0.1.0' }));
739
+ }).pipe(EchoObjectSchema({ typename: 'example.com/type/Person', version: '0.1.0' }));
736
740
  const input = Schema.Struct({
737
741
  contact: Contact,
738
742
  });
@@ -743,7 +747,7 @@ describe('json-to-effect', () => {
743
747
  "additionalProperties": false,
744
748
  "properties": {
745
749
  "contact": {
746
- "$id": "dxn:type:example.com/type/Contact",
750
+ "$id": "dxn:type:example.com/type/Person",
747
751
  "additionalProperties": false,
748
752
  "entityKind": "object",
749
753
  "properties": {
@@ -763,7 +767,7 @@ describe('json-to-effect', () => {
763
767
  "id",
764
768
  ],
765
769
  "type": "object",
766
- "typename": "example.com/type/Contact",
770
+ "typename": "example.com/type/Person",
767
771
  "version": "0.1.0",
768
772
  },
769
773
  },
@@ -784,7 +788,7 @@ describe('json-to-effect', () => {
784
788
 
785
789
  describe('reference', () => {
786
790
  test('reference annotation', () => {
787
- const schema = Ref(Testing.Contact);
791
+ const schema = Ref(TestSchema.Person);
788
792
  const jsonSchema = toJsonSchema(schema);
789
793
  expect(jsonSchema).toEqual({
790
794
  $id: '/schemas/echo/ref',
@@ -792,7 +796,7 @@ describe('reference', () => {
792
796
  $schema: 'http://json-schema.org/draft-07/schema#',
793
797
  reference: {
794
798
  schema: {
795
- $ref: 'dxn:type:example.com/type/Contact',
799
+ $ref: 'dxn:type:example.com/type/Person',
796
800
  },
797
801
  schemaVersion: '0.1.0',
798
802
  },
@@ -800,7 +804,7 @@ describe('reference', () => {
800
804
  });
801
805
 
802
806
  test('title annotation', () => {
803
- const schema = Ref(Testing.Contact).annotations({ title: 'My custom title' });
807
+ const schema = Ref(TestSchema.Person).annotations({ title: 'My custom title' });
804
808
  const jsonSchema = toJsonSchema(schema);
805
809
  expect(jsonSchema).toEqual({
806
810
  $schema: 'http://json-schema.org/draft-07/schema#',
@@ -810,7 +814,7 @@ describe('reference', () => {
810
814
  $ref: '/schemas/echo/ref',
811
815
  reference: {
812
816
  schema: {
813
- $ref: 'dxn:type:example.com/type/Contact',
817
+ $ref: 'dxn:type:example.com/type/Person',
814
818
  },
815
819
  schemaVersion: '0.1.0',
816
820
  },
@@ -821,7 +825,7 @@ describe('reference', () => {
821
825
  });
822
826
 
823
827
  test('description annotation', () => {
824
- const schema = Ref(Testing.Contact).annotations({ description: 'My custom description' });
828
+ const schema = Ref(TestSchema.Person).annotations({ description: 'My custom description' });
825
829
  const jsonSchema = toJsonSchema(schema);
826
830
  expect(jsonSchema).toEqual({
827
831
  $schema: 'http://json-schema.org/draft-07/schema#',
@@ -831,7 +835,7 @@ describe('reference', () => {
831
835
  $ref: '/schemas/echo/ref',
832
836
  reference: {
833
837
  schema: {
834
- $ref: 'dxn:type:example.com/type/Contact',
838
+ $ref: 'dxn:type:example.com/type/Person',
835
839
  },
836
840
  schemaVersion: '0.1.0',
837
841
  },
@@ -845,13 +849,13 @@ describe('reference', () => {
845
849
  });
846
850
 
847
851
  test('serialize and deserialize', () => {
848
- const schema = Ref(Testing.Contact);
852
+ const schema = Ref(TestSchema.Person);
849
853
  const jsonSchema = toJsonSchema(schema);
850
854
  const deserializedSchema = toEffectSchema(jsonSchema);
851
855
  const refAst = getReferenceAst(deserializedSchema.ast);
852
856
  expect(refAst).toEqual({
853
- typename: Testing.Contact.typename,
854
- version: Testing.Contact.version,
857
+ typename: TestSchema.Person.typename,
858
+ version: TestSchema.Person.version,
855
859
  });
856
860
  });
857
861
  });
@@ -17,19 +17,23 @@ import { DXN, ObjectId } from '@dxos/keys';
17
17
  import { log } from '@dxos/log';
18
18
  import { clearUndefined, orderKeys, removeProperties } from '@dxos/util';
19
19
 
20
- import { type TypeAnnotation, TypeAnnotationId, TypeIdentifierAnnotationId } from '../ast';
21
- import { EntityKind, EntityKindSchema } from '../ast';
20
+ import {
21
+ type TypeAnnotation,
22
+ TypeAnnotationId,
23
+ TypeIdentifierAnnotationId,
24
+ makeTypeJsonSchemaAnnotation,
25
+ } from '../annotations';
26
+ import { type JsonSchemaReferenceInfo, createEchoReferenceSchema } from '../ref';
27
+ import { ANY_OBJECT_TYPENAME, ANY_OBJECT_VERSION, EntityKind, EntityKindSchema } from '../types';
28
+
29
+ import { CustomAnnotations, DecodedAnnotations, EchoAnnotations } from './annotations';
22
30
  import {
23
31
  ECHO_ANNOTATIONS_NS_DEPRECATED_KEY,
24
32
  ECHO_ANNOTATIONS_NS_KEY,
25
33
  type JsonSchemaEchoAnnotations,
26
34
  type JsonSchemaType,
27
35
  getNormalizedEchoAnnotations,
28
- } from '../json-schema';
29
- import { Expando, makeTypeJsonSchemaAnnotation } from '../object';
30
- import { type JsonSchemaReferenceInfo, Ref, createEchoReferenceSchema } from '../ref';
31
-
32
- import { CustomAnnotations, DecodedAnnotations, EchoAnnotations } from './annotations';
36
+ } from './json-schema-type';
33
37
 
34
38
  // TODO(burdon): Are these values stored (can they be changed?)
35
39
  export enum PropType {
@@ -71,9 +75,16 @@ export type JsonSchemaOptions = {
71
75
 
72
76
  /**
73
77
  * Convert effect schema to JSON Schema.
78
+ * NOTE: This handles custom annotations.
74
79
  * @param schema
75
80
  */
76
- export const toJsonSchema = (schema: Schema.Schema.All, options: JsonSchemaOptions = {}): JsonSchemaType => {
81
+ // TODO(burdon): Reconcile with possibly extending @effect/Schema/JSONSchema
82
+ // We add additional propertyOrder (but the object properties ARE ordered); and type "string" for literals.
83
+ // TODO(wittjosiah): This is mutable because its a pojo, perhaps should be left as readonly at type level though?
84
+ export const toJsonSchema = (
85
+ schema: Schema.Schema.All,
86
+ options: JsonSchemaOptions = {},
87
+ ): Types.DeepMutable<JsonSchemaType> => {
77
88
  assertArgument(Schema.isSchema(schema), 'schema');
78
89
  let jsonSchema = _toJsonSchemaAST(schema.ast);
79
90
  if (options.strict) {
@@ -96,11 +107,11 @@ export const toJsonSchema = (schema: Schema.Schema.All, options: JsonSchemaOptio
96
107
  return jsonSchema;
97
108
  };
98
109
 
99
- const _toJsonSchemaAST = (ast: SchemaAST.AST): JsonSchemaType => {
110
+ const _toJsonSchemaAST = (ast: SchemaAST.AST): Types.DeepMutable<JsonSchemaType> => {
100
111
  const withRefinements = withEchoRefinements(ast, '#');
101
112
  const jsonSchema = JSONSchema.fromAST(withRefinements, {
102
113
  definitions: {},
103
- }) as JsonSchemaType;
114
+ }) as Types.DeepMutable<JsonSchemaType>;
104
115
 
105
116
  return normalizeJsonSchema(jsonSchema);
106
117
  };
@@ -319,7 +330,7 @@ const objectToEffectSchema = (root: JsonSchemaType, defs: JsonSchemaType['$defs'
319
330
  }
320
331
 
321
332
  if (immutableIdField) {
322
- schema = Schema.extend(Schema.mutable(schema), Schema.Struct({ id: immutableIdField }));
333
+ schema = Schema.extend(schema, Schema.Struct({ id: immutableIdField }));
323
334
  }
324
335
 
325
336
  const annotations = jsonSchemaFieldsToAnnotations(root);
@@ -344,8 +355,10 @@ const anyToEffectSchema = (root: JSONSchema.JsonSchema7Any): Schema.Schema.AnyNo
344
355
  // TODO(dmaretskyi): Types.
345
356
  const refToEffectSchema = (root: any): Schema.Schema.AnyNoContext => {
346
357
  if (!('reference' in root)) {
347
- return Ref(Expando);
358
+ // Fallback to generic object ref when no reference info is provided.
359
+ return createEchoReferenceSchema(undefined, ANY_OBJECT_TYPENAME, ANY_OBJECT_VERSION);
348
360
  }
361
+
349
362
  const reference: JsonSchemaReferenceInfo = root.reference;
350
363
  if (typeof reference !== 'object') {
351
364
  throw new Error('Invalid reference field in ref schema');
@@ -368,7 +381,7 @@ const refToEffectSchema = (root: any): Schema.Schema.AnyNoContext => {
368
381
  const annotations_toJsonSchemaFields = (annotations: SchemaAST.Annotations): Record<symbol, any> => {
369
382
  const schemaFields: Record<string, any> = {};
370
383
 
371
- const echoAnnotations: JsonSchemaEchoAnnotations = {};
384
+ const echoAnnotations: Types.Mutable<JsonSchemaEchoAnnotations> = {};
372
385
  for (const [key, annotationId] of Object.entries(EchoAnnotations)) {
373
386
  if (annotations[annotationId] != null) {
374
387
  echoAnnotations[key as keyof JsonSchemaEchoAnnotations] = annotations[annotationId] as any;
@@ -486,7 +499,7 @@ const addJsonSchemaFields = (ast: SchemaAST.AST, schema: JsonSchemaType): Schema
486
499
  * Fixes field order.
487
500
  * Sets `$schema` prop.
488
501
  */
489
- const normalizeJsonSchema = (jsonSchema: JsonSchemaType): JsonSchemaType => {
502
+ const normalizeJsonSchema = (jsonSchema: Types.DeepMutable<JsonSchemaType>): Types.DeepMutable<JsonSchemaType> => {
490
503
  if (jsonSchema.properties && 'id' in jsonSchema.properties) {
491
504
  jsonSchema.properties = orderKeys(jsonSchema.properties, ['id']); // Put id first.
492
505
  }
@@ -0,0 +1,48 @@
1
+ //
2
+ // Copyright 2026 DXOS.org
3
+ //
4
+
5
+ import { invariant } from '@dxos/invariant';
6
+ import { deepMapValues } from '@dxos/util';
7
+
8
+ import type * as Obj from '../../Obj';
9
+ import { makeObject } from '../proxy';
10
+ import { Ref } from '../ref';
11
+ import { getMeta, getSchema } from '../types';
12
+
13
+ /**
14
+ * Clones an object or relation.
15
+ * This does not clone referenced objects, only the properties in the object.
16
+ * @returns A new object with the same schema and properties.
17
+ */
18
+ export const clone = <T extends Obj.Any>(obj: T, opts?: Obj.CloneOptions): T => {
19
+ const { id, ...data } = obj;
20
+ const schema = getSchema(obj);
21
+ invariant(schema != null, 'Object should have a schema');
22
+ const props: any = deepMapValues(data, (value, recurse) => {
23
+ if (Ref.isRef(value)) {
24
+ if (opts?.deep) {
25
+ // TODO(dmaretskyi): Will break on circular references.
26
+ return Ref.make(clone(value.target!, opts));
27
+ }
28
+ return value;
29
+ }
30
+ return recurse(value);
31
+ });
32
+
33
+ if (opts?.retainId) {
34
+ props.id = id;
35
+ }
36
+ const meta = deepMapValues(getMeta(obj), (value, recurse) => {
37
+ if (Ref.isRef(value)) {
38
+ if (opts?.deep) {
39
+ // TODO(dmaretskyi): Will break on circular references.
40
+ return Ref.make(clone(value.target!, opts));
41
+ }
42
+ return value;
43
+ }
44
+ return recurse(value);
45
+ });
46
+
47
+ return makeObject(schema, props, meta);
48
+ };
@@ -4,9 +4,8 @@
4
4
 
5
5
  import * as Schema from 'effect/Schema';
6
6
 
7
- import { type BaseObject } from '../types';
8
-
9
- import { getTypename } from './typename';
7
+ import { getTypename } from '../annotations';
8
+ import { type AnyProperties } from '../types';
10
9
 
11
10
  // TODO(dmaretskyi): Rename to represent commonality between objects and relations (e.g. `entity`).
12
11
  export type TypedObjectOptions = {
@@ -58,7 +57,7 @@ export const makeTypedEntityClass = (
58
57
  static readonly pipe = baseSchema.pipe.bind(baseSchema);
59
58
 
60
59
  // TODO(burdon): Comment required.
61
- static [Symbol.hasInstance](obj: BaseObject) {
60
+ static [Symbol.hasInstance](obj: AnyProperties) {
62
61
  return obj != null && getTypename(obj) === typename;
63
62
  }
64
63