@dxos/echo 0.8.4-main.e8ec1fe → 0.8.4-main.ef1bc66f44

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 (533) hide show
  1. package/README.md +1 -2
  2. package/dist/lib/neutral/Annotation.mjs +35 -0
  3. package/dist/lib/neutral/Database.mjs +45 -0
  4. package/dist/lib/neutral/Entity.mjs +51 -0
  5. package/dist/lib/neutral/Err.mjs +10 -0
  6. package/dist/lib/neutral/Filter.mjs +61 -0
  7. package/dist/lib/neutral/Format.mjs +66 -0
  8. package/dist/lib/neutral/JsonSchema.mjs +19 -0
  9. package/dist/lib/neutral/JsonSchema.mjs.map +7 -0
  10. package/dist/lib/neutral/Key.mjs +12 -0
  11. package/dist/lib/neutral/Key.mjs.map +7 -0
  12. package/dist/lib/neutral/Obj.mjs +96 -0
  13. package/dist/lib/neutral/Obj.mjs.map +7 -0
  14. package/dist/lib/neutral/Order.mjs +12 -0
  15. package/dist/lib/neutral/Order.mjs.map +7 -0
  16. package/dist/lib/neutral/Query.mjs +26 -0
  17. package/dist/lib/neutral/Query.mjs.map +7 -0
  18. package/dist/lib/neutral/QueryResult.mjs +2 -0
  19. package/dist/lib/neutral/QueryResult.mjs.map +7 -0
  20. package/dist/lib/neutral/Ref.mjs +22 -0
  21. package/dist/lib/neutral/Ref.mjs.map +7 -0
  22. package/dist/lib/neutral/Relation.mjs +84 -0
  23. package/dist/lib/neutral/Relation.mjs.map +7 -0
  24. package/dist/lib/neutral/SchemaRegistry.mjs +2 -0
  25. package/dist/lib/neutral/SchemaRegistry.mjs.map +7 -0
  26. package/dist/lib/neutral/Tag.mjs +25 -0
  27. package/dist/lib/neutral/Tag.mjs.map +7 -0
  28. package/dist/lib/neutral/Type.mjs +47 -0
  29. package/dist/lib/neutral/Type.mjs.map +7 -0
  30. package/dist/lib/neutral/chunk-2AF5GMG6.mjs +171 -0
  31. package/dist/lib/neutral/chunk-2AF5GMG6.mjs.map +7 -0
  32. package/dist/lib/neutral/chunk-4L6DOFXP.mjs +7 -0
  33. package/dist/lib/neutral/chunk-4L6DOFXP.mjs.map +7 -0
  34. package/dist/lib/neutral/chunk-7WE7SBA2.mjs +402 -0
  35. package/dist/lib/neutral/chunk-7WE7SBA2.mjs.map +7 -0
  36. package/dist/lib/neutral/chunk-ANHVGJI4.mjs +21 -0
  37. package/dist/lib/neutral/chunk-ANHVGJI4.mjs.map +7 -0
  38. package/dist/lib/neutral/chunk-DLPC7DHQ.mjs +56 -0
  39. package/dist/lib/neutral/chunk-DLPC7DHQ.mjs.map +7 -0
  40. package/dist/lib/neutral/chunk-EBUAT5ID.mjs +229 -0
  41. package/dist/lib/neutral/chunk-EBUAT5ID.mjs.map +7 -0
  42. package/dist/lib/neutral/chunk-J5LGTIGS.mjs +10 -0
  43. package/dist/lib/neutral/chunk-J5LGTIGS.mjs.map +7 -0
  44. package/dist/lib/neutral/chunk-K5K3Z62A.mjs +40 -0
  45. package/dist/lib/neutral/chunk-K5K3Z62A.mjs.map +7 -0
  46. package/dist/lib/neutral/chunk-KB7RIVLK.mjs +67 -0
  47. package/dist/lib/neutral/chunk-KB7RIVLK.mjs.map +7 -0
  48. package/dist/lib/neutral/chunk-LKFNEFHF.mjs +130 -0
  49. package/dist/lib/neutral/chunk-LKFNEFHF.mjs.map +7 -0
  50. package/dist/lib/neutral/chunk-MTEHHY62.mjs +251 -0
  51. package/dist/lib/neutral/chunk-MTEHHY62.mjs.map +7 -0
  52. package/dist/lib/neutral/chunk-N2QNHMT5.mjs +73 -0
  53. package/dist/lib/neutral/chunk-N2QNHMT5.mjs.map +7 -0
  54. package/dist/lib/neutral/chunk-OMUPQMLR.mjs +7 -0
  55. package/dist/lib/neutral/chunk-OMUPQMLR.mjs.map +7 -0
  56. package/dist/lib/neutral/chunk-QARLJVDB.mjs +23 -0
  57. package/dist/lib/neutral/chunk-QARLJVDB.mjs.map +7 -0
  58. package/dist/lib/neutral/chunk-RIMHNJ3E.mjs +296 -0
  59. package/dist/lib/neutral/chunk-RIMHNJ3E.mjs.map +7 -0
  60. package/dist/lib/neutral/chunk-ROKO4RKJ.mjs +42 -0
  61. package/dist/lib/neutral/chunk-ROKO4RKJ.mjs.map +7 -0
  62. package/dist/lib/neutral/chunk-RPB6V4BE.mjs +38 -0
  63. package/dist/lib/neutral/chunk-RPB6V4BE.mjs.map +7 -0
  64. package/dist/lib/neutral/chunk-TLGNKUUG.mjs +3905 -0
  65. package/dist/lib/neutral/chunk-TLGNKUUG.mjs.map +7 -0
  66. package/dist/lib/neutral/chunk-TQT6WTIJ.mjs +142 -0
  67. package/dist/lib/neutral/chunk-TQT6WTIJ.mjs.map +7 -0
  68. package/dist/lib/neutral/chunk-VUQGRDRI.mjs +97 -0
  69. package/dist/lib/neutral/chunk-VUQGRDRI.mjs.map +7 -0
  70. package/dist/lib/neutral/chunk-X2MPMYYN.mjs +13 -0
  71. package/dist/lib/neutral/chunk-X2MPMYYN.mjs.map +7 -0
  72. package/dist/lib/neutral/chunk-XAJMXQ4H.mjs +43 -0
  73. package/dist/lib/neutral/chunk-XAJMXQ4H.mjs.map +7 -0
  74. package/dist/lib/neutral/chunk-ZAHWXGK4.mjs +287 -0
  75. package/dist/lib/neutral/chunk-ZAHWXGK4.mjs.map +7 -0
  76. package/dist/lib/neutral/index.mjs +84 -0
  77. package/dist/lib/neutral/index.mjs.map +7 -0
  78. package/dist/lib/{node-esm → neutral}/internal/index.mjs +251 -125
  79. package/dist/lib/neutral/internal/index.mjs.map +7 -0
  80. package/dist/lib/neutral/meta.json +1 -0
  81. package/dist/lib/neutral/testing/index.mjs +366 -0
  82. package/dist/lib/neutral/testing/index.mjs.map +7 -0
  83. package/dist/types/src/Annotation.d.ts +24 -0
  84. package/dist/types/src/Annotation.d.ts.map +1 -0
  85. package/dist/types/src/Database.d.ts +216 -0
  86. package/dist/types/src/Database.d.ts.map +1 -0
  87. package/dist/types/src/Entity.d.ts +142 -0
  88. package/dist/types/src/Entity.d.ts.map +1 -0
  89. package/dist/types/src/Entity.test.d.ts +2 -0
  90. package/dist/types/src/Entity.test.d.ts.map +1 -0
  91. package/dist/types/src/{errors.d.ts → Err.d.ts} +13 -17
  92. package/dist/types/src/Err.d.ts.map +1 -0
  93. package/dist/types/src/Filter.d.ts +120 -0
  94. package/dist/types/src/Filter.d.ts.map +1 -0
  95. package/dist/types/src/Format.d.ts +4 -0
  96. package/dist/types/src/Format.d.ts.map +1 -0
  97. package/dist/types/src/Hypergraph.d.ts +60 -0
  98. package/dist/types/src/Hypergraph.d.ts.map +1 -0
  99. package/dist/types/src/JsonSchema.d.ts +9 -0
  100. package/dist/types/src/JsonSchema.d.ts.map +1 -0
  101. package/dist/types/src/Key.d.ts +1 -0
  102. package/dist/types/src/Key.d.ts.map +1 -1
  103. package/dist/types/src/Obj.d.ts +325 -99
  104. package/dist/types/src/Obj.d.ts.map +1 -1
  105. package/dist/types/src/Obj.test.d.ts +2 -0
  106. package/dist/types/src/Obj.test.d.ts.map +1 -0
  107. package/dist/types/src/Order.d.ts +16 -0
  108. package/dist/types/src/Order.d.ts.map +1 -0
  109. package/dist/types/src/Query.d.ts +125 -0
  110. package/dist/types/src/Query.d.ts.map +1 -0
  111. package/dist/types/src/Query.test.d.ts +2 -0
  112. package/dist/types/src/Query.test.d.ts.map +1 -0
  113. package/dist/types/src/QueryResult.d.ts +80 -0
  114. package/dist/types/src/QueryResult.d.ts.map +1 -0
  115. package/dist/types/src/Ref.d.ts +13 -11
  116. package/dist/types/src/Ref.d.ts.map +1 -1
  117. package/dist/types/src/Relation.d.ts +243 -23
  118. package/dist/types/src/Relation.d.ts.map +1 -1
  119. package/dist/types/src/Relation.test.d.ts +2 -0
  120. package/dist/types/src/Relation.test.d.ts.map +1 -0
  121. package/dist/types/src/SchemaRegistry.d.ts +84 -0
  122. package/dist/types/src/SchemaRegistry.d.ts.map +1 -0
  123. package/dist/types/src/Tag.d.ts +7 -7
  124. package/dist/types/src/Tag.d.ts.map +1 -1
  125. package/dist/types/src/Type.d.ts +225 -72
  126. package/dist/types/src/Type.d.ts.map +1 -1
  127. package/dist/types/src/Type.test.d.ts +2 -0
  128. package/dist/types/src/Type.test.d.ts.map +1 -0
  129. package/dist/types/src/hierarchy.test.d.ts +2 -0
  130. package/dist/types/src/hierarchy.test.d.ts.map +1 -0
  131. package/dist/types/src/index.d.ts +14 -5
  132. package/dist/types/src/index.d.ts.map +1 -1
  133. package/dist/types/src/internal/annotations/annotations.d.ts +177 -0
  134. package/dist/types/src/internal/annotations/annotations.d.ts.map +1 -0
  135. package/dist/types/src/internal/annotations/annotations.test.d.ts.map +1 -0
  136. package/dist/types/src/internal/annotations/index.d.ts +3 -0
  137. package/dist/types/src/internal/annotations/index.d.ts.map +1 -0
  138. package/dist/types/src/internal/annotations/util.d.ts +39 -0
  139. package/dist/types/src/internal/annotations/util.d.ts.map +1 -0
  140. package/dist/types/src/internal/api/annotations.d.ts +23 -0
  141. package/dist/types/src/internal/api/annotations.d.ts.map +1 -0
  142. package/dist/types/src/internal/api/entity.d.ts +13 -0
  143. package/dist/types/src/internal/api/entity.d.ts.map +1 -0
  144. package/dist/types/src/internal/api/index.d.ts +15 -0
  145. package/dist/types/src/internal/api/index.d.ts.map +1 -0
  146. package/dist/types/src/internal/api/meta.d.ts +42 -0
  147. package/dist/types/src/internal/api/meta.d.ts.map +1 -0
  148. package/dist/types/src/internal/api/sorting.d.ts +24 -0
  149. package/dist/types/src/internal/api/sorting.d.ts.map +1 -0
  150. package/dist/types/src/internal/api/version.d.ts +42 -0
  151. package/dist/types/src/internal/api/version.d.ts.map +1 -0
  152. package/dist/types/src/internal/entities/entity.d.ts +20 -0
  153. package/dist/types/src/internal/entities/entity.d.ts.map +1 -0
  154. package/dist/types/src/internal/entities/index.d.ts +6 -0
  155. package/dist/types/src/internal/entities/index.d.ts.map +1 -0
  156. package/dist/types/src/internal/entities/model.d.ts +79 -0
  157. package/dist/types/src/internal/entities/model.d.ts.map +1 -0
  158. package/dist/types/src/internal/entities/object.d.ts +18 -0
  159. package/dist/types/src/internal/entities/object.d.ts.map +1 -0
  160. package/dist/types/src/internal/entities/relation.d.ts +62 -0
  161. package/dist/types/src/internal/entities/relation.d.ts.map +1 -0
  162. package/dist/types/src/internal/entities/util.d.ts +2 -0
  163. package/dist/types/src/internal/entities/util.d.ts.map +1 -0
  164. package/dist/types/src/internal/formats/format.d.ts +4 -2
  165. package/dist/types/src/internal/formats/format.d.ts.map +1 -1
  166. package/dist/types/src/internal/formats/select.d.ts +6 -4
  167. package/dist/types/src/internal/formats/select.d.ts.map +1 -1
  168. package/dist/types/src/internal/formats/string.d.ts +4 -0
  169. package/dist/types/src/internal/formats/string.d.ts.map +1 -1
  170. package/dist/types/src/internal/formats/types.d.ts +13 -9
  171. package/dist/types/src/internal/formats/types.d.ts.map +1 -1
  172. package/dist/types/src/internal/index.d.ts +7 -10
  173. package/dist/types/src/internal/index.d.ts.map +1 -1
  174. package/dist/types/src/internal/json-schema/annotations.d.ts.map +1 -0
  175. package/dist/types/src/internal/json-schema/effect-schema.test.d.ts.map +1 -0
  176. package/dist/types/src/internal/json-schema/index.d.ts +2 -0
  177. package/dist/types/src/internal/json-schema/index.d.ts.map +1 -1
  178. package/dist/types/src/internal/json-schema/json-schema-normalize.d.ts.map +1 -1
  179. package/dist/types/src/internal/json-schema/json-schema-type.d.ts +130 -29
  180. package/dist/types/src/internal/json-schema/json-schema-type.d.ts.map +1 -1
  181. package/dist/types/src/internal/{json → json-schema}/json-schema.d.ts +4 -2
  182. package/dist/types/src/internal/json-schema/json-schema.d.ts.map +1 -0
  183. package/dist/types/src/internal/json-schema/json-schema.test.d.ts.map +1 -0
  184. package/dist/types/src/internal/object/clone.d.ts +8 -0
  185. package/dist/types/src/internal/object/clone.d.ts.map +1 -0
  186. package/dist/types/src/internal/object/common.d.ts.map +1 -1
  187. package/dist/types/src/internal/object/{create.d.ts → create-object.d.ts} +9 -10
  188. package/dist/types/src/internal/object/create-object.d.ts.map +1 -0
  189. package/dist/types/src/internal/object/create-object.test.d.ts +2 -0
  190. package/dist/types/src/internal/object/create-object.test.d.ts.map +1 -0
  191. package/dist/types/src/internal/object/deleted.d.ts +2 -2
  192. package/dist/types/src/internal/object/deleted.d.ts.map +1 -1
  193. package/dist/types/src/internal/object/ids.d.ts.map +1 -1
  194. package/dist/types/src/internal/object/index.d.ts +6 -11
  195. package/dist/types/src/internal/object/index.d.ts.map +1 -1
  196. package/dist/types/src/internal/object/json-serializer.d.ts +14 -9
  197. package/dist/types/src/internal/object/json-serializer.d.ts.map +1 -1
  198. package/dist/types/src/internal/object/schema-validator.d.ts +1 -14
  199. package/dist/types/src/internal/object/schema-validator.d.ts.map +1 -1
  200. package/dist/types/src/internal/object/set-value.d.ts +7 -0
  201. package/dist/types/src/internal/object/set-value.d.ts.map +1 -0
  202. package/dist/types/src/internal/object/set-value.test.d.ts +2 -0
  203. package/dist/types/src/internal/object/set-value.test.d.ts.map +1 -0
  204. package/dist/types/src/internal/object/snapshot.d.ts +6 -0
  205. package/dist/types/src/internal/object/snapshot.d.ts.map +1 -0
  206. package/dist/types/src/internal/object/typed-object.d.ts +8 -14
  207. package/dist/types/src/internal/object/typed-object.d.ts.map +1 -1
  208. package/dist/types/src/internal/proxy/change-context.d.ts +55 -0
  209. package/dist/types/src/internal/proxy/change-context.d.ts.map +1 -0
  210. package/dist/types/src/internal/proxy/change.test.d.ts +2 -0
  211. package/dist/types/src/internal/proxy/change.test.d.ts.map +1 -0
  212. package/dist/types/src/internal/proxy/define-hidden-property.d.ts +5 -0
  213. package/dist/types/src/internal/proxy/define-hidden-property.d.ts.map +1 -0
  214. package/dist/types/src/internal/proxy/errors.d.ts +19 -0
  215. package/dist/types/src/internal/proxy/errors.d.ts.map +1 -0
  216. package/dist/types/src/internal/proxy/event-batch.d.ts +10 -0
  217. package/dist/types/src/internal/proxy/event-batch.d.ts.map +1 -0
  218. package/dist/types/src/internal/proxy/index.d.ts +14 -0
  219. package/dist/types/src/internal/proxy/index.d.ts.map +1 -0
  220. package/dist/types/src/internal/proxy/json-serializer.d.ts +6 -0
  221. package/dist/types/src/internal/proxy/json-serializer.d.ts.map +1 -0
  222. package/dist/types/src/internal/proxy/make-object.d.ts +14 -0
  223. package/dist/types/src/internal/proxy/make-object.d.ts.map +1 -0
  224. package/dist/types/src/internal/proxy/ownership.d.ts +57 -0
  225. package/dist/types/src/internal/proxy/ownership.d.ts.map +1 -0
  226. package/dist/types/src/internal/proxy/proxy-types.d.ts +18 -0
  227. package/dist/types/src/internal/proxy/proxy-types.d.ts.map +1 -0
  228. package/dist/types/src/internal/proxy/proxy-utils.d.ts +47 -0
  229. package/dist/types/src/internal/proxy/proxy-utils.d.ts.map +1 -0
  230. package/dist/types/src/internal/proxy/reactive-array.d.ts +8 -0
  231. package/dist/types/src/internal/proxy/reactive-array.d.ts.map +1 -0
  232. package/dist/types/src/internal/proxy/reactive.d.ts +39 -0
  233. package/dist/types/src/internal/proxy/reactive.d.ts.map +1 -0
  234. package/dist/types/src/internal/proxy/schema-validator.d.ts +15 -0
  235. package/dist/types/src/internal/proxy/schema-validator.d.ts.map +1 -0
  236. package/dist/types/src/internal/proxy/symbols.d.ts +3 -0
  237. package/dist/types/src/internal/proxy/symbols.d.ts.map +1 -0
  238. package/dist/types/src/internal/proxy/typed-handler.d.ts +16 -12
  239. package/dist/types/src/internal/proxy/typed-handler.d.ts.map +1 -1
  240. package/dist/types/src/internal/ref/ref-array.d.ts +4 -4
  241. package/dist/types/src/internal/ref/ref-array.d.ts.map +1 -1
  242. package/dist/types/src/internal/ref/ref.d.ts +43 -18
  243. package/dist/types/src/internal/ref/ref.d.ts.map +1 -1
  244. package/dist/types/src/internal/schema/compose.d.ts +7 -0
  245. package/dist/types/src/internal/schema/compose.d.ts.map +1 -0
  246. package/dist/types/src/internal/schema/compose.test.d.ts.map +1 -0
  247. package/dist/types/src/internal/schema/echo-schema.d.ts +25 -12
  248. package/dist/types/src/internal/schema/echo-schema.d.ts.map +1 -1
  249. package/dist/types/src/internal/schema/index.d.ts +1 -4
  250. package/dist/types/src/internal/schema/index.d.ts.map +1 -1
  251. package/dist/types/src/internal/schema/persistent-schema.d.ts +20 -0
  252. package/dist/types/src/internal/schema/persistent-schema.d.ts.map +1 -0
  253. package/dist/types/src/internal/types/base.d.ts +26 -0
  254. package/dist/types/src/internal/types/base.d.ts.map +1 -0
  255. package/dist/types/src/internal/types/entity.d.ts +37 -0
  256. package/dist/types/src/internal/types/entity.d.ts.map +1 -0
  257. package/dist/types/src/internal/types/index.d.ts +5 -2
  258. package/dist/types/src/internal/types/index.d.ts.map +1 -1
  259. package/dist/types/src/internal/{object → types}/meta.d.ts +17 -16
  260. package/dist/types/src/internal/types/meta.d.ts.map +1 -0
  261. package/dist/types/src/internal/types/typename.d.ts +21 -0
  262. package/dist/types/src/internal/types/typename.d.ts.map +1 -0
  263. package/dist/types/src/internal/{object → types}/version.d.ts +3 -2
  264. package/dist/types/src/internal/types/version.d.ts.map +1 -0
  265. package/dist/types/src/{test → testing}/api.test.d.ts.map +1 -1
  266. package/dist/types/src/testing/index.d.ts +3 -3
  267. package/dist/types/src/testing/index.d.ts.map +1 -1
  268. package/dist/types/src/testing/test-data.d.ts +18 -0
  269. package/dist/types/src/testing/test-data.d.ts.map +1 -0
  270. package/dist/types/src/testing/test-schema.d.ts +303 -0
  271. package/dist/types/src/testing/test-schema.d.ts.map +1 -0
  272. package/dist/types/src/testing/util.d.ts +21 -0
  273. package/dist/types/src/testing/util.d.ts.map +1 -0
  274. package/dist/types/tsconfig.tsbuildinfo +1 -1
  275. package/package.json +101 -65
  276. package/src/Annotation.ts +45 -0
  277. package/src/Database.ts +353 -0
  278. package/src/Entity.test.ts +22 -0
  279. package/src/Entity.ts +217 -0
  280. package/src/{errors.ts → Err.ts} +2 -2
  281. package/src/Filter.ts +376 -0
  282. package/src/Format.ts +9 -0
  283. package/src/Hypergraph.ts +74 -0
  284. package/src/JsonSchema.ts +16 -0
  285. package/src/Key.ts +3 -0
  286. package/src/Obj.test.ts +412 -0
  287. package/src/Obj.ts +489 -289
  288. package/src/Order.ts +44 -0
  289. package/src/Query.test.ts +465 -0
  290. package/src/Query.ts +324 -0
  291. package/src/QueryResult.ts +106 -0
  292. package/src/Ref.ts +26 -9
  293. package/src/Relation.test.ts +82 -0
  294. package/src/Relation.ts +414 -61
  295. package/src/SchemaRegistry.ts +105 -0
  296. package/src/Tag.ts +3 -2
  297. package/src/Type.test.ts +52 -0
  298. package/src/Type.ts +361 -114
  299. package/src/hierarchy.test.ts +33 -0
  300. package/src/index.ts +15 -6
  301. package/src/internal/README.md +102 -0
  302. package/src/internal/{ast → annotations}/annotations.test.ts +18 -20
  303. package/src/internal/annotations/annotations.ts +487 -0
  304. package/src/internal/annotations/index.ts +6 -0
  305. package/src/internal/annotations/util.ts +85 -0
  306. package/src/internal/api/annotations.ts +60 -0
  307. package/src/internal/api/entity.ts +29 -0
  308. package/src/internal/api/index.ts +19 -0
  309. package/src/internal/api/meta.ts +88 -0
  310. package/src/internal/api/sorting.ts +53 -0
  311. package/src/internal/api/version.ts +96 -0
  312. package/src/internal/entities/entity.ts +126 -0
  313. package/src/internal/entities/index.ts +9 -0
  314. package/src/internal/entities/model.ts +138 -0
  315. package/src/internal/entities/object.ts +58 -0
  316. package/src/internal/entities/relation.ts +171 -0
  317. package/src/internal/entities/util.ts +33 -0
  318. package/src/internal/formats/date.test.ts +1 -1
  319. package/src/internal/formats/date.ts +5 -5
  320. package/src/internal/formats/format.test.ts +6 -6
  321. package/src/internal/formats/format.ts +8 -6
  322. package/src/internal/formats/number.ts +5 -5
  323. package/src/internal/formats/object.ts +4 -4
  324. package/src/internal/formats/select.ts +6 -4
  325. package/src/internal/formats/string.ts +14 -9
  326. package/src/internal/formats/types.ts +53 -42
  327. package/src/internal/index.ts +30 -13
  328. package/src/internal/{json → json-schema}/annotations.ts +1 -1
  329. package/src/internal/json-schema/index.ts +2 -0
  330. package/src/internal/json-schema/json-schema-normalize.ts +4 -2
  331. package/src/internal/json-schema/json-schema-type.ts +35 -35
  332. package/src/internal/{json → json-schema}/json-schema.test.ts +67 -55
  333. package/src/internal/{json → json-schema}/json-schema.ts +27 -14
  334. package/src/internal/object/clone.ts +48 -0
  335. package/src/internal/object/common.ts +3 -4
  336. package/src/internal/object/{create.test.ts → create-object.test.ts} +30 -32
  337. package/src/internal/object/{create.ts → create-object.ts} +35 -36
  338. package/src/internal/object/deleted.ts +6 -6
  339. package/src/internal/object/ids.ts +1 -1
  340. package/src/internal/object/index.ts +6 -11
  341. package/src/internal/object/inspect.ts +5 -7
  342. package/src/internal/object/json-serializer.test.ts +36 -37
  343. package/src/internal/object/json-serializer.ts +74 -102
  344. package/src/internal/object/schema-validator.test.ts +3 -7
  345. package/src/internal/object/schema-validator.ts +2 -237
  346. package/src/internal/object/set-value.test.ts +281 -0
  347. package/src/internal/object/set-value.ts +165 -0
  348. package/src/internal/object/snapshot.ts +93 -0
  349. package/src/internal/object/typed-object.test.ts +11 -11
  350. package/src/internal/object/typed-object.ts +8 -66
  351. package/src/internal/proxy/change-context.ts +138 -0
  352. package/src/internal/proxy/change.test.ts +519 -0
  353. package/src/internal/proxy/define-hidden-property.ts +14 -0
  354. package/src/internal/proxy/errors.ts +42 -0
  355. package/src/internal/proxy/event-batch.ts +44 -0
  356. package/src/internal/proxy/handler.test.ts +51 -91
  357. package/src/internal/proxy/index.ts +17 -0
  358. package/src/internal/proxy/json-serializer.ts +87 -0
  359. package/src/internal/proxy/make-object.ts +106 -0
  360. package/src/internal/proxy/ownership.ts +253 -0
  361. package/src/internal/proxy/proxy-types.ts +23 -0
  362. package/src/internal/proxy/proxy-utils.ts +150 -0
  363. package/src/internal/proxy/reactive-array.ts +71 -0
  364. package/src/internal/proxy/reactive.ts +69 -0
  365. package/src/internal/proxy/schema-validator.ts +244 -0
  366. package/src/internal/proxy/schema.test.ts +27 -18
  367. package/src/internal/proxy/symbols.ts +7 -0
  368. package/src/internal/proxy/typed-handler.test.ts +260 -48
  369. package/src/internal/proxy/typed-handler.ts +280 -58
  370. package/src/internal/proxy/typed-object.test.ts +53 -37
  371. package/src/internal/ref/ref-array.ts +4 -4
  372. package/src/internal/ref/ref.test.ts +9 -8
  373. package/src/internal/ref/ref.ts +107 -56
  374. package/src/internal/{projection → schema}/compose.test.ts +8 -9
  375. package/src/internal/{projection → schema}/compose.ts +13 -8
  376. package/src/internal/schema/echo-schema.ts +74 -33
  377. package/src/internal/schema/index.ts +1 -4
  378. package/src/internal/schema/manipulation.ts +1 -1
  379. package/src/internal/schema/persistent-schema.ts +28 -0
  380. package/src/internal/types/base.ts +43 -0
  381. package/src/internal/types/entity.ts +54 -0
  382. package/src/internal/types/index.ts +5 -2
  383. package/src/internal/types/meta.ts +65 -0
  384. package/src/internal/types/typename.ts +55 -0
  385. package/src/internal/types/version.ts +20 -0
  386. package/src/testing/api.test.ts +126 -0
  387. package/src/testing/index.ts +3 -3
  388. package/src/testing/test-data.ts +130 -0
  389. package/src/testing/test-schema.ts +238 -0
  390. package/src/testing/util.ts +85 -0
  391. package/dist/lib/browser/chunk-BIDAASFK.mjs +0 -3727
  392. package/dist/lib/browser/chunk-BIDAASFK.mjs.map +0 -7
  393. package/dist/lib/browser/chunk-ZDLCWGEW.mjs +0 -410
  394. package/dist/lib/browser/chunk-ZDLCWGEW.mjs.map +0 -7
  395. package/dist/lib/browser/chunk-ZFRJKT4A.mjs +0 -585
  396. package/dist/lib/browser/chunk-ZFRJKT4A.mjs.map +0 -7
  397. package/dist/lib/browser/index.mjs +0 -35
  398. package/dist/lib/browser/internal/index.mjs +0 -336
  399. package/dist/lib/browser/meta.json +0 -1
  400. package/dist/lib/browser/query/index.mjs +0 -13
  401. package/dist/lib/browser/testing/index.mjs +0 -267
  402. package/dist/lib/browser/testing/index.mjs.map +0 -7
  403. package/dist/lib/node-esm/chunk-3SVRRCUU.mjs +0 -3727
  404. package/dist/lib/node-esm/chunk-3SVRRCUU.mjs.map +0 -7
  405. package/dist/lib/node-esm/chunk-CGDHRZWH.mjs +0 -585
  406. package/dist/lib/node-esm/chunk-CGDHRZWH.mjs.map +0 -7
  407. package/dist/lib/node-esm/chunk-HWS6VBQC.mjs +0 -410
  408. package/dist/lib/node-esm/chunk-HWS6VBQC.mjs.map +0 -7
  409. package/dist/lib/node-esm/index.mjs +0 -35
  410. package/dist/lib/node-esm/meta.json +0 -1
  411. package/dist/lib/node-esm/query/index.mjs +0 -13
  412. package/dist/lib/node-esm/testing/index.mjs +0 -267
  413. package/dist/lib/node-esm/testing/index.mjs.map +0 -7
  414. package/dist/types/src/errors.d.ts.map +0 -1
  415. package/dist/types/src/internal/ast/annotation-helper.d.ts +0 -8
  416. package/dist/types/src/internal/ast/annotation-helper.d.ts.map +0 -1
  417. package/dist/types/src/internal/ast/annotations.d.ts +0 -131
  418. package/dist/types/src/internal/ast/annotations.d.ts.map +0 -1
  419. package/dist/types/src/internal/ast/annotations.test.d.ts.map +0 -1
  420. package/dist/types/src/internal/ast/entity-kind.d.ts +0 -10
  421. package/dist/types/src/internal/ast/entity-kind.d.ts.map +0 -1
  422. package/dist/types/src/internal/ast/index.d.ts +0 -5
  423. package/dist/types/src/internal/ast/index.d.ts.map +0 -1
  424. package/dist/types/src/internal/ast/types.d.ts +0 -6
  425. package/dist/types/src/internal/ast/types.d.ts.map +0 -1
  426. package/dist/types/src/internal/json/annotations.d.ts.map +0 -1
  427. package/dist/types/src/internal/json/effect-schema.test.d.ts.map +0 -1
  428. package/dist/types/src/internal/json/index.d.ts +0 -2
  429. package/dist/types/src/internal/json/index.d.ts.map +0 -1
  430. package/dist/types/src/internal/json/json-schema.d.ts.map +0 -1
  431. package/dist/types/src/internal/json/json-schema.test.d.ts.map +0 -1
  432. package/dist/types/src/internal/object/accessors.d.ts +0 -37
  433. package/dist/types/src/internal/object/accessors.d.ts.map +0 -1
  434. package/dist/types/src/internal/object/create.d.ts.map +0 -1
  435. package/dist/types/src/internal/object/create.test.d.ts +0 -2
  436. package/dist/types/src/internal/object/create.test.d.ts.map +0 -1
  437. package/dist/types/src/internal/object/entity.d.ts +0 -33
  438. package/dist/types/src/internal/object/entity.d.ts.map +0 -1
  439. package/dist/types/src/internal/object/expando.d.ts +0 -14
  440. package/dist/types/src/internal/object/expando.d.ts.map +0 -1
  441. package/dist/types/src/internal/object/meta.d.ts.map +0 -1
  442. package/dist/types/src/internal/object/model.d.ts +0 -117
  443. package/dist/types/src/internal/object/model.d.ts.map +0 -1
  444. package/dist/types/src/internal/object/relation.d.ts +0 -17
  445. package/dist/types/src/internal/object/relation.d.ts.map +0 -1
  446. package/dist/types/src/internal/object/typename.d.ts +0 -15
  447. package/dist/types/src/internal/object/typename.d.ts.map +0 -1
  448. package/dist/types/src/internal/object/version.d.ts.map +0 -1
  449. package/dist/types/src/internal/projection/compose.d.ts +0 -6
  450. package/dist/types/src/internal/projection/compose.d.ts.map +0 -1
  451. package/dist/types/src/internal/projection/compose.test.d.ts.map +0 -1
  452. package/dist/types/src/internal/projection/index.d.ts +0 -2
  453. package/dist/types/src/internal/projection/index.d.ts.map +0 -1
  454. package/dist/types/src/internal/proxy/reactive-object.d.ts +0 -15
  455. package/dist/types/src/internal/proxy/reactive-object.d.ts.map +0 -1
  456. package/dist/types/src/internal/query/index.d.ts +0 -2
  457. package/dist/types/src/internal/query/index.d.ts.map +0 -1
  458. package/dist/types/src/internal/query/query.d.ts +0 -17
  459. package/dist/types/src/internal/query/query.d.ts.map +0 -1
  460. package/dist/types/src/internal/schema/runtime-schema-registry.d.ts +0 -18
  461. package/dist/types/src/internal/schema/runtime-schema-registry.d.ts.map +0 -1
  462. package/dist/types/src/internal/schema/snapshot.d.ts +0 -6
  463. package/dist/types/src/internal/schema/snapshot.d.ts.map +0 -1
  464. package/dist/types/src/internal/schema/stored-schema.d.ts +0 -13
  465. package/dist/types/src/internal/schema/stored-schema.d.ts.map +0 -1
  466. package/dist/types/src/internal/testing/index.d.ts +0 -3
  467. package/dist/types/src/internal/testing/index.d.ts.map +0 -1
  468. package/dist/types/src/internal/testing/types.d.ts +0 -381
  469. package/dist/types/src/internal/testing/types.d.ts.map +0 -1
  470. package/dist/types/src/internal/testing/utils.d.ts +0 -10
  471. package/dist/types/src/internal/testing/utils.d.ts.map +0 -1
  472. package/dist/types/src/internal/types/types.d.ts +0 -79
  473. package/dist/types/src/internal/types/types.d.ts.map +0 -1
  474. package/dist/types/src/internal/types/types.test.d.ts +0 -2
  475. package/dist/types/src/internal/types/types.test.d.ts.map +0 -1
  476. package/dist/types/src/internal/types/util.d.ts +0 -5
  477. package/dist/types/src/internal/types/util.d.ts.map +0 -1
  478. package/dist/types/src/query/index.d.ts +0 -2
  479. package/dist/types/src/query/index.d.ts.map +0 -1
  480. package/dist/types/src/query/query.d.ts +0 -248
  481. package/dist/types/src/query/query.d.ts.map +0 -1
  482. package/dist/types/src/query/query.test.d.ts +0 -2
  483. package/dist/types/src/query/query.test.d.ts.map +0 -1
  484. package/dist/types/src/testing/echo-schema.d.ts +0 -7
  485. package/dist/types/src/testing/echo-schema.d.ts.map +0 -1
  486. package/dist/types/src/testing/types.d.ts +0 -228
  487. package/dist/types/src/testing/types.d.ts.map +0 -1
  488. package/src/internal/ast/annotation-helper.ts +0 -22
  489. package/src/internal/ast/annotations.ts +0 -226
  490. package/src/internal/ast/entity-kind.ts +0 -15
  491. package/src/internal/ast/index.ts +0 -8
  492. package/src/internal/ast/types.ts +0 -17
  493. package/src/internal/json/index.ts +0 -5
  494. package/src/internal/object/accessors.ts +0 -153
  495. package/src/internal/object/entity.ts +0 -248
  496. package/src/internal/object/expando.ts +0 -21
  497. package/src/internal/object/meta.ts +0 -61
  498. package/src/internal/object/model.ts +0 -170
  499. package/src/internal/object/relation.ts +0 -24
  500. package/src/internal/object/typename.ts +0 -61
  501. package/src/internal/object/version.ts +0 -22
  502. package/src/internal/projection/index.ts +0 -5
  503. package/src/internal/proxy/reactive-object.ts +0 -108
  504. package/src/internal/query/index.ts +0 -5
  505. package/src/internal/query/query.ts +0 -23
  506. package/src/internal/schema/runtime-schema-registry.ts +0 -78
  507. package/src/internal/schema/snapshot.ts +0 -25
  508. package/src/internal/schema/stored-schema.ts +0 -26
  509. package/src/internal/testing/index.ts +0 -6
  510. package/src/internal/testing/types.ts +0 -144
  511. package/src/internal/testing/utils.ts +0 -54
  512. package/src/internal/types/types.test.ts +0 -48
  513. package/src/internal/types/types.ts +0 -176
  514. package/src/internal/types/util.ts +0 -9
  515. package/src/query/index.ts +0 -6
  516. package/src/query/query.test.ts +0 -401
  517. package/src/query/query.ts +0 -789
  518. package/src/test/api.test.ts +0 -180
  519. package/src/testing/echo-schema.ts +0 -39
  520. package/src/testing/types.ts +0 -108
  521. /package/dist/lib/{browser/index.mjs.map → neutral/Annotation.mjs.map} +0 -0
  522. /package/dist/lib/{browser/internal/index.mjs.map → neutral/Database.mjs.map} +0 -0
  523. /package/dist/lib/{browser/query/index.mjs.map → neutral/Entity.mjs.map} +0 -0
  524. /package/dist/lib/{node-esm/index.mjs.map → neutral/Err.mjs.map} +0 -0
  525. /package/dist/lib/{node-esm/internal/index.mjs.map → neutral/Filter.mjs.map} +0 -0
  526. /package/dist/lib/{node-esm/query/index.mjs.map → neutral/Format.mjs.map} +0 -0
  527. /package/dist/types/src/internal/{ast → annotations}/annotations.test.d.ts +0 -0
  528. /package/dist/types/src/internal/{json → json-schema}/annotations.d.ts +0 -0
  529. /package/dist/types/src/internal/{json → json-schema}/effect-schema.test.d.ts +0 -0
  530. /package/dist/types/src/internal/{json → json-schema}/json-schema.test.d.ts +0 -0
  531. /package/dist/types/src/internal/{projection → schema}/compose.test.d.ts +0 -0
  532. /package/dist/types/src/{test → testing}/api.test.d.ts +0 -0
  533. /package/src/internal/{json → json-schema}/effect-schema.test.ts +0 -0
@@ -0,0 +1,171 @@
1
+ //
2
+ // Copyright 2025 DXOS.org
3
+ //
4
+
5
+ import * as Schema from 'effect/Schema';
6
+ import * as SchemaAST from 'effect/SchemaAST';
7
+
8
+ import { raise } from '@dxos/debug';
9
+ import { assertArgument, invariant } from '@dxos/invariant';
10
+ import { DXN } from '@dxos/keys';
11
+
12
+ import {
13
+ type TypeAnnotation,
14
+ TypeAnnotationId,
15
+ type TypeMeta,
16
+ getEntityKind,
17
+ getSchemaTypename,
18
+ getTypeIdentifierAnnotation,
19
+ makeTypeJsonSchemaAnnotation,
20
+ } from '../annotations';
21
+ import { EntityKind } from '../types';
22
+
23
+ import { type EchoTypeSchema, makeEchoTypeSchema } from './entity';
24
+
25
+ /**
26
+ * Property name for relation source when object is serialized to JSON.
27
+ */
28
+ export const ATTR_RELATION_SOURCE = '@relationSource';
29
+
30
+ /**
31
+ * Used to access relation source ref on live ECHO objects.
32
+ * Reading this symbol must return `Live<EchoObjectSchema<any>>` or a DXN.
33
+ */
34
+ export const RelationSourceId: unique symbol = Symbol.for('@dxos/echo/RelationSource');
35
+
36
+ /**
37
+ * Used to access relation source ref on live ECHO objects.
38
+ * Reading this symbol must return `Live<EchoObjectSchema<any>>` or a DXN.
39
+ */
40
+ export const RelationSourceDXNId: unique symbol = Symbol.for('@dxos/echo/RelationSourceDXN');
41
+
42
+ /**
43
+ * Property name for relation target when object is serialized to JSON.
44
+ */
45
+ export const ATTR_RELATION_TARGET = '@relationTarget';
46
+
47
+ /**
48
+ * Used to access relation target ref on live ECHO objects.
49
+ * Reading this symbol must return `Live<EchoObjectSchema<any>>` or a DXN.
50
+ */
51
+ export const RelationTargetId: unique symbol = Symbol.for('@dxos/echo/RelationTarget');
52
+
53
+ /**
54
+ * Used to access relation target ref on live ECHO objects.
55
+ * Reading this symbol must return `Live<EchoObjectSchema<any>>` or a DXN.
56
+ */
57
+ export const RelationTargetDXNId: unique symbol = Symbol.for('@dxos/echo/RelationTargetDXN');
58
+
59
+ /**
60
+ * Source and target props on relations.
61
+ */
62
+ // TODO(burdon): any?
63
+ export type RelationSourceTargetRefs<Source = any, Target = any> = {
64
+ /**
65
+ * Source ECHO live object.
66
+ */
67
+ [RelationSourceId]: Source;
68
+
69
+ /**
70
+ * Target ECHO live object.
71
+ */
72
+ [RelationTargetId]: Target;
73
+ };
74
+
75
+ export type RelationSource<R> = R extends RelationSourceTargetRefs<infer Source, infer _Target> ? Source : never;
76
+ export type RelationTarget<R> = R extends RelationSourceTargetRefs<infer _Source, infer Target> ? Target : never;
77
+
78
+ export type EchoRelationSchemaOptions<
79
+ TSource extends Schema.Schema.AnyNoContext,
80
+ TTarget extends Schema.Schema.AnyNoContext,
81
+ > = TypeMeta & {
82
+ source: TSource;
83
+ target: TTarget;
84
+ };
85
+
86
+ /**
87
+ * Relation schema type with kind marker.
88
+ */
89
+ export type EchoRelationSchema<
90
+ Self extends Schema.Schema.Any,
91
+ Source extends Schema.Schema.AnyNoContext,
92
+ Target extends Schema.Schema.AnyNoContext,
93
+ Fields extends Schema.Struct.Fields = Schema.Struct.Fields,
94
+ > = EchoTypeSchema<
95
+ Self,
96
+ RelationSourceTargetRefs<Schema.Schema.Type<Source>, Schema.Schema.Type<Target>>,
97
+ EntityKind.Relation,
98
+ Fields
99
+ >;
100
+
101
+ /**
102
+ * Schema for Relation entity types.
103
+ */
104
+ export const EchoRelationSchema = <
105
+ Source extends Schema.Schema.AnyNoContext,
106
+ Target extends Schema.Schema.AnyNoContext,
107
+ >({
108
+ source,
109
+ target,
110
+ typename,
111
+ version,
112
+ }: EchoRelationSchemaOptions<Source, Target>) => {
113
+ assertArgument(Schema.isSchema(source), 'source');
114
+ assertArgument(Schema.isSchema(target), 'target');
115
+ const sourceDXN = getDXNForRelationSchemaRef(source);
116
+ const targetDXN = getDXNForRelationSchemaRef(target);
117
+ if (getEntityKind(source) !== EntityKind.Object) {
118
+ raise(new Error('Source schema must be an echo object schema.'));
119
+ }
120
+ if (getEntityKind(target) !== EntityKind.Object) {
121
+ raise(new Error('Target schema must be an echo object schema.'));
122
+ }
123
+
124
+ return <Self extends Schema.Schema.Any, Fields extends Schema.Struct.Fields = Schema.Struct.Fields>(
125
+ self: Self & { fields?: Fields },
126
+ ): EchoRelationSchema<Self, Source, Target, Fields> => {
127
+ invariant(SchemaAST.isTypeLiteral(self.ast), 'Schema must be a TypeLiteral.');
128
+
129
+ // Extract fields from the schema if available (Struct schemas have .fields).
130
+ const fields = ((self as any).fields ?? {}) as Fields;
131
+
132
+ const schemaWithId = Schema.extend(self, Schema.Struct({ id: Schema.String }));
133
+ const ast = SchemaAST.annotations(schemaWithId.ast, {
134
+ // TODO(dmaretskyi): `extend` kills the annotations.
135
+ ...self.ast.annotations,
136
+ [TypeAnnotationId]: {
137
+ kind: EntityKind.Relation,
138
+ typename,
139
+ version,
140
+ sourceSchema: sourceDXN,
141
+ targetSchema: targetDXN,
142
+ } satisfies TypeAnnotation,
143
+ // TODO(dmaretskyi): TypeIdentifierAnnotationId?
144
+
145
+ [SchemaAST.JSONSchemaAnnotationId]: makeTypeJsonSchemaAnnotation({
146
+ kind: EntityKind.Relation,
147
+ typename,
148
+ version,
149
+ relationSource: sourceDXN,
150
+ relationTarget: targetDXN,
151
+ }),
152
+ });
153
+
154
+ return makeEchoTypeSchema<Self, EntityKind.Relation, Fields>(fields, ast, typename, version, EntityKind.Relation);
155
+ };
156
+ };
157
+
158
+ const getDXNForRelationSchemaRef = (schema: Schema.Schema.Any): string => {
159
+ assertArgument(Schema.isSchema(schema), 'schema');
160
+ const identifier = getTypeIdentifierAnnotation(schema);
161
+ if (identifier) {
162
+ return identifier;
163
+ }
164
+
165
+ const typename = getSchemaTypename(schema);
166
+ if (!typename) {
167
+ throw new Error('Schema must have a typename');
168
+ }
169
+
170
+ return DXN.fromTypename(typename).toString();
171
+ };
@@ -0,0 +1,33 @@
1
+ //
2
+ // Copyright 2024 DXOS.org
3
+ //
4
+
5
+ import * as Schema from 'effect/Schema';
6
+
7
+ import { assertArgument, invariant } from '@dxos/invariant';
8
+ import { DXN, ObjectId } from '@dxos/keys';
9
+ import { assumeType } from '@dxos/util';
10
+
11
+ import { type InternalObjectProps, SelfDXNId } from './model';
12
+
13
+ /**
14
+ * Returns a DXN for an object or schema.
15
+ *
16
+ * @internal
17
+ */
18
+ export const getObjectDXN = (object: any): DXN | undefined => {
19
+ invariant(!Schema.isSchema(object), 'schema not allowed in this function');
20
+ assertArgument(typeof object === 'object' && object != null, 'object', 'expected object');
21
+ assumeType<InternalObjectProps>(object);
22
+
23
+ if (object[SelfDXNId]) {
24
+ invariant(object[SelfDXNId] instanceof DXN, 'Invalid object model: invalid self dxn');
25
+ return object[SelfDXNId];
26
+ }
27
+
28
+ if (!ObjectId.isValid(object.id)) {
29
+ throw new TypeError('Object id is not valid.');
30
+ }
31
+
32
+ return DXN.fromLocalObjectId(object.id);
33
+ };
@@ -7,7 +7,7 @@ import { describe, expect, test } from 'vitest';
7
7
 
8
8
  import { log } from '@dxos/log';
9
9
 
10
- import { toJsonSchema } from '../json';
10
+ import { toJsonSchema } from '../json-schema';
11
11
 
12
12
  import {
13
13
  DateOnly,
@@ -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
  * Datetime values should be stored as ISO strings or unix numbers (ms) in UTC.
@@ -102,7 +102,7 @@ export const DateOnly = /* Schema.transformOrFail(Schema.String, SimpleDate, {
102
102
  );
103
103
  },
104
104
  }) */ Schema.String.pipe(
105
- FormatAnnotation.set(FormatEnum.Date),
105
+ FormatAnnotation.set(TypeFormat.Date),
106
106
  Schema.annotations({
107
107
  title: 'Date',
108
108
  description: 'Valid date in ISO format',
@@ -132,7 +132,7 @@ export const TimeOnly = /* Schema.transformOrFail(Schema.String, SimpleTime, {
132
132
  );
133
133
  },
134
134
  }) */ Schema.String.pipe(
135
- FormatAnnotation.set(FormatEnum.Time),
135
+ FormatAnnotation.set(TypeFormat.Time),
136
136
  Schema.annotations({
137
137
  title: 'Time',
138
138
  description: 'Valid time in ISO format',
@@ -177,7 +177,7 @@ export const DateTime = /* Schema.transformOrFail(Schema.String, SimpleDateTime,
177
177
  );
178
178
  },
179
179
  }) */ Schema.String.pipe(
180
- FormatAnnotation.set(FormatEnum.DateTime),
180
+ FormatAnnotation.set(TypeFormat.DateTime),
181
181
  Schema.annotations({
182
182
  title: 'DateTime',
183
183
  description: 'Valid date and time in ISO format',
@@ -189,7 +189,7 @@ export const DateTime = /* Schema.transformOrFail(Schema.String, SimpleDateTime,
189
189
  */
190
190
  // TODO(burdon): Define duration type.
191
191
  export const Duration = Schema.String.pipe(
192
- FormatAnnotation.set(FormatEnum.Duration),
192
+ FormatAnnotation.set(TypeFormat.Duration),
193
193
  Schema.annotations({
194
194
  title: 'Duration',
195
195
  description: 'Duration in ISO 8601 format',
@@ -5,10 +5,10 @@
5
5
  import * as Schema from 'effect/Schema';
6
6
  import { describe, test } from 'vitest';
7
7
 
8
- import { toJsonSchema } from '../json';
8
+ import { toJsonSchema } from '../json-schema';
9
9
 
10
10
  import { Format } from './format';
11
- import { FormatEnum, TypeEnum, getTypeEnum } from './types';
11
+ import { TypeEnum, TypeFormat, getTypeEnum } from './types';
12
12
 
13
13
  describe('formats', () => {
14
14
  test('annotations', ({ expect }) => {
@@ -20,7 +20,7 @@ describe('formats', () => {
20
20
  birthday: Schema.optional(Format.Date),
21
21
  started: Schema.optional(Format.DateTime),
22
22
  active: Schema.optional(Schema.Boolean),
23
- }).pipe(Schema.mutable);
23
+ });
24
24
 
25
25
  type TestType = Schema.Schema.Type<typeof TestSchema>;
26
26
 
@@ -48,7 +48,7 @@ describe('formats', () => {
48
48
  expect(getTypeEnum(prop)).to.eq(TypeEnum.String);
49
49
  expect(prop).includes({
50
50
  type: TypeEnum.String,
51
- format: FormatEnum.Email,
51
+ format: TypeFormat.Email,
52
52
  title: 'Email',
53
53
  });
54
54
  }
@@ -58,7 +58,7 @@ describe('formats', () => {
58
58
  expect(getTypeEnum(prop)).to.eq(TypeEnum.Number);
59
59
  expect(prop).includes({
60
60
  type: TypeEnum.Number,
61
- format: FormatEnum.Currency,
61
+ format: TypeFormat.Currency,
62
62
  title: 'Currency',
63
63
  multipleOf: 0.01,
64
64
  currency: 'USD',
@@ -70,7 +70,7 @@ describe('formats', () => {
70
70
  expect(getTypeEnum(prop)).to.eq(TypeEnum.String);
71
71
  expect(prop).includes({
72
72
  type: TypeEnum.String,
73
- format: FormatEnum.Date,
73
+ format: TypeFormat.Date,
74
74
  });
75
75
  }
76
76
  });
@@ -10,10 +10,10 @@ 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 TypeFormat$ } from './types';
13
14
 
14
- // TODO(burdon): Consider factoring out to separate `@dxos/json-schema`
15
15
  // TODO(burdon): Media encoding.
16
- // - https://json-schema.org/understanding-json-schema/reference/non_json_data
16
+ // - https://json-schema.org/understanding-json-schema/reference/non_json_data
17
17
 
18
18
  /**
19
19
  * Formats.
@@ -22,7 +22,9 @@ import * as StringUtil from './string';
22
22
  */
23
23
  // TODO(burdon): Add fields for `examples`, `message`, etc.
24
24
  export namespace Format {
25
- // Strings
25
+ export import TypeFormat = TypeFormat$;
26
+
27
+ // String
26
28
  export const DXN = Keys.DXN.Schema;
27
29
  export const Email = StringUtil.Email;
28
30
  export const Formula = StringUtil.Formula;
@@ -41,12 +43,12 @@ export namespace Format {
41
43
  export const Timestamp = NumberUtil.Timestamp;
42
44
 
43
45
  // Dates and times
44
- export const DateTime = DateUtil.DateTime;
45
46
  export const Date = DateUtil.DateOnly;
46
- export const Time = DateUtil.TimeOnly;
47
+ export const DateTime = DateUtil.DateTime;
47
48
  export const Duration = DateUtil.Duration;
49
+ export const Time = DateUtil.TimeOnly;
48
50
 
49
51
  // Objects
50
52
  export const GeoPoint = ObjectUtil.GeoPoint;
51
- export type GeoPoint = ObjectUtil.GeoPoint;
53
+ export type GeoPoint = ObjectUtil.GeoPoint; // TODO(burdon): Export types.
52
54
  }
@@ -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
@@ -21,13 +21,13 @@ import { FormatAnnotation, FormatEnum } from './types';
21
21
  * Note: optional third element for altitude.
22
22
  */
23
23
  export const GeoPoint = Schema.Tuple(
24
- Schema.Number.pipe(Schema.annotations({ title: 'Longitude' }), Schema.clamp(-180, 180), Schema.multipleOf(0.00001)),
25
- Schema.Number.pipe(Schema.annotations({ title: 'Latitude' }), Schema.clamp(-90, 90), Schema.multipleOf(0.00001)),
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
26
  Schema.optionalElement(Schema.Number).annotations({
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',
@@ -4,13 +4,15 @@
4
4
 
5
5
  import * as Schema from 'effect/Schema';
6
6
 
7
- /** Schema for a single select option. Used to define choices in a {single|multi}-select field. */
8
- export const SelectOptionSchema = Schema.Struct({
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({
9
11
  /** Stable identifier for the option. */
10
12
  id: Schema.NonEmptyString,
11
13
  title: Schema.String,
12
14
  /** Color palette used for visual styling. */
13
15
  color: Schema.String,
14
- }).pipe(Schema.mutable);
16
+ });
15
17
 
16
- export type SelectOption = Schema.Schema.Type<typeof SelectOptionSchema>;
18
+ export type SelectOption = Schema.Schema.Type<typeof SelectOption>;
@@ -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,19 @@ 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
+
55
+ /**
56
+ * Multi-line text.
57
+ */
58
+ export const Text = Schema.String.pipe(FormatAnnotation.set(TypeFormat.Text));
54
59
 
55
60
  /**
56
61
  * https://datatracker.ietf.org/doc/html/rfc3986#section-1.1.3
57
62
  */
58
63
  export const URL = Schema.String.pipe(
59
64
  Schema.pattern(/^(\w+?:\/\/)?([\da-z.-]+)\.([a-z.]{2,6})([/\w .-]*)*\/?$/i),
60
- FormatAnnotation.set(FormatEnum.URL),
65
+ FormatAnnotation.set(TypeFormat.URL),
61
66
  Schema.annotations({
62
67
  title: 'URL',
63
68
  description: 'URL',
@@ -69,7 +74,7 @@ export const URL = Schema.String.pipe(
69
74
  * https://datatracker.ietf.org/doc/html/rfc4122
70
75
  */
71
76
  export const UUID = Schema.UUID.pipe(
72
- FormatAnnotation.set(FormatEnum.UUID),
77
+ FormatAnnotation.set(TypeFormat.UUID),
73
78
  Schema.annotations({
74
79
  [SchemaAST.ExamplesAnnotationId]: ['3e4666bf-d5e5-4aa7-b8ce-cefe41c7568a'],
75
80
  }),
@@ -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,20 @@ 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
+ /** @deprecated */
59
+ export const getFormatAnnotation = (node: SchemaAST.AST): TypeFormat | undefined =>
60
+ Function.pipe(SchemaAST.getAnnotation<TypeFormat>(FormatAnnotationId)(node), Option.getOrUndefined);
60
61
 
61
- // TODO(burdon): Rename to FormatType and change to discriminated union.
62
- export enum FormatEnum {
62
+ // TODO(burdon): Rename Format; Change to discriminated union?
63
+ export enum TypeFormat {
63
64
  None = 'none',
65
+
66
+ //
67
+ // Scalar
68
+ //
69
+
64
70
  String = 'string',
65
71
  Number = 'number',
66
72
  Boolean = 'boolean',
@@ -79,6 +85,7 @@ export enum FormatEnum {
79
85
  Markdown = 'markdown',
80
86
  Regex = 'regex',
81
87
  SingleSelect = 'single-select',
88
+ Text = 'text',
82
89
  MultiSelect = 'multi-select',
83
90
  URL = 'url',
84
91
  UUID = 'uuid',
@@ -108,60 +115,61 @@ export enum FormatEnum {
108
115
  GeoPoint = 'lnglat',
109
116
  }
110
117
 
111
- export const FormatEnums = Object.values(FormatEnum).sort();
118
+ export const FormatEnums = Object.values(TypeFormat).sort();
112
119
 
113
120
  export const PropertyKind = {
114
121
  type: TypeEnum,
115
- format: FormatEnum,
122
+ format: TypeFormat,
116
123
  };
117
124
 
118
125
  /**
119
126
  * Default formats
120
127
  */
121
- export const typeToFormat: Partial<Record<TypeEnum, FormatEnum>> = {
122
- [TypeEnum.String]: FormatEnum.String,
123
- [TypeEnum.Number]: FormatEnum.Number,
124
- [TypeEnum.Boolean]: FormatEnum.Boolean,
128
+ export const typeToFormat: Partial<Record<TypeEnum, TypeFormat>> = {
129
+ [TypeEnum.String]: TypeFormat.String,
130
+ [TypeEnum.Number]: TypeFormat.Number,
131
+ [TypeEnum.Boolean]: TypeFormat.Boolean,
125
132
  };
126
133
 
127
134
  /**
128
135
  * Map of format to type.
129
136
  */
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,
137
+ export const formatToType: Record<TypeFormat, TypeEnum> = {
138
+ [TypeFormat.None]: TypeEnum.String,
139
+ [TypeFormat.String]: TypeEnum.String,
140
+ [TypeFormat.Number]: TypeEnum.Number,
141
+ [TypeFormat.Boolean]: TypeEnum.Boolean,
142
+ [TypeFormat.Ref]: TypeEnum.Ref,
136
143
 
137
144
  // 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,
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,
150
158
 
151
159
  // Dates
152
- [FormatEnum.Date]: TypeEnum.String,
153
- [FormatEnum.DateTime]: TypeEnum.String,
154
- [FormatEnum.Duration]: TypeEnum.String,
155
- [FormatEnum.Time]: TypeEnum.String,
160
+ [TypeFormat.Date]: TypeEnum.String,
161
+ [TypeFormat.DateTime]: TypeEnum.String,
162
+ [TypeFormat.Duration]: TypeEnum.String,
163
+ [TypeFormat.Time]: TypeEnum.String,
156
164
 
157
165
  // Numbers
158
- [FormatEnum.Currency]: TypeEnum.Number,
159
- [FormatEnum.Integer]: TypeEnum.Number,
160
- [FormatEnum.Percent]: TypeEnum.Number,
161
- [FormatEnum.Timestamp]: TypeEnum.Number,
166
+ [TypeFormat.Currency]: TypeEnum.Number,
167
+ [TypeFormat.Integer]: TypeEnum.Number,
168
+ [TypeFormat.Percent]: TypeEnum.Number,
169
+ [TypeFormat.Timestamp]: TypeEnum.Number,
162
170
 
163
171
  // Objects
164
- [FormatEnum.GeoPoint]: TypeEnum.Array,
172
+ [TypeFormat.GeoPoint]: TypeEnum.Array,
165
173
  };
166
174
 
167
175
  /**
@@ -169,7 +177,10 @@ export const formatToType: Record<FormatEnum, TypeEnum> = {
169
177
  */
170
178
  export const OptionsAnnotationId = Symbol.for('@dxos/schema/annotation/Options');
171
179
 
172
- export const getOptionsAnnotation = (node: SchemaAST.AST): OptionsAnnotationType[] | undefined =>
173
- Function.pipe(SchemaAST.getAnnotation<OptionsAnnotationType[]>(OptionsAnnotationId)(node), Option.getOrUndefined);
180
+ // TODO(wittjosiah): Reconcile with `SelectOption`.
181
+ export type Options = string | number;
182
+ export const OptionsAnnotation = createAnnotationHelper<Options[]>(OptionsAnnotationId);
174
183
 
175
- export type OptionsAnnotationType = string | number;
184
+ /** @deprecated */
185
+ export const getOptionsAnnotation = (node: SchemaAST.AST): Options[] | undefined =>
186
+ Function.pipe(SchemaAST.getAnnotation<Options[]>(OptionsAnnotationId)(node), Option.getOrUndefined);