@dxos/echo 0.8.4-main.2e9d522 → 0.8.4-main.3c1ae3b

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 (478) hide show
  1. package/README.md +1 -1
  2. package/dist/lib/browser/Annotation.mjs +31 -0
  3. package/dist/lib/browser/Annotation.mjs.map +7 -0
  4. package/dist/lib/browser/Database.mjs +14 -0
  5. package/dist/lib/browser/Database.mjs.map +7 -0
  6. package/dist/lib/browser/Entity.mjs +20 -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 +60 -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 +18 -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 +83 -0
  19. package/dist/lib/browser/Obj.mjs.map +7 -0
  20. package/dist/lib/browser/Order.mjs +11 -0
  21. package/dist/lib/browser/Order.mjs.map +7 -0
  22. package/dist/lib/browser/Query.mjs +25 -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 +21 -0
  27. package/dist/lib/browser/Ref.mjs.map +7 -0
  28. package/dist/lib/browser/Relation.mjs +33 -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 +25 -0
  33. package/dist/lib/browser/Tag.mjs.map +7 -0
  34. package/dist/lib/browser/Type.mjs +38 -0
  35. package/dist/lib/browser/Type.mjs.map +7 -0
  36. package/dist/lib/browser/chunk-3B2G6BW4.mjs +74 -0
  37. package/dist/lib/browser/chunk-3B2G6BW4.mjs.map +7 -0
  38. package/dist/lib/browser/chunk-5IN7XBIQ.mjs +24 -0
  39. package/dist/lib/browser/chunk-5IN7XBIQ.mjs.map +7 -0
  40. package/dist/lib/browser/chunk-6XVZF5VJ.mjs +2924 -0
  41. package/dist/lib/browser/chunk-6XVZF5VJ.mjs.map +7 -0
  42. package/dist/lib/browser/chunk-AGOWBKY6.mjs +94 -0
  43. package/dist/lib/browser/chunk-AGOWBKY6.mjs.map +7 -0
  44. package/dist/lib/browser/chunk-BD6MRI4M.mjs +113 -0
  45. package/dist/lib/browser/chunk-BD6MRI4M.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-DOPKE2FQ.mjs +32 -0
  49. package/dist/lib/browser/chunk-DOPKE2FQ.mjs.map +7 -0
  50. package/dist/lib/browser/chunk-ESLW4N7S.mjs +41 -0
  51. package/dist/lib/browser/chunk-ESLW4N7S.mjs.map +7 -0
  52. package/dist/lib/browser/chunk-F4YF6C3O.mjs +363 -0
  53. package/dist/lib/browser/chunk-F4YF6C3O.mjs.map +7 -0
  54. package/dist/lib/browser/chunk-FGFQWIZE.mjs +9 -0
  55. package/dist/lib/browser/chunk-FGFQWIZE.mjs.map +7 -0
  56. package/dist/lib/browser/chunk-INHXFXY5.mjs +22 -0
  57. package/dist/lib/browser/chunk-INHXFXY5.mjs.map +7 -0
  58. package/dist/lib/browser/chunk-JG4GH6LN.mjs +9 -0
  59. package/dist/lib/browser/chunk-JG4GH6LN.mjs.map +7 -0
  60. package/dist/lib/browser/chunk-MYCCGG2T.mjs +15 -0
  61. package/dist/lib/browser/chunk-MYCCGG2T.mjs.map +7 -0
  62. package/dist/lib/browser/chunk-NFH3POTD.mjs +37 -0
  63. package/dist/lib/browser/chunk-NFH3POTD.mjs.map +7 -0
  64. package/dist/lib/browser/chunk-O6FOICWT.mjs +57 -0
  65. package/dist/lib/browser/chunk-O6FOICWT.mjs.map +7 -0
  66. package/dist/lib/browser/chunk-P2B4BASR.mjs +288 -0
  67. package/dist/lib/browser/chunk-P2B4BASR.mjs.map +7 -0
  68. package/dist/lib/browser/chunk-QHC3ZYNC.mjs +152 -0
  69. package/dist/lib/browser/chunk-QHC3ZYNC.mjs.map +7 -0
  70. package/dist/lib/browser/chunk-QU7PWSZD.mjs +62 -0
  71. package/dist/lib/browser/chunk-QU7PWSZD.mjs.map +7 -0
  72. package/dist/lib/browser/chunk-RP4JV7FD.mjs +403 -0
  73. package/dist/lib/browser/chunk-RP4JV7FD.mjs.map +7 -0
  74. package/dist/lib/browser/chunk-V7TON6BX.mjs +151 -0
  75. package/dist/lib/browser/chunk-V7TON6BX.mjs.map +7 -0
  76. package/dist/lib/browser/chunk-WABSVOOX.mjs +303 -0
  77. package/dist/lib/browser/chunk-WABSVOOX.mjs.map +7 -0
  78. package/dist/lib/browser/chunk-XRHHSMHJ.mjs +39 -0
  79. package/dist/lib/browser/chunk-XRHHSMHJ.mjs.map +7 -0
  80. package/dist/lib/browser/chunk-ZIM3Y4ZK.mjs +38 -0
  81. package/dist/lib/browser/chunk-ZIM3Y4ZK.mjs.map +7 -0
  82. package/dist/lib/browser/index.mjs +72 -9
  83. package/dist/lib/browser/internal/index.mjs +347 -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 +322 -32
  87. package/dist/lib/browser/testing/index.mjs.map +4 -4
  88. package/dist/lib/node-esm/Annotation.mjs +31 -0
  89. package/dist/lib/node-esm/Annotation.mjs.map +7 -0
  90. package/dist/lib/node-esm/Database.mjs +14 -0
  91. package/dist/lib/node-esm/Database.mjs.map +7 -0
  92. package/dist/lib/node-esm/Entity.mjs +20 -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 +60 -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 +18 -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 +83 -0
  105. package/dist/lib/node-esm/Obj.mjs.map +7 -0
  106. package/dist/lib/node-esm/Order.mjs +11 -0
  107. package/dist/lib/node-esm/Order.mjs.map +7 -0
  108. package/dist/lib/node-esm/Query.mjs +25 -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 +21 -0
  113. package/dist/lib/node-esm/Ref.mjs.map +7 -0
  114. package/dist/lib/node-esm/Relation.mjs +33 -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 +25 -0
  119. package/dist/lib/node-esm/Tag.mjs.map +7 -0
  120. package/dist/lib/node-esm/Type.mjs +38 -0
  121. package/dist/lib/node-esm/Type.mjs.map +7 -0
  122. package/dist/lib/node-esm/chunk-5M5P2DCR.mjs +32 -0
  123. package/dist/lib/node-esm/chunk-5M5P2DCR.mjs.map +7 -0
  124. package/dist/lib/node-esm/chunk-6OTQZKHX.mjs +303 -0
  125. package/dist/lib/node-esm/chunk-6OTQZKHX.mjs.map +7 -0
  126. package/dist/lib/node-esm/chunk-76LEDWHO.mjs +152 -0
  127. package/dist/lib/node-esm/chunk-76LEDWHO.mjs.map +7 -0
  128. package/dist/lib/node-esm/chunk-AGHZH33D.mjs +9 -0
  129. package/dist/lib/node-esm/chunk-AGHZH33D.mjs.map +7 -0
  130. package/dist/lib/node-esm/chunk-AJEMYSIR.mjs +22 -0
  131. package/dist/lib/node-esm/chunk-AJEMYSIR.mjs.map +7 -0
  132. package/dist/lib/node-esm/chunk-BJACR7QG.mjs +363 -0
  133. package/dist/lib/node-esm/chunk-BJACR7QG.mjs.map +7 -0
  134. package/dist/lib/node-esm/chunk-BYL2NPEA.mjs +37 -0
  135. package/dist/lib/node-esm/chunk-BYL2NPEA.mjs.map +7 -0
  136. package/dist/lib/node-esm/chunk-CCMFPJUT.mjs +74 -0
  137. package/dist/lib/node-esm/chunk-CCMFPJUT.mjs.map +7 -0
  138. package/dist/lib/node-esm/chunk-D5BW7KHR.mjs +39 -0
  139. package/dist/lib/node-esm/chunk-D5BW7KHR.mjs.map +7 -0
  140. package/dist/lib/node-esm/chunk-DJX53IQ3.mjs +2924 -0
  141. package/dist/lib/node-esm/chunk-DJX53IQ3.mjs.map +7 -0
  142. package/dist/lib/node-esm/chunk-FWTPV5QD.mjs +94 -0
  143. package/dist/lib/node-esm/chunk-FWTPV5QD.mjs.map +7 -0
  144. package/dist/lib/node-esm/chunk-HLUDHPFO.mjs +403 -0
  145. package/dist/lib/node-esm/chunk-HLUDHPFO.mjs.map +7 -0
  146. package/dist/lib/node-esm/chunk-HSLMI22Q.mjs +11 -0
  147. package/dist/lib/node-esm/chunk-HSLMI22Q.mjs.map +7 -0
  148. package/dist/lib/node-esm/chunk-JYZSF62S.mjs +113 -0
  149. package/dist/lib/node-esm/chunk-JYZSF62S.mjs.map +7 -0
  150. package/dist/lib/node-esm/chunk-KUX5JEL2.mjs +57 -0
  151. package/dist/lib/node-esm/chunk-KUX5JEL2.mjs.map +7 -0
  152. package/dist/lib/node-esm/chunk-LDXRA5TC.mjs +288 -0
  153. package/dist/lib/node-esm/chunk-LDXRA5TC.mjs.map +7 -0
  154. package/dist/lib/node-esm/chunk-MOWUEW5P.mjs +15 -0
  155. package/dist/lib/node-esm/chunk-MOWUEW5P.mjs.map +7 -0
  156. package/dist/lib/node-esm/chunk-NHYOREKX.mjs +62 -0
  157. package/dist/lib/node-esm/chunk-NHYOREKX.mjs.map +7 -0
  158. package/dist/lib/node-esm/chunk-QVZZHCDS.mjs +9 -0
  159. package/dist/lib/node-esm/chunk-QVZZHCDS.mjs.map +7 -0
  160. package/dist/lib/node-esm/chunk-W3OLV7MG.mjs +41 -0
  161. package/dist/lib/node-esm/chunk-W3OLV7MG.mjs.map +7 -0
  162. package/dist/lib/node-esm/chunk-W5AQXKVF.mjs +38 -0
  163. package/dist/lib/node-esm/chunk-W5AQXKVF.mjs.map +7 -0
  164. package/dist/lib/node-esm/chunk-YNBFXTDG.mjs +24 -0
  165. package/dist/lib/node-esm/chunk-YNBFXTDG.mjs.map +7 -0
  166. package/dist/lib/node-esm/chunk-Z53QIBP2.mjs +151 -0
  167. package/dist/lib/node-esm/chunk-Z53QIBP2.mjs.map +7 -0
  168. package/dist/lib/node-esm/index.mjs +72 -9
  169. package/dist/lib/node-esm/internal/index.mjs +347 -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 +322 -32
  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 +179 -0
  177. package/dist/types/src/Database.d.ts.map +1 -0
  178. package/dist/types/src/Entity.d.ts +36 -0
  179. package/dist/types/src/Entity.d.ts.map +1 -0
  180. package/dist/types/src/Err.d.ts +68 -0
  181. package/dist/types/src/Err.d.ts.map +1 -0
  182. package/dist/types/src/Filter.d.ts +120 -0
  183. package/dist/types/src/Filter.d.ts.map +1 -0
  184. package/dist/types/src/Format.d.ts +4 -0
  185. package/dist/types/src/Format.d.ts.map +1 -0
  186. package/dist/types/src/Hypergraph.d.ts +60 -0
  187. package/dist/types/src/Hypergraph.d.ts.map +1 -0
  188. package/dist/types/src/JsonSchema.d.ts +9 -0
  189. package/dist/types/src/JsonSchema.d.ts.map +1 -0
  190. package/dist/types/src/Key.d.ts +1 -0
  191. package/dist/types/src/Key.d.ts.map +1 -1
  192. package/dist/types/src/Obj.d.ts +152 -35
  193. package/dist/types/src/Obj.d.ts.map +1 -1
  194. package/dist/types/src/Order.d.ts +11 -0
  195. package/dist/types/src/Order.d.ts.map +1 -0
  196. package/dist/types/src/Query.d.ts +107 -0
  197. package/dist/types/src/Query.d.ts.map +1 -0
  198. package/dist/types/src/Query.test.d.ts +2 -0
  199. package/dist/types/src/Query.test.d.ts.map +1 -0
  200. package/dist/types/src/QueryResult.d.ts +84 -0
  201. package/dist/types/src/QueryResult.d.ts.map +1 -0
  202. package/dist/types/src/Ref.d.ts +12 -10
  203. package/dist/types/src/Ref.d.ts.map +1 -1
  204. package/dist/types/src/Relation.d.ts +20 -14
  205. package/dist/types/src/Relation.d.ts.map +1 -1
  206. package/dist/types/src/SchemaRegistry.d.ts +73 -0
  207. package/dist/types/src/SchemaRegistry.d.ts.map +1 -0
  208. package/dist/types/src/Tag.d.ts +17 -0
  209. package/dist/types/src/Tag.d.ts.map +1 -0
  210. package/dist/types/src/Type.d.ts +39 -50
  211. package/dist/types/src/Type.d.ts.map +1 -1
  212. package/dist/types/src/index.d.ts +15 -3
  213. package/dist/types/src/index.d.ts.map +1 -1
  214. package/dist/types/src/internal/annotations/annotations.d.ts +179 -0
  215. package/dist/types/src/internal/annotations/annotations.d.ts.map +1 -0
  216. package/dist/types/src/internal/annotations/annotations.test.d.ts +2 -0
  217. package/dist/types/src/internal/annotations/annotations.test.d.ts.map +1 -0
  218. package/dist/types/src/internal/annotations/index.d.ts +3 -0
  219. package/dist/types/src/internal/annotations/index.d.ts.map +1 -0
  220. package/dist/types/src/internal/annotations/util.d.ts +27 -0
  221. package/dist/types/src/internal/annotations/util.d.ts.map +1 -0
  222. package/dist/types/src/internal/entities/entity.d.ts +10 -0
  223. package/dist/types/src/internal/entities/entity.d.ts.map +1 -0
  224. package/dist/types/src/internal/entities/expando.d.ts +16 -0
  225. package/dist/types/src/internal/entities/expando.d.ts.map +1 -0
  226. package/dist/types/src/internal/entities/index.d.ts +6 -0
  227. package/dist/types/src/internal/entities/index.d.ts.map +1 -0
  228. package/dist/types/src/internal/entities/model.d.ts +70 -0
  229. package/dist/types/src/internal/entities/model.d.ts.map +1 -0
  230. package/dist/types/src/internal/entities/object.d.ts +11 -0
  231. package/dist/types/src/internal/entities/object.d.ts.map +1 -0
  232. package/dist/types/src/internal/entities/relation.d.ts +55 -0
  233. package/dist/types/src/internal/entities/relation.d.ts.map +1 -0
  234. package/dist/types/src/internal/entities/util.d.ts +2 -0
  235. package/dist/types/src/internal/entities/util.d.ts.map +1 -0
  236. package/dist/types/src/internal/formats/date.d.ts +63 -0
  237. package/dist/types/src/internal/formats/date.d.ts.map +1 -0
  238. package/dist/types/src/internal/formats/date.test.d.ts +2 -0
  239. package/dist/types/src/internal/formats/date.test.d.ts.map +1 -0
  240. package/dist/types/src/internal/formats/format.d.ts +32 -0
  241. package/dist/types/src/internal/formats/format.d.ts.map +1 -0
  242. package/dist/types/src/internal/formats/format.test.d.ts +2 -0
  243. package/dist/types/src/internal/formats/format.test.d.ts.map +1 -0
  244. package/dist/types/src/internal/formats/index.d.ts +8 -0
  245. package/dist/types/src/internal/formats/index.d.ts.map +1 -0
  246. package/dist/types/src/internal/formats/number.d.ts +31 -0
  247. package/dist/types/src/internal/formats/number.d.ts.map +1 -0
  248. package/dist/types/src/internal/formats/object.d.ts +35 -0
  249. package/dist/types/src/internal/formats/object.d.ts.map +1 -0
  250. package/dist/types/src/internal/formats/select.d.ts +13 -0
  251. package/dist/types/src/internal/formats/select.d.ts.map +1 -0
  252. package/dist/types/src/internal/formats/string.d.ts +42 -0
  253. package/dist/types/src/internal/formats/string.d.ts.map +1 -0
  254. package/dist/types/src/internal/formats/types.d.ts +72 -0
  255. package/dist/types/src/internal/formats/types.d.ts.map +1 -0
  256. package/dist/types/src/internal/index.d.ts +11 -0
  257. package/dist/types/src/internal/index.d.ts.map +1 -0
  258. package/dist/types/src/internal/json-schema/annotations.d.ts +19 -0
  259. package/dist/types/src/internal/json-schema/annotations.d.ts.map +1 -0
  260. package/dist/types/src/internal/json-schema/effect-schema.test.d.ts +2 -0
  261. package/dist/types/src/internal/json-schema/effect-schema.test.d.ts.map +1 -0
  262. package/dist/types/src/internal/json-schema/index.d.ts +5 -0
  263. package/dist/types/src/internal/json-schema/index.d.ts.map +1 -0
  264. package/dist/types/src/internal/json-schema/json-schema-normalize.d.ts +7 -0
  265. package/dist/types/src/internal/json-schema/json-schema-normalize.d.ts.map +1 -0
  266. package/dist/types/src/internal/json-schema/json-schema-type.d.ts +250 -0
  267. package/dist/types/src/internal/json-schema/json-schema-type.d.ts.map +1 -0
  268. package/dist/types/src/internal/json-schema/json-schema.d.ts +29 -0
  269. package/dist/types/src/internal/json-schema/json-schema.d.ts.map +1 -0
  270. package/dist/types/src/internal/json-schema/json-schema.test.d.ts +2 -0
  271. package/dist/types/src/internal/json-schema/json-schema.test.d.ts.map +1 -0
  272. package/dist/types/src/internal/object/common.d.ts +18 -0
  273. package/dist/types/src/internal/object/common.d.ts.map +1 -0
  274. package/dist/types/src/internal/object/create-object.d.ts +39 -0
  275. package/dist/types/src/internal/object/create-object.d.ts.map +1 -0
  276. package/dist/types/src/internal/object/create-object.test.d.ts +2 -0
  277. package/dist/types/src/internal/object/create-object.test.d.ts.map +1 -0
  278. package/dist/types/src/internal/object/deleted.d.ts +6 -0
  279. package/dist/types/src/internal/object/deleted.d.ts.map +1 -0
  280. package/dist/types/src/internal/object/ids.d.ts +6 -0
  281. package/dist/types/src/internal/object/ids.d.ts.map +1 -0
  282. package/dist/types/src/internal/object/index.d.ts +8 -0
  283. package/dist/types/src/internal/object/index.d.ts.map +1 -0
  284. package/dist/types/src/internal/object/inspect.d.ts +2 -0
  285. package/dist/types/src/internal/object/inspect.d.ts.map +1 -0
  286. package/dist/types/src/internal/object/json-serializer.d.ts +31 -0
  287. package/dist/types/src/internal/object/json-serializer.d.ts.map +1 -0
  288. package/dist/types/src/internal/object/json-serializer.test.d.ts +2 -0
  289. package/dist/types/src/internal/object/json-serializer.test.d.ts.map +1 -0
  290. package/dist/types/src/internal/object/schema-validator.d.ts +15 -0
  291. package/dist/types/src/internal/object/schema-validator.d.ts.map +1 -0
  292. package/dist/types/src/internal/object/schema-validator.test.d.ts +2 -0
  293. package/dist/types/src/internal/object/schema-validator.test.d.ts.map +1 -0
  294. package/dist/types/src/internal/object/typed-object.d.ts +31 -0
  295. package/dist/types/src/internal/object/typed-object.d.ts.map +1 -0
  296. package/dist/types/src/internal/object/typed-object.test.d.ts +2 -0
  297. package/dist/types/src/internal/object/typed-object.test.d.ts.map +1 -0
  298. package/dist/types/src/internal/proxy/handler.test.d.ts +2 -0
  299. package/dist/types/src/internal/proxy/handler.test.d.ts.map +1 -0
  300. package/dist/types/src/internal/proxy/index.d.ts +3 -0
  301. package/dist/types/src/internal/proxy/index.d.ts.map +1 -0
  302. package/dist/types/src/internal/proxy/make-object.d.ts +16 -0
  303. package/dist/types/src/internal/proxy/make-object.d.ts.map +1 -0
  304. package/dist/types/src/internal/proxy/schema.test.d.ts +2 -0
  305. package/dist/types/src/internal/proxy/schema.test.d.ts.map +1 -0
  306. package/dist/types/src/internal/proxy/typed-handler.d.ts +44 -0
  307. package/dist/types/src/internal/proxy/typed-handler.d.ts.map +1 -0
  308. package/dist/types/src/internal/proxy/typed-handler.test.d.ts +2 -0
  309. package/dist/types/src/internal/proxy/typed-handler.test.d.ts.map +1 -0
  310. package/dist/types/src/internal/proxy/typed-object.test.d.ts +2 -0
  311. package/dist/types/src/internal/proxy/typed-object.test.d.ts.map +1 -0
  312. package/dist/types/src/internal/ref/index.d.ts +3 -0
  313. package/dist/types/src/internal/ref/index.d.ts.map +1 -0
  314. package/dist/types/src/internal/ref/ref-array.d.ts +21 -0
  315. package/dist/types/src/internal/ref/ref-array.d.ts.map +1 -0
  316. package/dist/types/src/internal/ref/ref.d.ts +209 -0
  317. package/dist/types/src/internal/ref/ref.d.ts.map +1 -0
  318. package/dist/types/src/internal/ref/ref.test.d.ts +2 -0
  319. package/dist/types/src/internal/ref/ref.test.d.ts.map +1 -0
  320. package/dist/types/src/internal/schema/compose.d.ts +6 -0
  321. package/dist/types/src/internal/schema/compose.d.ts.map +1 -0
  322. package/dist/types/src/internal/schema/compose.test.d.ts +2 -0
  323. package/dist/types/src/internal/schema/compose.test.d.ts.map +1 -0
  324. package/dist/types/src/internal/schema/echo-schema.d.ts +168 -0
  325. package/dist/types/src/internal/schema/echo-schema.d.ts.map +1 -0
  326. package/dist/types/src/internal/schema/index.d.ts +5 -0
  327. package/dist/types/src/internal/schema/index.d.ts.map +1 -0
  328. package/dist/types/src/internal/schema/manipulation.d.ts +10 -0
  329. package/dist/types/src/internal/schema/manipulation.d.ts.map +1 -0
  330. package/dist/types/src/internal/schema/persistent-schema.d.ts +18 -0
  331. package/dist/types/src/internal/schema/persistent-schema.d.ts.map +1 -0
  332. package/dist/types/src/internal/schema/snapshot.d.ts +6 -0
  333. package/dist/types/src/internal/schema/snapshot.d.ts.map +1 -0
  334. package/dist/types/src/internal/types/base.d.ts +37 -0
  335. package/dist/types/src/internal/types/base.d.ts.map +1 -0
  336. package/dist/types/src/internal/types/entity.d.ts +12 -0
  337. package/dist/types/src/internal/types/entity.d.ts.map +1 -0
  338. package/dist/types/src/internal/types/index.d.ts +6 -0
  339. package/dist/types/src/internal/types/index.d.ts.map +1 -0
  340. package/dist/types/src/internal/types/meta.d.ts +40 -0
  341. package/dist/types/src/internal/types/meta.d.ts.map +1 -0
  342. package/dist/types/src/internal/types/typename.d.ts +13 -0
  343. package/dist/types/src/internal/types/typename.d.ts.map +1 -0
  344. package/dist/types/src/internal/types/version.d.ts +15 -0
  345. package/dist/types/src/internal/types/version.d.ts.map +1 -0
  346. package/dist/types/src/{test → testing}/api.test.d.ts.map +1 -1
  347. package/dist/types/src/testing/index.d.ts +3 -1
  348. package/dist/types/src/testing/index.d.ts.map +1 -1
  349. package/dist/types/src/testing/test-data.d.ts +18 -0
  350. package/dist/types/src/testing/test-data.d.ts.map +1 -0
  351. package/dist/types/src/testing/test-schema.d.ts +407 -0
  352. package/dist/types/src/testing/test-schema.d.ts.map +1 -0
  353. package/dist/types/src/testing/util.d.ts +16 -0
  354. package/dist/types/src/testing/util.d.ts.map +1 -0
  355. package/dist/types/tsconfig.tsbuildinfo +1 -1
  356. package/package.json +164 -33
  357. package/src/Annotation.ts +17 -0
  358. package/src/Database.ts +308 -0
  359. package/src/Entity.ts +51 -0
  360. package/src/Err.ts +18 -0
  361. package/src/Filter.ts +376 -0
  362. package/src/Format.ts +9 -0
  363. package/src/Hypergraph.ts +74 -0
  364. package/src/JsonSchema.ts +16 -0
  365. package/src/Key.ts +3 -0
  366. package/src/Obj.ts +407 -71
  367. package/src/Order.ts +34 -0
  368. package/src/Query.test.ts +346 -0
  369. package/src/Query.ts +279 -0
  370. package/src/QueryResult.ts +109 -0
  371. package/src/Ref.ts +25 -9
  372. package/src/Relation.ts +72 -46
  373. package/src/SchemaRegistry.ts +92 -0
  374. package/src/Tag.ts +40 -0
  375. package/src/Type.ts +98 -84
  376. package/src/index.ts +17 -4
  377. package/src/internal/README.md +87 -0
  378. package/src/internal/annotations/annotations.test.ts +96 -0
  379. package/src/internal/annotations/annotations.ts +488 -0
  380. package/src/internal/annotations/index.ts +6 -0
  381. package/src/internal/annotations/util.ts +72 -0
  382. package/src/internal/entities/entity.ts +109 -0
  383. package/src/internal/entities/expando.ts +23 -0
  384. package/src/internal/entities/index.ts +9 -0
  385. package/src/internal/entities/model.ts +129 -0
  386. package/src/internal/entities/object.ts +45 -0
  387. package/src/internal/entities/relation.ts +155 -0
  388. package/src/internal/entities/util.ts +33 -0
  389. package/src/internal/formats/date.test.ts +56 -0
  390. package/src/internal/formats/date.ts +217 -0
  391. package/src/internal/formats/format.test.ts +77 -0
  392. package/src/internal/formats/format.ts +54 -0
  393. package/src/internal/formats/index.ts +12 -0
  394. package/src/internal/formats/number.ts +89 -0
  395. package/src/internal/formats/object.ts +80 -0
  396. package/src/internal/formats/select.ts +18 -0
  397. package/src/internal/formats/string.ts +81 -0
  398. package/src/internal/formats/types.ts +186 -0
  399. package/src/internal/index.ts +38 -0
  400. package/src/internal/json-schema/annotations.ts +50 -0
  401. package/src/internal/json-schema/effect-schema.test.ts +143 -0
  402. package/src/internal/json-schema/index.ts +8 -0
  403. package/src/internal/json-schema/json-schema-normalize.ts +109 -0
  404. package/src/internal/json-schema/json-schema-type.ts +404 -0
  405. package/src/internal/json-schema/json-schema.test.ts +861 -0
  406. package/src/internal/json-schema/json-schema.ts +528 -0
  407. package/src/internal/object/common.ts +75 -0
  408. package/src/internal/object/create-object.test.ts +116 -0
  409. package/src/internal/object/create-object.ts +95 -0
  410. package/src/internal/object/deleted.ts +19 -0
  411. package/src/internal/object/ids.ts +12 -0
  412. package/src/internal/object/index.ts +11 -0
  413. package/src/internal/object/inspect.ts +46 -0
  414. package/src/internal/object/json-serializer.test.ts +94 -0
  415. package/src/internal/object/json-serializer.ts +230 -0
  416. package/src/internal/object/schema-validator.test.ts +186 -0
  417. package/src/internal/object/schema-validator.ts +244 -0
  418. package/src/internal/object/typed-object.test.ts +34 -0
  419. package/src/internal/object/typed-object.ts +94 -0
  420. package/src/internal/proxy/handler.test.ts +173 -0
  421. package/src/internal/proxy/index.ts +6 -0
  422. package/src/internal/proxy/make-object.ts +113 -0
  423. package/src/internal/proxy/schema.test.ts +137 -0
  424. package/src/internal/proxy/typed-handler.test.ts +102 -0
  425. package/src/internal/proxy/typed-handler.ts +233 -0
  426. package/src/internal/proxy/typed-object.test.ts +105 -0
  427. package/src/internal/ref/index.ts +6 -0
  428. package/src/internal/ref/ref-array.ts +39 -0
  429. package/src/internal/ref/ref.test.ts +101 -0
  430. package/src/internal/ref/ref.ts +525 -0
  431. package/src/internal/schema/compose.test.ts +42 -0
  432. package/src/internal/schema/compose.ts +37 -0
  433. package/src/internal/schema/echo-schema.ts +385 -0
  434. package/src/internal/schema/index.ts +8 -0
  435. package/src/internal/schema/manipulation.ts +92 -0
  436. package/src/internal/schema/persistent-schema.ts +28 -0
  437. package/src/internal/schema/snapshot.ts +25 -0
  438. package/src/internal/types/base.ts +57 -0
  439. package/src/internal/types/entity.ts +23 -0
  440. package/src/internal/types/index.ts +9 -0
  441. package/src/internal/types/meta.ts +76 -0
  442. package/src/internal/types/typename.ts +45 -0
  443. package/src/internal/types/version.ts +20 -0
  444. package/src/testing/api.test.ts +100 -0
  445. package/src/testing/index.ts +3 -1
  446. package/src/testing/test-data.ts +130 -0
  447. package/src/testing/test-schema.ts +224 -0
  448. package/src/testing/util.ts +78 -0
  449. package/dist/lib/browser/chunk-EUA7CM23.mjs +0 -619
  450. package/dist/lib/browser/chunk-EUA7CM23.mjs.map +0 -7
  451. package/dist/lib/node-esm/chunk-IV6BWGHK.mjs +0 -619
  452. package/dist/lib/node-esm/chunk-IV6BWGHK.mjs.map +0 -7
  453. package/dist/types/src/experimental/database.d.ts +0 -8
  454. package/dist/types/src/experimental/database.d.ts.map +0 -1
  455. package/dist/types/src/experimental/index.d.ts +0 -1
  456. package/dist/types/src/experimental/index.d.ts.map +0 -1
  457. package/dist/types/src/experimental/queue.d.ts +0 -8
  458. package/dist/types/src/experimental/queue.d.ts.map +0 -1
  459. package/dist/types/src/experimental/space.d.ts +0 -8
  460. package/dist/types/src/experimental/space.d.ts.map +0 -1
  461. package/dist/types/src/query/dsl.d.ts +0 -218
  462. package/dist/types/src/query/dsl.d.ts.map +0 -1
  463. package/dist/types/src/query/dsl.test.d.ts +0 -2
  464. package/dist/types/src/query/dsl.test.d.ts.map +0 -1
  465. package/dist/types/src/query/index.d.ts +0 -2
  466. package/dist/types/src/query/index.d.ts.map +0 -1
  467. package/dist/types/src/testing/types.d.ts +0 -113
  468. package/dist/types/src/testing/types.d.ts.map +0 -1
  469. package/src/experimental/database.ts +0 -11
  470. package/src/experimental/index.ts +0 -7
  471. package/src/experimental/queue.ts +0 -11
  472. package/src/experimental/space.ts +0 -11
  473. package/src/query/dsl.test.ts +0 -323
  474. package/src/query/dsl.ts +0 -646
  475. package/src/query/index.ts +0 -5
  476. package/src/test/api.test.ts +0 -173
  477. package/src/testing/types.ts +0 -91
  478. /package/dist/types/src/{test → testing}/api.test.d.ts +0 -0
@@ -0,0 +1,77 @@
1
+ //
2
+ // Copyright 2024 DXOS.org
3
+ //
4
+
5
+ import * as Schema from 'effect/Schema';
6
+ import { describe, test } from 'vitest';
7
+
8
+ import { toJsonSchema } from '../json-schema';
9
+
10
+ import { Format } from './format';
11
+ import { TypeEnum, TypeFormat, getTypeEnum } from './types';
12
+
13
+ describe('formats', () => {
14
+ test('annotations', ({ expect }) => {
15
+ const TestSchema = Schema.Struct({
16
+ name: Schema.String,
17
+ email: Schema.optional(Format.Email),
18
+ salary: Schema.optional(Format.Currency({ decimals: 2, code: 'usd' })),
19
+ website: Schema.optional(Format.URL),
20
+ birthday: Schema.optional(Format.Date),
21
+ started: Schema.optional(Format.DateTime),
22
+ active: Schema.optional(Schema.Boolean),
23
+ }).pipe(Schema.mutable);
24
+
25
+ type TestType = Schema.Schema.Type<typeof TestSchema>;
26
+
27
+ const jsonSchema = toJsonSchema(TestSchema);
28
+
29
+ const data: TestType = {
30
+ name: 'Alice',
31
+ email: 'alice@example.com',
32
+ birthday: '1999-06-11',
33
+ };
34
+
35
+ const validate = Schema.validateSync(TestSchema);
36
+ validate(data);
37
+
38
+ {
39
+ const prop = jsonSchema.properties!['active' as const];
40
+ expect(getTypeEnum(prop)).to.eq(TypeEnum.Boolean);
41
+ expect(prop).includes({
42
+ type: TypeEnum.Boolean,
43
+ });
44
+ }
45
+
46
+ {
47
+ const prop = jsonSchema.properties!['email' as const];
48
+ expect(getTypeEnum(prop)).to.eq(TypeEnum.String);
49
+ expect(prop).includes({
50
+ type: TypeEnum.String,
51
+ format: TypeFormat.Email,
52
+ title: 'Email',
53
+ });
54
+ }
55
+
56
+ {
57
+ const prop = jsonSchema.properties!['salary' as const];
58
+ expect(getTypeEnum(prop)).to.eq(TypeEnum.Number);
59
+ expect(prop).includes({
60
+ type: TypeEnum.Number,
61
+ format: TypeFormat.Currency,
62
+ title: 'Currency',
63
+ multipleOf: 0.01,
64
+ currency: 'USD',
65
+ });
66
+ }
67
+
68
+ {
69
+ const prop = jsonSchema.properties!['birthday' as const];
70
+ expect(getTypeEnum(prop)).to.eq(TypeEnum.String);
71
+ expect(prop).includes({
72
+ type: TypeEnum.String,
73
+ format: TypeFormat.Date,
74
+ });
75
+ }
76
+ });
77
+ });
@@ -0,0 +1,54 @@
1
+ //
2
+ // Copyright 2024 DXOS.org
3
+ //
4
+
5
+ import * as Schema from 'effect/Schema';
6
+
7
+ import * as Keys from '@dxos/keys';
8
+
9
+ import * as DateUtil from './date';
10
+ import * as NumberUtil from './number';
11
+ import * as ObjectUtil from './object';
12
+ import * as StringUtil from './string';
13
+ import { TypeFormat as TypeFormat$ } from './types';
14
+
15
+ // TODO(burdon): Media encoding.
16
+ // - https://json-schema.org/understanding-json-schema/reference/non_json_data
17
+
18
+ /**
19
+ * Formats.
20
+ * https://json-schema.org/understanding-json-schema/reference/string#built-in-formats
21
+ * NOTE: A JSON Schema validator will ignore any format type that it does not understand.
22
+ */
23
+ // TODO(burdon): Add fields for `examples`, `message`, etc.
24
+ export namespace Format {
25
+ export import TypeFormat = TypeFormat$;
26
+
27
+ // String
28
+ export const DXN = Keys.DXN.Schema;
29
+ export const Email = StringUtil.Email;
30
+ export const Formula = StringUtil.Formula;
31
+ export const Hostname = StringUtil.Hostname;
32
+ export const JSON = StringUtil.JSON;
33
+ export const Markdown = StringUtil.Markdown;
34
+ export const Regex = StringUtil.Regex;
35
+ export const URL = StringUtil.URL;
36
+ export const UUID = Schema.UUID;
37
+
38
+ // Numbers
39
+ // TODO(burdon): BigInt.
40
+ export const Currency = NumberUtil.Currency;
41
+ export const Integer = NumberUtil.Integer;
42
+ export const Percent = NumberUtil.Percent;
43
+ export const Timestamp = NumberUtil.Timestamp;
44
+
45
+ // Dates and times
46
+ export const Date = DateUtil.DateOnly;
47
+ export const DateTime = DateUtil.DateTime;
48
+ export const Duration = DateUtil.Duration;
49
+ export const Time = DateUtil.TimeOnly;
50
+
51
+ // Objects
52
+ export const GeoPoint = ObjectUtil.GeoPoint;
53
+ export type GeoPoint = ObjectUtil.GeoPoint; // TODO(burdon): Export types.
54
+ }
@@ -0,0 +1,12 @@
1
+ //
2
+ // Copyright 2025 DXOS.org
3
+ //
4
+
5
+ export type { SimpleDate, SimpleDateTime, SimpleTime } from './date';
6
+ export { CurrencyAnnotationId, DecimalPrecision, Currency } from './number';
7
+ export { GeoPoint, GeoLocation } from './object';
8
+
9
+ export * from './format';
10
+ export * from './select';
11
+ export * from './string';
12
+ export * from './types';
@@ -0,0 +1,89 @@
1
+ //
2
+ // Copyright 2024 DXOS.org
3
+ //
4
+
5
+ import * as Schema from 'effect/Schema';
6
+
7
+ import { FormatAnnotation, TypeFormat } from './types';
8
+
9
+ const encodeMultipleOf = (divisor: number) => 1 / Math.pow(10, divisor);
10
+
11
+ const encodeMultiple =
12
+ <A extends number>(divisor?: number) =>
13
+ <I, R>(self: Schema.Schema<A, I, R>) =>
14
+ divisor === undefined || divisor === 0 ? self : self.pipe(Schema.multipleOf(encodeMultipleOf(divisor)));
15
+
16
+ /**
17
+ * Convert number of digits to multipleOf annotation.
18
+ */
19
+ export const DecimalPrecision = Schema.transform(Schema.Number, Schema.Number, {
20
+ strict: true,
21
+ encode: (value) => encodeMultipleOf(value),
22
+ decode: (value) => Math.log10(1 / value),
23
+ }).annotations({
24
+ title: 'Number of digits',
25
+ });
26
+
27
+ export const CurrencyAnnotationId = Symbol.for('@dxos/schema/annotation/Currency');
28
+
29
+ export type CurrencyAnnotation = {
30
+ decimals?: number;
31
+ code?: string;
32
+ };
33
+
34
+ /**
35
+ * ISO 4217 currency code.
36
+ */
37
+ export const Currency = ({ decimals, code }: CurrencyAnnotation = { decimals: 2 }) =>
38
+ Schema.Number.pipe(
39
+ encodeMultiple(decimals),
40
+ FormatAnnotation.set(TypeFormat.Currency),
41
+ Schema.annotations({
42
+ title: 'Currency',
43
+ description: 'Currency value',
44
+ ...(code ? { [CurrencyAnnotationId]: code.toUpperCase() } : {}),
45
+ }),
46
+ );
47
+
48
+ export type PercentAnnotation = {
49
+ decimals?: number;
50
+ };
51
+
52
+ /**
53
+ * Integer.
54
+ */
55
+ export const Integer = () =>
56
+ Schema.Number.pipe(
57
+ Schema.int(),
58
+ FormatAnnotation.set(TypeFormat.Integer),
59
+ Schema.annotations({
60
+ title: 'Integer',
61
+ description: 'Integer value',
62
+ }),
63
+ );
64
+
65
+ /**
66
+ * Percent.
67
+ */
68
+ // TODO(burdon): Define min/max (e.g., 0, 1).
69
+ export const Percent = ({ decimals }: PercentAnnotation = { decimals: 2 }) =>
70
+ Schema.Number.pipe(
71
+ encodeMultiple(decimals),
72
+ FormatAnnotation.set(TypeFormat.Percent),
73
+ Schema.annotations({
74
+ title: 'Percent',
75
+ description: 'Percentage value',
76
+ }),
77
+ );
78
+
79
+ /**
80
+ * Unix timestamp.
81
+ * https://en.wikipedia.org/wiki/Unix_time
82
+ */
83
+ export const Timestamp = Schema.Number.pipe(
84
+ FormatAnnotation.set(TypeFormat.Timestamp),
85
+ Schema.annotations({
86
+ title: 'Timestamp',
87
+ description: 'Unix timestamp',
88
+ }),
89
+ );
@@ -0,0 +1,80 @@
1
+ //
2
+ // Copyright 2025 DXOS.org
3
+ //
4
+
5
+ import * as Schema from 'effect/Schema';
6
+
7
+ import { clamp } from '@dxos/util';
8
+
9
+ import { FormatAnnotation, TypeFormat } from './types';
10
+
11
+ /**
12
+ * GeoJSON Format
13
+ * https://datatracker.ietf.org/doc/html/rfc7946
14
+ * https://datatracker.ietf.org/doc/html/rfc7946#section-3.1.1
15
+ * https://en.wikipedia.org/wiki/Geographic_coordinate_system
16
+ * https://geojson.org
17
+ * {
18
+ * "type": "Point",
19
+ * "coordinates": [0, 51.47] // [longitude, latitude]
20
+ * }
21
+ * Note: optional third element for altitude.
22
+ */
23
+ export const GeoPoint = Schema.Tuple(
24
+ Schema.Number.pipe(Schema.annotations({ title: 'Longitude' }), Schema.clamp(-180, 180), Schema.multipleOf(0.000001)),
25
+ Schema.Number.pipe(Schema.annotations({ title: 'Latitude' }), Schema.clamp(-90, 90), Schema.multipleOf(0.000001)),
26
+ Schema.optionalElement(Schema.Number).annotations({
27
+ title: 'Height ASL (m)',
28
+ }),
29
+ ).pipe(
30
+ FormatAnnotation.set(TypeFormat.GeoPoint),
31
+ Schema.annotations({
32
+ title: 'GeoPoint',
33
+ description: 'GeoJSON Position',
34
+ }),
35
+ );
36
+
37
+ export type GeoPoint = Schema.Schema.Type<typeof GeoPoint>;
38
+
39
+ export type GeoLocation = {
40
+ longitude: number;
41
+ latitude: number;
42
+ height?: number;
43
+ };
44
+
45
+ /**
46
+ * Geolocation utilities for working with GeoPoint format.
47
+ */
48
+ export namespace GeoLocation {
49
+ /**
50
+ * Convert latitude and longitude to GeoPoint (GeoJSON format [longitude, latitude, height?]).
51
+ * Clamps values to valid ranges: latitude [-90, 90], longitude [-180, 180].
52
+ */
53
+ export const toGeoPoint = ({ longitude, latitude, height }: GeoLocation): GeoPoint => {
54
+ // TODO(ZaymonFC): Use schema validation instead of doing this manually.
55
+ const clampedLongitude = clamp(longitude, -180, 180);
56
+ const clampedLatitude = clamp(latitude, -90, 90);
57
+ return height !== undefined ? [clampedLongitude, clampedLatitude, height] : [clampedLongitude, clampedLatitude];
58
+ };
59
+
60
+ /**
61
+ * Extract latitude and longitude from GeoPoint (GeoJSON format [longitude, latitude, height?]).
62
+ */
63
+ export const fromGeoPoint = (geoPoint: GeoPoint | undefined): GeoLocation => {
64
+ if (!geoPoint) {
65
+ return { longitude: 0, latitude: 0 };
66
+ }
67
+
68
+ const result: GeoLocation = {
69
+ longitude: geoPoint[0],
70
+ latitude: geoPoint[1],
71
+ };
72
+
73
+ // Add height if defined.
74
+ if (geoPoint[2] !== undefined) {
75
+ result.height = geoPoint[2];
76
+ }
77
+
78
+ return result;
79
+ };
80
+ }
@@ -0,0 +1,18 @@
1
+ //
2
+ // Copyright 2025 DXOS.org
3
+ //
4
+
5
+ import * as Schema from 'effect/Schema';
6
+
7
+ /**
8
+ * Schema for a single select option. Used to define choices in a {single|multi}-select field.
9
+ */
10
+ export const SelectOption = Schema.Struct({
11
+ /** Stable identifier for the option. */
12
+ id: Schema.NonEmptyString,
13
+ title: Schema.String,
14
+ /** Color palette used for visual styling. */
15
+ color: Schema.String,
16
+ }).pipe(Schema.mutable);
17
+
18
+ export type SelectOption = Schema.Schema.Type<typeof SelectOption>;
@@ -0,0 +1,81 @@
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 { FormatAnnotation, TypeFormat } from './types';
9
+
10
+ /**
11
+ * Email address (RFC 5321)
12
+ * https://datatracker.ietf.org/doc/html/rfc5321#section-4.1.2
13
+ */
14
+ export const Email = Schema.String.pipe(
15
+ Schema.pattern(/^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/),
16
+ FormatAnnotation.set(TypeFormat.Email),
17
+ Schema.annotations({
18
+ title: 'Email',
19
+ description: 'Email address',
20
+ }),
21
+ );
22
+
23
+ /**
24
+ *
25
+ */
26
+ // TODO(burdon): Implement.
27
+ export const Formula = Schema.String.pipe(FormatAnnotation.set(TypeFormat.Formula));
28
+
29
+ /**
30
+ *
31
+ */
32
+ // TODO(burdon): Implement.
33
+ export const Hostname = Schema.String.pipe(FormatAnnotation.set(TypeFormat.Hostname));
34
+
35
+ /**
36
+ *
37
+ */
38
+ // TODO(burdon): Implement.
39
+ export const JSON = Schema.String.pipe(FormatAnnotation.set(TypeFormat.JSON));
40
+
41
+ /**
42
+ *
43
+ */
44
+ // TODO(burdon): Implement.
45
+ export const Markdown = Schema.String.pipe(FormatAnnotation.set(TypeFormat.Markdown));
46
+
47
+ /**
48
+ * Regex
49
+ * https://json-schema.org/understanding-json-schema/reference/regular_expressions
50
+ * https://ecma-international.org/publications-and-standards/standards/ecma-262
51
+ */
52
+ // TODO(burdon): Implement.
53
+ export const Regex = Schema.String.pipe(FormatAnnotation.set(TypeFormat.Regex));
54
+
55
+ /**
56
+ * Multi-line text.
57
+ */
58
+ export const Text = Schema.String.pipe(FormatAnnotation.set(TypeFormat.Text));
59
+
60
+ /**
61
+ * https://datatracker.ietf.org/doc/html/rfc3986#section-1.1.3
62
+ */
63
+ export const URL = Schema.String.pipe(
64
+ Schema.pattern(/^(\w+?:\/\/)?([\da-z.-]+)\.([a-z.]{2,6})([/\w .-]*)*\/?$/i),
65
+ FormatAnnotation.set(TypeFormat.URL),
66
+ Schema.annotations({
67
+ title: 'URL',
68
+ description: 'URL',
69
+ }),
70
+ );
71
+
72
+ /**
73
+ * UUID (RFC 4122)
74
+ * https://datatracker.ietf.org/doc/html/rfc4122
75
+ */
76
+ export const UUID = Schema.UUID.pipe(
77
+ FormatAnnotation.set(TypeFormat.UUID),
78
+ Schema.annotations({
79
+ [SchemaAST.ExamplesAnnotationId]: ['3e4666bf-d5e5-4aa7-b8ce-cefe41c7568a'],
80
+ }),
81
+ );
@@ -0,0 +1,186 @@
1
+ //
2
+ // Copyright 2024 DXOS.org
3
+ //
4
+
5
+ import * as Function from 'effect/Function';
6
+ import type * as JSONSchema from 'effect/JSONSchema';
7
+ import * as Option from 'effect/Option';
8
+ import * as SchemaAST from 'effect/SchemaAST';
9
+
10
+ import { createAnnotationHelper } from '../annotations';
11
+ import { type JsonSchemaType } from '../json-schema';
12
+
13
+ // TODO(burdon): Rename PropertyType.
14
+ export type ScalarType =
15
+ | JSONSchema.JsonSchema7Object
16
+ | JSONSchema.JsonSchema7String
17
+ | JSONSchema.JsonSchema7Number
18
+ | JSONSchema.JsonSchema7Boolean
19
+ | JSONSchema.JsonSchema7Ref;
20
+
21
+ // TODO(burdon): Rename ValueType and change to disciminated union.
22
+ // export type ValueType = 'array' | 'object' | 'string' | 'number' | 'boolean' | 'ref';
23
+ export enum TypeEnum {
24
+ Array = 'array', // TODO(burdon): Remove?
25
+ Object = 'object',
26
+ String = 'string',
27
+ Number = 'number',
28
+ Boolean = 'boolean',
29
+ Ref = 'ref',
30
+ }
31
+
32
+ // TODO(burdon): Ref?
33
+ export const getTypeEnum = (property: JsonSchemaType): TypeEnum | undefined => {
34
+ switch (property.type) {
35
+ case 'array':
36
+ return TypeEnum.Array;
37
+ case 'object':
38
+ return TypeEnum.Object;
39
+ case 'string':
40
+ return TypeEnum.String;
41
+ case 'number':
42
+ return TypeEnum.Number;
43
+ case 'boolean':
44
+ return TypeEnum.Boolean;
45
+ default:
46
+ return undefined;
47
+ }
48
+ };
49
+
50
+ /**
51
+ * https://json-schema.org/understanding-json-schema/reference/schema
52
+ * https://json-schema.org/understanding-json-schema/reference/string#built-in-formats
53
+ */
54
+ export const FormatAnnotationId = Symbol.for('@dxos/schema/annotation/Format');
55
+
56
+ export const FormatAnnotation = createAnnotationHelper<TypeFormat>(FormatAnnotationId);
57
+
58
+ /** @deprecated */
59
+ export const getFormatAnnotation = (node: SchemaAST.AST): TypeFormat | undefined =>
60
+ Function.pipe(SchemaAST.getAnnotation<TypeFormat>(FormatAnnotationId)(node), Option.getOrUndefined);
61
+
62
+ // TODO(burdon): Rename Format; Change to discriminated union?
63
+ export enum TypeFormat {
64
+ None = 'none',
65
+
66
+ //
67
+ // Scalar
68
+ //
69
+
70
+ String = 'string',
71
+ Number = 'number',
72
+ Boolean = 'boolean',
73
+ Ref = 'ref',
74
+
75
+ //
76
+ // { type: 'string' }
77
+ //
78
+
79
+ DID = 'did', // Users, etc.
80
+ DXN = 'dxn',
81
+ Email = 'email',
82
+ Formula = 'formula', // Spreadsheet formula.
83
+ Hostname = 'hostname',
84
+ JSON = 'json',
85
+ Markdown = 'markdown',
86
+ Regex = 'regex',
87
+ SingleSelect = 'single-select',
88
+ Text = 'text',
89
+ MultiSelect = 'multi-select',
90
+ URL = 'url',
91
+ UUID = 'uuid',
92
+
93
+ //
94
+ // { type: 'number' }
95
+ //
96
+
97
+ Currency = 'currency',
98
+ Integer = 'integer',
99
+ Percent = 'percent',
100
+ Timestamp = 'timestamp',
101
+
102
+ //
103
+ // { type: 'date' }
104
+ //
105
+
106
+ DateTime = 'date-time',
107
+ Date = 'date',
108
+ Time = 'time',
109
+ Duration = 'duration',
110
+
111
+ //
112
+ // { type: 'object' }
113
+ //
114
+
115
+ GeoPoint = 'lnglat',
116
+ }
117
+
118
+ export const FormatEnums = Object.values(TypeFormat).sort();
119
+
120
+ export const PropertyKind = {
121
+ type: TypeEnum,
122
+ format: TypeFormat,
123
+ };
124
+
125
+ /**
126
+ * Default formats
127
+ */
128
+ export const typeToFormat: Partial<Record<TypeEnum, TypeFormat>> = {
129
+ [TypeEnum.String]: TypeFormat.String,
130
+ [TypeEnum.Number]: TypeFormat.Number,
131
+ [TypeEnum.Boolean]: TypeFormat.Boolean,
132
+ };
133
+
134
+ /**
135
+ * Map of format to type.
136
+ */
137
+ export const formatToType: Record<TypeFormat, TypeEnum> = {
138
+ [TypeFormat.None]: undefined as any,
139
+ [TypeFormat.String]: TypeEnum.String,
140
+ [TypeFormat.Number]: TypeEnum.Number,
141
+ [TypeFormat.Boolean]: TypeEnum.Boolean,
142
+ [TypeFormat.Ref]: TypeEnum.Ref,
143
+
144
+ // Strings
145
+ [TypeFormat.DID]: TypeEnum.String,
146
+ [TypeFormat.DXN]: TypeEnum.String,
147
+ [TypeFormat.Email]: TypeEnum.String,
148
+ [TypeFormat.Formula]: TypeEnum.String,
149
+ [TypeFormat.Hostname]: TypeEnum.String,
150
+ [TypeFormat.JSON]: TypeEnum.String,
151
+ [TypeFormat.Markdown]: TypeEnum.String,
152
+ [TypeFormat.Regex]: TypeEnum.String,
153
+ [TypeFormat.URL]: TypeEnum.String,
154
+ [TypeFormat.UUID]: TypeEnum.String,
155
+ [TypeFormat.SingleSelect]: TypeEnum.String,
156
+ [TypeFormat.Text]: TypeEnum.String,
157
+ [TypeFormat.MultiSelect]: TypeEnum.Object,
158
+
159
+ // Dates
160
+ [TypeFormat.Date]: TypeEnum.String,
161
+ [TypeFormat.DateTime]: TypeEnum.String,
162
+ [TypeFormat.Duration]: TypeEnum.String,
163
+ [TypeFormat.Time]: TypeEnum.String,
164
+
165
+ // Numbers
166
+ [TypeFormat.Currency]: TypeEnum.Number,
167
+ [TypeFormat.Integer]: TypeEnum.Number,
168
+ [TypeFormat.Percent]: TypeEnum.Number,
169
+ [TypeFormat.Timestamp]: TypeEnum.Number,
170
+
171
+ // Objects
172
+ [TypeFormat.GeoPoint]: TypeEnum.Array,
173
+ };
174
+
175
+ /**
176
+ * Allowed value options for select.
177
+ */
178
+ export const OptionsAnnotationId = Symbol.for('@dxos/schema/annotation/Options');
179
+
180
+ // TODO(wittjosiah): Reconcile with `SelectOption`.
181
+ export type Options = string | number;
182
+ export const OptionsAnnotation = createAnnotationHelper<Options[]>(OptionsAnnotationId);
183
+
184
+ /** @deprecated */
185
+ export const getOptionsAnnotation = (node: SchemaAST.AST): Options[] | undefined =>
186
+ Function.pipe(SchemaAST.getAnnotation<Options[]>(OptionsAnnotationId)(node), Option.getOrUndefined);
@@ -0,0 +1,38 @@
1
+ //
2
+ // Copyright 2024 DXOS.org
3
+ //
4
+
5
+ // TODO(burdon): Import directly (not part of ECHO API).
6
+ export { JsonPath, JsonProp, getValue, setValue, splitJsonPath } from '@dxos/effect';
7
+
8
+ export * from './annotations';
9
+ export * from './entities';
10
+ export * from './formats';
11
+ export * from './json-schema';
12
+ export * from './ref';
13
+ export * from './types';
14
+
15
+ // TODO(wittjosiah): Required to ensure types are portable (need to export all types required for downstream inference).
16
+ export * from './object';
17
+ export * from './proxy';
18
+ export * from './schema';
19
+
20
+ // export {
21
+ // createObject,
22
+ // createQueueDXN,
23
+ // isDeleted,
24
+ // objectFromJSON,
25
+ // objectToJSON,
26
+ // setRefResolverOnData,
27
+ // SchemaValidator,
28
+ // TypedObject,
29
+ // } from './object';
30
+ // export { makeObject } from './proxy';
31
+ // export {
32
+ // type BaseSchema,
33
+ // EchoSchema,
34
+ // ImmutableSchema,
35
+ // RuntimeSchemaRegistry,
36
+ // PersistentSchema,
37
+ // isMutable,
38
+ // } from './schema';
@@ -0,0 +1,50 @@
1
+ //
2
+ // Copyright 2025 DXOS.org
3
+ //
4
+
5
+ import * as SchemaAST from 'effect/SchemaAST';
6
+
7
+ import { GeneratorAnnotationId, LabelAnnotationId, PropertyMetaAnnotationId } from '../annotations';
8
+ import { CurrencyAnnotationId, FormatAnnotationId } from '../formats';
9
+ import { type JsonSchemaEchoAnnotations, type JsonSchemaType } from '../json-schema';
10
+
11
+ //
12
+ // This file configures annotations for JSON encoding/decoding.
13
+ //
14
+
15
+ // Go on the root level.
16
+ type RootJsonSchemaProperty = keyof JsonSchemaType;
17
+
18
+ // Go on the namespaced `annotations` property.
19
+ type NamespacedJsonSchemaProperty = keyof JsonSchemaEchoAnnotations;
20
+
21
+ /**
22
+ * List of annotations for JSON encoding/decoding.
23
+ * Omits default effect-schema annotations since they are encoded with default serializer.
24
+ */
25
+ // TODO(burdon): Reconcile with `EchoAnnotations`.
26
+ export const CustomAnnotations: Partial<Record<RootJsonSchemaProperty, symbol>> = {
27
+ format: FormatAnnotationId,
28
+ currency: CurrencyAnnotationId,
29
+ };
30
+
31
+ /**
32
+ * List of annotations for JSON decoding only.
33
+ * Includes default effect annotations.
34
+ */
35
+ export const DecodedAnnotations: Partial<Record<RootJsonSchemaProperty, symbol>> = {
36
+ title: SchemaAST.TitleAnnotationId,
37
+ description: SchemaAST.DescriptionAnnotationId,
38
+ };
39
+
40
+ /**
41
+ * Annotations that go into ECHO namespace in json-schema.
42
+ */
43
+ // TODO(dmaretskyi): Consider removing ECHO namespace and putting them at the top level.
44
+ // TODO(dmaretskyi): Move to format.ts when circular imports are solved
45
+ export const EchoAnnotations: Partial<Record<NamespacedJsonSchemaProperty, symbol>> = {
46
+ // TODO(dmaretskyi): `FieldLookupAnnotationId` might go here, but lets remove it entirely and use LabelAnnotation instead.
47
+ meta: PropertyMetaAnnotationId,
48
+ generator: GeneratorAnnotationId,
49
+ labelProp: LabelAnnotationId,
50
+ };