@dxos/echo 0.8.4-main.a4bbb77 → 0.8.4-main.abd8ff62ef

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 (539) hide show
  1. package/README.md +3 -4
  2. package/dist/lib/neutral/Annotation.mjs +37 -0
  3. package/dist/lib/neutral/Database.mjs +49 -0
  4. package/dist/lib/neutral/Entity.mjs +61 -0
  5. package/dist/lib/neutral/Entity.mjs.map +7 -0
  6. package/dist/lib/neutral/Err.mjs +12 -0
  7. package/dist/lib/neutral/Err.mjs.map +7 -0
  8. package/dist/lib/neutral/Extension.mjs +18 -0
  9. package/dist/lib/neutral/Extension.mjs.map +7 -0
  10. package/dist/lib/neutral/Feed.mjs +50 -0
  11. package/dist/lib/neutral/Feed.mjs.map +7 -0
  12. package/dist/lib/neutral/Filter.mjs +72 -0
  13. package/dist/lib/neutral/Filter.mjs.map +7 -0
  14. package/dist/lib/neutral/Format.mjs +66 -0
  15. package/dist/lib/neutral/Format.mjs.map +7 -0
  16. package/dist/lib/neutral/JsonSchema.mjs +19 -0
  17. package/dist/lib/neutral/JsonSchema.mjs.map +7 -0
  18. package/dist/lib/neutral/Key.mjs +12 -0
  19. package/dist/lib/neutral/Key.mjs.map +7 -0
  20. package/dist/lib/neutral/Migration.mjs +17 -0
  21. package/dist/lib/neutral/Migration.mjs.map +7 -0
  22. package/dist/lib/neutral/Obj.mjs +113 -0
  23. package/dist/lib/neutral/Obj.mjs.map +7 -0
  24. package/dist/lib/neutral/Order.mjs +12 -0
  25. package/dist/lib/neutral/Order.mjs.map +7 -0
  26. package/dist/lib/neutral/Query.mjs +38 -0
  27. package/dist/lib/neutral/Query.mjs.map +7 -0
  28. package/dist/lib/neutral/QueryResult.mjs +2 -0
  29. package/dist/lib/neutral/QueryResult.mjs.map +7 -0
  30. package/dist/lib/neutral/Ref.mjs +24 -0
  31. package/dist/lib/neutral/Ref.mjs.map +7 -0
  32. package/dist/lib/neutral/Relation.mjs +94 -0
  33. package/dist/lib/neutral/Relation.mjs.map +7 -0
  34. package/dist/lib/neutral/SchemaRegistry.mjs +2 -0
  35. package/dist/lib/neutral/SchemaRegistry.mjs.map +7 -0
  36. package/dist/lib/neutral/Tag.mjs +29 -0
  37. package/dist/lib/neutral/Tag.mjs.map +7 -0
  38. package/dist/lib/neutral/Type.mjs +37 -0
  39. package/dist/lib/neutral/Type.mjs.map +7 -0
  40. package/dist/lib/neutral/chunk-2T22UGGN.mjs +206 -0
  41. package/dist/lib/neutral/chunk-2T22UGGN.mjs.map +7 -0
  42. package/dist/lib/neutral/chunk-44HT3MEC.mjs +73 -0
  43. package/dist/lib/neutral/chunk-44HT3MEC.mjs.map +7 -0
  44. package/dist/lib/neutral/chunk-6VC3FI5E.mjs +125 -0
  45. package/dist/lib/neutral/chunk-6VC3FI5E.mjs.map +7 -0
  46. package/dist/lib/neutral/chunk-7JFW72MX.mjs +132 -0
  47. package/dist/lib/neutral/chunk-7JFW72MX.mjs.map +7 -0
  48. package/dist/lib/neutral/chunk-7RVZT53K.mjs +21 -0
  49. package/dist/lib/neutral/chunk-7RVZT53K.mjs.map +7 -0
  50. package/dist/lib/neutral/chunk-BICZKPQG.mjs +7 -0
  51. package/dist/lib/neutral/chunk-BICZKPQG.mjs.map +7 -0
  52. package/dist/lib/neutral/chunk-CIWZ5MHQ.mjs +36 -0
  53. package/dist/lib/neutral/chunk-CIWZ5MHQ.mjs.map +7 -0
  54. package/dist/lib/neutral/chunk-DUNXPKAC.mjs +56 -0
  55. package/dist/lib/neutral/chunk-DUNXPKAC.mjs.map +7 -0
  56. package/dist/lib/neutral/chunk-FAW7PJRO.mjs +34 -0
  57. package/dist/lib/neutral/chunk-FAW7PJRO.mjs.map +7 -0
  58. package/dist/lib/neutral/chunk-FAYW32CW.mjs +27 -0
  59. package/dist/lib/neutral/chunk-FAYW32CW.mjs.map +7 -0
  60. package/dist/lib/neutral/chunk-GWFFC34K.mjs +50 -0
  61. package/dist/lib/neutral/chunk-GWFFC34K.mjs.map +7 -0
  62. package/dist/lib/neutral/chunk-I2MFJ76N.mjs +354 -0
  63. package/dist/lib/neutral/chunk-I2MFJ76N.mjs.map +7 -0
  64. package/dist/lib/neutral/chunk-J5LGTIGS.mjs +10 -0
  65. package/dist/lib/neutral/chunk-J5LGTIGS.mjs.map +7 -0
  66. package/dist/lib/neutral/chunk-JALF2CVV.mjs +345 -0
  67. package/dist/lib/neutral/chunk-JALF2CVV.mjs.map +7 -0
  68. package/dist/lib/neutral/chunk-KQUQZ3CB.mjs +128 -0
  69. package/dist/lib/neutral/chunk-KQUQZ3CB.mjs.map +7 -0
  70. package/dist/lib/neutral/chunk-LOTZLYHB.mjs +420 -0
  71. package/dist/lib/neutral/chunk-LOTZLYHB.mjs.map +7 -0
  72. package/dist/lib/neutral/chunk-N4B7FHQT.mjs +67 -0
  73. package/dist/lib/neutral/chunk-N4B7FHQT.mjs.map +7 -0
  74. package/dist/lib/neutral/chunk-NKXEKBP5.mjs +81 -0
  75. package/dist/lib/neutral/chunk-NKXEKBP5.mjs.map +7 -0
  76. package/dist/lib/neutral/chunk-NSMLBSFS.mjs +270 -0
  77. package/dist/lib/neutral/chunk-NSMLBSFS.mjs.map +7 -0
  78. package/dist/lib/neutral/chunk-QBIGOSRF.mjs +45 -0
  79. package/dist/lib/neutral/chunk-QBIGOSRF.mjs.map +7 -0
  80. package/dist/lib/neutral/chunk-QBLYZ4IV.mjs +734 -0
  81. package/dist/lib/neutral/chunk-QBLYZ4IV.mjs.map +7 -0
  82. package/dist/lib/neutral/chunk-QEVM3JUP.mjs +318 -0
  83. package/dist/lib/neutral/chunk-QEVM3JUP.mjs.map +7 -0
  84. package/dist/lib/neutral/chunk-REP7WWAQ.mjs +346 -0
  85. package/dist/lib/neutral/chunk-REP7WWAQ.mjs.map +7 -0
  86. package/dist/lib/neutral/chunk-TRPZU2HV.mjs +402 -0
  87. package/dist/lib/neutral/chunk-TRPZU2HV.mjs.map +7 -0
  88. package/dist/lib/neutral/chunk-TTCSATUD.mjs +42 -0
  89. package/dist/lib/neutral/chunk-TTCSATUD.mjs.map +7 -0
  90. package/dist/lib/neutral/chunk-TW76K7H5.mjs +45 -0
  91. package/dist/lib/neutral/chunk-TW76K7H5.mjs.map +7 -0
  92. package/dist/lib/neutral/chunk-UYJYDSD7.mjs +2436 -0
  93. package/dist/lib/neutral/chunk-UYJYDSD7.mjs.map +7 -0
  94. package/dist/lib/neutral/chunk-V72DY6LU.mjs +7 -0
  95. package/dist/lib/neutral/chunk-V72DY6LU.mjs.map +7 -0
  96. package/dist/lib/neutral/chunk-ZISMEVKD.mjs +51 -0
  97. package/dist/lib/neutral/chunk-ZISMEVKD.mjs.map +7 -0
  98. package/dist/lib/neutral/index.mjs +107 -0
  99. package/dist/lib/neutral/index.mjs.map +7 -0
  100. package/dist/lib/neutral/internal/index.mjs +474 -0
  101. package/dist/lib/neutral/internal/index.mjs.map +7 -0
  102. package/dist/lib/neutral/meta.json +1 -0
  103. package/dist/lib/neutral/testing/index.mjs +375 -0
  104. package/dist/lib/neutral/testing/index.mjs.map +7 -0
  105. package/dist/types/src/Annotation.d.ts +24 -0
  106. package/dist/types/src/Annotation.d.ts.map +1 -0
  107. package/dist/types/src/Collection.d.ts +16 -0
  108. package/dist/types/src/Collection.d.ts.map +1 -0
  109. package/dist/types/src/Database.d.ts +201 -0
  110. package/dist/types/src/Database.d.ts.map +1 -0
  111. package/dist/types/src/Dataset.d.ts +19 -0
  112. package/dist/types/src/Dataset.d.ts.map +1 -0
  113. package/dist/types/src/Entity.d.ts +174 -0
  114. package/dist/types/src/Entity.d.ts.map +1 -0
  115. package/dist/types/src/Entity.test.d.ts +2 -0
  116. package/dist/types/src/Entity.test.d.ts.map +1 -0
  117. package/dist/types/src/Err.d.ts +107 -0
  118. package/dist/types/src/Err.d.ts.map +1 -0
  119. package/dist/types/src/Extension.d.ts +80 -0
  120. package/dist/types/src/Extension.d.ts.map +1 -0
  121. package/dist/types/src/Extension.test.d.ts +2 -0
  122. package/dist/types/src/Extension.test.d.ts.map +1 -0
  123. package/dist/types/src/Feed.d.ts +182 -0
  124. package/dist/types/src/Feed.d.ts.map +1 -0
  125. package/dist/types/src/Filter.d.ts +149 -0
  126. package/dist/types/src/Filter.d.ts.map +1 -0
  127. package/dist/types/src/Filter.test.d.ts +2 -0
  128. package/dist/types/src/Filter.test.d.ts.map +1 -0
  129. package/dist/types/src/Format.d.ts +4 -0
  130. package/dist/types/src/Format.d.ts.map +1 -0
  131. package/dist/types/src/Hypergraph.d.ts +65 -0
  132. package/dist/types/src/Hypergraph.d.ts.map +1 -0
  133. package/dist/types/src/Json.d.ts +33 -0
  134. package/dist/types/src/Json.d.ts.map +1 -0
  135. package/dist/types/src/Json.test.d.ts +2 -0
  136. package/dist/types/src/Json.test.d.ts.map +1 -0
  137. package/dist/types/src/JsonSchema.d.ts +16 -0
  138. package/dist/types/src/JsonSchema.d.ts.map +1 -0
  139. package/dist/types/src/Key.d.ts +1 -0
  140. package/dist/types/src/Key.d.ts.map +1 -1
  141. package/dist/types/src/Migration.d.ts +57 -0
  142. package/dist/types/src/Migration.d.ts.map +1 -0
  143. package/dist/types/src/Obj.d.ts +442 -98
  144. package/dist/types/src/Obj.d.ts.map +1 -1
  145. package/dist/types/src/Obj.test.d.ts +2 -0
  146. package/dist/types/src/Obj.test.d.ts.map +1 -0
  147. package/dist/types/src/Order.d.ts +16 -0
  148. package/dist/types/src/Order.d.ts.map +1 -0
  149. package/dist/types/src/Query.d.ts +213 -0
  150. package/dist/types/src/Query.d.ts.map +1 -0
  151. package/dist/types/src/Query.test.d.ts +2 -0
  152. package/dist/types/src/Query.test.d.ts.map +1 -0
  153. package/dist/types/src/QueryResult.d.ts +80 -0
  154. package/dist/types/src/QueryResult.d.ts.map +1 -0
  155. package/dist/types/src/Ref.d.ts +61 -11
  156. package/dist/types/src/Ref.d.ts.map +1 -1
  157. package/dist/types/src/Relation.d.ts +288 -22
  158. package/dist/types/src/Relation.d.ts.map +1 -1
  159. package/dist/types/src/Relation.test.d.ts +2 -0
  160. package/dist/types/src/Relation.test.d.ts.map +1 -0
  161. package/dist/types/src/SchemaRegistry.d.ts +84 -0
  162. package/dist/types/src/SchemaRegistry.d.ts.map +1 -0
  163. package/dist/types/src/Tag.d.ts +18 -0
  164. package/dist/types/src/Tag.d.ts.map +1 -0
  165. package/dist/types/src/Type.d.ts +123 -100
  166. package/dist/types/src/Type.d.ts.map +1 -1
  167. package/dist/types/src/Type.test.d.ts +2 -0
  168. package/dist/types/src/Type.test.d.ts.map +1 -0
  169. package/dist/types/src/View.d.ts +68 -0
  170. package/dist/types/src/View.d.ts.map +1 -0
  171. package/dist/types/src/hierarchy.test.d.ts +2 -0
  172. package/dist/types/src/hierarchy.test.d.ts.map +1 -0
  173. package/dist/types/src/index.d.ts +22 -5
  174. package/dist/types/src/index.d.ts.map +1 -1
  175. package/dist/types/src/internal/Annotation/annotations.d.ts +231 -0
  176. package/dist/types/src/internal/Annotation/annotations.d.ts.map +1 -0
  177. package/dist/types/src/internal/Annotation/annotations.test.d.ts +2 -0
  178. package/dist/types/src/internal/Annotation/annotations.test.d.ts.map +1 -0
  179. package/dist/types/src/internal/Annotation/index.d.ts +4 -0
  180. package/dist/types/src/internal/Annotation/index.d.ts.map +1 -0
  181. package/dist/types/src/internal/Annotation/sorting.d.ts +24 -0
  182. package/dist/types/src/internal/Annotation/sorting.d.ts.map +1 -0
  183. package/dist/types/src/internal/Annotation/util.d.ts +39 -0
  184. package/dist/types/src/internal/Annotation/util.d.ts.map +1 -0
  185. package/dist/types/src/internal/Entity/api.d.ts +13 -0
  186. package/dist/types/src/internal/Entity/api.d.ts.map +1 -0
  187. package/dist/types/src/internal/Entity/entity.d.ts +20 -0
  188. package/dist/types/src/internal/Entity/entity.d.ts.map +1 -0
  189. package/dist/types/src/internal/Entity/index.d.ts +8 -0
  190. package/dist/types/src/internal/Entity/index.d.ts.map +1 -0
  191. package/dist/types/src/internal/Entity/model.d.ts +55 -0
  192. package/dist/types/src/internal/Entity/model.d.ts.map +1 -0
  193. package/dist/types/src/internal/Entity/object.d.ts +18 -0
  194. package/dist/types/src/internal/Entity/object.d.ts.map +1 -0
  195. package/dist/types/src/internal/Entity/relation.d.ts +35 -0
  196. package/dist/types/src/internal/Entity/relation.d.ts.map +1 -0
  197. package/dist/types/src/internal/Entity/util.d.ts +2 -0
  198. package/dist/types/src/internal/Entity/util.d.ts.map +1 -0
  199. package/dist/types/src/internal/Entity/version.d.ts +42 -0
  200. package/dist/types/src/internal/Entity/version.d.ts.map +1 -0
  201. package/dist/types/src/internal/Format/date.d.ts +63 -0
  202. package/dist/types/src/internal/Format/date.d.ts.map +1 -0
  203. package/dist/types/src/internal/Format/date.test.d.ts +2 -0
  204. package/dist/types/src/internal/Format/date.test.d.ts.map +1 -0
  205. package/dist/types/src/internal/Format/format.d.ts +32 -0
  206. package/dist/types/src/internal/Format/format.d.ts.map +1 -0
  207. package/dist/types/src/internal/Format/format.test.d.ts +2 -0
  208. package/dist/types/src/internal/Format/format.test.d.ts.map +1 -0
  209. package/dist/types/src/internal/Format/index.d.ts +8 -0
  210. package/dist/types/src/internal/Format/index.d.ts.map +1 -0
  211. package/dist/types/src/internal/Format/number.d.ts +31 -0
  212. package/dist/types/src/internal/Format/number.d.ts.map +1 -0
  213. package/dist/types/src/internal/Format/object.d.ts +35 -0
  214. package/dist/types/src/internal/Format/object.d.ts.map +1 -0
  215. package/dist/types/src/internal/Format/select.d.ts +13 -0
  216. package/dist/types/src/internal/Format/select.d.ts.map +1 -0
  217. package/dist/types/src/internal/Format/string.d.ts +42 -0
  218. package/dist/types/src/internal/Format/string.d.ts.map +1 -0
  219. package/dist/types/src/internal/Format/types.d.ts +72 -0
  220. package/dist/types/src/internal/Format/types.d.ts.map +1 -0
  221. package/dist/types/src/internal/JsonSchema/annotations.d.ts +19 -0
  222. package/dist/types/src/internal/JsonSchema/annotations.d.ts.map +1 -0
  223. package/dist/types/src/internal/JsonSchema/effect-schema.test.d.ts +2 -0
  224. package/dist/types/src/internal/JsonSchema/effect-schema.test.d.ts.map +1 -0
  225. package/dist/types/src/internal/JsonSchema/index.d.ts +5 -0
  226. package/dist/types/src/internal/JsonSchema/index.d.ts.map +1 -0
  227. package/dist/types/src/internal/JsonSchema/json-schema-normalize.d.ts +7 -0
  228. package/dist/types/src/internal/JsonSchema/json-schema-normalize.d.ts.map +1 -0
  229. package/dist/types/src/internal/JsonSchema/json-schema-type.d.ts +351 -0
  230. package/dist/types/src/internal/JsonSchema/json-schema-type.d.ts.map +1 -0
  231. package/dist/types/src/internal/JsonSchema/json-schema.d.ts +30 -0
  232. package/dist/types/src/internal/JsonSchema/json-schema.d.ts.map +1 -0
  233. package/dist/types/src/internal/JsonSchema/json-schema.test.d.ts +2 -0
  234. package/dist/types/src/internal/JsonSchema/json-schema.test.d.ts.map +1 -0
  235. package/dist/types/src/internal/Obj/clone.d.ts +8 -0
  236. package/dist/types/src/internal/Obj/clone.d.ts.map +1 -0
  237. package/dist/types/src/internal/Obj/common.d.ts +18 -0
  238. package/dist/types/src/internal/Obj/common.d.ts.map +1 -0
  239. package/dist/types/src/internal/Obj/create-object.d.ts +39 -0
  240. package/dist/types/src/internal/Obj/create-object.d.ts.map +1 -0
  241. package/dist/types/src/internal/Obj/create-object.test.d.ts +2 -0
  242. package/dist/types/src/internal/Obj/create-object.test.d.ts.map +1 -0
  243. package/dist/types/src/internal/Obj/deleted.d.ts +6 -0
  244. package/dist/types/src/internal/Obj/deleted.d.ts.map +1 -0
  245. package/dist/types/src/internal/Obj/ids.d.ts +6 -0
  246. package/dist/types/src/internal/Obj/ids.d.ts.map +1 -0
  247. package/dist/types/src/internal/Obj/index.d.ts +11 -0
  248. package/dist/types/src/internal/Obj/index.d.ts.map +1 -0
  249. package/dist/types/src/internal/Obj/inspect.d.ts +2 -0
  250. package/dist/types/src/internal/Obj/inspect.d.ts.map +1 -0
  251. package/dist/types/src/internal/Obj/json-serializer.d.ts +45 -0
  252. package/dist/types/src/internal/Obj/json-serializer.d.ts.map +1 -0
  253. package/dist/types/src/internal/Obj/json-serializer.test.d.ts +2 -0
  254. package/dist/types/src/internal/Obj/json-serializer.test.d.ts.map +1 -0
  255. package/dist/types/src/internal/Obj/schema-validator.d.ts +2 -0
  256. package/dist/types/src/internal/Obj/schema-validator.d.ts.map +1 -0
  257. package/dist/types/src/internal/Obj/schema-validator.test.d.ts +2 -0
  258. package/dist/types/src/internal/Obj/schema-validator.test.d.ts.map +1 -0
  259. package/dist/types/src/internal/Obj/set-value.d.ts +7 -0
  260. package/dist/types/src/internal/Obj/set-value.d.ts.map +1 -0
  261. package/dist/types/src/internal/Obj/set-value.test.d.ts +2 -0
  262. package/dist/types/src/internal/Obj/set-value.test.d.ts.map +1 -0
  263. package/dist/types/src/internal/Obj/snapshot.d.ts +6 -0
  264. package/dist/types/src/internal/Obj/snapshot.d.ts.map +1 -0
  265. package/dist/types/src/internal/Obj/typed-object.d.ts +25 -0
  266. package/dist/types/src/internal/Obj/typed-object.d.ts.map +1 -0
  267. package/dist/types/src/internal/Obj/typed-object.test.d.ts +2 -0
  268. package/dist/types/src/internal/Obj/typed-object.test.d.ts.map +1 -0
  269. package/dist/types/src/internal/Query.d.ts +10 -0
  270. package/dist/types/src/internal/Query.d.ts.map +1 -0
  271. package/dist/types/src/internal/Ref/index.d.ts +3 -0
  272. package/dist/types/src/internal/Ref/index.d.ts.map +1 -0
  273. package/dist/types/src/internal/Ref/ref-array.d.ts +21 -0
  274. package/dist/types/src/internal/Ref/ref-array.d.ts.map +1 -0
  275. package/dist/types/src/internal/Ref/ref.d.ts +244 -0
  276. package/dist/types/src/internal/Ref/ref.d.ts.map +1 -0
  277. package/dist/types/src/internal/Ref/ref.test.d.ts +2 -0
  278. package/dist/types/src/internal/Ref/ref.test.d.ts.map +1 -0
  279. package/dist/types/src/internal/Type/compose.d.ts +7 -0
  280. package/dist/types/src/internal/Type/compose.d.ts.map +1 -0
  281. package/dist/types/src/internal/Type/compose.test.d.ts +2 -0
  282. package/dist/types/src/internal/Type/compose.test.d.ts.map +1 -0
  283. package/dist/types/src/internal/Type/echo-schema.d.ts +181 -0
  284. package/dist/types/src/internal/Type/echo-schema.d.ts.map +1 -0
  285. package/dist/types/src/internal/Type/index.d.ts +4 -0
  286. package/dist/types/src/internal/Type/index.d.ts.map +1 -0
  287. package/dist/types/src/internal/Type/manipulation.d.ts +10 -0
  288. package/dist/types/src/internal/Type/manipulation.d.ts.map +1 -0
  289. package/dist/types/src/internal/Type/persistent-schema.d.ts +20 -0
  290. package/dist/types/src/internal/Type/persistent-schema.d.ts.map +1 -0
  291. package/dist/types/src/internal/common/api/index.d.ts +11 -0
  292. package/dist/types/src/internal/common/api/index.d.ts.map +1 -0
  293. package/dist/types/src/internal/common/api/meta.d.ts +42 -0
  294. package/dist/types/src/internal/common/api/meta.d.ts.map +1 -0
  295. package/dist/types/src/internal/common/index.d.ts +4 -0
  296. package/dist/types/src/internal/common/index.d.ts.map +1 -0
  297. package/dist/types/src/internal/common/proxy/change-context.d.ts +55 -0
  298. package/dist/types/src/internal/common/proxy/change-context.d.ts.map +1 -0
  299. package/dist/types/src/internal/common/proxy/change.test.d.ts +2 -0
  300. package/dist/types/src/internal/common/proxy/change.test.d.ts.map +1 -0
  301. package/dist/types/src/internal/common/proxy/define-hidden-property.d.ts +5 -0
  302. package/dist/types/src/internal/common/proxy/define-hidden-property.d.ts.map +1 -0
  303. package/dist/types/src/internal/common/proxy/errors.d.ts +19 -0
  304. package/dist/types/src/internal/common/proxy/errors.d.ts.map +1 -0
  305. package/dist/types/src/internal/common/proxy/event-batch.d.ts +10 -0
  306. package/dist/types/src/internal/common/proxy/event-batch.d.ts.map +1 -0
  307. package/dist/types/src/internal/common/proxy/handler.test.d.ts +2 -0
  308. package/dist/types/src/internal/common/proxy/handler.test.d.ts.map +1 -0
  309. package/dist/types/src/internal/common/proxy/index.d.ts +14 -0
  310. package/dist/types/src/internal/common/proxy/index.d.ts.map +1 -0
  311. package/dist/types/src/internal/common/proxy/json-serializer.d.ts +6 -0
  312. package/dist/types/src/internal/common/proxy/json-serializer.d.ts.map +1 -0
  313. package/dist/types/src/internal/common/proxy/make-object.d.ts +14 -0
  314. package/dist/types/src/internal/common/proxy/make-object.d.ts.map +1 -0
  315. package/dist/types/src/internal/common/proxy/ownership.d.ts +57 -0
  316. package/dist/types/src/internal/common/proxy/ownership.d.ts.map +1 -0
  317. package/dist/types/src/internal/common/proxy/proxy-types.d.ts +18 -0
  318. package/dist/types/src/internal/common/proxy/proxy-types.d.ts.map +1 -0
  319. package/dist/types/src/internal/common/proxy/proxy-utils.d.ts +47 -0
  320. package/dist/types/src/internal/common/proxy/proxy-utils.d.ts.map +1 -0
  321. package/dist/types/src/internal/common/proxy/reactive-array.d.ts +8 -0
  322. package/dist/types/src/internal/common/proxy/reactive-array.d.ts.map +1 -0
  323. package/dist/types/src/internal/common/proxy/reactive.d.ts +39 -0
  324. package/dist/types/src/internal/common/proxy/reactive.d.ts.map +1 -0
  325. package/dist/types/src/internal/common/proxy/reactive.test.d.ts +2 -0
  326. package/dist/types/src/internal/common/proxy/reactive.test.d.ts.map +1 -0
  327. package/dist/types/src/internal/common/proxy/schema-validator.d.ts +15 -0
  328. package/dist/types/src/internal/common/proxy/schema-validator.d.ts.map +1 -0
  329. package/dist/types/src/internal/common/proxy/schema.test.d.ts +2 -0
  330. package/dist/types/src/internal/common/proxy/schema.test.d.ts.map +1 -0
  331. package/dist/types/src/internal/common/proxy/symbols.d.ts +3 -0
  332. package/dist/types/src/internal/common/proxy/symbols.d.ts.map +1 -0
  333. package/dist/types/src/internal/common/proxy/typed-handler.d.ts +48 -0
  334. package/dist/types/src/internal/common/proxy/typed-handler.d.ts.map +1 -0
  335. package/dist/types/src/internal/common/proxy/typed-handler.test.d.ts +2 -0
  336. package/dist/types/src/internal/common/proxy/typed-handler.test.d.ts.map +1 -0
  337. package/dist/types/src/internal/common/proxy/typed-object.test.d.ts +2 -0
  338. package/dist/types/src/internal/common/proxy/typed-object.test.d.ts.map +1 -0
  339. package/dist/types/src/internal/common/types/base.d.ts +27 -0
  340. package/dist/types/src/internal/common/types/base.d.ts.map +1 -0
  341. package/dist/types/src/internal/common/types/entity.d.ts +37 -0
  342. package/dist/types/src/internal/common/types/entity.d.ts.map +1 -0
  343. package/dist/types/src/internal/common/types/index.d.ts +7 -0
  344. package/dist/types/src/internal/common/types/index.d.ts.map +1 -0
  345. package/dist/types/src/internal/common/types/meta.d.ts +33 -0
  346. package/dist/types/src/internal/common/types/meta.d.ts.map +1 -0
  347. package/dist/types/src/internal/common/types/model-symbols.d.ts +54 -0
  348. package/dist/types/src/internal/common/types/model-symbols.d.ts.map +1 -0
  349. package/dist/types/src/internal/common/types/typename.d.ts +21 -0
  350. package/dist/types/src/internal/common/types/typename.d.ts.map +1 -0
  351. package/dist/types/src/internal/common/types/version.d.ts +15 -0
  352. package/dist/types/src/internal/common/types/version.d.ts.map +1 -0
  353. package/dist/types/src/internal/index.d.ts +11 -0
  354. package/dist/types/src/internal/index.d.ts.map +1 -0
  355. package/dist/types/src/{test → testing}/api.test.d.ts.map +1 -1
  356. package/dist/types/src/testing/index.d.ts +3 -1
  357. package/dist/types/src/testing/index.d.ts.map +1 -1
  358. package/dist/types/src/testing/test-data.d.ts +18 -0
  359. package/dist/types/src/testing/test-data.d.ts.map +1 -0
  360. package/dist/types/src/testing/test-schema.d.ts +304 -0
  361. package/dist/types/src/testing/test-schema.d.ts.map +1 -0
  362. package/dist/types/src/testing/util.d.ts +21 -0
  363. package/dist/types/src/testing/util.d.ts.map +1 -0
  364. package/dist/types/tsconfig.tsbuildinfo +1 -1
  365. package/package.json +119 -57
  366. package/src/Annotation.ts +48 -0
  367. package/src/Collection.ts +37 -0
  368. package/src/Database.ts +352 -0
  369. package/src/Dataset.ts +26 -0
  370. package/src/Entity.test.ts +22 -0
  371. package/src/Entity.ts +243 -0
  372. package/src/Err.ts +40 -0
  373. package/src/Extension.test.ts +235 -0
  374. package/src/Extension.ts +122 -0
  375. package/src/Feed.ts +304 -0
  376. package/src/Filter.test.ts +90 -0
  377. package/src/Filter.ts +454 -0
  378. package/src/Format.ts +9 -0
  379. package/src/Hypergraph.ts +79 -0
  380. package/src/Json.test.ts +175 -0
  381. package/src/Json.ts +102 -0
  382. package/src/JsonSchema.ts +26 -0
  383. package/src/Key.ts +3 -0
  384. package/src/Migration.ts +94 -0
  385. package/src/Obj.test.ts +539 -0
  386. package/src/Obj.ts +713 -244
  387. package/src/Order.ts +46 -0
  388. package/src/Query.test.ts +822 -0
  389. package/src/Query.ts +567 -0
  390. package/src/QueryResult.ts +106 -0
  391. package/src/Ref.ts +78 -9
  392. package/src/Relation.test.ts +88 -0
  393. package/src/Relation.ts +450 -60
  394. package/src/SchemaRegistry.ts +106 -0
  395. package/src/Tag.ts +41 -0
  396. package/src/Type.test.ts +52 -0
  397. package/src/Type.ts +168 -155
  398. package/src/View.ts +107 -0
  399. package/src/hierarchy.test.ts +33 -0
  400. package/src/index.ts +24 -6
  401. package/src/internal/Annotation/annotations.test.ts +145 -0
  402. package/src/internal/Annotation/annotations.ts +577 -0
  403. package/src/internal/Annotation/index.ts +7 -0
  404. package/src/internal/Annotation/sorting.ts +51 -0
  405. package/src/internal/Annotation/util.ts +85 -0
  406. package/src/internal/Entity/api.ts +30 -0
  407. package/src/internal/Entity/entity.ts +128 -0
  408. package/src/internal/Entity/index.ts +11 -0
  409. package/src/internal/Entity/model.ts +109 -0
  410. package/src/internal/Entity/object.ts +57 -0
  411. package/src/internal/Entity/relation.ts +154 -0
  412. package/src/internal/Entity/util.ts +33 -0
  413. package/src/internal/Entity/version.ts +96 -0
  414. package/src/internal/Format/date.test.ts +55 -0
  415. package/src/internal/Format/date.ts +217 -0
  416. package/src/internal/Format/format.test.ts +76 -0
  417. package/src/internal/Format/format.ts +54 -0
  418. package/src/internal/Format/index.ts +12 -0
  419. package/src/internal/Format/number.ts +89 -0
  420. package/src/internal/Format/object.ts +80 -0
  421. package/src/internal/Format/select.ts +18 -0
  422. package/src/internal/Format/string.ts +81 -0
  423. package/src/internal/Format/types.ts +186 -0
  424. package/src/internal/JsonSchema/annotations.ts +50 -0
  425. package/src/internal/JsonSchema/effect-schema.test.ts +143 -0
  426. package/src/internal/JsonSchema/index.ts +8 -0
  427. package/src/internal/JsonSchema/json-schema-normalize.ts +111 -0
  428. package/src/internal/JsonSchema/json-schema-type.ts +403 -0
  429. package/src/internal/JsonSchema/json-schema.test.ts +860 -0
  430. package/src/internal/JsonSchema/json-schema.ts +533 -0
  431. package/src/internal/Obj/clone.ts +48 -0
  432. package/src/internal/Obj/common.ts +75 -0
  433. package/src/internal/Obj/create-object.test.ts +114 -0
  434. package/src/internal/Obj/create-object.ts +94 -0
  435. package/src/internal/Obj/deleted.ts +19 -0
  436. package/src/internal/Obj/ids.ts +12 -0
  437. package/src/internal/Obj/index.ts +14 -0
  438. package/src/internal/Obj/inspect.ts +46 -0
  439. package/src/internal/Obj/json-serializer.test.ts +120 -0
  440. package/src/internal/Obj/json-serializer.ts +222 -0
  441. package/src/internal/Obj/schema-validator.test.ts +182 -0
  442. package/src/internal/Obj/schema-validator.ts +6 -0
  443. package/src/internal/Obj/set-value.test.ts +281 -0
  444. package/src/internal/Obj/set-value.ts +165 -0
  445. package/src/internal/Obj/snapshot.ts +105 -0
  446. package/src/internal/Obj/typed-object.test.ts +34 -0
  447. package/src/internal/Obj/typed-object.ts +30 -0
  448. package/src/internal/Query.ts +137 -0
  449. package/src/internal/Ref/index.ts +6 -0
  450. package/src/internal/Ref/ref-array.ts +38 -0
  451. package/src/internal/Ref/ref.test.ts +100 -0
  452. package/src/internal/Ref/ref.ts +589 -0
  453. package/src/internal/Type/compose.test.ts +41 -0
  454. package/src/internal/Type/compose.ts +41 -0
  455. package/src/internal/Type/echo-schema.ts +423 -0
  456. package/src/internal/Type/index.ts +7 -0
  457. package/src/internal/Type/manipulation.ts +92 -0
  458. package/src/internal/Type/persistent-schema.ts +33 -0
  459. package/src/internal/common/README.md +102 -0
  460. package/src/internal/common/api/index.ts +15 -0
  461. package/src/internal/common/api/meta.ts +88 -0
  462. package/src/internal/common/index.ts +7 -0
  463. package/src/internal/common/proxy/change-context.ts +138 -0
  464. package/src/internal/common/proxy/change.test.ts +519 -0
  465. package/src/internal/common/proxy/define-hidden-property.ts +14 -0
  466. package/src/internal/common/proxy/errors.ts +42 -0
  467. package/src/internal/common/proxy/event-batch.ts +44 -0
  468. package/src/internal/common/proxy/handler.test.ts +121 -0
  469. package/src/internal/common/proxy/index.ts +17 -0
  470. package/src/internal/common/proxy/json-serializer.ts +90 -0
  471. package/src/internal/common/proxy/make-object.ts +105 -0
  472. package/src/internal/common/proxy/ownership.ts +252 -0
  473. package/src/internal/common/proxy/proxy-types.ts +23 -0
  474. package/src/internal/common/proxy/proxy-utils.ts +150 -0
  475. package/src/internal/common/proxy/reactive-array.ts +71 -0
  476. package/src/internal/common/proxy/reactive.test.ts +54 -0
  477. package/src/internal/common/proxy/reactive.ts +77 -0
  478. package/src/internal/common/proxy/schema-validator.ts +244 -0
  479. package/src/internal/common/proxy/schema.test.ts +145 -0
  480. package/src/internal/common/proxy/symbols.ts +7 -0
  481. package/src/internal/common/proxy/typed-handler.test.ts +313 -0
  482. package/src/internal/common/proxy/typed-handler.ts +447 -0
  483. package/src/internal/common/proxy/typed-object.test.ts +115 -0
  484. package/src/internal/common/types/base.ts +43 -0
  485. package/src/internal/common/types/entity.ts +54 -0
  486. package/src/internal/common/types/index.ts +10 -0
  487. package/src/internal/common/types/meta.ts +67 -0
  488. package/src/internal/common/types/model-symbols.ts +69 -0
  489. package/src/internal/common/types/typename.ts +55 -0
  490. package/src/internal/common/types/version.ts +19 -0
  491. package/src/internal/index.ts +17 -0
  492. package/src/testing/api.test.ts +125 -0
  493. package/src/testing/index.ts +3 -1
  494. package/src/testing/test-data.ts +129 -0
  495. package/src/testing/test-schema.ts +240 -0
  496. package/src/testing/util.ts +85 -0
  497. package/dist/lib/browser/chunk-I4YEWYJA.mjs +0 -882
  498. package/dist/lib/browser/chunk-I4YEWYJA.mjs.map +0 -7
  499. package/dist/lib/browser/index.mjs +0 -30
  500. package/dist/lib/browser/meta.json +0 -1
  501. package/dist/lib/browser/testing/index.mjs +0 -70
  502. package/dist/lib/browser/testing/index.mjs.map +0 -7
  503. package/dist/lib/node-esm/chunk-AWWFAF75.mjs +0 -882
  504. package/dist/lib/node-esm/chunk-AWWFAF75.mjs.map +0 -7
  505. package/dist/lib/node-esm/index.mjs +0 -30
  506. package/dist/lib/node-esm/meta.json +0 -1
  507. package/dist/lib/node-esm/testing/index.mjs +0 -70
  508. package/dist/lib/node-esm/testing/index.mjs.map +0 -7
  509. package/dist/types/src/errors.d.ts +0 -72
  510. package/dist/types/src/errors.d.ts.map +0 -1
  511. package/dist/types/src/experimental/database.d.ts +0 -8
  512. package/dist/types/src/experimental/database.d.ts.map +0 -1
  513. package/dist/types/src/experimental/index.d.ts +0 -1
  514. package/dist/types/src/experimental/index.d.ts.map +0 -1
  515. package/dist/types/src/experimental/queue.d.ts +0 -8
  516. package/dist/types/src/experimental/queue.d.ts.map +0 -1
  517. package/dist/types/src/experimental/space.d.ts +0 -8
  518. package/dist/types/src/experimental/space.d.ts.map +0 -1
  519. package/dist/types/src/query/dsl.d.ts +0 -245
  520. package/dist/types/src/query/dsl.d.ts.map +0 -1
  521. package/dist/types/src/query/dsl.test.d.ts +0 -2
  522. package/dist/types/src/query/dsl.test.d.ts.map +0 -1
  523. package/dist/types/src/query/index.d.ts +0 -2
  524. package/dist/types/src/query/index.d.ts.map +0 -1
  525. package/dist/types/src/testing/types.d.ts +0 -113
  526. package/dist/types/src/testing/types.d.ts.map +0 -1
  527. package/src/errors.ts +0 -18
  528. package/src/experimental/database.ts +0 -11
  529. package/src/experimental/index.ts +0 -7
  530. package/src/experimental/queue.ts +0 -11
  531. package/src/experimental/space.ts +0 -11
  532. package/src/query/dsl.test.ts +0 -362
  533. package/src/query/dsl.ts +0 -759
  534. package/src/query/index.ts +0 -5
  535. package/src/test/api.test.ts +0 -180
  536. package/src/testing/types.ts +0 -91
  537. /package/dist/lib/{browser/index.mjs.map → neutral/Annotation.mjs.map} +0 -0
  538. /package/dist/lib/{node-esm/index.mjs.map → neutral/Database.mjs.map} +0 -0
  539. /package/dist/types/src/{test → testing}/api.test.d.ts +0 -0
@@ -0,0 +1,423 @@
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 { invariant } from '@dxos/invariant';
9
+ import { type ObjectId } from '@dxos/keys';
10
+
11
+ import type * as Type from '../../Type';
12
+ import { type SchemaMeta, SchemaMetaSymbol, type TypeAnnotation, getTypeAnnotation } from '../Annotation';
13
+ import { ChangeId } from '../common/proxy';
14
+ import { EntityKind, SchemaKindId } from '../common/types';
15
+ import { type JsonSchemaType, toEffectSchema, toJsonSchema } from '../JsonSchema';
16
+ import { type TypedObject, type TypedObjectPrototype, getSnapshot } from '../Obj';
17
+ import {
18
+ addFieldsToSchema,
19
+ removeFieldsFromSchema,
20
+ setTypenameInSchema,
21
+ updateFieldNameInSchema,
22
+ updateFieldsInSchema,
23
+ } from './manipulation';
24
+ import { PersistentSchema } from './persistent-schema';
25
+
26
+ /**
27
+ * Base schema type.
28
+ */
29
+ // TODO(burdon): Merge with ImmutableSchema.
30
+ export interface BaseSchema<A = any, I = any> extends TypedObject<A, I> {
31
+ // TODO(burdon): Different from mutable?
32
+ get readonly(): boolean;
33
+ // TODO(burdon): Change to external function.
34
+ get mutable(): EchoSchema<A, I>;
35
+ get snapshot(): Schema.Schema<A, I>;
36
+ get jsonSchema(): JsonSchemaType;
37
+ }
38
+
39
+ /**
40
+ * Immutable schema type.
41
+ * @deprecated Use `Schema.Schema.AnyNoContext` instead.
42
+ */
43
+ // TODO(burdon): Common abstract base class?
44
+ export class ImmutableSchema<A = any, I = any> implements BaseSchema<A, I> {
45
+ private readonly _objectAnnotation: TypeAnnotation;
46
+ constructor(private readonly _schema: Schema.Schema<A, I>) {
47
+ this._objectAnnotation = getTypeAnnotation(this._schema)!;
48
+ invariant(this._objectAnnotation);
49
+ }
50
+
51
+ //
52
+ // Effect Schema (push to abstract base class).
53
+ //
54
+
55
+ public get [Schema.TypeId]() {
56
+ return schemaVariance;
57
+ }
58
+
59
+ public get Type() {
60
+ return this._schema.Type;
61
+ }
62
+
63
+ public get Encoded() {
64
+ return this._schema.Encoded;
65
+ }
66
+
67
+ public get Context() {
68
+ return this._schema.Context;
69
+ }
70
+
71
+ public get ast(): SchemaAST.AST {
72
+ return this._schema.ast;
73
+ }
74
+
75
+ public get annotations() {
76
+ return this._schema.annotations;
77
+ }
78
+
79
+ public get pipe() {
80
+ return this._schema.pipe;
81
+ }
82
+
83
+ //
84
+ // TypedObject
85
+ //
86
+
87
+ get kind(): EntityKind {
88
+ return this._objectAnnotation.kind;
89
+ }
90
+
91
+ get typename(): string {
92
+ return this._objectAnnotation.typename;
93
+ }
94
+
95
+ get version(): string {
96
+ return this._objectAnnotation.version;
97
+ }
98
+
99
+ //
100
+ // BaseSchema
101
+ //
102
+
103
+ get readonly(): boolean {
104
+ return true;
105
+ }
106
+
107
+ get snapshot(): Schema.Schema.AnyNoContext {
108
+ return this._schema;
109
+ }
110
+
111
+ // TODO(burdon): Change from getter since this is expensive.
112
+ get jsonSchema(): JsonSchemaType {
113
+ return toJsonSchema(this._schema);
114
+ }
115
+
116
+ get mutable(): EchoSchema {
117
+ throw new Error('Schema is readonly.');
118
+ }
119
+ }
120
+
121
+ /**
122
+ * Defines an effect-schema for the `EchoSchema` type.
123
+ *
124
+ * This is here so that `EchoSchema` class can be used as a part of another schema definition (e.g., `ref(EchoSchema)`).
125
+ */
126
+ const EchoSchemaConstructor = (): TypedObjectPrototype => {
127
+ /**
128
+ * Return class definition satisfying Schema.Schema.
129
+ */
130
+ return class {
131
+ private static get _schema() {
132
+ // The field is DynamicEchoSchema in runtime, but is serialized as PersisentSchema in automerge.
133
+ return Schema.Union(PersistentSchema, Schema.instanceOf(EchoSchema)).annotations(
134
+ PersistentSchema.ast.annotations,
135
+ );
136
+ }
137
+
138
+ static readonly [Schema.TypeId] = schemaVariance;
139
+
140
+ static get ast() {
141
+ const schema = this._schema;
142
+ return schema.ast;
143
+ }
144
+
145
+ static get annotations() {
146
+ const schema = this._schema;
147
+ return schema.annotations.bind(schema);
148
+ }
149
+
150
+ static get pipe() {
151
+ const schema = this._schema;
152
+ return schema.pipe.bind(schema);
153
+ }
154
+ } as any;
155
+ };
156
+
157
+ export const isMutable = (schema: Schema.Schema.AnyNoContext): schema is EchoSchema => {
158
+ return schema instanceof EchoSchema;
159
+ };
160
+
161
+ // NOTE: Keep in this file.
162
+ const schemaVariance = {
163
+ _A: (_: any) => _,
164
+ _I: (_: any) => _,
165
+ _R: (_: never) => _,
166
+ };
167
+
168
+ /**
169
+ * Represents a schema that is persisted in the ECHO database.
170
+ * Schema can me mutable or readonly (specified by the {@link EchoSchema.readonly} field).
171
+ *
172
+ * Schema that can be modified at runtime via the API.
173
+ * Is an instance of effect-schema (`Schema.Schema.AnyNoContext`) so it can be used in the same way as a regular schema.
174
+ * IMPORTANT: The schema AST will change reactively when the schema is updated, including synced updates from remote peers.
175
+ *
176
+ * The class constructor is a schema instance itself, and can be used in the echo object definitions:
177
+ *
178
+ * @example
179
+ * ```ts
180
+ * export class TableType extends Schema.Struct({...}).pipe(Type.object({ typename: 'com.example.type.table', version: '0.1.0' })){
181
+ * title: Schema.String,
182
+ * schema: Schema.optional(ref(EchoSchema)),
183
+ * props: Schema.mutable(S.Array(TablePropSchema)),
184
+ * }) {}
185
+ * ```
186
+ *
187
+ * The ECHO API will translate any references to PersistentSchema objects to be resolved as EchoSchema objects.
188
+ */
189
+ export class EchoSchema<A = any, I = any> extends EchoSchemaConstructor() implements BaseSchema<A, I> {
190
+ private _schema: Schema.Schema.AnyNoContext | undefined;
191
+ private _isDirty = true;
192
+
193
+ /**
194
+ * Schema kind key that marks this as an ECHO schema.
195
+ * Makes EchoSchema satisfy the Type.AnyObj type.
196
+ */
197
+ readonly [SchemaKindId]: EntityKind.Object = EntityKind.Object;
198
+
199
+ constructor(private readonly _persistentSchema: PersistentSchema) {
200
+ super();
201
+ }
202
+
203
+ //
204
+ // Effect Schema (push to abstract base class).
205
+ //
206
+
207
+ public get [Schema.TypeId]() {
208
+ return schemaVariance;
209
+ }
210
+
211
+ public get Type() {
212
+ return this._persistentSchema as A;
213
+ }
214
+
215
+ public get Encoded() {
216
+ return this._persistentSchema as I;
217
+ }
218
+
219
+ public get Context() {
220
+ const schema = this._getSchema();
221
+ return schema.Context;
222
+ }
223
+
224
+ public get ast() {
225
+ const schema = this._getSchema();
226
+ return schema.ast;
227
+ }
228
+
229
+ public get annotations() {
230
+ const schema = this._getSchema();
231
+ return schema.annotations.bind(schema);
232
+ }
233
+
234
+ public get pipe(): Schema.Schema.AnyNoContext['pipe'] {
235
+ const schema = this._getSchema();
236
+ return schema.pipe.bind(schema);
237
+ }
238
+
239
+ //
240
+ // BaseSchema
241
+ //
242
+
243
+ public get kind(): EntityKind.Object {
244
+ // Dynamic schemas are always object schemas.
245
+ return EntityKind.Object;
246
+ }
247
+
248
+ public get typename(): string {
249
+ return this._persistentSchema.typename;
250
+ }
251
+
252
+ public get version(): string {
253
+ return this._persistentSchema.version;
254
+ }
255
+
256
+ public get readonly(): boolean {
257
+ return false;
258
+ }
259
+
260
+ /**
261
+ * Returns an immutable schema snapshot of the current state of the schema.
262
+ */
263
+ public get snapshot(): Schema.Schema.AnyNoContext {
264
+ return this._getSchema();
265
+ }
266
+
267
+ /**
268
+ * Returns the JSON schema for the schema.
269
+ */
270
+ public get jsonSchema(): JsonSchemaType {
271
+ return this._persistentSchema.jsonSchema;
272
+ }
273
+
274
+ /**
275
+ * Returns a mutable schema.
276
+ */
277
+ public get mutable(): EchoSchema {
278
+ invariant(!this.readonly, 'Schema is not mutable');
279
+ return this;
280
+ }
281
+
282
+ //
283
+ // Mutable Schema
284
+ //
285
+
286
+ /**
287
+ * Id of the ECHO object containing the schema.
288
+ */
289
+ public get id(): ObjectId {
290
+ return this._persistentSchema.id;
291
+ }
292
+
293
+ /**
294
+ * Short name of the schema.
295
+ */
296
+ public get name(): string | undefined {
297
+ return this._persistentSchema.name;
298
+ }
299
+
300
+ public get [SchemaMetaSymbol](): SchemaMeta {
301
+ return { id: this.id, typename: this.typename, version: this._persistentSchema.version };
302
+ }
303
+
304
+ /**
305
+ * Reference to the underlying persistent schema object.
306
+ */
307
+ public get persistentSchema(): Type.PersistentType {
308
+ return this._persistentSchema as Type.PersistentType;
309
+ }
310
+
311
+ public getProperties(): SchemaAST.PropertySignature[] {
312
+ const ast = this._getSchema().ast;
313
+ invariant(SchemaAST.isTypeLiteral(ast));
314
+ return [...ast.propertySignatures].filter((p) => p.name !== 'id').map(unwrapOptionality);
315
+ }
316
+
317
+ //
318
+ // Mutation methods.
319
+ // TODO(burdon): Create separate interface for dynamic schema.
320
+ // TODO(burdon): Deprecate direct manipulation? Use JSONSchema directly.
321
+ //
322
+
323
+ /**
324
+ * @throws Error if the schema is readonly.
325
+ */
326
+ public updateTypename(typename: string): void {
327
+ const updated = setTypenameInSchema(this._getSchema(), typename);
328
+ this._change((schema) => {
329
+ schema.typename = typename;
330
+ schema.jsonSchema = toJsonSchema(updated);
331
+ });
332
+ }
333
+
334
+ /**
335
+ * @throws Error if the schema is readonly.
336
+ */
337
+ public addFields(fields: Schema.Struct.Fields): void {
338
+ const extended = addFieldsToSchema(this._getSchema(), fields);
339
+ this._change((schema) => {
340
+ schema.jsonSchema = toJsonSchema(extended);
341
+ });
342
+ }
343
+
344
+ /**
345
+ * @throws Error if the schema is readonly.
346
+ */
347
+ public updateFields(fields: Schema.Struct.Fields): void {
348
+ const updated = updateFieldsInSchema(this._getSchema(), fields);
349
+ this._change((schema) => {
350
+ schema.jsonSchema = toJsonSchema(updated);
351
+ });
352
+ }
353
+
354
+ /**
355
+ * @throws Error if the schema is readonly.
356
+ */
357
+ public updateFieldPropertyName({ before, after }: { before: PropertyKey; after: PropertyKey }): void {
358
+ const renamed = updateFieldNameInSchema(this._getSchema(), { before, after });
359
+ this._change((schema) => {
360
+ schema.jsonSchema = toJsonSchema(renamed);
361
+ });
362
+ }
363
+
364
+ /**
365
+ * @throws Error if the schema is readonly.
366
+ */
367
+ public removeFields(fieldNames: string[]): void {
368
+ const removed = removeFieldsFromSchema(this._getSchema(), fieldNames);
369
+ this._change((schema) => {
370
+ schema.jsonSchema = toJsonSchema(removed);
371
+ });
372
+ }
373
+
374
+ /**
375
+ * Wrapper for Obj.update that handles the change context for the persistent schema.
376
+ */
377
+ private _change(callback: (schema: PersistentSchema) => void): void {
378
+ const changeFn = (this._persistentSchema as any)[ChangeId];
379
+ if (changeFn) {
380
+ changeFn(callback);
381
+ } else {
382
+ callback(this._persistentSchema);
383
+ }
384
+ }
385
+
386
+ //
387
+ // Internals
388
+ //
389
+
390
+ /**
391
+ * Called by DatabaseSchemaRegistry on update.
392
+ */
393
+ _invalidate(): void {
394
+ this._isDirty = true;
395
+ }
396
+
397
+ /**
398
+ * Rebuilds this schema if it is dirty.
399
+ */
400
+ _rebuild(): void {
401
+ if (this._isDirty || this._schema == null) {
402
+ this._schema = toEffectSchema(getSnapshot(this._persistentSchema).jsonSchema);
403
+ this._isDirty = false;
404
+ }
405
+ }
406
+
407
+ _getSchema(): Schema.Schema.AnyNoContext {
408
+ this._rebuild();
409
+ return this._schema!;
410
+ }
411
+ }
412
+
413
+ // TODO(burdon): Move to effect.
414
+ const unwrapOptionality = (property: SchemaAST.PropertySignature): SchemaAST.PropertySignature => {
415
+ if (!SchemaAST.isUnion(property.type)) {
416
+ return property;
417
+ }
418
+
419
+ return {
420
+ ...property,
421
+ type: property.type.types.find((type) => !SchemaAST.isUndefinedKeyword(type))!,
422
+ } as any;
423
+ };
@@ -0,0 +1,7 @@
1
+ //
2
+ // Copyright 2024 DXOS.org
3
+ //
4
+
5
+ export * from './echo-schema';
6
+ export * from './manipulation';
7
+ export * from './persistent-schema';
@@ -0,0 +1,92 @@
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 { invariant } from '@dxos/invariant';
9
+ import { DXN } from '@dxos/keys';
10
+
11
+ import { type TypeAnnotation, TypeAnnotationId, TypeIdentifierAnnotationId } from '../Annotation';
12
+
13
+ // TODO(ZaymonFC): Do this one at a time. This might be dangerous.
14
+ export const addFieldsToSchema = (
15
+ schema: Schema.Schema.AnyNoContext,
16
+ fields: Schema.Struct.Fields,
17
+ ): Schema.Schema.AnyNoContext => {
18
+ const schemaExtension = Schema.partial(Schema.Struct(fields));
19
+ return Schema.extend(schema, schemaExtension).annotations(
20
+ schema.ast.annotations,
21
+ ) as any as Schema.Schema.AnyNoContext;
22
+ };
23
+
24
+ export const updateFieldsInSchema = (
25
+ schema: Schema.Schema.AnyNoContext,
26
+ fields: Schema.Struct.Fields,
27
+ ): Schema.Schema.AnyNoContext => {
28
+ const ast = schema.ast as SchemaAST.TypeLiteral;
29
+ invariant(SchemaAST.isTypeLiteral(ast));
30
+
31
+ const updatedProperties = [...ast.propertySignatures];
32
+ const propertiesToUpdate = (Schema.partial(Schema.Struct(fields)).ast as SchemaAST.TypeLiteral).propertySignatures;
33
+ for (const property of propertiesToUpdate) {
34
+ const index = updatedProperties.findIndex((p) => p.name === property.name);
35
+ if (index !== -1) {
36
+ updatedProperties[index] = property;
37
+ } else {
38
+ updatedProperties.push(property);
39
+ }
40
+ }
41
+
42
+ return Schema.make(new SchemaAST.TypeLiteral(updatedProperties, ast.indexSignatures, ast.annotations));
43
+ };
44
+
45
+ export const removeFieldsFromSchema = (
46
+ schema: Schema.Schema.AnyNoContext,
47
+ fieldNames: string[],
48
+ ): Schema.Schema.AnyNoContext => {
49
+ return Schema.make(SchemaAST.omit(schema.ast, fieldNames)).annotations(schema.ast.annotations);
50
+ };
51
+
52
+ export const updateFieldNameInSchema = (
53
+ schema: Schema.Schema.AnyNoContext,
54
+ { before, after }: { before: PropertyKey; after: PropertyKey },
55
+ ): Schema.Schema.AnyNoContext => {
56
+ const ast = schema.ast as SchemaAST.TypeLiteral;
57
+ invariant(SchemaAST.isTypeLiteral(ast));
58
+
59
+ return Schema.make(
60
+ new SchemaAST.TypeLiteral(
61
+ ast.propertySignatures.map((p) =>
62
+ p.name === before
63
+ ? new SchemaAST.PropertySignature(after, p.type, p.isOptional, p.isReadonly, p.annotations)
64
+ : p,
65
+ ),
66
+ ast.indexSignatures,
67
+ ast.annotations,
68
+ ),
69
+ );
70
+ };
71
+
72
+ export const setTypenameInSchema = (
73
+ schema: Schema.Schema.AnyNoContext,
74
+ typename: string,
75
+ ): Schema.Schema.AnyNoContext => {
76
+ const existingAnnotation = schema.ast.annotations[TypeAnnotationId] as TypeAnnotation;
77
+ invariant(existingAnnotation, `Missing ${String(TypeAnnotationId)}`);
78
+
79
+ return schema.annotations({
80
+ ...schema.ast.annotations,
81
+ [TypeAnnotationId]: {
82
+ kind: existingAnnotation.kind,
83
+ typename,
84
+ version: existingAnnotation.version,
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
+ },
91
+ });
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 '../Annotation';
8
+ import { LabelAnnotation, TypenameSchema, VersionSchema } from '../Annotation';
9
+ import { EchoObjectSchema } from '../Entity';
10
+ import { JsonSchemaType } from '../JsonSchema';
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: 'org.dxos.type.schema',
24
+ version: '0.1.0',
25
+ }),
26
+ LabelAnnotation.set(['name']),
27
+ IconAnnotation.set({
28
+ icon: 'ph--database--regular',
29
+ hue: 'green',
30
+ }),
31
+ );
32
+
33
+ export interface PersistentSchema extends Schema.Schema.Type<typeof PersistentSchema> {}
@@ -0,0 +1,102 @@
1
+ ## Refactor
2
+
3
+ 1. Remove access from outisde of @dxos/echo-db
4
+
5
+ - [x] completely restructure @dxos/echo src/internal
6
+ - [x] Remove import "." and ".."! (create lint rule).
7
+ - [x] Unify FOUR different nests of test schema.
8
+ - [x] Remove @deprecated from internal methods and mark @internal (e.g., getSchemaDXN).
9
+ - NOTE: Internal methods should not use the import \* from Obj/Type APIs.
10
+ - [x] import ObjectId => @dxos/keys
11
+ - [x] Entity.Any = Obj.Any | Relation.Any
12
+ - NOTE: Relation does not extend (in not polymorphic with) Obj.
13
+ - [x] import LabelAnnotation => Annotation.LabelAnnotation
14
+ - [x] import Expando => @dxos/schema (Expando.Expando)
15
+ - [x] live => Obj.make
16
+ - [x] Rename live => makeObject
17
+ - [x] Rename {EchoObject, EchoRelation} => {EchoObjecSchema, EchoRelationSchema}
18
+ - [x] Rename AnyProperties => AnyProperties
19
+ - [x] Created Entity.Any (=> AnyEchoObject).
20
+ - [x] TypeFormat => TypeFormat
21
+ - [x] JsonSchemaType defs
22
+ - [x] Fix database.add() input/output types and search for "Obj.Any = db.add" (also QueryResult types).
23
+ - [x] TODO(burdon): FIX!!!
24
+ - [x] Fix failing tests.
25
+ - [x] Reconcile types/version with entities/model/version
26
+ - [x] Expando moved to @dxos/schema
27
+ - [x] Narrow QueryResult and match Schema and Object generics.
28
+
29
+ 2. Clean-up
30
+
31
+ - [x] QueryResult namespace
32
+ - [x] SchemaRegistry interface
33
+ - [x] Schema registry should return Type.AnyEntity instead of Schema.Schema.AnyNoContext.
34
+ - [x] Hypergraph interface
35
+ - [x] Obj.getDatabase
36
+ - [x] SpaceAction.AddObject target should be a db not a space.
37
+ - [x] Add Relation.MakeProps
38
+ - [x] Add Obj.Unknown and Relation.Unknown to match Entity.Unknown.
39
+ - [x] TODO(wittjosiah): Should be Type.obj<...> or equivalent.
40
+ - [x] TODO(wittjosiah): Find a simpler way to define this type.
41
+ - [x] Ref.Array.targets doesn't satisfy Obj.Any because it uses AnyEchoObject.
42
+ - [x] Remove echo-db/AnyLiveObject<T> => Obj.Obj<T>
43
+ - [x] Rename AnyEchoObject => AnyEntity
44
+ - [x] Remove WithId => AnyEntity
45
+ - [x] Remove WithMeta => AnyEntity
46
+ - [x] Obj.Any => Obj.Unknown
47
+ - [x] Relation.Any => Relation.Unknown
48
+ - [x] Ref.Any => Ref.Unknown
49
+ - [x] Obj.AnyProps => Obj.Any
50
+ - [x] Factor Expando out of @dxos/echo (moved to @dxos/schema)
51
+ - [x] Obj.instanceOf works with Expando (tested in @dxos/schema)
52
+ - [x] Obj.Snapshot should be same shape as Obj.Obj but with a different brand
53
+ - [x] Mutators should only work on object after it is made mutable
54
+
55
+ - [ ] Review usage of Obj.Any, see if it could be stricter
56
+ - [ ] Type.Obj should validate using the echo object brand
57
+ - [ ] Mutable could be a branded type to fix "NOTE: TypeScript's structural typing allows readonly objects to be passed to `Mutable<T>`"
58
+ - [ ] space properties, queues, messagins preventing getSpace from being removed
59
+ - [ ] Schema registry should use Query.Query.
60
+ - [ ] Move EchoSchemaRegistry into hypergraph
61
+ - [ ] Narrow QueryResult and match Schema and Object generics.
62
+ - [ ] BaseSchema
63
+ - [ ] Directly import JSONPath, etc. from @dxos/effect.
64
+ - [ ] Promote parts of src/internal/ref to Ref.ts
65
+ - [ ] JsonPath, JsonProp, getValue, setValue => Json.Path?
66
+ - [ ] DISCUSS: Standradize $ suffix to disambuguate imports (GPT recommended).
67
+
68
+ 3. Audit usage from @dxos/echo-db
69
+
70
+ - [ ] Ability to extract Struct from Type.Obj
71
+ - [ ] created/updated system props (const { created } = Obj.getTimestamps)?
72
+ - [ ] QueryFn, QueryOptions => Database
73
+ - [ ] Datatbase.query() options?
74
+ - [ ] Expando type is used as a fallback in many plance.
75
+ - [ ] Standardize '@automerge/automerge' imports (A vs. next).
76
+
77
+ ## NOTES
78
+
79
+ - Marking types as @internal (even for unexported types) erases type information.
80
+
81
+ ## 0.9.0
82
+
83
+ - [ ] Database, Queue, Space, Type, namespaces.
84
+ - [ ] Support class variant for types.
85
+ - [ ] Support defaults.
86
+ - [ ] Support effect Date, Timestamp formats.
87
+ - [ ] Metadata for created, updated timestamps.
88
+ - [ ] Effect team design review.
89
+ - [ ] @category annotations to group types in the API.
90
+ - [ ] TSdoc and LLM training for function generation.
91
+ - [ ] Rename TypeFormat => Primitive?
92
+ - [ ] Don't re-export effect?
93
+
94
+ ## Issues
95
+
96
+ - [ ] Build error when changing from TypedObject using Ref$: Type 'Task' does not satisfy the constraint 'WithId' (see echo-schema/testing/schema.ts)
97
+ - [ ] Reconcile all schema variants (Base, Immutable, TypedObject, EchoObject, etc.)
98
+ - [ ] Consolidate getters (getType, getSchema, getTypename, getSchemaTypename, etc.)
99
+ - [ ] ReactiveObject should specify id property? Reconcile AnyProperties, ReactiveObject, HasId, WithId, etc.
100
+ - [ ] Can we us S.is(MyType) to detect objects with our types system? (Branding?)
101
+ - [ ] Type.Expando doesn't work with AtomQuery result type (have to use Obj.Any instead).
102
+ - [ ] Obj.Any doesn't work with Obj.update callback types (have to use `any` for the mutable parameter).
@@ -0,0 +1,15 @@
1
+ //
2
+ // Copyright 2025 DXOS.org
3
+ //
4
+
5
+ /**
6
+ * Shared API helpers for Obj and Relation modules.
7
+ * These implementations use generic Entity types.
8
+ * Obj and Relation modules re-export with strongly-typed signatures.
9
+ *
10
+ * TODO(wittjosiah): Could this become the new "internal" where we slowly refactor
11
+ * existing internal modules into here? This would provide a cleaner boundary
12
+ * and prevent external packages from using internals directly.
13
+ */
14
+
15
+ export * from './meta';