@dxos/echo 0.8.4-main.84f28bd → 0.8.4-main.937b3ca

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 (553) hide show
  1. package/README.md +2 -3
  2. package/dist/lib/browser/Annotation.mjs +33 -0
  3. package/dist/lib/browser/Annotation.mjs.map +7 -0
  4. package/dist/lib/browser/Database.mjs +18 -0
  5. package/dist/lib/browser/Database.mjs.map +7 -0
  6. package/dist/lib/browser/Entity.mjs +52 -0
  7. package/dist/lib/browser/Entity.mjs.map +7 -0
  8. package/dist/lib/browser/Err.mjs +11 -0
  9. package/dist/lib/browser/Err.mjs.map +7 -0
  10. package/dist/lib/browser/Filter.mjs +62 -0
  11. package/dist/lib/browser/Filter.mjs.map +7 -0
  12. package/dist/lib/browser/Format.mjs +67 -0
  13. package/dist/lib/browser/Format.mjs.map +7 -0
  14. package/dist/lib/browser/JsonSchema.mjs +20 -0
  15. package/dist/lib/browser/JsonSchema.mjs.map +7 -0
  16. package/dist/lib/browser/Key.mjs +13 -0
  17. package/dist/lib/browser/Key.mjs.map +7 -0
  18. package/dist/lib/browser/Obj.mjs +91 -0
  19. package/dist/lib/browser/Obj.mjs.map +7 -0
  20. package/dist/lib/browser/Order.mjs +13 -0
  21. package/dist/lib/browser/Order.mjs.map +7 -0
  22. package/dist/lib/browser/Query.mjs +27 -0
  23. package/dist/lib/browser/Query.mjs.map +7 -0
  24. package/dist/lib/browser/QueryResult.mjs +3 -0
  25. package/dist/lib/browser/QueryResult.mjs.map +7 -0
  26. package/dist/lib/browser/Ref.mjs +23 -0
  27. package/dist/lib/browser/Ref.mjs.map +7 -0
  28. package/dist/lib/browser/Relation.mjs +85 -0
  29. package/dist/lib/browser/Relation.mjs.map +7 -0
  30. package/dist/lib/browser/SchemaRegistry.mjs +3 -0
  31. package/dist/lib/browser/SchemaRegistry.mjs.map +7 -0
  32. package/dist/lib/browser/Tag.mjs +26 -0
  33. package/dist/lib/browser/Tag.mjs.map +7 -0
  34. package/dist/lib/browser/Type.mjs +48 -0
  35. package/dist/lib/browser/Type.mjs.map +7 -0
  36. package/dist/lib/browser/chunk-22JMFST2.mjs +24 -0
  37. package/dist/lib/browser/chunk-22JMFST2.mjs.map +7 -0
  38. package/dist/lib/browser/chunk-2SBB7OWV.mjs +250 -0
  39. package/dist/lib/browser/chunk-2SBB7OWV.mjs.map +7 -0
  40. package/dist/lib/browser/chunk-6L5HHUVU.mjs +158 -0
  41. package/dist/lib/browser/chunk-6L5HHUVU.mjs.map +7 -0
  42. package/dist/lib/browser/chunk-7STIBCP7.mjs +133 -0
  43. package/dist/lib/browser/chunk-7STIBCP7.mjs.map +7 -0
  44. package/dist/lib/browser/chunk-BJPE6CIC.mjs +3847 -0
  45. package/dist/lib/browser/chunk-BJPE6CIC.mjs.map +7 -0
  46. package/dist/lib/browser/chunk-CGS2ULMK.mjs +11 -0
  47. package/dist/lib/browser/chunk-CGS2ULMK.mjs.map +7 -0
  48. package/dist/lib/browser/chunk-CJ5YELTO.mjs +39 -0
  49. package/dist/lib/browser/chunk-CJ5YELTO.mjs.map +7 -0
  50. package/dist/lib/browser/chunk-FPOISFQK.mjs +40 -0
  51. package/dist/lib/browser/chunk-FPOISFQK.mjs.map +7 -0
  52. package/dist/lib/browser/chunk-FRDT7RA4.mjs +403 -0
  53. package/dist/lib/browser/chunk-FRDT7RA4.mjs.map +7 -0
  54. package/dist/lib/browser/chunk-INHXFXY5.mjs +22 -0
  55. package/dist/lib/browser/chunk-INHXFXY5.mjs.map +7 -0
  56. package/dist/lib/browser/chunk-IXVWLTG7.mjs +9 -0
  57. package/dist/lib/browser/chunk-IXVWLTG7.mjs.map +7 -0
  58. package/dist/lib/browser/chunk-JMKVF2YQ.mjs +43 -0
  59. package/dist/lib/browser/chunk-JMKVF2YQ.mjs.map +7 -0
  60. package/dist/lib/browser/chunk-KQQGVHFN.mjs +143 -0
  61. package/dist/lib/browser/chunk-KQQGVHFN.mjs.map +7 -0
  62. package/dist/lib/browser/chunk-MYCCGG2T.mjs +15 -0
  63. package/dist/lib/browser/chunk-MYCCGG2T.mjs.map +7 -0
  64. package/dist/lib/browser/chunk-NOPVNWPT.mjs +204 -0
  65. package/dist/lib/browser/chunk-NOPVNWPT.mjs.map +7 -0
  66. package/dist/lib/browser/chunk-PQZW3S6L.mjs +74 -0
  67. package/dist/lib/browser/chunk-PQZW3S6L.mjs.map +7 -0
  68. package/dist/lib/browser/chunk-RK4Z4JUZ.mjs +283 -0
  69. package/dist/lib/browser/chunk-RK4Z4JUZ.mjs.map +7 -0
  70. package/dist/lib/browser/chunk-U2J7TA7K.mjs +57 -0
  71. package/dist/lib/browser/chunk-U2J7TA7K.mjs.map +7 -0
  72. package/dist/lib/browser/chunk-W5D2GWAW.mjs +98 -0
  73. package/dist/lib/browser/chunk-W5D2GWAW.mjs.map +7 -0
  74. package/dist/lib/browser/chunk-XDIUHAAX.mjs +41 -0
  75. package/dist/lib/browser/chunk-XDIUHAAX.mjs.map +7 -0
  76. package/dist/lib/browser/chunk-YKTSSMDS.mjs +69 -0
  77. package/dist/lib/browser/chunk-YKTSSMDS.mjs.map +7 -0
  78. package/dist/lib/browser/chunk-ZAGAOZVY.mjs +288 -0
  79. package/dist/lib/browser/chunk-ZAGAOZVY.mjs.map +7 -0
  80. package/dist/lib/browser/chunk-ZHXZGIXD.mjs +9 -0
  81. package/dist/lib/browser/chunk-ZHXZGIXD.mjs.map +7 -0
  82. package/dist/lib/browser/index.mjs +72 -9
  83. package/dist/lib/browser/internal/index.mjs +457 -0
  84. package/dist/lib/browser/internal/index.mjs.map +7 -0
  85. package/dist/lib/browser/meta.json +1 -1
  86. package/dist/lib/browser/testing/index.mjs +332 -35
  87. package/dist/lib/browser/testing/index.mjs.map +4 -4
  88. package/dist/lib/node-esm/Annotation.mjs +33 -0
  89. package/dist/lib/node-esm/Annotation.mjs.map +7 -0
  90. package/dist/lib/node-esm/Database.mjs +18 -0
  91. package/dist/lib/node-esm/Database.mjs.map +7 -0
  92. package/dist/lib/node-esm/Entity.mjs +52 -0
  93. package/dist/lib/node-esm/Entity.mjs.map +7 -0
  94. package/dist/lib/node-esm/Err.mjs +11 -0
  95. package/dist/lib/node-esm/Err.mjs.map +7 -0
  96. package/dist/lib/node-esm/Filter.mjs +62 -0
  97. package/dist/lib/node-esm/Filter.mjs.map +7 -0
  98. package/dist/lib/node-esm/Format.mjs +67 -0
  99. package/dist/lib/node-esm/Format.mjs.map +7 -0
  100. package/dist/lib/node-esm/JsonSchema.mjs +20 -0
  101. package/dist/lib/node-esm/JsonSchema.mjs.map +7 -0
  102. package/dist/lib/node-esm/Key.mjs +13 -0
  103. package/dist/lib/node-esm/Key.mjs.map +7 -0
  104. package/dist/lib/node-esm/Obj.mjs +91 -0
  105. package/dist/lib/node-esm/Obj.mjs.map +7 -0
  106. package/dist/lib/node-esm/Order.mjs +13 -0
  107. package/dist/lib/node-esm/Order.mjs.map +7 -0
  108. package/dist/lib/node-esm/Query.mjs +27 -0
  109. package/dist/lib/node-esm/Query.mjs.map +7 -0
  110. package/dist/lib/node-esm/QueryResult.mjs +3 -0
  111. package/dist/lib/node-esm/QueryResult.mjs.map +7 -0
  112. package/dist/lib/node-esm/Ref.mjs +23 -0
  113. package/dist/lib/node-esm/Ref.mjs.map +7 -0
  114. package/dist/lib/node-esm/Relation.mjs +85 -0
  115. package/dist/lib/node-esm/Relation.mjs.map +7 -0
  116. package/dist/lib/node-esm/SchemaRegistry.mjs +3 -0
  117. package/dist/lib/node-esm/SchemaRegistry.mjs.map +7 -0
  118. package/dist/lib/node-esm/Tag.mjs +26 -0
  119. package/dist/lib/node-esm/Tag.mjs.map +7 -0
  120. package/dist/lib/node-esm/Type.mjs +48 -0
  121. package/dist/lib/node-esm/Type.mjs.map +7 -0
  122. package/dist/lib/node-esm/chunk-4PNXQA64.mjs +250 -0
  123. package/dist/lib/node-esm/chunk-4PNXQA64.mjs.map +7 -0
  124. package/dist/lib/node-esm/chunk-5OBN7GZW.mjs +158 -0
  125. package/dist/lib/node-esm/chunk-5OBN7GZW.mjs.map +7 -0
  126. package/dist/lib/node-esm/chunk-AJEMYSIR.mjs +22 -0
  127. package/dist/lib/node-esm/chunk-AJEMYSIR.mjs.map +7 -0
  128. package/dist/lib/node-esm/chunk-ANLVLWME.mjs +98 -0
  129. package/dist/lib/node-esm/chunk-ANLVLWME.mjs.map +7 -0
  130. package/dist/lib/node-esm/chunk-DMR7OAFK.mjs +57 -0
  131. package/dist/lib/node-esm/chunk-DMR7OAFK.mjs.map +7 -0
  132. package/dist/lib/node-esm/chunk-FWTSPIFF.mjs +133 -0
  133. package/dist/lib/node-esm/chunk-FWTSPIFF.mjs.map +7 -0
  134. package/dist/lib/node-esm/chunk-HSLMI22Q.mjs +11 -0
  135. package/dist/lib/node-esm/chunk-HSLMI22Q.mjs.map +7 -0
  136. package/dist/lib/node-esm/chunk-ILMLLM4R.mjs +204 -0
  137. package/dist/lib/node-esm/chunk-ILMLLM4R.mjs.map +7 -0
  138. package/dist/lib/node-esm/chunk-K37NA7PO.mjs +43 -0
  139. package/dist/lib/node-esm/chunk-K37NA7PO.mjs.map +7 -0
  140. package/dist/lib/node-esm/chunk-LT3H4JOX.mjs +3847 -0
  141. package/dist/lib/node-esm/chunk-LT3H4JOX.mjs.map +7 -0
  142. package/dist/lib/node-esm/chunk-MOLNWFNL.mjs +9 -0
  143. package/dist/lib/node-esm/chunk-MOLNWFNL.mjs.map +7 -0
  144. package/dist/lib/node-esm/chunk-MOWUEW5P.mjs +15 -0
  145. package/dist/lib/node-esm/chunk-MOWUEW5P.mjs.map +7 -0
  146. package/dist/lib/node-esm/chunk-NBWL7UCZ.mjs +40 -0
  147. package/dist/lib/node-esm/chunk-NBWL7UCZ.mjs.map +7 -0
  148. package/dist/lib/node-esm/chunk-NRN3ZW2T.mjs +143 -0
  149. package/dist/lib/node-esm/chunk-NRN3ZW2T.mjs.map +7 -0
  150. package/dist/lib/node-esm/chunk-QLI2EIJ2.mjs +41 -0
  151. package/dist/lib/node-esm/chunk-QLI2EIJ2.mjs.map +7 -0
  152. package/dist/lib/node-esm/chunk-QYR67VBV.mjs +288 -0
  153. package/dist/lib/node-esm/chunk-QYR67VBV.mjs.map +7 -0
  154. package/dist/lib/node-esm/chunk-UKGVOINP.mjs +9 -0
  155. package/dist/lib/node-esm/chunk-UKGVOINP.mjs.map +7 -0
  156. package/dist/lib/node-esm/chunk-W6QIEBTQ.mjs +403 -0
  157. package/dist/lib/node-esm/chunk-W6QIEBTQ.mjs.map +7 -0
  158. package/dist/lib/node-esm/chunk-XHJRMQZD.mjs +69 -0
  159. package/dist/lib/node-esm/chunk-XHJRMQZD.mjs.map +7 -0
  160. package/dist/lib/node-esm/chunk-Y75VU7LB.mjs +74 -0
  161. package/dist/lib/node-esm/chunk-Y75VU7LB.mjs.map +7 -0
  162. package/dist/lib/node-esm/chunk-YOLH5KS4.mjs +283 -0
  163. package/dist/lib/node-esm/chunk-YOLH5KS4.mjs.map +7 -0
  164. package/dist/lib/node-esm/chunk-YQ2NWGL5.mjs +39 -0
  165. package/dist/lib/node-esm/chunk-YQ2NWGL5.mjs.map +7 -0
  166. package/dist/lib/node-esm/chunk-ZBB67AKD.mjs +24 -0
  167. package/dist/lib/node-esm/chunk-ZBB67AKD.mjs.map +7 -0
  168. package/dist/lib/node-esm/index.mjs +72 -9
  169. package/dist/lib/node-esm/internal/index.mjs +457 -0
  170. package/dist/lib/node-esm/internal/index.mjs.map +7 -0
  171. package/dist/lib/node-esm/meta.json +1 -1
  172. package/dist/lib/node-esm/testing/index.mjs +332 -35
  173. package/dist/lib/node-esm/testing/index.mjs.map +4 -4
  174. package/dist/types/src/Annotation.d.ts +2 -0
  175. package/dist/types/src/Annotation.d.ts.map +1 -0
  176. package/dist/types/src/Database.d.ts +194 -0
  177. package/dist/types/src/Database.d.ts.map +1 -0
  178. package/dist/types/src/Entity.d.ts +142 -0
  179. package/dist/types/src/Entity.d.ts.map +1 -0
  180. package/dist/types/src/Entity.test.d.ts +2 -0
  181. package/dist/types/src/Entity.test.d.ts.map +1 -0
  182. package/dist/types/src/Err.d.ts +64 -0
  183. package/dist/types/src/Err.d.ts.map +1 -0
  184. package/dist/types/src/Filter.d.ts +120 -0
  185. package/dist/types/src/Filter.d.ts.map +1 -0
  186. package/dist/types/src/Format.d.ts +4 -0
  187. package/dist/types/src/Format.d.ts.map +1 -0
  188. package/dist/types/src/Hypergraph.d.ts +60 -0
  189. package/dist/types/src/Hypergraph.d.ts.map +1 -0
  190. package/dist/types/src/JsonSchema.d.ts +9 -0
  191. package/dist/types/src/JsonSchema.d.ts.map +1 -0
  192. package/dist/types/src/Key.d.ts +1 -0
  193. package/dist/types/src/Key.d.ts.map +1 -1
  194. package/dist/types/src/Obj.d.ts +344 -34
  195. package/dist/types/src/Obj.d.ts.map +1 -1
  196. package/dist/types/src/Obj.test.d.ts +2 -0
  197. package/dist/types/src/Obj.test.d.ts.map +1 -0
  198. package/dist/types/src/Order.d.ts +16 -0
  199. package/dist/types/src/Order.d.ts.map +1 -0
  200. package/dist/types/src/Query.d.ts +115 -0
  201. package/dist/types/src/Query.d.ts.map +1 -0
  202. package/dist/types/src/Query.test.d.ts +2 -0
  203. package/dist/types/src/Query.test.d.ts.map +1 -0
  204. package/dist/types/src/QueryResult.d.ts +80 -0
  205. package/dist/types/src/QueryResult.d.ts.map +1 -0
  206. package/dist/types/src/Ref.d.ts +13 -11
  207. package/dist/types/src/Ref.d.ts.map +1 -1
  208. package/dist/types/src/Relation.d.ts +242 -19
  209. package/dist/types/src/Relation.d.ts.map +1 -1
  210. package/dist/types/src/Relation.test.d.ts +2 -0
  211. package/dist/types/src/Relation.test.d.ts.map +1 -0
  212. package/dist/types/src/SchemaRegistry.d.ts +84 -0
  213. package/dist/types/src/SchemaRegistry.d.ts.map +1 -0
  214. package/dist/types/src/Tag.d.ts +17 -0
  215. package/dist/types/src/Tag.d.ts.map +1 -0
  216. package/dist/types/src/Type.d.ts +225 -73
  217. package/dist/types/src/Type.d.ts.map +1 -1
  218. package/dist/types/src/Type.test.d.ts +2 -0
  219. package/dist/types/src/Type.test.d.ts.map +1 -0
  220. package/dist/types/src/index.d.ts +15 -3
  221. package/dist/types/src/index.d.ts.map +1 -1
  222. package/dist/types/src/internal/annotations/annotations.d.ts +170 -0
  223. package/dist/types/src/internal/annotations/annotations.d.ts.map +1 -0
  224. package/dist/types/src/internal/annotations/annotations.test.d.ts +2 -0
  225. package/dist/types/src/internal/annotations/annotations.test.d.ts.map +1 -0
  226. package/dist/types/src/internal/annotations/index.d.ts +3 -0
  227. package/dist/types/src/internal/annotations/index.d.ts.map +1 -0
  228. package/dist/types/src/internal/annotations/util.d.ts +27 -0
  229. package/dist/types/src/internal/annotations/util.d.ts.map +1 -0
  230. package/dist/types/src/internal/api/annotations.d.ts +23 -0
  231. package/dist/types/src/internal/api/annotations.d.ts.map +1 -0
  232. package/dist/types/src/internal/api/entity.d.ts +13 -0
  233. package/dist/types/src/internal/api/entity.d.ts.map +1 -0
  234. package/dist/types/src/internal/api/index.d.ts +15 -0
  235. package/dist/types/src/internal/api/index.d.ts.map +1 -0
  236. package/dist/types/src/internal/api/meta.d.ts +42 -0
  237. package/dist/types/src/internal/api/meta.d.ts.map +1 -0
  238. package/dist/types/src/internal/api/sorting.d.ts +24 -0
  239. package/dist/types/src/internal/api/sorting.d.ts.map +1 -0
  240. package/dist/types/src/internal/api/version.d.ts +42 -0
  241. package/dist/types/src/internal/api/version.d.ts.map +1 -0
  242. package/dist/types/src/internal/entities/entity.d.ts +20 -0
  243. package/dist/types/src/internal/entities/entity.d.ts.map +1 -0
  244. package/dist/types/src/internal/entities/index.d.ts +6 -0
  245. package/dist/types/src/internal/entities/index.d.ts.map +1 -0
  246. package/dist/types/src/internal/entities/model.d.ts +77 -0
  247. package/dist/types/src/internal/entities/model.d.ts.map +1 -0
  248. package/dist/types/src/internal/entities/object.d.ts +18 -0
  249. package/dist/types/src/internal/entities/object.d.ts.map +1 -0
  250. package/dist/types/src/internal/entities/relation.d.ts +62 -0
  251. package/dist/types/src/internal/entities/relation.d.ts.map +1 -0
  252. package/dist/types/src/internal/entities/util.d.ts +2 -0
  253. package/dist/types/src/internal/entities/util.d.ts.map +1 -0
  254. package/dist/types/src/internal/formats/date.d.ts +63 -0
  255. package/dist/types/src/internal/formats/date.d.ts.map +1 -0
  256. package/dist/types/src/internal/formats/date.test.d.ts +2 -0
  257. package/dist/types/src/internal/formats/date.test.d.ts.map +1 -0
  258. package/dist/types/src/internal/formats/format.d.ts +32 -0
  259. package/dist/types/src/internal/formats/format.d.ts.map +1 -0
  260. package/dist/types/src/internal/formats/format.test.d.ts +2 -0
  261. package/dist/types/src/internal/formats/format.test.d.ts.map +1 -0
  262. package/dist/types/src/internal/formats/index.d.ts +8 -0
  263. package/dist/types/src/internal/formats/index.d.ts.map +1 -0
  264. package/dist/types/src/internal/formats/number.d.ts +31 -0
  265. package/dist/types/src/internal/formats/number.d.ts.map +1 -0
  266. package/dist/types/src/internal/formats/object.d.ts +35 -0
  267. package/dist/types/src/internal/formats/object.d.ts.map +1 -0
  268. package/dist/types/src/internal/formats/select.d.ts +13 -0
  269. package/dist/types/src/internal/formats/select.d.ts.map +1 -0
  270. package/dist/types/src/internal/formats/string.d.ts +42 -0
  271. package/dist/types/src/internal/formats/string.d.ts.map +1 -0
  272. package/dist/types/src/internal/formats/types.d.ts +72 -0
  273. package/dist/types/src/internal/formats/types.d.ts.map +1 -0
  274. package/dist/types/src/internal/index.d.ts +12 -0
  275. package/dist/types/src/internal/index.d.ts.map +1 -0
  276. package/dist/types/src/internal/json-schema/annotations.d.ts +19 -0
  277. package/dist/types/src/internal/json-schema/annotations.d.ts.map +1 -0
  278. package/dist/types/src/internal/json-schema/effect-schema.test.d.ts +2 -0
  279. package/dist/types/src/internal/json-schema/effect-schema.test.d.ts.map +1 -0
  280. package/dist/types/src/internal/json-schema/index.d.ts +5 -0
  281. package/dist/types/src/internal/json-schema/index.d.ts.map +1 -0
  282. package/dist/types/src/internal/json-schema/json-schema-normalize.d.ts +7 -0
  283. package/dist/types/src/internal/json-schema/json-schema-normalize.d.ts.map +1 -0
  284. package/dist/types/src/internal/json-schema/json-schema-type.d.ts +250 -0
  285. package/dist/types/src/internal/json-schema/json-schema-type.d.ts.map +1 -0
  286. package/dist/types/src/internal/json-schema/json-schema.d.ts +29 -0
  287. package/dist/types/src/internal/json-schema/json-schema.d.ts.map +1 -0
  288. package/dist/types/src/internal/json-schema/json-schema.test.d.ts +2 -0
  289. package/dist/types/src/internal/json-schema/json-schema.test.d.ts.map +1 -0
  290. package/dist/types/src/internal/object/clone.d.ts +8 -0
  291. package/dist/types/src/internal/object/clone.d.ts.map +1 -0
  292. package/dist/types/src/internal/object/common.d.ts +18 -0
  293. package/dist/types/src/internal/object/common.d.ts.map +1 -0
  294. package/dist/types/src/internal/object/create-object.d.ts +39 -0
  295. package/dist/types/src/internal/object/create-object.d.ts.map +1 -0
  296. package/dist/types/src/internal/object/create-object.test.d.ts +2 -0
  297. package/dist/types/src/internal/object/create-object.test.d.ts.map +1 -0
  298. package/dist/types/src/internal/object/deleted.d.ts +6 -0
  299. package/dist/types/src/internal/object/deleted.d.ts.map +1 -0
  300. package/dist/types/src/internal/object/ids.d.ts +6 -0
  301. package/dist/types/src/internal/object/ids.d.ts.map +1 -0
  302. package/dist/types/src/internal/object/index.d.ts +11 -0
  303. package/dist/types/src/internal/object/index.d.ts.map +1 -0
  304. package/dist/types/src/internal/object/inspect.d.ts +2 -0
  305. package/dist/types/src/internal/object/inspect.d.ts.map +1 -0
  306. package/dist/types/src/internal/object/json-serializer.d.ts +37 -0
  307. package/dist/types/src/internal/object/json-serializer.d.ts.map +1 -0
  308. package/dist/types/src/internal/object/json-serializer.test.d.ts +2 -0
  309. package/dist/types/src/internal/object/json-serializer.test.d.ts.map +1 -0
  310. package/dist/types/src/internal/object/schema-validator.d.ts +2 -0
  311. package/dist/types/src/internal/object/schema-validator.d.ts.map +1 -0
  312. package/dist/types/src/internal/object/schema-validator.test.d.ts +2 -0
  313. package/dist/types/src/internal/object/schema-validator.test.d.ts.map +1 -0
  314. package/dist/types/src/internal/object/set-value.d.ts +7 -0
  315. package/dist/types/src/internal/object/set-value.d.ts.map +1 -0
  316. package/dist/types/src/internal/object/set-value.test.d.ts +2 -0
  317. package/dist/types/src/internal/object/set-value.test.d.ts.map +1 -0
  318. package/dist/types/src/internal/object/snapshot.d.ts +6 -0
  319. package/dist/types/src/internal/object/snapshot.d.ts.map +1 -0
  320. package/dist/types/src/internal/object/typed-object.d.ts +25 -0
  321. package/dist/types/src/internal/object/typed-object.d.ts.map +1 -0
  322. package/dist/types/src/internal/object/typed-object.test.d.ts +2 -0
  323. package/dist/types/src/internal/object/typed-object.test.d.ts.map +1 -0
  324. package/dist/types/src/internal/proxy/change-context.d.ts +55 -0
  325. package/dist/types/src/internal/proxy/change-context.d.ts.map +1 -0
  326. package/dist/types/src/internal/proxy/change.test.d.ts +2 -0
  327. package/dist/types/src/internal/proxy/change.test.d.ts.map +1 -0
  328. package/dist/types/src/internal/proxy/define-hidden-property.d.ts +5 -0
  329. package/dist/types/src/internal/proxy/define-hidden-property.d.ts.map +1 -0
  330. package/dist/types/src/internal/proxy/errors.d.ts +19 -0
  331. package/dist/types/src/internal/proxy/errors.d.ts.map +1 -0
  332. package/dist/types/src/internal/proxy/event-batch.d.ts +10 -0
  333. package/dist/types/src/internal/proxy/event-batch.d.ts.map +1 -0
  334. package/dist/types/src/internal/proxy/handler.test.d.ts +2 -0
  335. package/dist/types/src/internal/proxy/handler.test.d.ts.map +1 -0
  336. package/dist/types/src/internal/proxy/index.d.ts +14 -0
  337. package/dist/types/src/internal/proxy/index.d.ts.map +1 -0
  338. package/dist/types/src/internal/proxy/json-serializer.d.ts +6 -0
  339. package/dist/types/src/internal/proxy/json-serializer.d.ts.map +1 -0
  340. package/dist/types/src/internal/proxy/make-object.d.ts +14 -0
  341. package/dist/types/src/internal/proxy/make-object.d.ts.map +1 -0
  342. package/dist/types/src/internal/proxy/ownership.d.ts +57 -0
  343. package/dist/types/src/internal/proxy/ownership.d.ts.map +1 -0
  344. package/dist/types/src/internal/proxy/proxy-types.d.ts +18 -0
  345. package/dist/types/src/internal/proxy/proxy-types.d.ts.map +1 -0
  346. package/dist/types/src/internal/proxy/proxy-utils.d.ts +47 -0
  347. package/dist/types/src/internal/proxy/proxy-utils.d.ts.map +1 -0
  348. package/dist/types/src/internal/proxy/reactive-array.d.ts +8 -0
  349. package/dist/types/src/internal/proxy/reactive-array.d.ts.map +1 -0
  350. package/dist/types/src/internal/proxy/reactive.d.ts +39 -0
  351. package/dist/types/src/internal/proxy/reactive.d.ts.map +1 -0
  352. package/dist/types/src/internal/proxy/schema-validator.d.ts +15 -0
  353. package/dist/types/src/internal/proxy/schema-validator.d.ts.map +1 -0
  354. package/dist/types/src/internal/proxy/schema.test.d.ts +2 -0
  355. package/dist/types/src/internal/proxy/schema.test.d.ts.map +1 -0
  356. package/dist/types/src/internal/proxy/symbols.d.ts +3 -0
  357. package/dist/types/src/internal/proxy/symbols.d.ts.map +1 -0
  358. package/dist/types/src/internal/proxy/typed-handler.d.ts +47 -0
  359. package/dist/types/src/internal/proxy/typed-handler.d.ts.map +1 -0
  360. package/dist/types/src/internal/proxy/typed-handler.test.d.ts +2 -0
  361. package/dist/types/src/internal/proxy/typed-handler.test.d.ts.map +1 -0
  362. package/dist/types/src/internal/proxy/typed-object.test.d.ts +2 -0
  363. package/dist/types/src/internal/proxy/typed-object.test.d.ts.map +1 -0
  364. package/dist/types/src/internal/ref/index.d.ts +3 -0
  365. package/dist/types/src/internal/ref/index.d.ts.map +1 -0
  366. package/dist/types/src/internal/ref/ref-array.d.ts +21 -0
  367. package/dist/types/src/internal/ref/ref-array.d.ts.map +1 -0
  368. package/dist/types/src/internal/ref/ref.d.ts +217 -0
  369. package/dist/types/src/internal/ref/ref.d.ts.map +1 -0
  370. package/dist/types/src/internal/ref/ref.test.d.ts +2 -0
  371. package/dist/types/src/internal/ref/ref.test.d.ts.map +1 -0
  372. package/dist/types/src/internal/schema/compose.d.ts +6 -0
  373. package/dist/types/src/internal/schema/compose.d.ts.map +1 -0
  374. package/dist/types/src/internal/schema/compose.test.d.ts +2 -0
  375. package/dist/types/src/internal/schema/compose.test.d.ts.map +1 -0
  376. package/dist/types/src/internal/schema/echo-schema.d.ts +180 -0
  377. package/dist/types/src/internal/schema/echo-schema.d.ts.map +1 -0
  378. package/dist/types/src/internal/schema/index.d.ts +4 -0
  379. package/dist/types/src/internal/schema/index.d.ts.map +1 -0
  380. package/dist/types/src/internal/schema/manipulation.d.ts +10 -0
  381. package/dist/types/src/internal/schema/manipulation.d.ts.map +1 -0
  382. package/dist/types/src/internal/schema/persistent-schema.d.ts +20 -0
  383. package/dist/types/src/internal/schema/persistent-schema.d.ts.map +1 -0
  384. package/dist/types/src/internal/types/base.d.ts +26 -0
  385. package/dist/types/src/internal/types/base.d.ts.map +1 -0
  386. package/dist/types/src/internal/types/entity.d.ts +37 -0
  387. package/dist/types/src/internal/types/entity.d.ts.map +1 -0
  388. package/dist/types/src/internal/types/index.d.ts +6 -0
  389. package/dist/types/src/internal/types/index.d.ts.map +1 -0
  390. package/dist/types/src/internal/types/meta.d.ts +32 -0
  391. package/dist/types/src/internal/types/meta.d.ts.map +1 -0
  392. package/dist/types/src/internal/types/typename.d.ts +13 -0
  393. package/dist/types/src/internal/types/typename.d.ts.map +1 -0
  394. package/dist/types/src/internal/types/version.d.ts +15 -0
  395. package/dist/types/src/internal/types/version.d.ts.map +1 -0
  396. package/dist/types/src/{test → testing}/api.test.d.ts.map +1 -1
  397. package/dist/types/src/testing/index.d.ts +3 -1
  398. package/dist/types/src/testing/index.d.ts.map +1 -1
  399. package/dist/types/src/testing/test-data.d.ts +18 -0
  400. package/dist/types/src/testing/test-data.d.ts.map +1 -0
  401. package/dist/types/src/testing/test-schema.d.ts +303 -0
  402. package/dist/types/src/testing/test-schema.d.ts.map +1 -0
  403. package/dist/types/src/testing/util.d.ts +21 -0
  404. package/dist/types/src/testing/util.d.ts.map +1 -0
  405. package/dist/types/tsconfig.tsbuildinfo +1 -1
  406. package/package.json +166 -33
  407. package/src/Annotation.ts +18 -0
  408. package/src/Database.ts +336 -0
  409. package/src/Entity.test.ts +22 -0
  410. package/src/Entity.ts +217 -0
  411. package/src/Err.ts +18 -0
  412. package/src/Filter.ts +376 -0
  413. package/src/Format.ts +9 -0
  414. package/src/Hypergraph.ts +74 -0
  415. package/src/JsonSchema.ts +16 -0
  416. package/src/Key.ts +3 -0
  417. package/src/Obj.test.ts +386 -0
  418. package/src/Obj.ts +509 -85
  419. package/src/Order.ts +44 -0
  420. package/src/Query.test.ts +465 -0
  421. package/src/Query.ts +296 -0
  422. package/src/QueryResult.ts +106 -0
  423. package/src/Ref.ts +25 -9
  424. package/src/Relation.test.ts +82 -0
  425. package/src/Relation.ts +414 -51
  426. package/src/SchemaRegistry.ts +105 -0
  427. package/src/Tag.ts +40 -0
  428. package/src/Type.test.ts +52 -0
  429. package/src/Type.ts +360 -112
  430. package/src/index.ts +17 -4
  431. package/src/internal/README.md +102 -0
  432. package/src/internal/annotations/annotations.test.ts +96 -0
  433. package/src/internal/annotations/annotations.ts +460 -0
  434. package/src/internal/annotations/index.ts +6 -0
  435. package/src/internal/annotations/util.ts +72 -0
  436. package/src/internal/api/annotations.ts +60 -0
  437. package/src/internal/api/entity.ts +29 -0
  438. package/src/internal/api/index.ts +19 -0
  439. package/src/internal/api/meta.ts +88 -0
  440. package/src/internal/api/sorting.ts +53 -0
  441. package/src/internal/api/version.ts +96 -0
  442. package/src/internal/entities/entity.ts +126 -0
  443. package/src/internal/entities/index.ts +9 -0
  444. package/src/internal/entities/model.ts +134 -0
  445. package/src/internal/entities/object.ts +60 -0
  446. package/src/internal/entities/relation.ts +173 -0
  447. package/src/internal/entities/util.ts +33 -0
  448. package/src/internal/formats/date.test.ts +56 -0
  449. package/src/internal/formats/date.ts +217 -0
  450. package/src/internal/formats/format.test.ts +77 -0
  451. package/src/internal/formats/format.ts +54 -0
  452. package/src/internal/formats/index.ts +12 -0
  453. package/src/internal/formats/number.ts +89 -0
  454. package/src/internal/formats/object.ts +80 -0
  455. package/src/internal/formats/select.ts +18 -0
  456. package/src/internal/formats/string.ts +81 -0
  457. package/src/internal/formats/types.ts +186 -0
  458. package/src/internal/index.ts +39 -0
  459. package/src/internal/json-schema/annotations.ts +50 -0
  460. package/src/internal/json-schema/effect-schema.test.ts +143 -0
  461. package/src/internal/json-schema/index.ts +8 -0
  462. package/src/internal/json-schema/json-schema-normalize.ts +109 -0
  463. package/src/internal/json-schema/json-schema-type.ts +404 -0
  464. package/src/internal/json-schema/json-schema.test.ts +861 -0
  465. package/src/internal/json-schema/json-schema.ts +528 -0
  466. package/src/internal/object/clone.ts +48 -0
  467. package/src/internal/object/common.ts +75 -0
  468. package/src/internal/object/create-object.test.ts +116 -0
  469. package/src/internal/object/create-object.ts +95 -0
  470. package/src/internal/object/deleted.ts +19 -0
  471. package/src/internal/object/ids.ts +12 -0
  472. package/src/internal/object/index.ts +14 -0
  473. package/src/internal/object/inspect.ts +46 -0
  474. package/src/internal/object/json-serializer.test.ts +97 -0
  475. package/src/internal/object/json-serializer.ts +188 -0
  476. package/src/internal/object/schema-validator.test.ts +186 -0
  477. package/src/internal/object/schema-validator.ts +6 -0
  478. package/src/internal/object/set-value.test.ts +281 -0
  479. package/src/internal/object/set-value.ts +165 -0
  480. package/src/internal/object/snapshot.ts +70 -0
  481. package/src/internal/object/typed-object.test.ts +34 -0
  482. package/src/internal/object/typed-object.ts +30 -0
  483. package/src/internal/proxy/change-context.ts +138 -0
  484. package/src/internal/proxy/change.test.ts +519 -0
  485. package/src/internal/proxy/define-hidden-property.ts +14 -0
  486. package/src/internal/proxy/errors.ts +42 -0
  487. package/src/internal/proxy/event-batch.ts +44 -0
  488. package/src/internal/proxy/handler.test.ts +123 -0
  489. package/src/internal/proxy/index.ts +17 -0
  490. package/src/internal/proxy/json-serializer.ts +87 -0
  491. package/src/internal/proxy/make-object.ts +96 -0
  492. package/src/internal/proxy/ownership.ts +253 -0
  493. package/src/internal/proxy/proxy-types.ts +23 -0
  494. package/src/internal/proxy/proxy-utils.ts +150 -0
  495. package/src/internal/proxy/reactive-array.ts +71 -0
  496. package/src/internal/proxy/reactive.ts +69 -0
  497. package/src/internal/proxy/schema-validator.ts +244 -0
  498. package/src/internal/proxy/schema.test.ts +145 -0
  499. package/src/internal/proxy/symbols.ts +7 -0
  500. package/src/internal/proxy/typed-handler.test.ts +318 -0
  501. package/src/internal/proxy/typed-handler.ts +442 -0
  502. package/src/internal/proxy/typed-object.test.ts +116 -0
  503. package/src/internal/ref/index.ts +6 -0
  504. package/src/internal/ref/ref-array.ts +39 -0
  505. package/src/internal/ref/ref.test.ts +101 -0
  506. package/src/internal/ref/ref.ts +548 -0
  507. package/src/internal/schema/compose.test.ts +42 -0
  508. package/src/internal/schema/compose.ts +36 -0
  509. package/src/internal/schema/echo-schema.ts +423 -0
  510. package/src/internal/schema/index.ts +7 -0
  511. package/src/internal/schema/manipulation.ts +92 -0
  512. package/src/internal/schema/persistent-schema.ts +27 -0
  513. package/src/internal/types/base.ts +43 -0
  514. package/src/internal/types/entity.ts +54 -0
  515. package/src/internal/types/index.ts +9 -0
  516. package/src/internal/types/meta.ts +66 -0
  517. package/src/internal/types/typename.ts +45 -0
  518. package/src/internal/types/version.ts +20 -0
  519. package/src/testing/api.test.ts +126 -0
  520. package/src/testing/index.ts +3 -1
  521. package/src/testing/test-data.ts +130 -0
  522. package/src/testing/test-schema.ts +238 -0
  523. package/src/testing/util.ts +85 -0
  524. package/dist/lib/browser/chunk-SVSJEELN.mjs +0 -619
  525. package/dist/lib/browser/chunk-SVSJEELN.mjs.map +0 -7
  526. package/dist/lib/node-esm/chunk-53HXWYR6.mjs +0 -619
  527. package/dist/lib/node-esm/chunk-53HXWYR6.mjs.map +0 -7
  528. package/dist/types/src/experimental/database.d.ts +0 -8
  529. package/dist/types/src/experimental/database.d.ts.map +0 -1
  530. package/dist/types/src/experimental/index.d.ts +0 -1
  531. package/dist/types/src/experimental/index.d.ts.map +0 -1
  532. package/dist/types/src/experimental/queue.d.ts +0 -8
  533. package/dist/types/src/experimental/queue.d.ts.map +0 -1
  534. package/dist/types/src/experimental/space.d.ts +0 -8
  535. package/dist/types/src/experimental/space.d.ts.map +0 -1
  536. package/dist/types/src/query/dsl.d.ts +0 -218
  537. package/dist/types/src/query/dsl.d.ts.map +0 -1
  538. package/dist/types/src/query/dsl.test.d.ts +0 -2
  539. package/dist/types/src/query/dsl.test.d.ts.map +0 -1
  540. package/dist/types/src/query/index.d.ts +0 -2
  541. package/dist/types/src/query/index.d.ts.map +0 -1
  542. package/dist/types/src/testing/types.d.ts +0 -113
  543. package/dist/types/src/testing/types.d.ts.map +0 -1
  544. package/src/experimental/database.ts +0 -11
  545. package/src/experimental/index.ts +0 -7
  546. package/src/experimental/queue.ts +0 -11
  547. package/src/experimental/space.ts +0 -11
  548. package/src/query/dsl.test.ts +0 -323
  549. package/src/query/dsl.ts +0 -646
  550. package/src/query/index.ts +0 -5
  551. package/src/test/api.test.ts +0 -173
  552. package/src/testing/types.ts +0 -91
  553. /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 SchemaMeta, SchemaMetaSymbol, type TypeAnnotation, getTypeAnnotation } from '../annotations';
12
+ import { type JsonSchemaType, toEffectSchema, toJsonSchema } from '../json-schema';
13
+ import { type TypedObject, type TypedObjectPrototype, getSnapshot } from '../object';
14
+ import { ChangeId } from '../proxy';
15
+ import { EntityKind, SchemaKindId } from '../types';
16
+
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: 'example.org/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.Obj.Any 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(): PersistentSchema {
308
+ return this._persistentSchema;
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.change 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 '../annotations';
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,27 @@
1
+ //
2
+ // Copyright 2024 DXOS.org
3
+ //
4
+
5
+ import * as Schema from 'effect/Schema';
6
+
7
+ import { TypenameSchema, VersionSchema } from '../annotations';
8
+ import { EchoObjectSchema } from '../entities';
9
+ import { JsonSchemaType } from '../json-schema';
10
+
11
+ /**
12
+ * Persistent representation of a schema.
13
+ */
14
+ // TODO(burdon): Move.
15
+ export const PersistentSchema = Schema.Struct({
16
+ name: Schema.optional(Schema.String),
17
+ typename: TypenameSchema,
18
+ version: VersionSchema,
19
+ jsonSchema: JsonSchemaType,
20
+ }).pipe(
21
+ EchoObjectSchema({
22
+ typename: 'dxos.org/type/Schema',
23
+ version: '0.1.0',
24
+ }),
25
+ );
26
+
27
+ 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): Make internal.
18
+ // TODO(burdon): Prefer Record<string, unknown>.
19
+ export type AnyProperties = Record<string, any>;
20
+
21
+ /**
22
+ * Canonical type for all ECHO entities (objects and relations).
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 / Type.Ref(Type.Obj)).
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';
@@ -0,0 +1,9 @@
1
+ //
2
+ // Copyright 2024 DXOS.org
3
+ //
4
+
5
+ export * from './base';
6
+ export * from './entity';
7
+ export * from './meta';
8
+ export * from './typename';
9
+ export * from './version';