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

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 (559) hide show
  1. package/README.md +3 -4
  2. package/dist/lib/neutral/Annotation.mjs +37 -0
  3. package/dist/lib/neutral/Database.mjs +45 -0
  4. package/dist/lib/neutral/Entity.mjs +56 -0
  5. package/dist/lib/neutral/Err.mjs +12 -0
  6. package/dist/lib/neutral/Feed.mjs +43 -0
  7. package/dist/lib/neutral/Filter.mjs +61 -0
  8. package/dist/lib/neutral/Format.mjs +66 -0
  9. package/dist/lib/neutral/Format.mjs.map +7 -0
  10. package/dist/lib/neutral/JsonSchema.mjs +18 -0
  11. package/dist/lib/neutral/JsonSchema.mjs.map +7 -0
  12. package/dist/lib/neutral/Key.mjs +12 -0
  13. package/dist/lib/neutral/Key.mjs.map +7 -0
  14. package/dist/lib/neutral/Obj.mjs +107 -0
  15. package/dist/lib/neutral/Obj.mjs.map +7 -0
  16. package/dist/lib/neutral/Order.mjs +12 -0
  17. package/dist/lib/neutral/Order.mjs.map +7 -0
  18. package/dist/lib/neutral/Query.mjs +32 -0
  19. package/dist/lib/neutral/Query.mjs.map +7 -0
  20. package/dist/lib/neutral/QueryResult.mjs +2 -0
  21. package/dist/lib/neutral/QueryResult.mjs.map +7 -0
  22. package/dist/lib/neutral/Ref.mjs +24 -0
  23. package/dist/lib/neutral/Ref.mjs.map +7 -0
  24. package/dist/lib/neutral/Relation.mjs +90 -0
  25. package/dist/lib/neutral/Relation.mjs.map +7 -0
  26. package/dist/lib/neutral/SchemaRegistry.mjs +2 -0
  27. package/dist/lib/neutral/SchemaRegistry.mjs.map +7 -0
  28. package/dist/lib/neutral/Tag.mjs +25 -0
  29. package/dist/lib/neutral/Tag.mjs.map +7 -0
  30. package/dist/lib/neutral/Type.mjs +34 -0
  31. package/dist/lib/neutral/Type.mjs.map +7 -0
  32. package/dist/lib/neutral/chunk-4KG6IGL4.mjs +67 -0
  33. package/dist/lib/neutral/chunk-4KG6IGL4.mjs.map +7 -0
  34. package/dist/lib/neutral/chunk-5ELDDYWE.mjs +130 -0
  35. package/dist/lib/neutral/chunk-5ELDDYWE.mjs.map +7 -0
  36. package/dist/lib/neutral/chunk-ALOGSVBP.mjs +299 -0
  37. package/dist/lib/neutral/chunk-ALOGSVBP.mjs.map +7 -0
  38. package/dist/lib/neutral/chunk-ANHVGJI4.mjs +21 -0
  39. package/dist/lib/neutral/chunk-ANHVGJI4.mjs.map +7 -0
  40. package/dist/lib/neutral/chunk-AQP4QKYP.mjs +283 -0
  41. package/dist/lib/neutral/chunk-AQP4QKYP.mjs.map +7 -0
  42. package/dist/lib/neutral/chunk-BRJSLACP.mjs +152 -0
  43. package/dist/lib/neutral/chunk-BRJSLACP.mjs.map +7 -0
  44. package/dist/lib/neutral/chunk-DZQSL6RW.mjs +73 -0
  45. package/dist/lib/neutral/chunk-DZQSL6RW.mjs.map +7 -0
  46. package/dist/lib/neutral/chunk-F7KMHDPJ.mjs +327 -0
  47. package/dist/lib/neutral/chunk-F7KMHDPJ.mjs.map +7 -0
  48. package/dist/lib/neutral/chunk-GAWKQ5DZ.mjs +56 -0
  49. package/dist/lib/neutral/chunk-GAWKQ5DZ.mjs.map +7 -0
  50. package/dist/lib/neutral/chunk-GFNCSK7F.mjs +101 -0
  51. package/dist/lib/neutral/chunk-GFNCSK7F.mjs.map +7 -0
  52. package/dist/lib/neutral/chunk-J5LGTIGS.mjs +10 -0
  53. package/dist/lib/neutral/chunk-J5LGTIGS.mjs.map +7 -0
  54. package/dist/lib/neutral/chunk-KGV3QIRX.mjs +313 -0
  55. package/dist/lib/neutral/chunk-KGV3QIRX.mjs.map +7 -0
  56. package/dist/lib/neutral/chunk-M2KVTHZM.mjs +402 -0
  57. package/dist/lib/neutral/chunk-M2KVTHZM.mjs.map +7 -0
  58. package/dist/lib/neutral/chunk-MXQJZCPY.mjs +51 -0
  59. package/dist/lib/neutral/chunk-MXQJZCPY.mjs.map +7 -0
  60. package/dist/lib/neutral/chunk-O3TZFQCT.mjs +27 -0
  61. package/dist/lib/neutral/chunk-O3TZFQCT.mjs.map +7 -0
  62. package/dist/lib/neutral/chunk-OMUPQMLR.mjs +7 -0
  63. package/dist/lib/neutral/chunk-OMUPQMLR.mjs.map +7 -0
  64. package/dist/lib/neutral/chunk-OVUBTQLT.mjs +45 -0
  65. package/dist/lib/neutral/chunk-OVUBTQLT.mjs.map +7 -0
  66. package/dist/lib/neutral/chunk-PP4DNUZU.mjs +3919 -0
  67. package/dist/lib/neutral/chunk-PP4DNUZU.mjs.map +7 -0
  68. package/dist/lib/neutral/chunk-QXF3LGN2.mjs +43 -0
  69. package/dist/lib/neutral/chunk-QXF3LGN2.mjs.map +7 -0
  70. package/dist/lib/neutral/chunk-T4MPQJ7X.mjs +97 -0
  71. package/dist/lib/neutral/chunk-T4MPQJ7X.mjs.map +7 -0
  72. package/dist/lib/neutral/chunk-T6JEFNP6.mjs +7 -0
  73. package/dist/lib/neutral/chunk-T6JEFNP6.mjs.map +7 -0
  74. package/dist/lib/neutral/chunk-W7OP5HGZ.mjs +121 -0
  75. package/dist/lib/neutral/chunk-W7OP5HGZ.mjs.map +7 -0
  76. package/dist/lib/neutral/chunk-ZTUBYOGB.mjs +42 -0
  77. package/dist/lib/neutral/chunk-ZTUBYOGB.mjs.map +7 -0
  78. package/dist/lib/neutral/chunk-ZWKJ4LZJ.mjs +298 -0
  79. package/dist/lib/neutral/chunk-ZWKJ4LZJ.mjs.map +7 -0
  80. package/dist/lib/neutral/index.mjs +94 -0
  81. package/dist/lib/neutral/index.mjs.map +7 -0
  82. package/dist/lib/{node-esm → neutral}/internal/index.mjs +260 -122
  83. package/dist/lib/neutral/internal/index.mjs.map +7 -0
  84. package/dist/lib/neutral/meta.json +1 -0
  85. package/dist/lib/neutral/testing/index.mjs +369 -0
  86. package/dist/lib/neutral/testing/index.mjs.map +7 -0
  87. package/dist/types/src/Annotation.d.ts +24 -0
  88. package/dist/types/src/Annotation.d.ts.map +1 -0
  89. package/dist/types/src/Collection.d.ts +16 -0
  90. package/dist/types/src/Collection.d.ts.map +1 -0
  91. package/dist/types/src/Database.d.ts +189 -0
  92. package/dist/types/src/Database.d.ts.map +1 -0
  93. package/dist/types/src/Dataset.d.ts +18 -0
  94. package/dist/types/src/Dataset.d.ts.map +1 -0
  95. package/dist/types/src/Entity.d.ts +168 -0
  96. package/dist/types/src/Entity.d.ts.map +1 -0
  97. package/dist/types/src/Entity.test.d.ts +2 -0
  98. package/dist/types/src/Entity.test.d.ts.map +1 -0
  99. package/dist/types/src/Err.d.ts +107 -0
  100. package/dist/types/src/Err.d.ts.map +1 -0
  101. package/dist/types/src/Feed.d.ts +165 -0
  102. package/dist/types/src/Feed.d.ts.map +1 -0
  103. package/dist/types/src/Filter.d.ts +120 -0
  104. package/dist/types/src/Filter.d.ts.map +1 -0
  105. package/dist/types/src/Format.d.ts +4 -0
  106. package/dist/types/src/Format.d.ts.map +1 -0
  107. package/dist/types/src/Hypergraph.d.ts +60 -0
  108. package/dist/types/src/Hypergraph.d.ts.map +1 -0
  109. package/dist/types/src/JsonSchema.d.ts +16 -0
  110. package/dist/types/src/JsonSchema.d.ts.map +1 -0
  111. package/dist/types/src/Key.d.ts +1 -0
  112. package/dist/types/src/Key.d.ts.map +1 -1
  113. package/dist/types/src/Obj.d.ts +423 -95
  114. package/dist/types/src/Obj.d.ts.map +1 -1
  115. package/dist/types/src/Obj.test.d.ts +2 -0
  116. package/dist/types/src/Obj.test.d.ts.map +1 -0
  117. package/dist/types/src/Order.d.ts +16 -0
  118. package/dist/types/src/Order.d.ts.map +1 -0
  119. package/dist/types/src/Query.d.ts +202 -0
  120. package/dist/types/src/Query.d.ts.map +1 -0
  121. package/dist/types/src/Query.test.d.ts +2 -0
  122. package/dist/types/src/Query.test.d.ts.map +1 -0
  123. package/dist/types/src/QueryResult.d.ts +80 -0
  124. package/dist/types/src/QueryResult.d.ts.map +1 -0
  125. package/dist/types/src/Ref.d.ts +61 -11
  126. package/dist/types/src/Ref.d.ts.map +1 -1
  127. package/dist/types/src/Relation.d.ts +287 -21
  128. package/dist/types/src/Relation.d.ts.map +1 -1
  129. package/dist/types/src/Relation.test.d.ts +2 -0
  130. package/dist/types/src/Relation.test.d.ts.map +1 -0
  131. package/dist/types/src/SchemaRegistry.d.ts +84 -0
  132. package/dist/types/src/SchemaRegistry.d.ts.map +1 -0
  133. package/dist/types/src/Tag.d.ts +18 -0
  134. package/dist/types/src/Tag.d.ts.map +1 -0
  135. package/dist/types/src/Type.d.ts +120 -97
  136. package/dist/types/src/Type.d.ts.map +1 -1
  137. package/dist/types/src/Type.test.d.ts +2 -0
  138. package/dist/types/src/Type.test.d.ts.map +1 -0
  139. package/dist/types/src/View.d.ts +68 -0
  140. package/dist/types/src/View.d.ts.map +1 -0
  141. package/dist/types/src/hierarchy.test.d.ts +2 -0
  142. package/dist/types/src/hierarchy.test.d.ts.map +1 -0
  143. package/dist/types/src/index.d.ts +19 -5
  144. package/dist/types/src/index.d.ts.map +1 -1
  145. package/dist/types/src/internal/annotations/annotations.d.ts +209 -0
  146. package/dist/types/src/internal/annotations/annotations.d.ts.map +1 -0
  147. package/dist/types/src/internal/annotations/annotations.test.d.ts.map +1 -0
  148. package/dist/types/src/internal/annotations/index.d.ts +3 -0
  149. package/dist/types/src/internal/annotations/index.d.ts.map +1 -0
  150. package/dist/types/src/internal/annotations/util.d.ts +39 -0
  151. package/dist/types/src/internal/annotations/util.d.ts.map +1 -0
  152. package/dist/types/src/internal/api/annotations.d.ts +23 -0
  153. package/dist/types/src/internal/api/annotations.d.ts.map +1 -0
  154. package/dist/types/src/internal/api/entity.d.ts +13 -0
  155. package/dist/types/src/internal/api/entity.d.ts.map +1 -0
  156. package/dist/types/src/internal/api/index.d.ts +15 -0
  157. package/dist/types/src/internal/api/index.d.ts.map +1 -0
  158. package/dist/types/src/internal/api/meta.d.ts +42 -0
  159. package/dist/types/src/internal/api/meta.d.ts.map +1 -0
  160. package/dist/types/src/internal/api/sorting.d.ts +24 -0
  161. package/dist/types/src/internal/api/sorting.d.ts.map +1 -0
  162. package/dist/types/src/internal/api/version.d.ts +42 -0
  163. package/dist/types/src/internal/api/version.d.ts.map +1 -0
  164. package/dist/types/src/internal/entities/entity.d.ts +20 -0
  165. package/dist/types/src/internal/entities/entity.d.ts.map +1 -0
  166. package/dist/types/src/internal/entities/index.d.ts +6 -0
  167. package/dist/types/src/internal/entities/index.d.ts.map +1 -0
  168. package/dist/types/src/internal/entities/model.d.ts +79 -0
  169. package/dist/types/src/internal/entities/model.d.ts.map +1 -0
  170. package/dist/types/src/internal/entities/object.d.ts +18 -0
  171. package/dist/types/src/internal/entities/object.d.ts.map +1 -0
  172. package/dist/types/src/internal/entities/relation.d.ts +62 -0
  173. package/dist/types/src/internal/entities/relation.d.ts.map +1 -0
  174. package/dist/types/src/internal/entities/util.d.ts +2 -0
  175. package/dist/types/src/internal/entities/util.d.ts.map +1 -0
  176. package/dist/types/src/internal/formats/format.d.ts +4 -2
  177. package/dist/types/src/internal/formats/format.d.ts.map +1 -1
  178. package/dist/types/src/internal/formats/select.d.ts +6 -4
  179. package/dist/types/src/internal/formats/select.d.ts.map +1 -1
  180. package/dist/types/src/internal/formats/string.d.ts +4 -0
  181. package/dist/types/src/internal/formats/string.d.ts.map +1 -1
  182. package/dist/types/src/internal/formats/types.d.ts +13 -9
  183. package/dist/types/src/internal/formats/types.d.ts.map +1 -1
  184. package/dist/types/src/internal/index.d.ts +7 -10
  185. package/dist/types/src/internal/index.d.ts.map +1 -1
  186. package/dist/types/src/internal/json-schema/annotations.d.ts.map +1 -0
  187. package/dist/types/src/internal/json-schema/effect-schema.test.d.ts.map +1 -0
  188. package/dist/types/src/internal/json-schema/index.d.ts +2 -0
  189. package/dist/types/src/internal/json-schema/index.d.ts.map +1 -1
  190. package/dist/types/src/internal/json-schema/json-schema-normalize.d.ts.map +1 -1
  191. package/dist/types/src/internal/json-schema/json-schema-type.d.ts +130 -29
  192. package/dist/types/src/internal/json-schema/json-schema-type.d.ts.map +1 -1
  193. package/dist/types/src/internal/{json → json-schema}/json-schema.d.ts +4 -6
  194. package/dist/types/src/internal/json-schema/json-schema.d.ts.map +1 -0
  195. package/dist/types/src/internal/json-schema/json-schema.test.d.ts.map +1 -0
  196. package/dist/types/src/internal/object/clone.d.ts +8 -0
  197. package/dist/types/src/internal/object/clone.d.ts.map +1 -0
  198. package/dist/types/src/internal/object/common.d.ts.map +1 -1
  199. package/dist/types/src/internal/object/{create.d.ts → create-object.d.ts} +10 -11
  200. package/dist/types/src/internal/object/create-object.d.ts.map +1 -0
  201. package/dist/types/src/internal/object/create-object.test.d.ts +2 -0
  202. package/dist/types/src/internal/object/create-object.test.d.ts.map +1 -0
  203. package/dist/types/src/internal/object/deleted.d.ts +2 -2
  204. package/dist/types/src/internal/object/deleted.d.ts.map +1 -1
  205. package/dist/types/src/internal/object/ids.d.ts.map +1 -1
  206. package/dist/types/src/internal/object/index.d.ts +6 -12
  207. package/dist/types/src/internal/object/index.d.ts.map +1 -1
  208. package/dist/types/src/internal/object/json-serializer.d.ts +14 -9
  209. package/dist/types/src/internal/object/json-serializer.d.ts.map +1 -1
  210. package/dist/types/src/internal/object/schema-validator.d.ts +1 -14
  211. package/dist/types/src/internal/object/schema-validator.d.ts.map +1 -1
  212. package/dist/types/src/internal/object/set-value.d.ts +7 -0
  213. package/dist/types/src/internal/object/set-value.d.ts.map +1 -0
  214. package/dist/types/src/internal/object/set-value.test.d.ts +2 -0
  215. package/dist/types/src/internal/object/set-value.test.d.ts.map +1 -0
  216. package/dist/types/src/internal/object/snapshot.d.ts +6 -0
  217. package/dist/types/src/internal/object/snapshot.d.ts.map +1 -0
  218. package/dist/types/src/internal/object/typed-object.d.ts +8 -14
  219. package/dist/types/src/internal/object/typed-object.d.ts.map +1 -1
  220. package/dist/types/src/internal/proxy/change-context.d.ts +55 -0
  221. package/dist/types/src/internal/proxy/change-context.d.ts.map +1 -0
  222. package/dist/types/src/internal/proxy/change.test.d.ts +2 -0
  223. package/dist/types/src/internal/proxy/change.test.d.ts.map +1 -0
  224. package/dist/types/src/internal/proxy/define-hidden-property.d.ts +5 -0
  225. package/dist/types/src/internal/proxy/define-hidden-property.d.ts.map +1 -0
  226. package/dist/types/src/internal/proxy/errors.d.ts +19 -0
  227. package/dist/types/src/internal/proxy/errors.d.ts.map +1 -0
  228. package/dist/types/src/internal/proxy/event-batch.d.ts +10 -0
  229. package/dist/types/src/internal/proxy/event-batch.d.ts.map +1 -0
  230. package/dist/types/src/internal/proxy/index.d.ts +14 -0
  231. package/dist/types/src/internal/proxy/index.d.ts.map +1 -0
  232. package/dist/types/src/internal/proxy/json-serializer.d.ts +6 -0
  233. package/dist/types/src/internal/proxy/json-serializer.d.ts.map +1 -0
  234. package/dist/types/src/internal/proxy/make-object.d.ts +14 -0
  235. package/dist/types/src/internal/proxy/make-object.d.ts.map +1 -0
  236. package/dist/types/src/internal/proxy/ownership.d.ts +57 -0
  237. package/dist/types/src/internal/proxy/ownership.d.ts.map +1 -0
  238. package/dist/types/src/internal/proxy/proxy-types.d.ts +18 -0
  239. package/dist/types/src/internal/proxy/proxy-types.d.ts.map +1 -0
  240. package/dist/types/src/internal/proxy/proxy-utils.d.ts +47 -0
  241. package/dist/types/src/internal/proxy/proxy-utils.d.ts.map +1 -0
  242. package/dist/types/src/internal/proxy/reactive-array.d.ts +8 -0
  243. package/dist/types/src/internal/proxy/reactive-array.d.ts.map +1 -0
  244. package/dist/types/src/internal/proxy/reactive.d.ts +39 -0
  245. package/dist/types/src/internal/proxy/reactive.d.ts.map +1 -0
  246. package/dist/types/src/internal/proxy/schema-validator.d.ts +15 -0
  247. package/dist/types/src/internal/proxy/schema-validator.d.ts.map +1 -0
  248. package/dist/types/src/internal/proxy/symbols.d.ts +3 -0
  249. package/dist/types/src/internal/proxy/symbols.d.ts.map +1 -0
  250. package/dist/types/src/internal/proxy/typed-handler.d.ts +16 -12
  251. package/dist/types/src/internal/proxy/typed-handler.d.ts.map +1 -1
  252. package/dist/types/src/internal/ref/ref-array.d.ts +4 -4
  253. package/dist/types/src/internal/ref/ref-array.d.ts.map +1 -1
  254. package/dist/types/src/internal/ref/ref.d.ts +43 -18
  255. package/dist/types/src/internal/ref/ref.d.ts.map +1 -1
  256. package/dist/types/src/internal/schema/compose.d.ts +7 -0
  257. package/dist/types/src/internal/schema/compose.d.ts.map +1 -0
  258. package/dist/types/src/internal/schema/compose.test.d.ts.map +1 -0
  259. package/dist/types/src/internal/schema/echo-schema.d.ts +25 -12
  260. package/dist/types/src/internal/schema/echo-schema.d.ts.map +1 -1
  261. package/dist/types/src/internal/schema/index.d.ts +1 -4
  262. package/dist/types/src/internal/schema/index.d.ts.map +1 -1
  263. package/dist/types/src/internal/schema/manipulation.d.ts.map +1 -1
  264. package/dist/types/src/internal/schema/persistent-schema.d.ts +20 -0
  265. package/dist/types/src/internal/schema/persistent-schema.d.ts.map +1 -0
  266. package/dist/types/src/internal/types/base.d.ts +27 -0
  267. package/dist/types/src/internal/types/base.d.ts.map +1 -0
  268. package/dist/types/src/internal/types/entity.d.ts +37 -0
  269. package/dist/types/src/internal/types/entity.d.ts.map +1 -0
  270. package/dist/types/src/internal/types/index.d.ts +5 -2
  271. package/dist/types/src/internal/types/index.d.ts.map +1 -1
  272. package/dist/types/src/internal/{object → types}/meta.d.ts +16 -14
  273. package/dist/types/src/internal/types/meta.d.ts.map +1 -0
  274. package/dist/types/src/internal/types/typename.d.ts +21 -0
  275. package/dist/types/src/internal/types/typename.d.ts.map +1 -0
  276. package/dist/types/src/internal/types/version.d.ts +15 -0
  277. package/dist/types/src/internal/types/version.d.ts.map +1 -0
  278. package/dist/types/src/{test → testing}/api.test.d.ts.map +1 -1
  279. package/dist/types/src/testing/index.d.ts +3 -3
  280. package/dist/types/src/testing/index.d.ts.map +1 -1
  281. package/dist/types/src/testing/test-data.d.ts +18 -0
  282. package/dist/types/src/testing/test-data.d.ts.map +1 -0
  283. package/dist/types/src/testing/test-schema.d.ts +304 -0
  284. package/dist/types/src/testing/test-schema.d.ts.map +1 -0
  285. package/dist/types/src/testing/util.d.ts +21 -0
  286. package/dist/types/src/testing/util.d.ts.map +1 -0
  287. package/dist/types/tsconfig.tsbuildinfo +1 -1
  288. package/package.json +106 -65
  289. package/src/Annotation.ts +46 -0
  290. package/src/Collection.ts +30 -0
  291. package/src/Database.ts +315 -0
  292. package/src/Dataset.ts +24 -0
  293. package/src/Entity.test.ts +22 -0
  294. package/src/Entity.ts +234 -0
  295. package/src/Err.ts +38 -0
  296. package/src/Feed.ts +254 -0
  297. package/src/Filter.ts +389 -0
  298. package/src/Format.ts +9 -0
  299. package/src/Hypergraph.ts +74 -0
  300. package/src/JsonSchema.ts +24 -0
  301. package/src/Key.ts +3 -0
  302. package/src/Obj.test.ts +447 -0
  303. package/src/Obj.ts +588 -248
  304. package/src/Order.ts +44 -0
  305. package/src/Query.test.ts +632 -0
  306. package/src/Query.ts +520 -0
  307. package/src/QueryResult.ts +106 -0
  308. package/src/Ref.ts +77 -9
  309. package/src/Relation.test.ts +88 -0
  310. package/src/Relation.ts +440 -58
  311. package/src/SchemaRegistry.ts +106 -0
  312. package/src/Tag.ts +39 -0
  313. package/src/Type.test.ts +52 -0
  314. package/src/Type.ts +162 -151
  315. package/src/View.ts +100 -0
  316. package/src/hierarchy.test.ts +33 -0
  317. package/src/index.ts +20 -6
  318. package/src/internal/README.md +102 -0
  319. package/src/internal/{ast → annotations}/annotations.test.ts +18 -20
  320. package/src/internal/annotations/annotations.ts +526 -0
  321. package/src/internal/annotations/index.ts +6 -0
  322. package/src/internal/annotations/util.ts +85 -0
  323. package/src/internal/api/annotations.ts +60 -0
  324. package/src/internal/api/entity.ts +29 -0
  325. package/src/internal/api/index.ts +19 -0
  326. package/src/internal/api/meta.ts +88 -0
  327. package/src/internal/api/sorting.ts +53 -0
  328. package/src/internal/api/version.ts +96 -0
  329. package/src/internal/entities/entity.ts +128 -0
  330. package/src/internal/entities/index.ts +9 -0
  331. package/src/internal/entities/model.ts +138 -0
  332. package/src/internal/entities/object.ts +58 -0
  333. package/src/internal/entities/relation.ts +171 -0
  334. package/src/internal/entities/util.ts +33 -0
  335. package/src/internal/formats/date.test.ts +1 -1
  336. package/src/internal/formats/date.ts +5 -5
  337. package/src/internal/formats/format.test.ts +6 -6
  338. package/src/internal/formats/format.ts +8 -6
  339. package/src/internal/formats/number.ts +5 -5
  340. package/src/internal/formats/object.ts +4 -4
  341. package/src/internal/formats/select.ts +6 -4
  342. package/src/internal/formats/string.ts +14 -9
  343. package/src/internal/formats/types.ts +53 -42
  344. package/src/internal/index.ts +30 -13
  345. package/src/internal/{json → json-schema}/annotations.ts +1 -1
  346. package/src/internal/json-schema/index.ts +2 -0
  347. package/src/internal/json-schema/json-schema-normalize.ts +4 -2
  348. package/src/internal/json-schema/json-schema-type.ts +35 -35
  349. package/src/internal/{json → json-schema}/json-schema.test.ts +232 -97
  350. package/src/internal/{json → json-schema}/json-schema.ts +79 -93
  351. package/src/internal/object/clone.ts +48 -0
  352. package/src/internal/object/common.ts +3 -4
  353. package/src/internal/object/{create.test.ts → create-object.test.ts} +31 -33
  354. package/src/internal/object/{create.ts → create-object.ts} +36 -37
  355. package/src/internal/object/deleted.ts +6 -6
  356. package/src/internal/object/ids.ts +1 -1
  357. package/src/internal/object/index.ts +6 -12
  358. package/src/internal/object/inspect.ts +5 -7
  359. package/src/internal/object/json-serializer.test.ts +59 -37
  360. package/src/internal/object/json-serializer.ts +87 -108
  361. package/src/internal/object/schema-validator.test.ts +3 -7
  362. package/src/internal/object/schema-validator.ts +2 -237
  363. package/src/internal/object/set-value.test.ts +281 -0
  364. package/src/internal/object/set-value.ts +165 -0
  365. package/src/internal/object/snapshot.ts +96 -0
  366. package/src/internal/object/typed-object.test.ts +11 -11
  367. package/src/internal/object/typed-object.ts +8 -59
  368. package/src/internal/proxy/change-context.ts +138 -0
  369. package/src/internal/proxy/change.test.ts +519 -0
  370. package/src/internal/proxy/define-hidden-property.ts +14 -0
  371. package/src/internal/proxy/errors.ts +42 -0
  372. package/src/internal/proxy/event-batch.ts +44 -0
  373. package/src/internal/proxy/handler.test.ts +51 -91
  374. package/src/internal/proxy/index.ts +17 -0
  375. package/src/internal/proxy/json-serializer.ts +87 -0
  376. package/src/internal/proxy/make-object.ts +106 -0
  377. package/src/internal/proxy/ownership.ts +253 -0
  378. package/src/internal/proxy/proxy-types.ts +23 -0
  379. package/src/internal/proxy/proxy-utils.ts +150 -0
  380. package/src/internal/proxy/reactive-array.ts +71 -0
  381. package/src/internal/proxy/reactive.ts +69 -0
  382. package/src/internal/proxy/schema-validator.ts +244 -0
  383. package/src/internal/proxy/schema.test.ts +27 -18
  384. package/src/internal/proxy/symbols.ts +7 -0
  385. package/src/internal/proxy/typed-handler.test.ts +260 -48
  386. package/src/internal/proxy/typed-handler.ts +283 -61
  387. package/src/internal/proxy/typed-object.test.ts +54 -38
  388. package/src/internal/ref/ref-array.ts +4 -4
  389. package/src/internal/ref/ref.test.ts +10 -9
  390. package/src/internal/ref/ref.ts +107 -56
  391. package/src/internal/{projection → schema}/compose.test.ts +8 -9
  392. package/src/internal/{projection → schema}/compose.ts +13 -8
  393. package/src/internal/schema/echo-schema.ts +74 -33
  394. package/src/internal/schema/index.ts +1 -4
  395. package/src/internal/schema/manipulation.ts +7 -1
  396. package/src/internal/schema/persistent-schema.ts +33 -0
  397. package/src/internal/types/base.ts +43 -0
  398. package/src/internal/types/entity.ts +54 -0
  399. package/src/internal/types/index.ts +5 -2
  400. package/src/internal/types/meta.ts +68 -0
  401. package/src/internal/types/typename.ts +55 -0
  402. package/src/internal/types/version.ts +19 -0
  403. package/src/testing/api.test.ts +126 -0
  404. package/src/testing/index.ts +3 -3
  405. package/src/testing/test-data.ts +130 -0
  406. package/src/testing/test-schema.ts +240 -0
  407. package/src/testing/util.ts +85 -0
  408. package/dist/lib/browser/chunk-MWLA34S5.mjs +0 -3843
  409. package/dist/lib/browser/chunk-MWLA34S5.mjs.map +0 -7
  410. package/dist/lib/browser/chunk-OAZJQHVO.mjs +0 -453
  411. package/dist/lib/browser/chunk-OAZJQHVO.mjs.map +0 -7
  412. package/dist/lib/browser/chunk-ORIE2FMS.mjs +0 -514
  413. package/dist/lib/browser/chunk-ORIE2FMS.mjs.map +0 -7
  414. package/dist/lib/browser/index.mjs +0 -43
  415. package/dist/lib/browser/internal/index.mjs +0 -326
  416. package/dist/lib/browser/meta.json +0 -1
  417. package/dist/lib/browser/query/index.mjs +0 -23
  418. package/dist/lib/browser/testing/index.mjs +0 -298
  419. package/dist/lib/browser/testing/index.mjs.map +0 -7
  420. package/dist/lib/node-esm/chunk-AXWVDOP7.mjs +0 -453
  421. package/dist/lib/node-esm/chunk-AXWVDOP7.mjs.map +0 -7
  422. package/dist/lib/node-esm/chunk-L4PBAJDP.mjs +0 -514
  423. package/dist/lib/node-esm/chunk-L4PBAJDP.mjs.map +0 -7
  424. package/dist/lib/node-esm/chunk-YTNLFBIK.mjs +0 -3843
  425. package/dist/lib/node-esm/chunk-YTNLFBIK.mjs.map +0 -7
  426. package/dist/lib/node-esm/index.mjs +0 -43
  427. package/dist/lib/node-esm/meta.json +0 -1
  428. package/dist/lib/node-esm/query/index.mjs +0 -23
  429. package/dist/lib/node-esm/testing/index.mjs +0 -298
  430. package/dist/lib/node-esm/testing/index.mjs.map +0 -7
  431. package/dist/types/src/errors.d.ts +0 -72
  432. package/dist/types/src/errors.d.ts.map +0 -1
  433. package/dist/types/src/internal/ast/annotation-helper.d.ts +0 -8
  434. package/dist/types/src/internal/ast/annotation-helper.d.ts.map +0 -1
  435. package/dist/types/src/internal/ast/annotations.d.ts +0 -119
  436. package/dist/types/src/internal/ast/annotations.d.ts.map +0 -1
  437. package/dist/types/src/internal/ast/annotations.test.d.ts.map +0 -1
  438. package/dist/types/src/internal/ast/entity-kind.d.ts +0 -10
  439. package/dist/types/src/internal/ast/entity-kind.d.ts.map +0 -1
  440. package/dist/types/src/internal/ast/index.d.ts +0 -5
  441. package/dist/types/src/internal/ast/index.d.ts.map +0 -1
  442. package/dist/types/src/internal/ast/types.d.ts +0 -6
  443. package/dist/types/src/internal/ast/types.d.ts.map +0 -1
  444. package/dist/types/src/internal/json/annotations.d.ts.map +0 -1
  445. package/dist/types/src/internal/json/effect-schema.test.d.ts.map +0 -1
  446. package/dist/types/src/internal/json/index.d.ts +0 -2
  447. package/dist/types/src/internal/json/index.d.ts.map +0 -1
  448. package/dist/types/src/internal/json/json-schema.d.ts.map +0 -1
  449. package/dist/types/src/internal/json/json-schema.test.d.ts.map +0 -1
  450. package/dist/types/src/internal/object/accessors.d.ts +0 -29
  451. package/dist/types/src/internal/object/accessors.d.ts.map +0 -1
  452. package/dist/types/src/internal/object/create.d.ts.map +0 -1
  453. package/dist/types/src/internal/object/create.test.d.ts +0 -2
  454. package/dist/types/src/internal/object/create.test.d.ts.map +0 -1
  455. package/dist/types/src/internal/object/entity.d.ts +0 -22
  456. package/dist/types/src/internal/object/entity.d.ts.map +0 -1
  457. package/dist/types/src/internal/object/expando.d.ts +0 -14
  458. package/dist/types/src/internal/object/expando.d.ts.map +0 -1
  459. package/dist/types/src/internal/object/meta.d.ts.map +0 -1
  460. package/dist/types/src/internal/object/model.d.ts +0 -117
  461. package/dist/types/src/internal/object/model.d.ts.map +0 -1
  462. package/dist/types/src/internal/object/relation.d.ts +0 -17
  463. package/dist/types/src/internal/object/relation.d.ts.map +0 -1
  464. package/dist/types/src/internal/object/typed-relation.d.ts +0 -32
  465. package/dist/types/src/internal/object/typed-relation.d.ts.map +0 -1
  466. package/dist/types/src/internal/object/typename.d.ts +0 -15
  467. package/dist/types/src/internal/object/typename.d.ts.map +0 -1
  468. package/dist/types/src/internal/object/version.d.ts +0 -14
  469. package/dist/types/src/internal/object/version.d.ts.map +0 -1
  470. package/dist/types/src/internal/projection/compose.d.ts +0 -6
  471. package/dist/types/src/internal/projection/compose.d.ts.map +0 -1
  472. package/dist/types/src/internal/projection/compose.test.d.ts.map +0 -1
  473. package/dist/types/src/internal/projection/index.d.ts +0 -2
  474. package/dist/types/src/internal/projection/index.d.ts.map +0 -1
  475. package/dist/types/src/internal/proxy/reactive-object.d.ts +0 -15
  476. package/dist/types/src/internal/proxy/reactive-object.d.ts.map +0 -1
  477. package/dist/types/src/internal/query/index.d.ts +0 -2
  478. package/dist/types/src/internal/query/index.d.ts.map +0 -1
  479. package/dist/types/src/internal/query/query.d.ts +0 -17
  480. package/dist/types/src/internal/query/query.d.ts.map +0 -1
  481. package/dist/types/src/internal/schema/runtime-schema-registry.d.ts +0 -18
  482. package/dist/types/src/internal/schema/runtime-schema-registry.d.ts.map +0 -1
  483. package/dist/types/src/internal/schema/snapshot.d.ts +0 -6
  484. package/dist/types/src/internal/schema/snapshot.d.ts.map +0 -1
  485. package/dist/types/src/internal/schema/stored-schema.d.ts +0 -13
  486. package/dist/types/src/internal/schema/stored-schema.d.ts.map +0 -1
  487. package/dist/types/src/internal/testing/index.d.ts +0 -3
  488. package/dist/types/src/internal/testing/index.d.ts.map +0 -1
  489. package/dist/types/src/internal/testing/types.d.ts +0 -455
  490. package/dist/types/src/internal/testing/types.d.ts.map +0 -1
  491. package/dist/types/src/internal/testing/utils.d.ts +0 -10
  492. package/dist/types/src/internal/testing/utils.d.ts.map +0 -1
  493. package/dist/types/src/internal/types/types.d.ts +0 -79
  494. package/dist/types/src/internal/types/types.d.ts.map +0 -1
  495. package/dist/types/src/internal/types/types.test.d.ts +0 -2
  496. package/dist/types/src/internal/types/types.test.d.ts.map +0 -1
  497. package/dist/types/src/internal/types/util.d.ts +0 -5
  498. package/dist/types/src/internal/types/util.d.ts.map +0 -1
  499. package/dist/types/src/query/index.d.ts +0 -3
  500. package/dist/types/src/query/index.d.ts.map +0 -1
  501. package/dist/types/src/query/query.d.ts +0 -247
  502. package/dist/types/src/query/query.d.ts.map +0 -1
  503. package/dist/types/src/query/query.test.d.ts +0 -2
  504. package/dist/types/src/query/query.test.d.ts.map +0 -1
  505. package/dist/types/src/query/tag.d.ts +0 -18
  506. package/dist/types/src/query/tag.d.ts.map +0 -1
  507. package/dist/types/src/testing/echo-schema.d.ts +0 -7
  508. package/dist/types/src/testing/echo-schema.d.ts.map +0 -1
  509. package/dist/types/src/testing/types.d.ts +0 -113
  510. package/dist/types/src/testing/types.d.ts.map +0 -1
  511. package/src/errors.ts +0 -18
  512. package/src/internal/ast/annotation-helper.ts +0 -22
  513. package/src/internal/ast/annotations.ts +0 -212
  514. package/src/internal/ast/entity-kind.ts +0 -15
  515. package/src/internal/ast/index.ts +0 -8
  516. package/src/internal/ast/types.ts +0 -17
  517. package/src/internal/json/index.ts +0 -5
  518. package/src/internal/object/accessors.ts +0 -115
  519. package/src/internal/object/entity.ts +0 -204
  520. package/src/internal/object/expando.ts +0 -21
  521. package/src/internal/object/meta.ts +0 -62
  522. package/src/internal/object/model.ts +0 -170
  523. package/src/internal/object/relation.ts +0 -24
  524. package/src/internal/object/typed-relation.ts +0 -85
  525. package/src/internal/object/typename.ts +0 -61
  526. package/src/internal/object/version.ts +0 -22
  527. package/src/internal/projection/index.ts +0 -5
  528. package/src/internal/proxy/reactive-object.ts +0 -108
  529. package/src/internal/query/index.ts +0 -5
  530. package/src/internal/query/query.ts +0 -23
  531. package/src/internal/schema/runtime-schema-registry.ts +0 -78
  532. package/src/internal/schema/snapshot.ts +0 -25
  533. package/src/internal/schema/stored-schema.ts +0 -26
  534. package/src/internal/testing/index.ts +0 -6
  535. package/src/internal/testing/types.ts +0 -211
  536. package/src/internal/testing/utils.ts +0 -54
  537. package/src/internal/types/types.test.ts +0 -48
  538. package/src/internal/types/types.ts +0 -176
  539. package/src/internal/types/util.ts +0 -9
  540. package/src/query/index.ts +0 -6
  541. package/src/query/query.test.ts +0 -362
  542. package/src/query/query.ts +0 -784
  543. package/src/query/tag.ts +0 -35
  544. package/src/test/api.test.ts +0 -180
  545. package/src/testing/echo-schema.ts +0 -39
  546. package/src/testing/types.ts +0 -91
  547. /package/dist/lib/{browser/index.mjs.map → neutral/Annotation.mjs.map} +0 -0
  548. /package/dist/lib/{browser/internal/index.mjs.map → neutral/Database.mjs.map} +0 -0
  549. /package/dist/lib/{browser/query/index.mjs.map → neutral/Entity.mjs.map} +0 -0
  550. /package/dist/lib/{node-esm/index.mjs.map → neutral/Err.mjs.map} +0 -0
  551. /package/dist/lib/{node-esm/internal/index.mjs.map → neutral/Feed.mjs.map} +0 -0
  552. /package/dist/lib/{node-esm/query/index.mjs.map → neutral/Filter.mjs.map} +0 -0
  553. /package/dist/types/src/internal/{ast → annotations}/annotations.test.d.ts +0 -0
  554. /package/dist/types/src/internal/{json → json-schema}/annotations.d.ts +0 -0
  555. /package/dist/types/src/internal/{json → json-schema}/effect-schema.test.d.ts +0 -0
  556. /package/dist/types/src/internal/{json → json-schema}/json-schema.test.d.ts +0 -0
  557. /package/dist/types/src/internal/{projection → schema}/compose.test.d.ts +0 -0
  558. /package/dist/types/src/{test → testing}/api.test.d.ts +0 -0
  559. /package/src/internal/{json → json-schema}/effect-schema.test.ts +0 -0
@@ -8,10 +8,12 @@ import * as SchemaAST from 'effect/SchemaAST';
8
8
  import { invariant } from '@dxos/invariant';
9
9
  import { type ObjectId } from '@dxos/keys';
10
10
 
11
- import { type SchemaMeta, SchemaMetaSymbol, type TypeAnnotation, getTypeAnnotation } from '../ast';
12
- import { toEffectSchema, toJsonSchema } from '../json';
13
- import { type JsonSchemaType } from '../json-schema';
14
- import { type TypedObject, type TypedObjectPrototype } from '../object';
11
+ import type * as Type from '../../Type';
12
+ import { type SchemaMeta, SchemaMetaSymbol, type TypeAnnotation, getTypeAnnotation } from '../annotations';
13
+ import { type JsonSchemaType, toEffectSchema, toJsonSchema } from '../json-schema';
14
+ import { type TypedObject, type TypedObjectPrototype, getSnapshot } from '../object';
15
+ import { ChangeId } from '../proxy';
16
+ import { EntityKind, SchemaKindId } from '../types';
15
17
 
16
18
  import {
17
19
  addFieldsToSchema,
@@ -20,14 +22,14 @@ import {
20
22
  updateFieldNameInSchema,
21
23
  updateFieldsInSchema,
22
24
  } from './manipulation';
23
- import { getSnapshot } from './snapshot';
24
- import { StoredSchema } from './stored-schema';
25
+ import { PersistentSchema } from './persistent-schema';
25
26
 
26
27
  /**
27
28
  * Base schema type.
28
29
  */
29
30
  // TODO(burdon): Merge with ImmutableSchema.
30
31
  export interface BaseSchema<A = any, I = any> extends TypedObject<A, I> {
32
+ // TODO(burdon): Different from mutable?
31
33
  get readonly(): boolean;
32
34
  // TODO(burdon): Change to external function.
33
35
  get mutable(): EchoSchema<A, I>;
@@ -83,6 +85,10 @@ export class ImmutableSchema<A = any, I = any> implements BaseSchema<A, I> {
83
85
  // TypedObject
84
86
  //
85
87
 
88
+ get kind(): EntityKind {
89
+ return this._objectAnnotation.kind;
90
+ }
91
+
86
92
  get typename(): string {
87
93
  return this._objectAnnotation.typename;
88
94
  }
@@ -124,8 +130,10 @@ const EchoSchemaConstructor = (): TypedObjectPrototype => {
124
130
  */
125
131
  return class {
126
132
  private static get _schema() {
127
- // The field is DynamicEchoSchema in runtime, but is serialized as StoredEchoSchema in automerge.
128
- return Schema.Union(StoredSchema, Schema.instanceOf(EchoSchema)).annotations(StoredSchema.ast.annotations);
133
+ // The field is DynamicEchoSchema in runtime, but is serialized as PersisentSchema in automerge.
134
+ return Schema.Union(PersistentSchema, Schema.instanceOf(EchoSchema)).annotations(
135
+ PersistentSchema.ast.annotations,
136
+ );
129
137
  }
130
138
 
131
139
  static readonly [Schema.TypeId] = schemaVariance;
@@ -159,7 +167,7 @@ const schemaVariance = {
159
167
  };
160
168
 
161
169
  /**
162
- * Represents a schema that is stored in the ECHO database.
170
+ * Represents a schema that is persisted in the ECHO database.
163
171
  * Schema can me mutable or readonly (specified by the {@link EchoSchema.readonly} field).
164
172
  *
165
173
  * Schema that can be modified at runtime via the API.
@@ -170,20 +178,26 @@ const schemaVariance = {
170
178
  *
171
179
  * @example
172
180
  * ```ts
173
- * export class TableType extends Schema.Struct({...}).pipe(Type.Obj({ typename: 'example.org/type/Table', version: '0.1.0' })){
181
+ * export class TableType extends Schema.Struct({...}).pipe(Type.object({ typename: 'example.org/type/Table', version: '0.1.0' })){
174
182
  * title: Schema.String,
175
183
  * schema: Schema.optional(ref(EchoSchema)),
176
184
  * props: Schema.mutable(S.Array(TablePropSchema)),
177
185
  * }) {}
178
186
  * ```
179
187
  *
180
- * The ECHO API will translate any references to StoredSchema objects to be resolved as EchoSchema objects.
188
+ * The ECHO API will translate any references to PersistentSchema objects to be resolved as EchoSchema objects.
181
189
  */
182
190
  export class EchoSchema<A = any, I = any> extends EchoSchemaConstructor() implements BaseSchema<A, I> {
183
191
  private _schema: Schema.Schema.AnyNoContext | undefined;
184
192
  private _isDirty = true;
185
193
 
186
- constructor(private readonly _storedSchema: StoredSchema) {
194
+ /**
195
+ * Schema kind key that marks this as an ECHO schema.
196
+ * Makes EchoSchema satisfy the Type.AnyObj type.
197
+ */
198
+ readonly [SchemaKindId]: EntityKind.Object = EntityKind.Object;
199
+
200
+ constructor(private readonly _persistentSchema: PersistentSchema) {
187
201
  super();
188
202
  }
189
203
 
@@ -196,11 +210,11 @@ export class EchoSchema<A = any, I = any> extends EchoSchemaConstructor() implem
196
210
  }
197
211
 
198
212
  public get Type() {
199
- return this._storedSchema as A;
213
+ return this._persistentSchema as A;
200
214
  }
201
215
 
202
216
  public get Encoded() {
203
- return this._storedSchema as I;
217
+ return this._persistentSchema as I;
204
218
  }
205
219
 
206
220
  public get Context() {
@@ -227,12 +241,17 @@ export class EchoSchema<A = any, I = any> extends EchoSchemaConstructor() implem
227
241
  // BaseSchema
228
242
  //
229
243
 
244
+ public get kind(): EntityKind.Object {
245
+ // Dynamic schemas are always object schemas.
246
+ return EntityKind.Object;
247
+ }
248
+
230
249
  public get typename(): string {
231
- return this._storedSchema.typename;
250
+ return this._persistentSchema.typename;
232
251
  }
233
252
 
234
253
  public get version(): string {
235
- return this._storedSchema.version;
254
+ return this._persistentSchema.version;
236
255
  }
237
256
 
238
257
  public get readonly(): boolean {
@@ -247,10 +266,10 @@ export class EchoSchema<A = any, I = any> extends EchoSchemaConstructor() implem
247
266
  }
248
267
 
249
268
  /**
250
- * @reactive
269
+ * Returns the JSON schema for the schema.
251
270
  */
252
271
  public get jsonSchema(): JsonSchemaType {
253
- return this._storedSchema.jsonSchema;
272
+ return this._persistentSchema.jsonSchema;
254
273
  }
255
274
 
256
275
  /**
@@ -269,25 +288,25 @@ export class EchoSchema<A = any, I = any> extends EchoSchemaConstructor() implem
269
288
  * Id of the ECHO object containing the schema.
270
289
  */
271
290
  public get id(): ObjectId {
272
- return this._storedSchema.id;
291
+ return this._persistentSchema.id;
273
292
  }
274
293
 
275
294
  /**
276
295
  * Short name of the schema.
277
296
  */
278
297
  public get name(): string | undefined {
279
- return this._storedSchema.name;
298
+ return this._persistentSchema.name;
280
299
  }
281
300
 
282
301
  public get [SchemaMetaSymbol](): SchemaMeta {
283
- return { id: this.id, typename: this.typename, version: this._storedSchema.version };
302
+ return { id: this.id, typename: this.typename, version: this._persistentSchema.version };
284
303
  }
285
304
 
286
305
  /**
287
- * Reference to the underlying stored schema object.
306
+ * Reference to the underlying persistent schema object.
288
307
  */
289
- public get storedSchema(): StoredSchema {
290
- return this._storedSchema;
308
+ public get persistentSchema(): Type.PersistentType {
309
+ return this._persistentSchema as Type.PersistentType;
291
310
  }
292
311
 
293
312
  public getProperties(): SchemaAST.PropertySignature[] {
@@ -307,8 +326,10 @@ export class EchoSchema<A = any, I = any> extends EchoSchemaConstructor() implem
307
326
  */
308
327
  public updateTypename(typename: string): void {
309
328
  const updated = setTypenameInSchema(this._getSchema(), typename);
310
- this._storedSchema.typename = typename;
311
- this._storedSchema.jsonSchema = toJsonSchema(updated);
329
+ this._change((schema) => {
330
+ schema.typename = typename;
331
+ schema.jsonSchema = toJsonSchema(updated);
332
+ });
312
333
  }
313
334
 
314
335
  /**
@@ -316,7 +337,9 @@ export class EchoSchema<A = any, I = any> extends EchoSchemaConstructor() implem
316
337
  */
317
338
  public addFields(fields: Schema.Struct.Fields): void {
318
339
  const extended = addFieldsToSchema(this._getSchema(), fields);
319
- this._storedSchema.jsonSchema = toJsonSchema(extended);
340
+ this._change((schema) => {
341
+ schema.jsonSchema = toJsonSchema(extended);
342
+ });
320
343
  }
321
344
 
322
345
  /**
@@ -324,7 +347,9 @@ export class EchoSchema<A = any, I = any> extends EchoSchemaConstructor() implem
324
347
  */
325
348
  public updateFields(fields: Schema.Struct.Fields): void {
326
349
  const updated = updateFieldsInSchema(this._getSchema(), fields);
327
- this._storedSchema.jsonSchema = toJsonSchema(updated);
350
+ this._change((schema) => {
351
+ schema.jsonSchema = toJsonSchema(updated);
352
+ });
328
353
  }
329
354
 
330
355
  /**
@@ -332,7 +357,9 @@ export class EchoSchema<A = any, I = any> extends EchoSchemaConstructor() implem
332
357
  */
333
358
  public updateFieldPropertyName({ before, after }: { before: PropertyKey; after: PropertyKey }): void {
334
359
  const renamed = updateFieldNameInSchema(this._getSchema(), { before, after });
335
- this._storedSchema.jsonSchema = toJsonSchema(renamed);
360
+ this._change((schema) => {
361
+ schema.jsonSchema = toJsonSchema(renamed);
362
+ });
336
363
  }
337
364
 
338
365
  /**
@@ -340,7 +367,21 @@ export class EchoSchema<A = any, I = any> extends EchoSchemaConstructor() implem
340
367
  */
341
368
  public removeFields(fieldNames: string[]): void {
342
369
  const removed = removeFieldsFromSchema(this._getSchema(), fieldNames);
343
- this._storedSchema.jsonSchema = toJsonSchema(removed);
370
+ this._change((schema) => {
371
+ schema.jsonSchema = toJsonSchema(removed);
372
+ });
373
+ }
374
+
375
+ /**
376
+ * Wrapper for Obj.change that handles the change context for the persistent schema.
377
+ */
378
+ private _change(callback: (schema: PersistentSchema) => void): void {
379
+ const changeFn = (this._persistentSchema as any)[ChangeId];
380
+ if (changeFn) {
381
+ changeFn(callback);
382
+ } else {
383
+ callback(this._persistentSchema);
384
+ }
344
385
  }
345
386
 
346
387
  //
@@ -348,7 +389,7 @@ export class EchoSchema<A = any, I = any> extends EchoSchemaConstructor() implem
348
389
  //
349
390
 
350
391
  /**
351
- * Called by EchoSchemaRegistry on update.
392
+ * Called by DatabaseSchemaRegistry on update.
352
393
  */
353
394
  _invalidate(): void {
354
395
  this._isDirty = true;
@@ -359,12 +400,12 @@ export class EchoSchema<A = any, I = any> extends EchoSchemaConstructor() implem
359
400
  */
360
401
  _rebuild(): void {
361
402
  if (this._isDirty || this._schema == null) {
362
- this._schema = toEffectSchema(getSnapshot(this._storedSchema.jsonSchema));
403
+ this._schema = toEffectSchema(getSnapshot(this._persistentSchema).jsonSchema);
363
404
  this._isDirty = false;
364
405
  }
365
406
  }
366
407
 
367
- private _getSchema(): Schema.Schema.AnyNoContext {
408
+ _getSchema(): Schema.Schema.AnyNoContext {
368
409
  this._rebuild();
369
410
  return this._schema!;
370
411
  }
@@ -3,8 +3,5 @@
3
3
  //
4
4
 
5
5
  export * from './echo-schema';
6
- export * from './snapshot';
7
- export * from './stored-schema';
8
- export * from './runtime-schema-registry';
9
6
  export * from './manipulation';
10
- export * from './echo-schema';
7
+ export * from './persistent-schema';
@@ -6,8 +6,9 @@ import * as Schema from 'effect/Schema';
6
6
  import * as SchemaAST from 'effect/SchemaAST';
7
7
 
8
8
  import { invariant } from '@dxos/invariant';
9
+ import { DXN } from '@dxos/keys';
9
10
 
10
- import { type TypeAnnotation, TypeAnnotationId } from '../ast';
11
+ import { type TypeAnnotation, TypeAnnotationId, TypeIdentifierAnnotationId } from '../annotations';
11
12
 
12
13
  // TODO(ZaymonFC): Do this one at a time. This might be dangerous.
13
14
  export const addFieldsToSchema = (
@@ -82,5 +83,10 @@ export const setTypenameInSchema = (
82
83
  typename,
83
84
  version: existingAnnotation.version,
84
85
  } satisfies TypeAnnotation,
86
+ [SchemaAST.JSONSchemaAnnotationId]: {
87
+ ...(schema.ast.annotations[SchemaAST.JSONSchemaAnnotationId] ?? {}),
88
+ $id: schema.ast.annotations[TypeIdentifierAnnotationId] ?? DXN.fromTypename(typename).toString(),
89
+ typename,
90
+ },
85
91
  });
86
92
  };
@@ -0,0 +1,33 @@
1
+ //
2
+ // Copyright 2024 DXOS.org
3
+ //
4
+
5
+ import * as Schema from 'effect/Schema';
6
+
7
+ import { IconAnnotation } from '../annotations';
8
+ import { LabelAnnotation, TypenameSchema, VersionSchema } from '../annotations';
9
+ import { EchoObjectSchema } from '../entities';
10
+ import { JsonSchemaType } from '../json-schema';
11
+
12
+ /**
13
+ * Persistent representation of a schema.
14
+ */
15
+ // TODO(burdon): Move.
16
+ export const PersistentSchema = Schema.Struct({
17
+ name: Schema.optional(Schema.String),
18
+ typename: TypenameSchema,
19
+ version: VersionSchema,
20
+ jsonSchema: JsonSchemaType,
21
+ }).pipe(
22
+ EchoObjectSchema({
23
+ typename: 'dxos.org/type/Schema',
24
+ version: '0.1.0',
25
+ }),
26
+ LabelAnnotation.set(['name']),
27
+ IconAnnotation.set({
28
+ icon: 'ph--brackets-curly--regular',
29
+ hue: 'blue',
30
+ }),
31
+ );
32
+
33
+ export interface PersistentSchema extends Schema.Schema.Type<typeof PersistentSchema> {}
@@ -0,0 +1,43 @@
1
+ //
2
+ // Copyright 2024 DXOS.org
3
+ //
4
+
5
+ import * as Schema from 'effect/Schema';
6
+ import * as SchemaAST from 'effect/SchemaAST';
7
+
8
+ import { type ObjectId } from '@dxos/keys';
9
+
10
+ import { type ATTR_META, type ObjectMeta } from './meta';
11
+
12
+ /**
13
+ * Base type for all data objects (reactive, ECHO, and other raw objects).
14
+ * NOTE: This describes the base type for all database objects.
15
+ * It is stricter than `T extends {}` or `T extends object`.
16
+ */
17
+ // TODO(burdon): Prefer Record<string, unknown>.
18
+ export type AnyProperties = Record<string, any>;
19
+
20
+ /**
21
+ * Canonical type for all ECHO entities (objects and relations).
22
+ * @depreacted Remove, use Entity.Unknown instead.
23
+ */
24
+ // TODO(wittjosiah): Remove. Prefer higher level types (e.g. Entity.Unknown).
25
+ export interface AnyEntity {
26
+ readonly id: ObjectId;
27
+ }
28
+
29
+ export type ExcludeId<T extends AnyProperties> = Omit<T, 'id'>;
30
+
31
+ export type PropertyKey<T extends AnyProperties> = Extract<keyof ExcludeId<T>, string>;
32
+
33
+ // TODO(dmaretskyi): Remove. This should be using the symbol type.
34
+ type WithMeta = { [ATTR_META]?: ObjectMeta };
35
+
36
+ /**
37
+ * The raw object should not include the ECHO id, but may include metadata.
38
+ */
39
+ export const RawObject = <S extends Schema.Schema.AnyNoContext>(
40
+ schema: S,
41
+ ): Schema.Schema<ExcludeId<Schema.Schema.Type<S>> & WithMeta, Schema.Schema.Encoded<S>> => {
42
+ return Schema.make(SchemaAST.omit(schema.ast, ['id']));
43
+ };
@@ -0,0 +1,54 @@
1
+ //
2
+ // Copyright 2025 DXOS.org
3
+ //
4
+
5
+ import * as Schema from 'effect/Schema';
6
+
7
+ // NOTE: String literals are used instead of unique symbols for both KindId and SchemaKindId.
8
+ // Unique symbols cause TS4023 "cannot be named" errors when external packages
9
+ // try to export types that reference this key (e.g., `export const Graph = ...`).
10
+ // TypeScript cannot emit declaration files that reference unique symbols from
11
+ // external modules. Using a string literal allows the type to be inlined in
12
+ // declaration files, making the API portable across package boundaries.
13
+
14
+ /**
15
+ * String key used to identify the kind of an entity instance (object or relation).
16
+ */
17
+ export const KindId = '~@dxos/echo/Kind' as const;
18
+ export type KindId = typeof KindId;
19
+
20
+ /**
21
+ * String key used to identify the kind of a schema (object schema or relation schema).
22
+ * Parallels KindId which identifies instance kinds.
23
+ */
24
+ export const SchemaKindId = '~@dxos/echo/SchemaKind' as const;
25
+ export type SchemaKindId = typeof SchemaKindId;
26
+
27
+ /**
28
+ * String key used to brand snapshot types.
29
+ * Snapshots have SnapshotKindId instead of KindId, making them
30
+ * distinguishable from reactive objects at the type level.
31
+ */
32
+ export const SnapshotKindId = '~@dxos/echo/SnapshotKind' as const;
33
+ export type SnapshotKindId = typeof SnapshotKindId;
34
+
35
+ /**
36
+ * Kinds of entities stored in ECHO: objects and relations.
37
+ */
38
+ export enum EntityKind {
39
+ Object = 'object',
40
+ Relation = 'relation',
41
+ }
42
+
43
+ export const EntityKindSchema = Schema.Enums(EntityKind);
44
+
45
+ /**
46
+ * Typename for generic object references (Type.Obj / Ref.Ref(Obj.Unknown)).
47
+ * Used when referencing any object without a specific schema.
48
+ */
49
+ export const ANY_OBJECT_TYPENAME = 'dxos.org/schema/AnyObject';
50
+
51
+ /**
52
+ * Version for generic object references.
53
+ */
54
+ export const ANY_OBJECT_VERSION = '0.0.0';
@@ -2,5 +2,8 @@
2
2
  // Copyright 2024 DXOS.org
3
3
  //
4
4
 
5
- export * from './types';
6
- export type * from './util';
5
+ export * from './base';
6
+ export * from './entity';
7
+ export * from './meta';
8
+ export * from './typename';
9
+ export * from './version';
@@ -0,0 +1,68 @@
1
+ //
2
+ // Copyright 2024 DXOS.org
3
+ //
4
+
5
+ import * as Schema from 'effect/Schema';
6
+
7
+ import { ForeignKey } from '@dxos/echo-protocol';
8
+ import { invariant } from '@dxos/invariant';
9
+ import { type Comparator, intersection } from '@dxos/util';
10
+
11
+ import type * as Entity from '../../Entity';
12
+
13
+ import { type AnyProperties } from './base';
14
+
15
+ /**
16
+ * Property name for meta when object is serialized to JSON.
17
+ */
18
+ export const ATTR_META = '@meta';
19
+
20
+ /**
21
+ * Metadata section.
22
+ */
23
+ export const MetaId: Entity.Meta = Symbol.for('@dxos/echo/Meta') as any;
24
+
25
+ //
26
+ // ObjectMeta
27
+ //
28
+
29
+ // TODO(dmaretskyi): Rename to ObjectMeta
30
+ export const ObjectMetaSchema = Schema.Struct({
31
+ keys: Schema.Array(ForeignKey),
32
+
33
+ /**
34
+ * A set of tags.
35
+ * Tags are arbitrary application-defined strings.
36
+ * ECHO makes no assumptions about the tag structure.
37
+ */
38
+ // TODO(dmaretskyi): Has to be optional for compatibility with old data.
39
+ // Defaulting to an empty array is possible but requires a bit more work.
40
+ // TODO(dmaretskyi): In automerge this should be a map of { [tag]: boolean } for uniqueness and conflict resolution.
41
+ tags: Schema.optional(Schema.Array(Schema.String)),
42
+ });
43
+
44
+ export type ObjectMeta = Schema.Schema.Type<typeof ObjectMetaSchema>;
45
+
46
+ /*
47
+ * Get metadata from object.
48
+ * Only callable on the object root.
49
+ *
50
+ * @internal (use Obj.getMeta or Relation.getMeta)
51
+ */
52
+ // TODO(burdon): Refine type to BaseObj.
53
+ export const getMeta = (obj: AnyProperties): ObjectMeta => {
54
+ const metadata = (obj as any)[MetaId];
55
+ invariant(metadata, 'ObjectMeta not found.');
56
+ return metadata;
57
+ };
58
+
59
+ //
60
+ // Foreign keys
61
+ //
62
+
63
+ export const foreignKey = (source: string, id: string): ForeignKey => ({ source, id });
64
+ export const foreignKeyEquals = (a: ForeignKey, b: ForeignKey) => a.source === b.source && a.id === b.id;
65
+
66
+ // TODO(dmaretskyi): Move to echo-schema.
67
+ export const compareForeignKeys: Comparator<AnyProperties> = (a: AnyProperties, b: AnyProperties) =>
68
+ intersection(getMeta(a).keys, getMeta(b).keys, foreignKeyEquals).length > 0;
@@ -0,0 +1,55 @@
1
+ //
2
+ // Copyright 2024 DXOS.org
3
+ //
4
+
5
+ import type * as Schema from 'effect/Schema';
6
+
7
+ /**
8
+ * Property name for typename when object is serialized to JSON.
9
+ */
10
+ export const ATTR_TYPE = '@type';
11
+
12
+ /**
13
+ * DXN to the object type.
14
+ */
15
+ export const TypeId = Symbol.for('@dxos/echo/Type');
16
+
17
+ /**
18
+ * Reference to the object schema.
19
+ */
20
+ export const SchemaId = Symbol.for('@dxos/echo/Schema');
21
+
22
+ /**
23
+ * Property name for parent when object is serialized to JSON.
24
+ */
25
+ export const ATTR_PARENT = '@parent';
26
+
27
+ /**
28
+ * Reference to the object parent.
29
+ */
30
+ export const ParentId = Symbol.for('@dxos/echo/Parent');
31
+
32
+ /**
33
+ * Returns the schema for the given object if one is defined.
34
+ *
35
+ * @internal (Use Obj.getSchema)
36
+ */
37
+ // TODO(burdon): Narrow type.
38
+ // TODO(dmaretskyi): For echo objects, this always returns the root schema.
39
+ export const getSchema = (obj: unknown | undefined): Schema.Schema.AnyNoContext | undefined => {
40
+ if (obj) {
41
+ return (obj as any)[SchemaId];
42
+ }
43
+ };
44
+
45
+ /**
46
+ * @internal
47
+ */
48
+ export const setSchema = (obj: any, schema: Schema.Schema.AnyNoContext): void => {
49
+ Object.defineProperty(obj, SchemaId, {
50
+ value: schema,
51
+ writable: false,
52
+ enumerable: false,
53
+ configurable: false,
54
+ });
55
+ };
@@ -0,0 +1,19 @@
1
+ //
2
+ // Copyright 2025 DXOS.org
3
+ //
4
+
5
+ /**
6
+ * Version type identifier.
7
+ */
8
+ export const VersionTypeId = '~@dxos/echo/VersionTypeId' as const;
9
+ export type VersionTypeId = typeof VersionTypeId;
10
+
11
+ /**
12
+ * Represents the object version.
13
+ * May be backed by Automerge.
14
+ * Objects with no history are not versioned.
15
+ */
16
+ export interface Version {
17
+ [VersionTypeId]: {};
18
+ automergeHeads?: string[];
19
+ }