@dxos/echo 0.8.4-main.72ec0f3 → 0.8.4-main.7ace549

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 (332) hide show
  1. package/dist/lib/browser/{chunk-BIDAASFK.mjs → chunk-7GH6RXJ3.mjs} +2246 -2290
  2. package/dist/lib/browser/chunk-7GH6RXJ3.mjs.map +7 -0
  3. package/dist/lib/browser/chunk-E4UTVJNF.mjs +1111 -0
  4. package/dist/lib/browser/chunk-E4UTVJNF.mjs.map +7 -0
  5. package/dist/lib/browser/index.mjs +18 -8
  6. package/dist/lib/browser/internal/index.mjs +45 -45
  7. package/dist/lib/browser/meta.json +1 -1
  8. package/dist/lib/browser/testing/index.mjs +252 -191
  9. package/dist/lib/browser/testing/index.mjs.map +4 -4
  10. package/dist/lib/node-esm/chunk-JE5RXM2I.mjs +1111 -0
  11. package/dist/lib/node-esm/chunk-JE5RXM2I.mjs.map +7 -0
  12. package/dist/lib/node-esm/{chunk-3SVRRCUU.mjs → chunk-M4B6BMD2.mjs} +2246 -2290
  13. package/dist/lib/node-esm/chunk-M4B6BMD2.mjs.map +7 -0
  14. package/dist/lib/node-esm/index.mjs +18 -8
  15. package/dist/lib/node-esm/internal/index.mjs +45 -45
  16. package/dist/lib/node-esm/meta.json +1 -1
  17. package/dist/lib/node-esm/testing/index.mjs +252 -191
  18. package/dist/lib/node-esm/testing/index.mjs.map +4 -4
  19. package/dist/types/src/Annotation.d.ts +2 -0
  20. package/dist/types/src/Annotation.d.ts.map +1 -0
  21. package/dist/types/src/Database.d.ts +137 -0
  22. package/dist/types/src/Database.d.ts.map +1 -0
  23. package/dist/types/src/Entity.d.ts +36 -0
  24. package/dist/types/src/Entity.d.ts.map +1 -0
  25. package/dist/types/src/Format.d.ts +4 -0
  26. package/dist/types/src/Format.d.ts.map +1 -0
  27. package/dist/types/src/JsonSchema.d.ts +9 -0
  28. package/dist/types/src/JsonSchema.d.ts.map +1 -0
  29. package/dist/types/src/Key.d.ts +1 -0
  30. package/dist/types/src/Key.d.ts.map +1 -1
  31. package/dist/types/src/Obj.d.ts +79 -70
  32. package/dist/types/src/Obj.d.ts.map +1 -1
  33. package/dist/types/src/Ref.d.ts +10 -10
  34. package/dist/types/src/Ref.d.ts.map +1 -1
  35. package/dist/types/src/Relation.d.ts +14 -11
  36. package/dist/types/src/Relation.d.ts.map +1 -1
  37. package/dist/types/src/Tag.d.ts +1 -1
  38. package/dist/types/src/Tag.d.ts.map +1 -1
  39. package/dist/types/src/Type.d.ts +39 -49
  40. package/dist/types/src/Type.d.ts.map +1 -1
  41. package/dist/types/src/index.d.ts +6 -3
  42. package/dist/types/src/index.d.ts.map +1 -1
  43. package/dist/types/src/internal/annotations/annotations.d.ts +174 -0
  44. package/dist/types/src/internal/annotations/annotations.d.ts.map +1 -0
  45. package/dist/types/src/internal/annotations/annotations.test.d.ts.map +1 -0
  46. package/dist/types/src/internal/annotations/index.d.ts +3 -0
  47. package/dist/types/src/internal/annotations/index.d.ts.map +1 -0
  48. package/dist/types/src/internal/annotations/util.d.ts +26 -0
  49. package/dist/types/src/internal/annotations/util.d.ts.map +1 -0
  50. package/dist/types/src/internal/entities/entity.d.ts +10 -0
  51. package/dist/types/src/internal/entities/entity.d.ts.map +1 -0
  52. package/dist/types/src/internal/{object → entities}/expando.d.ts +3 -1
  53. package/dist/types/src/internal/entities/expando.d.ts.map +1 -0
  54. package/dist/types/src/internal/entities/index.d.ts +6 -0
  55. package/dist/types/src/internal/entities/index.d.ts.map +1 -0
  56. package/dist/types/src/internal/entities/model.d.ts +70 -0
  57. package/dist/types/src/internal/entities/model.d.ts.map +1 -0
  58. package/dist/types/src/internal/entities/object.d.ts +11 -0
  59. package/dist/types/src/internal/entities/object.d.ts.map +1 -0
  60. package/dist/types/src/internal/entities/relation.d.ts +55 -0
  61. package/dist/types/src/internal/entities/relation.d.ts.map +1 -0
  62. package/dist/types/src/internal/entities/util.d.ts +2 -0
  63. package/dist/types/src/internal/entities/util.d.ts.map +1 -0
  64. package/dist/types/src/internal/formats/format.d.ts +2 -0
  65. package/dist/types/src/internal/formats/format.d.ts.map +1 -1
  66. package/dist/types/src/internal/formats/types.d.ts +7 -7
  67. package/dist/types/src/internal/formats/types.d.ts.map +1 -1
  68. package/dist/types/src/internal/index.d.ts +6 -10
  69. package/dist/types/src/internal/index.d.ts.map +1 -1
  70. package/dist/types/src/internal/json-schema/annotations.d.ts.map +1 -0
  71. package/dist/types/src/internal/json-schema/effect-schema.test.d.ts.map +1 -0
  72. package/dist/types/src/internal/json-schema/index.d.ts +2 -0
  73. package/dist/types/src/internal/json-schema/index.d.ts.map +1 -1
  74. package/dist/types/src/internal/json-schema/json-schema-type.d.ts.map +1 -1
  75. package/dist/types/src/internal/{json → json-schema}/json-schema.d.ts +2 -1
  76. package/dist/types/src/internal/json-schema/json-schema.d.ts.map +1 -0
  77. package/dist/types/src/internal/json-schema/json-schema.test.d.ts.map +1 -0
  78. package/dist/types/src/internal/object/common.d.ts.map +1 -1
  79. package/dist/types/src/internal/object/{create.d.ts → create-object.d.ts} +8 -9
  80. package/dist/types/src/internal/object/create-object.d.ts.map +1 -0
  81. package/dist/types/src/internal/object/create-object.test.d.ts +2 -0
  82. package/dist/types/src/internal/object/create-object.test.d.ts.map +1 -0
  83. package/dist/types/src/internal/object/deleted.d.ts +2 -2
  84. package/dist/types/src/internal/object/deleted.d.ts.map +1 -1
  85. package/dist/types/src/internal/object/ids.d.ts.map +1 -1
  86. package/dist/types/src/internal/object/index.d.ts +3 -11
  87. package/dist/types/src/internal/object/index.d.ts.map +1 -1
  88. package/dist/types/src/internal/object/json-serializer.d.ts +1 -2
  89. package/dist/types/src/internal/object/json-serializer.d.ts.map +1 -1
  90. package/dist/types/src/internal/object/schema-validator.d.ts.map +1 -1
  91. package/dist/types/src/internal/object/typed-object.d.ts +1 -1
  92. package/dist/types/src/internal/object/typed-object.d.ts.map +1 -1
  93. package/dist/types/src/internal/proxy/index.d.ts +3 -0
  94. package/dist/types/src/internal/proxy/index.d.ts.map +1 -0
  95. package/dist/types/src/internal/proxy/make-object.d.ts +16 -0
  96. package/dist/types/src/internal/proxy/make-object.d.ts.map +1 -0
  97. package/dist/types/src/internal/proxy/typed-handler.d.ts +1 -1
  98. package/dist/types/src/internal/proxy/typed-handler.d.ts.map +1 -1
  99. package/dist/types/src/internal/ref/ref.d.ts +15 -12
  100. package/dist/types/src/internal/ref/ref.d.ts.map +1 -1
  101. package/dist/types/src/internal/schema/compose.d.ts.map +1 -0
  102. package/dist/types/src/internal/schema/compose.test.d.ts.map +1 -0
  103. package/dist/types/src/internal/schema/echo-schema.d.ts +9 -9
  104. package/dist/types/src/internal/schema/echo-schema.d.ts.map +1 -1
  105. package/dist/types/src/internal/schema/index.d.ts +3 -4
  106. package/dist/types/src/internal/schema/index.d.ts.map +1 -1
  107. package/dist/types/src/internal/schema/persistent-schema.d.ts +18 -0
  108. package/dist/types/src/internal/schema/persistent-schema.d.ts.map +1 -0
  109. package/dist/types/src/internal/schema/runtime-schema-registry.d.ts +1 -1
  110. package/dist/types/src/internal/schema/runtime-schema-registry.d.ts.map +1 -1
  111. package/dist/types/src/internal/types/base.d.ts +37 -0
  112. package/dist/types/src/internal/types/base.d.ts.map +1 -0
  113. package/dist/types/src/internal/{ast/entity-kind.d.ts → types/entity.d.ts} +3 -1
  114. package/dist/types/src/internal/types/entity.d.ts.map +1 -0
  115. package/dist/types/src/internal/types/index.d.ts +5 -2
  116. package/dist/types/src/internal/types/index.d.ts.map +1 -1
  117. package/dist/types/src/internal/{object → types}/meta.d.ts +20 -11
  118. package/dist/types/src/internal/types/meta.d.ts.map +1 -0
  119. package/dist/types/src/internal/types/typename.d.ts +13 -0
  120. package/dist/types/src/internal/types/typename.d.ts.map +1 -0
  121. package/dist/types/src/internal/{object → types}/version.d.ts +3 -2
  122. package/dist/types/src/internal/types/version.d.ts.map +1 -0
  123. package/dist/types/src/query/filter.d.ts +167 -0
  124. package/dist/types/src/query/filter.d.ts.map +1 -0
  125. package/dist/types/src/query/index.d.ts +3 -0
  126. package/dist/types/src/query/index.d.ts.map +1 -1
  127. package/dist/types/src/query/order.d.ts +12 -0
  128. package/dist/types/src/query/order.d.ts.map +1 -0
  129. package/dist/types/src/query/query.d.ts +9 -145
  130. package/dist/types/src/query/query.d.ts.map +1 -1
  131. package/dist/types/src/query/testing.d.ts +51 -0
  132. package/dist/types/src/query/testing.d.ts.map +1 -0
  133. package/dist/types/src/{internal/query/query.d.ts → query/types.d.ts} +1 -1
  134. package/dist/types/src/query/types.d.ts.map +1 -0
  135. package/dist/types/src/query/util.d.ts +8 -0
  136. package/dist/types/src/query/util.d.ts.map +1 -0
  137. package/dist/types/src/{test → testing}/api.test.d.ts.map +1 -1
  138. package/dist/types/src/testing/index.d.ts +3 -3
  139. package/dist/types/src/testing/index.d.ts.map +1 -1
  140. package/dist/types/src/testing/test-data.d.ts +18 -0
  141. package/dist/types/src/testing/test-data.d.ts.map +1 -0
  142. package/dist/types/src/testing/{types.d.ts → test-schema.d.ts} +166 -57
  143. package/dist/types/src/testing/test-schema.d.ts.map +1 -0
  144. package/dist/types/src/{internal/testing/utils.d.ts → testing/util.d.ts} +11 -5
  145. package/dist/types/src/testing/util.d.ts.map +1 -0
  146. package/dist/types/tsconfig.tsbuildinfo +1 -1
  147. package/package.json +46 -38
  148. package/src/Annotation.ts +17 -0
  149. package/src/Database.ts +189 -0
  150. package/src/Entity.ts +51 -0
  151. package/src/Format.ts +11 -0
  152. package/src/JsonSchema.ts +16 -0
  153. package/src/Key.ts +3 -0
  154. package/src/Obj.ts +248 -181
  155. package/src/Ref.ts +9 -9
  156. package/src/Relation.ts +58 -44
  157. package/src/Tag.ts +2 -1
  158. package/src/Type.ts +96 -83
  159. package/src/index.ts +9 -4
  160. package/src/internal/README.md +83 -0
  161. package/src/internal/{ast → annotations}/annotations.test.ts +13 -15
  162. package/src/internal/annotations/annotations.ts +463 -0
  163. package/src/internal/annotations/index.ts +6 -0
  164. package/src/internal/annotations/util.ts +70 -0
  165. package/src/internal/entities/entity.ts +109 -0
  166. package/src/internal/{object → entities}/expando.ts +7 -5
  167. package/src/internal/entities/index.ts +9 -0
  168. package/src/internal/{object → entities}/model.ts +49 -90
  169. package/src/internal/entities/object.ts +45 -0
  170. package/src/internal/entities/relation.ts +155 -0
  171. package/src/internal/entities/util.ts +33 -0
  172. package/src/internal/formats/date.test.ts +1 -1
  173. package/src/internal/formats/date.ts +5 -5
  174. package/src/internal/formats/format.test.ts +5 -5
  175. package/src/internal/formats/format.ts +3 -0
  176. package/src/internal/formats/number.ts +5 -5
  177. package/src/internal/formats/object.ts +2 -2
  178. package/src/internal/formats/string.ts +9 -9
  179. package/src/internal/formats/types.ts +44 -39
  180. package/src/internal/index.ts +29 -13
  181. package/src/internal/{json → json-schema}/annotations.ts +1 -1
  182. package/src/internal/json-schema/index.ts +2 -0
  183. package/src/internal/json-schema/json-schema-type.ts +4 -3
  184. package/src/internal/{json → json-schema}/json-schema.test.ts +48 -38
  185. package/src/internal/{json → json-schema}/json-schema.ts +16 -7
  186. package/src/internal/object/common.ts +3 -4
  187. package/src/internal/object/{create.test.ts → create-object.test.ts} +30 -32
  188. package/src/internal/object/{create.ts → create-object.ts} +33 -34
  189. package/src/internal/object/deleted.ts +6 -6
  190. package/src/internal/object/ids.ts +1 -1
  191. package/src/internal/object/index.ts +3 -11
  192. package/src/internal/object/inspect.ts +3 -5
  193. package/src/internal/object/json-serializer.test.ts +33 -38
  194. package/src/internal/object/json-serializer.ts +43 -38
  195. package/src/internal/object/schema-validator.ts +3 -2
  196. package/src/internal/object/typed-object.test.ts +1 -1
  197. package/src/internal/object/typed-object.ts +11 -5
  198. package/src/internal/proxy/handler.test.ts +30 -20
  199. package/src/internal/proxy/index.ts +6 -0
  200. package/src/internal/proxy/{reactive-object.ts → make-object.ts} +19 -14
  201. package/src/internal/proxy/schema.test.ts +5 -4
  202. package/src/internal/proxy/typed-handler.test.ts +28 -28
  203. package/src/internal/proxy/typed-handler.ts +8 -3
  204. package/src/internal/proxy/typed-object.test.ts +16 -11
  205. package/src/internal/ref/ref.test.ts +8 -7
  206. package/src/internal/ref/ref.ts +24 -20
  207. package/src/internal/{projection → schema}/compose.test.ts +5 -6
  208. package/src/internal/{projection → schema}/compose.ts +2 -1
  209. package/src/internal/schema/echo-schema.ts +30 -28
  210. package/src/internal/schema/index.ts +3 -4
  211. package/src/internal/schema/manipulation.ts +1 -1
  212. package/src/internal/schema/persistent-schema.ts +28 -0
  213. package/src/internal/schema/runtime-schema-registry.ts +4 -4
  214. package/src/internal/types/base.ts +58 -0
  215. package/src/internal/{ast/entity-kind.ts → types/entity.ts} +8 -0
  216. package/src/internal/types/index.ts +5 -2
  217. package/src/internal/{object → types}/meta.ts +32 -17
  218. package/src/internal/types/typename.ts +45 -0
  219. package/src/internal/types/version.ts +20 -0
  220. package/src/query/filter.ts +455 -0
  221. package/src/query/index.ts +4 -1
  222. package/src/query/order.ts +34 -0
  223. package/src/query/query.test.ts +48 -115
  224. package/src/query/query.ts +16 -502
  225. package/src/query/testing.ts +64 -0
  226. package/src/query/util.ts +25 -0
  227. package/src/testing/api.test.ts +100 -0
  228. package/src/testing/index.ts +3 -3
  229. package/src/testing/test-data.ts +130 -0
  230. package/src/testing/test-schema.ts +213 -0
  231. package/src/{internal/testing/utils.ts → testing/util.ts} +38 -14
  232. package/dist/lib/browser/chunk-BIDAASFK.mjs.map +0 -7
  233. package/dist/lib/browser/chunk-ZDLCWGEW.mjs +0 -410
  234. package/dist/lib/browser/chunk-ZDLCWGEW.mjs.map +0 -7
  235. package/dist/lib/browser/chunk-ZFRJKT4A.mjs +0 -585
  236. package/dist/lib/browser/chunk-ZFRJKT4A.mjs.map +0 -7
  237. package/dist/lib/browser/query/index.mjs +0 -13
  238. package/dist/lib/browser/query/index.mjs.map +0 -7
  239. package/dist/lib/node-esm/chunk-3SVRRCUU.mjs.map +0 -7
  240. package/dist/lib/node-esm/chunk-CGDHRZWH.mjs +0 -585
  241. package/dist/lib/node-esm/chunk-CGDHRZWH.mjs.map +0 -7
  242. package/dist/lib/node-esm/chunk-HWS6VBQC.mjs +0 -410
  243. package/dist/lib/node-esm/chunk-HWS6VBQC.mjs.map +0 -7
  244. package/dist/lib/node-esm/query/index.mjs +0 -13
  245. package/dist/lib/node-esm/query/index.mjs.map +0 -7
  246. package/dist/types/src/internal/ast/annotation-helper.d.ts +0 -8
  247. package/dist/types/src/internal/ast/annotation-helper.d.ts.map +0 -1
  248. package/dist/types/src/internal/ast/annotations.d.ts +0 -131
  249. package/dist/types/src/internal/ast/annotations.d.ts.map +0 -1
  250. package/dist/types/src/internal/ast/annotations.test.d.ts.map +0 -1
  251. package/dist/types/src/internal/ast/entity-kind.d.ts.map +0 -1
  252. package/dist/types/src/internal/ast/index.d.ts +0 -5
  253. package/dist/types/src/internal/ast/index.d.ts.map +0 -1
  254. package/dist/types/src/internal/ast/types.d.ts +0 -6
  255. package/dist/types/src/internal/ast/types.d.ts.map +0 -1
  256. package/dist/types/src/internal/json/annotations.d.ts.map +0 -1
  257. package/dist/types/src/internal/json/effect-schema.test.d.ts.map +0 -1
  258. package/dist/types/src/internal/json/index.d.ts +0 -2
  259. package/dist/types/src/internal/json/index.d.ts.map +0 -1
  260. package/dist/types/src/internal/json/json-schema.d.ts.map +0 -1
  261. package/dist/types/src/internal/json/json-schema.test.d.ts.map +0 -1
  262. package/dist/types/src/internal/object/accessors.d.ts +0 -37
  263. package/dist/types/src/internal/object/accessors.d.ts.map +0 -1
  264. package/dist/types/src/internal/object/create.d.ts.map +0 -1
  265. package/dist/types/src/internal/object/create.test.d.ts +0 -2
  266. package/dist/types/src/internal/object/create.test.d.ts.map +0 -1
  267. package/dist/types/src/internal/object/entity.d.ts +0 -33
  268. package/dist/types/src/internal/object/entity.d.ts.map +0 -1
  269. package/dist/types/src/internal/object/expando.d.ts.map +0 -1
  270. package/dist/types/src/internal/object/meta.d.ts.map +0 -1
  271. package/dist/types/src/internal/object/model.d.ts +0 -117
  272. package/dist/types/src/internal/object/model.d.ts.map +0 -1
  273. package/dist/types/src/internal/object/relation.d.ts +0 -17
  274. package/dist/types/src/internal/object/relation.d.ts.map +0 -1
  275. package/dist/types/src/internal/object/typename.d.ts +0 -15
  276. package/dist/types/src/internal/object/typename.d.ts.map +0 -1
  277. package/dist/types/src/internal/object/version.d.ts.map +0 -1
  278. package/dist/types/src/internal/projection/compose.d.ts.map +0 -1
  279. package/dist/types/src/internal/projection/compose.test.d.ts.map +0 -1
  280. package/dist/types/src/internal/projection/index.d.ts +0 -2
  281. package/dist/types/src/internal/projection/index.d.ts.map +0 -1
  282. package/dist/types/src/internal/proxy/reactive-object.d.ts +0 -15
  283. package/dist/types/src/internal/proxy/reactive-object.d.ts.map +0 -1
  284. package/dist/types/src/internal/query/index.d.ts +0 -2
  285. package/dist/types/src/internal/query/index.d.ts.map +0 -1
  286. package/dist/types/src/internal/query/query.d.ts.map +0 -1
  287. package/dist/types/src/internal/schema/stored-schema.d.ts +0 -13
  288. package/dist/types/src/internal/schema/stored-schema.d.ts.map +0 -1
  289. package/dist/types/src/internal/testing/index.d.ts +0 -3
  290. package/dist/types/src/internal/testing/index.d.ts.map +0 -1
  291. package/dist/types/src/internal/testing/types.d.ts +0 -381
  292. package/dist/types/src/internal/testing/types.d.ts.map +0 -1
  293. package/dist/types/src/internal/testing/utils.d.ts.map +0 -1
  294. package/dist/types/src/internal/types/types.d.ts +0 -79
  295. package/dist/types/src/internal/types/types.d.ts.map +0 -1
  296. package/dist/types/src/internal/types/types.test.d.ts +0 -2
  297. package/dist/types/src/internal/types/types.test.d.ts.map +0 -1
  298. package/dist/types/src/internal/types/util.d.ts +0 -5
  299. package/dist/types/src/internal/types/util.d.ts.map +0 -1
  300. package/dist/types/src/testing/echo-schema.d.ts +0 -7
  301. package/dist/types/src/testing/echo-schema.d.ts.map +0 -1
  302. package/dist/types/src/testing/types.d.ts.map +0 -1
  303. package/src/internal/ast/annotation-helper.ts +0 -22
  304. package/src/internal/ast/annotations.ts +0 -226
  305. package/src/internal/ast/index.ts +0 -8
  306. package/src/internal/ast/types.ts +0 -17
  307. package/src/internal/json/index.ts +0 -5
  308. package/src/internal/object/accessors.ts +0 -153
  309. package/src/internal/object/entity.ts +0 -248
  310. package/src/internal/object/relation.ts +0 -24
  311. package/src/internal/object/typename.ts +0 -61
  312. package/src/internal/object/version.ts +0 -22
  313. package/src/internal/projection/index.ts +0 -5
  314. package/src/internal/query/index.ts +0 -5
  315. package/src/internal/schema/stored-schema.ts +0 -26
  316. package/src/internal/testing/index.ts +0 -6
  317. package/src/internal/testing/types.ts +0 -144
  318. package/src/internal/types/types.test.ts +0 -48
  319. package/src/internal/types/types.ts +0 -176
  320. package/src/internal/types/util.ts +0 -9
  321. package/src/test/api.test.ts +0 -180
  322. package/src/testing/echo-schema.ts +0 -39
  323. package/src/testing/types.ts +0 -108
  324. /package/dist/types/src/internal/{ast → annotations}/annotations.test.d.ts +0 -0
  325. /package/dist/types/src/internal/{json → json-schema}/annotations.d.ts +0 -0
  326. /package/dist/types/src/internal/{json → json-schema}/effect-schema.test.d.ts +0 -0
  327. /package/dist/types/src/internal/{json → json-schema}/json-schema.test.d.ts +0 -0
  328. /package/dist/types/src/internal/{projection → schema}/compose.d.ts +0 -0
  329. /package/dist/types/src/internal/{projection → schema}/compose.test.d.ts +0 -0
  330. /package/dist/types/src/{test → testing}/api.test.d.ts +0 -0
  331. /package/src/internal/{json → json-schema}/effect-schema.test.ts +0 -0
  332. /package/src/{internal/query/query.ts → query/types.ts} +0 -0
@@ -10,6 +10,7 @@ import * as DateUtil from './date';
10
10
  import * as NumberUtil from './number';
11
11
  import * as ObjectUtil from './object';
12
12
  import * as StringUtil from './string';
13
+ import { TypeFormat as TypeFormatEnum } from './types';
13
14
 
14
15
  // TODO(burdon): Consider factoring out to separate `@dxos/json-schema`
15
16
  // TODO(burdon): Media encoding.
@@ -22,6 +23,8 @@ import * as StringUtil from './string';
22
23
  */
23
24
  // TODO(burdon): Add fields for `examples`, `message`, etc.
24
25
  export namespace Format {
26
+ export import TypeFormat = TypeFormatEnum;
27
+
25
28
  // Strings
26
29
  export const DXN = Keys.DXN.Schema;
27
30
  export const Email = StringUtil.Email;
@@ -4,7 +4,7 @@
4
4
 
5
5
  import * as Schema from 'effect/Schema';
6
6
 
7
- import { FormatAnnotation, FormatEnum } from './types';
7
+ import { FormatAnnotation, TypeFormat } from './types';
8
8
 
9
9
  const encodeMultipleOf = (divisor: number) => 1 / Math.pow(10, divisor);
10
10
 
@@ -37,7 +37,7 @@ export type CurrencyAnnotation = {
37
37
  export const Currency = ({ decimals, code }: CurrencyAnnotation = { decimals: 2 }) =>
38
38
  Schema.Number.pipe(
39
39
  encodeMultiple(decimals),
40
- FormatAnnotation.set(FormatEnum.Currency),
40
+ FormatAnnotation.set(TypeFormat.Currency),
41
41
  Schema.annotations({
42
42
  title: 'Currency',
43
43
  description: 'Currency value',
@@ -55,7 +55,7 @@ export type PercentAnnotation = {
55
55
  export const Integer = () =>
56
56
  Schema.Number.pipe(
57
57
  Schema.int(),
58
- FormatAnnotation.set(FormatEnum.Integer),
58
+ FormatAnnotation.set(TypeFormat.Integer),
59
59
  Schema.annotations({
60
60
  title: 'Integer',
61
61
  description: 'Integer value',
@@ -69,7 +69,7 @@ export const Integer = () =>
69
69
  export const Percent = ({ decimals }: PercentAnnotation = { decimals: 2 }) =>
70
70
  Schema.Number.pipe(
71
71
  encodeMultiple(decimals),
72
- FormatAnnotation.set(FormatEnum.Percent),
72
+ FormatAnnotation.set(TypeFormat.Percent),
73
73
  Schema.annotations({
74
74
  title: 'Percent',
75
75
  description: 'Percentage value',
@@ -81,7 +81,7 @@ export const Percent = ({ decimals }: PercentAnnotation = { decimals: 2 }) =>
81
81
  * https://en.wikipedia.org/wiki/Unix_time
82
82
  */
83
83
  export const Timestamp = Schema.Number.pipe(
84
- FormatAnnotation.set(FormatEnum.Timestamp),
84
+ FormatAnnotation.set(TypeFormat.Timestamp),
85
85
  Schema.annotations({
86
86
  title: 'Timestamp',
87
87
  description: 'Unix timestamp',
@@ -6,7 +6,7 @@ import * as Schema from 'effect/Schema';
6
6
 
7
7
  import { clamp } from '@dxos/util';
8
8
 
9
- import { FormatAnnotation, FormatEnum } from './types';
9
+ import { FormatAnnotation, TypeFormat } from './types';
10
10
 
11
11
  /**
12
12
  * GeoJSON Format
@@ -27,7 +27,7 @@ export const GeoPoint = Schema.Tuple(
27
27
  title: 'Height ASL (m)',
28
28
  }),
29
29
  ).pipe(
30
- FormatAnnotation.set(FormatEnum.GeoPoint),
30
+ FormatAnnotation.set(TypeFormat.GeoPoint),
31
31
  Schema.annotations({
32
32
  title: 'GeoPoint',
33
33
  description: 'GeoJSON Position',
@@ -5,7 +5,7 @@
5
5
  import * as Schema from 'effect/Schema';
6
6
  import * as SchemaAST from 'effect/SchemaAST';
7
7
 
8
- import { FormatAnnotation, FormatEnum } from './types';
8
+ import { FormatAnnotation, TypeFormat } from './types';
9
9
 
10
10
  /**
11
11
  * Email address (RFC 5321)
@@ -13,7 +13,7 @@ import { FormatAnnotation, FormatEnum } from './types';
13
13
  */
14
14
  export const Email = Schema.String.pipe(
15
15
  Schema.pattern(/^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/),
16
- FormatAnnotation.set(FormatEnum.Email),
16
+ FormatAnnotation.set(TypeFormat.Email),
17
17
  Schema.annotations({
18
18
  title: 'Email',
19
19
  description: 'Email address',
@@ -24,25 +24,25 @@ export const Email = Schema.String.pipe(
24
24
  *
25
25
  */
26
26
  // TODO(burdon): Implement.
27
- export const Formula = Schema.String.pipe(FormatAnnotation.set(FormatEnum.Formula));
27
+ export const Formula = Schema.String.pipe(FormatAnnotation.set(TypeFormat.Formula));
28
28
 
29
29
  /**
30
30
  *
31
31
  */
32
32
  // TODO(burdon): Implement.
33
- export const Hostname = Schema.String.pipe(FormatAnnotation.set(FormatEnum.Hostname));
33
+ export const Hostname = Schema.String.pipe(FormatAnnotation.set(TypeFormat.Hostname));
34
34
 
35
35
  /**
36
36
  *
37
37
  */
38
38
  // TODO(burdon): Implement.
39
- export const JSON = Schema.String.pipe(FormatAnnotation.set(FormatEnum.JSON));
39
+ export const JSON = Schema.String.pipe(FormatAnnotation.set(TypeFormat.JSON));
40
40
 
41
41
  /**
42
42
  *
43
43
  */
44
44
  // TODO(burdon): Implement.
45
- export const Markdown = Schema.String.pipe(FormatAnnotation.set(FormatEnum.Markdown));
45
+ export const Markdown = Schema.String.pipe(FormatAnnotation.set(TypeFormat.Markdown));
46
46
 
47
47
  /**
48
48
  * Regex
@@ -50,14 +50,14 @@ export const Markdown = Schema.String.pipe(FormatAnnotation.set(FormatEnum.Markd
50
50
  * https://ecma-international.org/publications-and-standards/standards/ecma-262
51
51
  */
52
52
  // TODO(burdon): Implement.
53
- export const Regex = Schema.String.pipe(FormatAnnotation.set(FormatEnum.Regex));
53
+ export const Regex = Schema.String.pipe(FormatAnnotation.set(TypeFormat.Regex));
54
54
 
55
55
  /**
56
56
  * https://datatracker.ietf.org/doc/html/rfc3986#section-1.1.3
57
57
  */
58
58
  export const URL = Schema.String.pipe(
59
59
  Schema.pattern(/^(\w+?:\/\/)?([\da-z.-]+)\.([a-z.]{2,6})([/\w .-]*)*\/?$/i),
60
- FormatAnnotation.set(FormatEnum.URL),
60
+ FormatAnnotation.set(TypeFormat.URL),
61
61
  Schema.annotations({
62
62
  title: 'URL',
63
63
  description: 'URL',
@@ -69,7 +69,7 @@ export const URL = Schema.String.pipe(
69
69
  * https://datatracker.ietf.org/doc/html/rfc4122
70
70
  */
71
71
  export const UUID = Schema.UUID.pipe(
72
- FormatAnnotation.set(FormatEnum.UUID),
72
+ FormatAnnotation.set(TypeFormat.UUID),
73
73
  Schema.annotations({
74
74
  [SchemaAST.ExamplesAnnotationId]: ['3e4666bf-d5e5-4aa7-b8ce-cefe41c7568a'],
75
75
  }),
@@ -7,7 +7,7 @@ import type * as JSONSchema from 'effect/JSONSchema';
7
7
  import * as Option from 'effect/Option';
8
8
  import * as SchemaAST from 'effect/SchemaAST';
9
9
 
10
- import { createAnnotationHelper } from '../ast';
10
+ import { createAnnotationHelper } from '../annotations';
11
11
  import { type JsonSchemaType } from '../json-schema';
12
12
 
13
13
  // TODO(burdon): Rename PropertyType.
@@ -53,14 +53,19 @@ export const getTypeEnum = (property: JsonSchemaType): TypeEnum | undefined => {
53
53
  */
54
54
  export const FormatAnnotationId = Symbol.for('@dxos/schema/annotation/Format');
55
55
 
56
- export const FormatAnnotation = createAnnotationHelper<FormatEnum>(FormatAnnotationId);
56
+ export const FormatAnnotation = createAnnotationHelper<TypeFormat>(FormatAnnotationId);
57
57
 
58
- export const getFormatAnnotation = (node: SchemaAST.AST): FormatEnum | undefined =>
59
- Function.pipe(SchemaAST.getAnnotation<FormatEnum>(FormatAnnotationId)(node), Option.getOrUndefined);
58
+ export const getFormatAnnotation = (node: SchemaAST.AST): TypeFormat | undefined =>
59
+ Function.pipe(SchemaAST.getAnnotation<TypeFormat>(FormatAnnotationId)(node), Option.getOrUndefined);
60
60
 
61
- // TODO(burdon): Rename to FormatType and change to discriminated union.
62
- export enum FormatEnum {
61
+ // TODO(burdon): Rename Format; Change to discriminated union?
62
+ export enum TypeFormat {
63
63
  None = 'none',
64
+
65
+ //
66
+ // Scalar
67
+ //
68
+
64
69
  String = 'string',
65
70
  Number = 'number',
66
71
  Boolean = 'boolean',
@@ -108,60 +113,60 @@ export enum FormatEnum {
108
113
  GeoPoint = 'lnglat',
109
114
  }
110
115
 
111
- export const FormatEnums = Object.values(FormatEnum).sort();
116
+ export const FormatEnums = Object.values(TypeFormat).sort();
112
117
 
113
118
  export const PropertyKind = {
114
119
  type: TypeEnum,
115
- format: FormatEnum,
120
+ format: TypeFormat,
116
121
  };
117
122
 
118
123
  /**
119
124
  * Default formats
120
125
  */
121
- export const typeToFormat: Partial<Record<TypeEnum, FormatEnum>> = {
122
- [TypeEnum.String]: FormatEnum.String,
123
- [TypeEnum.Number]: FormatEnum.Number,
124
- [TypeEnum.Boolean]: FormatEnum.Boolean,
126
+ export const typeToFormat: Partial<Record<TypeEnum, TypeFormat>> = {
127
+ [TypeEnum.String]: TypeFormat.String,
128
+ [TypeEnum.Number]: TypeFormat.Number,
129
+ [TypeEnum.Boolean]: TypeFormat.Boolean,
125
130
  };
126
131
 
127
132
  /**
128
133
  * Map of format to type.
129
134
  */
130
- export const formatToType: Record<FormatEnum, TypeEnum> = {
131
- [FormatEnum.None]: undefined as any,
132
- [FormatEnum.String]: TypeEnum.String,
133
- [FormatEnum.Number]: TypeEnum.Number,
134
- [FormatEnum.Boolean]: TypeEnum.Boolean,
135
- [FormatEnum.Ref]: TypeEnum.Ref,
135
+ export const formatToType: Record<TypeFormat, TypeEnum> = {
136
+ [TypeFormat.None]: undefined as any,
137
+ [TypeFormat.String]: TypeEnum.String,
138
+ [TypeFormat.Number]: TypeEnum.Number,
139
+ [TypeFormat.Boolean]: TypeEnum.Boolean,
140
+ [TypeFormat.Ref]: TypeEnum.Ref,
136
141
 
137
142
  // Strings
138
- [FormatEnum.DID]: TypeEnum.String,
139
- [FormatEnum.DXN]: TypeEnum.String,
140
- [FormatEnum.Email]: TypeEnum.String,
141
- [FormatEnum.Formula]: TypeEnum.String,
142
- [FormatEnum.Hostname]: TypeEnum.String,
143
- [FormatEnum.JSON]: TypeEnum.String,
144
- [FormatEnum.Markdown]: TypeEnum.String,
145
- [FormatEnum.Regex]: TypeEnum.String,
146
- [FormatEnum.URL]: TypeEnum.String,
147
- [FormatEnum.UUID]: TypeEnum.String,
148
- [FormatEnum.SingleSelect]: TypeEnum.String,
149
- [FormatEnum.MultiSelect]: TypeEnum.Object,
143
+ [TypeFormat.DID]: TypeEnum.String,
144
+ [TypeFormat.DXN]: TypeEnum.String,
145
+ [TypeFormat.Email]: TypeEnum.String,
146
+ [TypeFormat.Formula]: TypeEnum.String,
147
+ [TypeFormat.Hostname]: TypeEnum.String,
148
+ [TypeFormat.JSON]: TypeEnum.String,
149
+ [TypeFormat.Markdown]: TypeEnum.String,
150
+ [TypeFormat.Regex]: TypeEnum.String,
151
+ [TypeFormat.URL]: TypeEnum.String,
152
+ [TypeFormat.UUID]: TypeEnum.String,
153
+ [TypeFormat.SingleSelect]: TypeEnum.String,
154
+ [TypeFormat.MultiSelect]: TypeEnum.Object,
150
155
 
151
156
  // Dates
152
- [FormatEnum.Date]: TypeEnum.String,
153
- [FormatEnum.DateTime]: TypeEnum.String,
154
- [FormatEnum.Duration]: TypeEnum.String,
155
- [FormatEnum.Time]: TypeEnum.String,
157
+ [TypeFormat.Date]: TypeEnum.String,
158
+ [TypeFormat.DateTime]: TypeEnum.String,
159
+ [TypeFormat.Duration]: TypeEnum.String,
160
+ [TypeFormat.Time]: TypeEnum.String,
156
161
 
157
162
  // Numbers
158
- [FormatEnum.Currency]: TypeEnum.Number,
159
- [FormatEnum.Integer]: TypeEnum.Number,
160
- [FormatEnum.Percent]: TypeEnum.Number,
161
- [FormatEnum.Timestamp]: TypeEnum.Number,
163
+ [TypeFormat.Currency]: TypeEnum.Number,
164
+ [TypeFormat.Integer]: TypeEnum.Number,
165
+ [TypeFormat.Percent]: TypeEnum.Number,
166
+ [TypeFormat.Timestamp]: TypeEnum.Number,
162
167
 
163
168
  // Objects
164
- [FormatEnum.GeoPoint]: TypeEnum.Array,
169
+ [TypeFormat.GeoPoint]: TypeEnum.Array,
165
170
  };
166
171
 
167
172
  /**
@@ -2,21 +2,37 @@
2
2
  // Copyright 2024 DXOS.org
3
3
  //
4
4
 
5
- export { JsonPath, splitJsonPath, JsonProp } from '@dxos/effect';
5
+ // TODO(burdon): Import directly (not part of ECHO API).
6
+ export { JsonPath, JsonProp, getValue, setValue, splitJsonPath } from '@dxos/effect';
6
7
 
7
- // TODO(dmaretskyi): Remove.
8
- export { ObjectId } from '@dxos/keys';
9
- export { ForeignKey } from '@dxos/echo-protocol';
10
-
11
- export * from './ast';
8
+ export * from './annotations';
9
+ export * from './entities';
12
10
  export * from './formats';
13
- export * from './json';
14
11
  export * from './json-schema';
15
- export * from './object';
16
- export * from './types';
17
- export { defineHiddenProperty } from '@dxos/live-object';
18
- export * from './projection';
19
- // TODO(dmaretskyi): Remove
20
- export { live } from './proxy/reactive-object';
21
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';
22
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';
@@ -4,7 +4,7 @@
4
4
 
5
5
  import * as SchemaAST from 'effect/SchemaAST';
6
6
 
7
- import { GeneratorAnnotationId, LabelAnnotationId, PropertyMetaAnnotationId } from '../ast';
7
+ import { GeneratorAnnotationId, LabelAnnotationId, PropertyMetaAnnotationId } from '../annotations';
8
8
  import { CurrencyAnnotationId, FormatAnnotationId } from '../formats';
9
9
  import { type JsonSchemaEchoAnnotations, type JsonSchemaType } from '../json-schema';
10
10
 
@@ -2,5 +2,7 @@
2
2
  // Copyright 2024 DXOS.org
3
3
  //
4
4
 
5
+ export * from './annotations';
5
6
  export * from './json-schema-normalize';
6
7
  export * from './json-schema-type';
8
+ export * from './json-schema';
@@ -6,8 +6,8 @@ import * as Schema from 'effect/Schema';
6
6
 
7
7
  import { JsonPath, type JsonProp } from '@dxos/effect';
8
8
 
9
- import { EntityKindSchema } from '../ast';
10
- import { FormatAnnotation, FormatEnum } from '../formats';
9
+ import { FormatAnnotation, TypeFormat } from '../formats';
10
+ import { EntityKindSchema } from '../types';
11
11
 
12
12
  //
13
13
  // JSON Schema
@@ -206,7 +206,7 @@ const _JsonSchemaType = Schema.Struct({
206
206
  /**
207
207
  * Regex pattern for strings.
208
208
  */
209
- pattern: Schema.optional(Schema.String.pipe(FormatAnnotation.set(FormatEnum.Regex))),
209
+ pattern: Schema.optional(Schema.String.pipe(FormatAnnotation.set(TypeFormat.Regex))),
210
210
 
211
211
  /**
212
212
  * Serialized from {@link FormatAnnotationId}.
@@ -337,6 +337,7 @@ export const JsonSchemaFields = Object.keys(_JsonSchemaType.fields);
337
337
  /**
338
338
  * https://json-schema.org/draft-07/schema
339
339
  */
340
+ // TODO(burdon): Reconcile with @effect/Schema/JSONSchema
340
341
  export interface JsonSchemaType extends Schema.Schema.Type<Schema.mutable<typeof _JsonSchemaType>> {}
341
342
 
342
343
  export const JsonSchemaType: Schema.Schema<JsonSchemaType> = _JsonSchemaType.pipe(Schema.mutable);
@@ -11,22 +11,22 @@ import { type JsonProp, findAnnotation } from '@dxos/effect';
11
11
  import { ObjectId } from '@dxos/keys';
12
12
  import { log } from '@dxos/log';
13
13
 
14
- import { Type } from '../..';
15
- import { Testing, prepareAstForCompare } from '../../testing';
14
+ import { TestSchema, prepareAstForCompare } from '../../testing';
15
+ import * as Type from '../../Type';
16
16
  import {
17
- EntityKind,
18
17
  FieldLookupAnnotationId,
19
18
  GeneratorAnnotation,
20
19
  LabelAnnotation,
21
20
  PropertyMeta,
22
21
  getTypeAnnotation,
23
22
  getTypeIdentifierAnnotation,
24
- } from '../ast';
25
- import { Email, FormatAnnotation, FormatEnum } from '../formats';
23
+ } from '../annotations';
24
+ import { EchoObjectSchema } from '../entities';
25
+ import { Email, FormatAnnotation, TypeFormat } from '../formats';
26
26
  import { JsonSchemaType, getNormalizedEchoAnnotations, getSchemaProperty, setSchemaProperty } from '../json-schema';
27
- import { EchoObject } from '../object';
28
27
  import { Ref, createSchemaReference, getReferenceAst, getSchemaReference } from '../ref';
29
- import { StoredSchema } from '../schema';
28
+ import { PersistentSchema } from '../schema';
29
+ import { EntityKind } from '../types';
30
30
 
31
31
  import { toEffectSchema, toJsonSchema } from './json-schema';
32
32
 
@@ -159,9 +159,9 @@ describe('effect-to-json', () => {
159
159
  });
160
160
 
161
161
  test('annotations', () => {
162
- const TestSchema = Schema.Struct({
162
+ const TempSchema = Schema.Struct({
163
163
  name: Schema.String.annotations({ description: 'Person name', title: 'Name' }),
164
- email: Schema.String.pipe(FormatAnnotation.set(FormatEnum.Email)).annotations({
164
+ email: Schema.String.pipe(FormatAnnotation.set(TypeFormat.Email)).annotations({
165
165
  description: 'Email address',
166
166
  }),
167
167
  }).pipe(
@@ -170,7 +170,8 @@ describe('effect-to-json', () => {
170
170
  version: '0.1.0',
171
171
  }),
172
172
  );
173
- const jsonSchema = toJsonSchema(TestSchema);
173
+
174
+ const jsonSchema = toJsonSchema(TempSchema);
174
175
  expect(jsonSchema).to.deep.eq({
175
176
  $schema: 'http://json-schema.org/draft-07/schema#',
176
177
  $id: 'dxn:type:example.com/type/Person',
@@ -197,8 +198,16 @@ describe('effect-to-json', () => {
197
198
  });
198
199
 
199
200
  test('handles suspend -- Contact schema serialization', () => {
200
- const schema = toJsonSchema(Testing.Person);
201
- expect(Object.keys(schema.properties!)).toEqual(['id', 'name', 'username', 'email', 'tasks', 'address']);
201
+ const schema = toJsonSchema(TestSchema.Person);
202
+ expect(Object.keys(schema.properties!)).toEqual([
203
+ 'id',
204
+ 'name',
205
+ 'username',
206
+ 'email',
207
+ 'tasks',
208
+ 'employer',
209
+ 'address',
210
+ ]);
202
211
  });
203
212
 
204
213
  test('reference property by ref', () => {
@@ -289,8 +298,8 @@ describe('effect-to-json', () => {
289
298
  expect(typename).to.eq(Organization.typename);
290
299
  });
291
300
 
292
- test('serialize circular schema (StoredSchema)', () => {
293
- const jsonSchema = toJsonSchema(StoredSchema);
301
+ test('serialize circular schema (PersistentSchema)', () => {
302
+ const jsonSchema = toJsonSchema(PersistentSchema);
294
303
  expect(Object.keys(jsonSchema.properties!).length).toBeGreaterThan(0);
295
304
 
296
305
  // TODO(dmaretskyi): Currently unable to deserialize.
@@ -313,7 +322,7 @@ describe('effect-to-json', () => {
313
322
 
314
323
  test('reference with title annotation', () => {
315
324
  const schema = Schema.Struct({
316
- contact: Ref(Testing.Person).annotations({ title: 'Custom Title' }),
325
+ contact: Ref(TestSchema.Person).annotations({ title: 'Custom Title' }),
317
326
  });
318
327
 
319
328
  // log.info('schema before', { ast: schema.ast });
@@ -336,13 +345,13 @@ describe('effect-to-json', () => {
336
345
  });
337
346
 
338
347
  test('relation schema', () => {
339
- const schema = Testing.HasManager;
348
+ const schema = TestSchema.EmployedBy;
340
349
  const jsonSchema = toJsonSchema(schema);
341
350
  expect(jsonSchema).toEqual({
342
- $id: 'dxn:type:example.com/type/HasManager',
351
+ $id: 'dxn:type:example.com/type/EmployedBy',
343
352
  $schema: 'http://json-schema.org/draft-07/schema#',
344
353
  entityKind: 'relation',
345
- typename: 'example.com/type/HasManager',
354
+ typename: 'example.com/type/EmployedBy',
346
355
  version: '0.1.0',
347
356
  relationSource: {
348
357
  // TODO(dmaretskyi): Should those point to specific schema version?
@@ -350,19 +359,22 @@ describe('effect-to-json', () => {
350
359
  },
351
360
  relationTarget: {
352
361
  // TODO(dmaretskyi): Should those point to specific schema version?
353
- $ref: 'dxn:type:example.com/type/Person',
362
+ $ref: 'dxn:type:example.com/type/Organization',
354
363
  },
355
364
  type: 'object',
356
365
  properties: {
357
366
  id: {
358
367
  type: 'string',
359
368
  },
369
+ role: {
370
+ type: 'string',
371
+ },
360
372
  since: {
361
373
  type: 'string',
362
374
  },
363
375
  },
364
- propertyOrder: ['since', 'id'],
365
- required: ['id'],
376
+ propertyOrder: ['role', 'since', 'id'],
377
+ required: ['role', 'id'],
366
378
  additionalProperties: false,
367
379
  });
368
380
  });
@@ -372,7 +384,7 @@ describe('effect-to-json', () => {
372
384
  id: ObjectId,
373
385
  name: Schema.String,
374
386
  }).pipe(
375
- EchoObject({
387
+ EchoObjectSchema({
376
388
  typename: 'example.com/type/Organization',
377
389
  version: '0.1.0',
378
390
  }),
@@ -498,7 +510,7 @@ describe('json-to-effect', () => {
498
510
  object: Schema.Struct({ id: Schema.String, field: Ref(Organization) }),
499
511
  echoObject: Ref(Organization),
500
512
  echoObjectArray: Schema.Array(Ref(Organization)),
501
- email: Schema.String.pipe(FormatAnnotation.set(FormatEnum.Email)),
513
+ email: Schema.String.pipe(FormatAnnotation.set(TypeFormat.Email)),
502
514
  null: Schema.Null,
503
515
  } as const;
504
516
 
@@ -570,8 +582,8 @@ describe('json-to-effect', () => {
570
582
  });
571
583
 
572
584
  test('symbol annotations get compared', () => {
573
- const schema1 = Schema.String.pipe(FormatAnnotation.set(FormatEnum.Email));
574
- const schema2 = Schema.String.pipe(FormatAnnotation.set(FormatEnum.Currency));
585
+ const schema1 = Schema.String.pipe(FormatAnnotation.set(TypeFormat.Email));
586
+ const schema2 = Schema.String.pipe(FormatAnnotation.set(TypeFormat.Currency));
575
587
  expect(prepareAstForCompare(schema1.ast)).not.to.deep.eq(prepareAstForCompare(schema2.ast));
576
588
  });
577
589
 
@@ -586,7 +598,7 @@ describe('json-to-effect', () => {
586
598
  });
587
599
 
588
600
  test('relation schema roundtrip', () => {
589
- const schema = Testing.HasManager;
601
+ const schema = TestSchema.HasManager;
590
602
  const jsonSchema = toJsonSchema(schema);
591
603
  const effectSchema = toEffectSchema(jsonSchema);
592
604
  expect(prepareAstForCompare(effectSchema.ast)).to.deep.eq(prepareAstForCompare(schema.ast));
@@ -689,10 +701,8 @@ describe('json-to-effect', () => {
689
701
  });
690
702
 
691
703
  test('schema with optional referece', () => {
692
- const TestSchema = Schema.Struct({
693
- contact: Schema.optional(Ref(Testing.Person)),
694
- });
695
- const jsonSchema = toJsonSchema(TestSchema);
704
+ const TempSchema = Schema.Struct({ contact: Schema.optional(Ref(TestSchema.Person)) });
705
+ const jsonSchema = toJsonSchema(TempSchema);
696
706
  expect(jsonSchema).toMatchInlineSnapshot(`
697
707
  {
698
708
  "$schema": "http://json-schema.org/draft-07/schema#",
@@ -718,13 +728,13 @@ describe('json-to-effect', () => {
718
728
  `);
719
729
 
720
730
  const effectSchema = toEffectSchema(jsonSchema);
721
- expect(prepareAstForCompare(effectSchema.ast)).to.deep.eq(prepareAstForCompare(TestSchema.ast));
731
+ expect(prepareAstForCompare(effectSchema.ast)).to.deep.eq(prepareAstForCompare(TempSchema.ast));
722
732
  });
723
733
 
724
734
  test('object nested inside another struct', () => {
725
735
  const Contact = Schema.Struct({
726
736
  name: Schema.String,
727
- }).pipe(EchoObject({ typename: 'example.com/type/Person', version: '0.1.0' }));
737
+ }).pipe(EchoObjectSchema({ typename: 'example.com/type/Person', version: '0.1.0' }));
728
738
  const input = Schema.Struct({
729
739
  contact: Contact,
730
740
  });
@@ -776,7 +786,7 @@ describe('json-to-effect', () => {
776
786
 
777
787
  describe('reference', () => {
778
788
  test('reference annotation', () => {
779
- const schema = Ref(Testing.Person);
789
+ const schema = Ref(TestSchema.Person);
780
790
  const jsonSchema = toJsonSchema(schema);
781
791
  expect(jsonSchema).toEqual({
782
792
  $id: '/schemas/echo/ref',
@@ -792,7 +802,7 @@ describe('reference', () => {
792
802
  });
793
803
 
794
804
  test('title annotation', () => {
795
- const schema = Ref(Testing.Person).annotations({ title: 'My custom title' });
805
+ const schema = Ref(TestSchema.Person).annotations({ title: 'My custom title' });
796
806
  const jsonSchema = toJsonSchema(schema);
797
807
  expect(jsonSchema).toEqual({
798
808
  $schema: 'http://json-schema.org/draft-07/schema#',
@@ -813,7 +823,7 @@ describe('reference', () => {
813
823
  });
814
824
 
815
825
  test('description annotation', () => {
816
- const schema = Ref(Testing.Person).annotations({ description: 'My custom description' });
826
+ const schema = Ref(TestSchema.Person).annotations({ description: 'My custom description' });
817
827
  const jsonSchema = toJsonSchema(schema);
818
828
  expect(jsonSchema).toEqual({
819
829
  $schema: 'http://json-schema.org/draft-07/schema#',
@@ -837,13 +847,13 @@ describe('reference', () => {
837
847
  });
838
848
 
839
849
  test('serialize and deserialize', () => {
840
- const schema = Ref(Testing.Person);
850
+ const schema = Ref(TestSchema.Person);
841
851
  const jsonSchema = toJsonSchema(schema);
842
852
  const deserializedSchema = toEffectSchema(jsonSchema);
843
853
  const refAst = getReferenceAst(deserializedSchema.ast);
844
854
  expect(refAst).toEqual({
845
- typename: Testing.Person.typename,
846
- version: Testing.Person.version,
855
+ typename: TestSchema.Person.typename,
856
+ version: TestSchema.Person.version,
847
857
  });
848
858
  });
849
859
  });
@@ -17,19 +17,24 @@ import { DXN, ObjectId } from '@dxos/keys';
17
17
  import { log } from '@dxos/log';
18
18
  import { clearUndefined, orderKeys, removeProperties } from '@dxos/util';
19
19
 
20
- import { type TypeAnnotation, TypeAnnotationId, TypeIdentifierAnnotationId } from '../ast';
21
- import { EntityKind, EntityKindSchema } from '../ast';
20
+ import {
21
+ type TypeAnnotation,
22
+ TypeAnnotationId,
23
+ TypeIdentifierAnnotationId,
24
+ makeTypeJsonSchemaAnnotation,
25
+ } from '../annotations';
26
+ import { Expando } from '../entities';
27
+ import { type JsonSchemaReferenceInfo, Ref, createEchoReferenceSchema } from '../ref';
28
+ import { EntityKind, EntityKindSchema } from '../types';
29
+
30
+ import { CustomAnnotations, DecodedAnnotations, EchoAnnotations } from './annotations';
22
31
  import {
23
32
  ECHO_ANNOTATIONS_NS_DEPRECATED_KEY,
24
33
  ECHO_ANNOTATIONS_NS_KEY,
25
34
  type JsonSchemaEchoAnnotations,
26
35
  type JsonSchemaType,
27
36
  getNormalizedEchoAnnotations,
28
- } from '../json-schema';
29
- import { Expando, makeTypeJsonSchemaAnnotation } from '../object';
30
- import { type JsonSchemaReferenceInfo, Ref, createEchoReferenceSchema } from '../ref';
31
-
32
- import { CustomAnnotations, DecodedAnnotations, EchoAnnotations } from './annotations';
37
+ } from './json-schema-type';
33
38
 
34
39
  // TODO(burdon): Are these values stored (can they be changed?)
35
40
  export enum PropType {
@@ -71,8 +76,11 @@ export type JsonSchemaOptions = {
71
76
 
72
77
  /**
73
78
  * Convert effect schema to JSON Schema.
79
+ * NOTE: This handles custom annotations.
74
80
  * @param schema
75
81
  */
82
+ // TODO(burdon): Reconcile with possibly extending @effect/Schema/JSONSchema
83
+ // We add additional propertyOrder (but the object properties ARE ordered); and type "string" for literals.
76
84
  export const toJsonSchema = (schema: Schema.Schema.All, options: JsonSchemaOptions = {}): JsonSchemaType => {
77
85
  assertArgument(Schema.isSchema(schema), 'schema');
78
86
  let jsonSchema = _toJsonSchemaAST(schema.ast);
@@ -346,6 +354,7 @@ const refToEffectSchema = (root: any): Schema.Schema.AnyNoContext => {
346
354
  if (!('reference' in root)) {
347
355
  return Ref(Expando);
348
356
  }
357
+
349
358
  const reference: JsonSchemaReferenceInfo = root.reference;
350
359
  if (typeof reference !== 'object') {
351
360
  throw new Error('Invalid reference field in ref schema');