@dxos/echo 0.8.4-main.5ea62a8 → 0.8.4-main.66e292d

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 (328) hide show
  1. package/dist/lib/browser/chunk-7GH6RXJ3.mjs +3683 -0
  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 +24 -1
  6. package/dist/lib/browser/internal/index.mjs +336 -0
  7. package/dist/lib/browser/internal/index.mjs.map +7 -0
  8. package/dist/lib/browser/meta.json +1 -1
  9. package/dist/lib/browser/testing/index.mjs +289 -31
  10. package/dist/lib/browser/testing/index.mjs.map +4 -4
  11. package/dist/lib/node-esm/chunk-JE5RXM2I.mjs +1111 -0
  12. package/dist/lib/node-esm/chunk-JE5RXM2I.mjs.map +7 -0
  13. package/dist/lib/node-esm/chunk-M4B6BMD2.mjs +3683 -0
  14. package/dist/lib/node-esm/chunk-M4B6BMD2.mjs.map +7 -0
  15. package/dist/lib/node-esm/index.mjs +24 -1
  16. package/dist/lib/node-esm/internal/index.mjs +336 -0
  17. package/dist/lib/node-esm/internal/index.mjs.map +7 -0
  18. package/dist/lib/node-esm/meta.json +1 -1
  19. package/dist/lib/node-esm/testing/index.mjs +289 -31
  20. package/dist/lib/node-esm/testing/index.mjs.map +4 -4
  21. package/dist/types/src/Annotation.d.ts +2 -0
  22. package/dist/types/src/Annotation.d.ts.map +1 -0
  23. package/dist/types/src/Database.d.ts +137 -0
  24. package/dist/types/src/Database.d.ts.map +1 -0
  25. package/dist/types/src/Entity.d.ts +36 -0
  26. package/dist/types/src/Entity.d.ts.map +1 -0
  27. package/dist/types/src/Format.d.ts +4 -0
  28. package/dist/types/src/Format.d.ts.map +1 -0
  29. package/dist/types/src/JsonSchema.d.ts +9 -0
  30. package/dist/types/src/JsonSchema.d.ts.map +1 -0
  31. package/dist/types/src/Key.d.ts +1 -0
  32. package/dist/types/src/Key.d.ts.map +1 -1
  33. package/dist/types/src/Obj.d.ts +121 -50
  34. package/dist/types/src/Obj.d.ts.map +1 -1
  35. package/dist/types/src/Ref.d.ts +10 -10
  36. package/dist/types/src/Ref.d.ts.map +1 -1
  37. package/dist/types/src/Relation.d.ts +18 -14
  38. package/dist/types/src/Relation.d.ts.map +1 -1
  39. package/dist/types/src/Tag.d.ts +17 -0
  40. package/dist/types/src/Tag.d.ts.map +1 -0
  41. package/dist/types/src/Type.d.ts +39 -50
  42. package/dist/types/src/Type.d.ts.map +1 -1
  43. package/dist/types/src/errors.d.ts +68 -0
  44. package/dist/types/src/errors.d.ts.map +1 -0
  45. package/dist/types/src/index.d.ts +9 -3
  46. package/dist/types/src/index.d.ts.map +1 -1
  47. package/dist/types/src/internal/annotations/annotations.d.ts +174 -0
  48. package/dist/types/src/internal/annotations/annotations.d.ts.map +1 -0
  49. package/dist/types/src/internal/annotations/annotations.test.d.ts +2 -0
  50. package/dist/types/src/internal/annotations/annotations.test.d.ts.map +1 -0
  51. package/dist/types/src/internal/annotations/index.d.ts +3 -0
  52. package/dist/types/src/internal/annotations/index.d.ts.map +1 -0
  53. package/dist/types/src/internal/annotations/util.d.ts +26 -0
  54. package/dist/types/src/internal/annotations/util.d.ts.map +1 -0
  55. package/dist/types/src/internal/entities/entity.d.ts +10 -0
  56. package/dist/types/src/internal/entities/entity.d.ts.map +1 -0
  57. package/dist/types/src/internal/entities/expando.d.ts +16 -0
  58. package/dist/types/src/internal/entities/expando.d.ts.map +1 -0
  59. package/dist/types/src/internal/entities/index.d.ts +6 -0
  60. package/dist/types/src/internal/entities/index.d.ts.map +1 -0
  61. package/dist/types/src/internal/entities/model.d.ts +70 -0
  62. package/dist/types/src/internal/entities/model.d.ts.map +1 -0
  63. package/dist/types/src/internal/entities/object.d.ts +11 -0
  64. package/dist/types/src/internal/entities/object.d.ts.map +1 -0
  65. package/dist/types/src/internal/entities/relation.d.ts +55 -0
  66. package/dist/types/src/internal/entities/relation.d.ts.map +1 -0
  67. package/dist/types/src/internal/entities/util.d.ts +2 -0
  68. package/dist/types/src/internal/entities/util.d.ts.map +1 -0
  69. package/dist/types/src/internal/formats/date.d.ts +63 -0
  70. package/dist/types/src/internal/formats/date.d.ts.map +1 -0
  71. package/dist/types/src/internal/formats/date.test.d.ts +2 -0
  72. package/dist/types/src/internal/formats/date.test.d.ts.map +1 -0
  73. package/dist/types/src/internal/formats/format.d.ts +32 -0
  74. package/dist/types/src/internal/formats/format.d.ts.map +1 -0
  75. package/dist/types/src/internal/formats/format.test.d.ts +2 -0
  76. package/dist/types/src/internal/formats/format.test.d.ts.map +1 -0
  77. package/dist/types/src/internal/formats/index.d.ts +8 -0
  78. package/dist/types/src/internal/formats/index.d.ts.map +1 -0
  79. package/dist/types/src/internal/formats/number.d.ts +31 -0
  80. package/dist/types/src/internal/formats/number.d.ts.map +1 -0
  81. package/dist/types/src/internal/formats/object.d.ts +35 -0
  82. package/dist/types/src/internal/formats/object.d.ts.map +1 -0
  83. package/dist/types/src/internal/formats/select.d.ts +11 -0
  84. package/dist/types/src/internal/formats/select.d.ts.map +1 -0
  85. package/dist/types/src/internal/formats/string.d.ts +38 -0
  86. package/dist/types/src/internal/formats/string.d.ts.map +1 -0
  87. package/dist/types/src/internal/formats/types.d.ts +68 -0
  88. package/dist/types/src/internal/formats/types.d.ts.map +1 -0
  89. package/dist/types/src/internal/index.d.ts +11 -0
  90. package/dist/types/src/internal/index.d.ts.map +1 -0
  91. package/dist/types/src/internal/json-schema/annotations.d.ts +19 -0
  92. package/dist/types/src/internal/json-schema/annotations.d.ts.map +1 -0
  93. package/dist/types/src/internal/json-schema/effect-schema.test.d.ts +2 -0
  94. package/dist/types/src/internal/json-schema/effect-schema.test.d.ts.map +1 -0
  95. package/dist/types/src/internal/json-schema/index.d.ts +5 -0
  96. package/dist/types/src/internal/json-schema/index.d.ts.map +1 -0
  97. package/dist/types/src/internal/json-schema/json-schema-normalize.d.ts +7 -0
  98. package/dist/types/src/internal/json-schema/json-schema-normalize.d.ts.map +1 -0
  99. package/dist/types/src/internal/json-schema/json-schema-type.d.ts +250 -0
  100. package/dist/types/src/internal/json-schema/json-schema-type.d.ts.map +1 -0
  101. package/dist/types/src/internal/json-schema/json-schema.d.ts +29 -0
  102. package/dist/types/src/internal/json-schema/json-schema.d.ts.map +1 -0
  103. package/dist/types/src/internal/json-schema/json-schema.test.d.ts +2 -0
  104. package/dist/types/src/internal/json-schema/json-schema.test.d.ts.map +1 -0
  105. package/dist/types/src/internal/object/common.d.ts +18 -0
  106. package/dist/types/src/internal/object/common.d.ts.map +1 -0
  107. package/dist/types/src/internal/object/create-object.d.ts +39 -0
  108. package/dist/types/src/internal/object/create-object.d.ts.map +1 -0
  109. package/dist/types/src/internal/object/create-object.test.d.ts +2 -0
  110. package/dist/types/src/internal/object/create-object.test.d.ts.map +1 -0
  111. package/dist/types/src/internal/object/deleted.d.ts +6 -0
  112. package/dist/types/src/internal/object/deleted.d.ts.map +1 -0
  113. package/dist/types/src/internal/object/ids.d.ts +6 -0
  114. package/dist/types/src/internal/object/ids.d.ts.map +1 -0
  115. package/dist/types/src/internal/object/index.d.ts +8 -0
  116. package/dist/types/src/internal/object/index.d.ts.map +1 -0
  117. package/dist/types/src/internal/object/inspect.d.ts +2 -0
  118. package/dist/types/src/internal/object/inspect.d.ts.map +1 -0
  119. package/dist/types/src/internal/object/json-serializer.d.ts +31 -0
  120. package/dist/types/src/internal/object/json-serializer.d.ts.map +1 -0
  121. package/dist/types/src/internal/object/json-serializer.test.d.ts +2 -0
  122. package/dist/types/src/internal/object/json-serializer.test.d.ts.map +1 -0
  123. package/dist/types/src/internal/object/schema-validator.d.ts +15 -0
  124. package/dist/types/src/internal/object/schema-validator.d.ts.map +1 -0
  125. package/dist/types/src/internal/object/schema-validator.test.d.ts +2 -0
  126. package/dist/types/src/internal/object/schema-validator.test.d.ts.map +1 -0
  127. package/dist/types/src/internal/object/typed-object.d.ts +31 -0
  128. package/dist/types/src/internal/object/typed-object.d.ts.map +1 -0
  129. package/dist/types/src/internal/object/typed-object.test.d.ts +2 -0
  130. package/dist/types/src/internal/object/typed-object.test.d.ts.map +1 -0
  131. package/dist/types/src/internal/proxy/handler.test.d.ts +2 -0
  132. package/dist/types/src/internal/proxy/handler.test.d.ts.map +1 -0
  133. package/dist/types/src/internal/proxy/index.d.ts +3 -0
  134. package/dist/types/src/internal/proxy/index.d.ts.map +1 -0
  135. package/dist/types/src/internal/proxy/make-object.d.ts +16 -0
  136. package/dist/types/src/internal/proxy/make-object.d.ts.map +1 -0
  137. package/dist/types/src/internal/proxy/schema.test.d.ts +2 -0
  138. package/dist/types/src/internal/proxy/schema.test.d.ts.map +1 -0
  139. package/dist/types/src/internal/proxy/typed-handler.d.ts +44 -0
  140. package/dist/types/src/internal/proxy/typed-handler.d.ts.map +1 -0
  141. package/dist/types/src/internal/proxy/typed-handler.test.d.ts +2 -0
  142. package/dist/types/src/internal/proxy/typed-handler.test.d.ts.map +1 -0
  143. package/dist/types/src/internal/proxy/typed-object.test.d.ts +2 -0
  144. package/dist/types/src/internal/proxy/typed-object.test.d.ts.map +1 -0
  145. package/dist/types/src/internal/ref/index.d.ts +3 -0
  146. package/dist/types/src/internal/ref/index.d.ts.map +1 -0
  147. package/dist/types/src/internal/ref/ref-array.d.ts +21 -0
  148. package/dist/types/src/internal/ref/ref-array.d.ts.map +1 -0
  149. package/dist/types/src/internal/ref/ref.d.ts +209 -0
  150. package/dist/types/src/internal/ref/ref.d.ts.map +1 -0
  151. package/dist/types/src/internal/ref/ref.test.d.ts +2 -0
  152. package/dist/types/src/internal/ref/ref.test.d.ts.map +1 -0
  153. package/dist/types/src/internal/schema/compose.d.ts +6 -0
  154. package/dist/types/src/internal/schema/compose.d.ts.map +1 -0
  155. package/dist/types/src/internal/schema/compose.test.d.ts +2 -0
  156. package/dist/types/src/internal/schema/compose.test.d.ts.map +1 -0
  157. package/dist/types/src/internal/schema/echo-schema.d.ts +168 -0
  158. package/dist/types/src/internal/schema/echo-schema.d.ts.map +1 -0
  159. package/dist/types/src/internal/schema/index.d.ts +6 -0
  160. package/dist/types/src/internal/schema/index.d.ts.map +1 -0
  161. package/dist/types/src/internal/schema/manipulation.d.ts +10 -0
  162. package/dist/types/src/internal/schema/manipulation.d.ts.map +1 -0
  163. package/dist/types/src/internal/schema/persistent-schema.d.ts +18 -0
  164. package/dist/types/src/internal/schema/persistent-schema.d.ts.map +1 -0
  165. package/dist/types/src/internal/schema/runtime-schema-registry.d.ts +18 -0
  166. package/dist/types/src/internal/schema/runtime-schema-registry.d.ts.map +1 -0
  167. package/dist/types/src/internal/schema/snapshot.d.ts +6 -0
  168. package/dist/types/src/internal/schema/snapshot.d.ts.map +1 -0
  169. package/dist/types/src/internal/types/base.d.ts +37 -0
  170. package/dist/types/src/internal/types/base.d.ts.map +1 -0
  171. package/dist/types/src/internal/types/entity.d.ts +12 -0
  172. package/dist/types/src/internal/types/entity.d.ts.map +1 -0
  173. package/dist/types/src/internal/types/index.d.ts +6 -0
  174. package/dist/types/src/internal/types/index.d.ts.map +1 -0
  175. package/dist/types/src/internal/types/meta.d.ts +40 -0
  176. package/dist/types/src/internal/types/meta.d.ts.map +1 -0
  177. package/dist/types/src/internal/types/typename.d.ts +13 -0
  178. package/dist/types/src/internal/types/typename.d.ts.map +1 -0
  179. package/dist/types/src/internal/types/version.d.ts +15 -0
  180. package/dist/types/src/internal/types/version.d.ts.map +1 -0
  181. package/dist/types/src/query/filter.d.ts +167 -0
  182. package/dist/types/src/query/filter.d.ts.map +1 -0
  183. package/dist/types/src/query/index.d.ts +4 -1
  184. package/dist/types/src/query/index.d.ts.map +1 -1
  185. package/dist/types/src/query/order.d.ts +12 -0
  186. package/dist/types/src/query/order.d.ts.map +1 -0
  187. package/dist/types/src/query/query.d.ts +112 -0
  188. package/dist/types/src/query/query.d.ts.map +1 -0
  189. package/dist/types/src/query/query.test.d.ts +2 -0
  190. package/dist/types/src/query/query.test.d.ts.map +1 -0
  191. package/dist/types/src/query/testing.d.ts +51 -0
  192. package/dist/types/src/query/testing.d.ts.map +1 -0
  193. package/dist/types/src/query/types.d.ts +17 -0
  194. package/dist/types/src/query/types.d.ts.map +1 -0
  195. package/dist/types/src/query/util.d.ts +8 -0
  196. package/dist/types/src/query/util.d.ts.map +1 -0
  197. package/dist/types/src/{test → testing}/api.test.d.ts.map +1 -1
  198. package/dist/types/src/testing/index.d.ts +3 -1
  199. package/dist/types/src/testing/index.d.ts.map +1 -1
  200. package/dist/types/src/testing/test-data.d.ts +18 -0
  201. package/dist/types/src/testing/test-data.d.ts.map +1 -0
  202. package/dist/types/src/testing/test-schema.d.ts +337 -0
  203. package/dist/types/src/testing/test-schema.d.ts.map +1 -0
  204. package/dist/types/src/testing/util.d.ts +16 -0
  205. package/dist/types/src/testing/util.d.ts.map +1 -0
  206. package/dist/types/tsconfig.tsbuildinfo +1 -1
  207. package/package.json +49 -29
  208. package/src/Annotation.ts +17 -0
  209. package/src/Database.ts +189 -0
  210. package/src/Entity.ts +51 -0
  211. package/src/Format.ts +11 -0
  212. package/src/JsonSchema.ts +16 -0
  213. package/src/Key.ts +3 -0
  214. package/src/Obj.ts +353 -107
  215. package/src/Ref.ts +9 -10
  216. package/src/Relation.ts +68 -43
  217. package/src/Tag.ts +40 -0
  218. package/src/Type.ts +97 -85
  219. package/src/errors.ts +18 -0
  220. package/src/index.ts +13 -4
  221. package/src/internal/README.md +83 -0
  222. package/src/internal/annotations/annotations.test.ts +96 -0
  223. package/src/internal/annotations/annotations.ts +463 -0
  224. package/src/internal/annotations/index.ts +6 -0
  225. package/src/internal/annotations/util.ts +70 -0
  226. package/src/internal/entities/entity.ts +109 -0
  227. package/src/internal/entities/expando.ts +23 -0
  228. package/src/internal/entities/index.ts +9 -0
  229. package/src/internal/entities/model.ts +129 -0
  230. package/src/internal/entities/object.ts +45 -0
  231. package/src/internal/entities/relation.ts +155 -0
  232. package/src/internal/entities/util.ts +33 -0
  233. package/src/internal/formats/date.test.ts +56 -0
  234. package/src/internal/formats/date.ts +217 -0
  235. package/src/internal/formats/format.test.ts +77 -0
  236. package/src/internal/formats/format.ts +55 -0
  237. package/src/internal/formats/index.ts +12 -0
  238. package/src/internal/formats/number.ts +89 -0
  239. package/src/internal/formats/object.ts +80 -0
  240. package/src/internal/formats/select.ts +16 -0
  241. package/src/internal/formats/string.ts +76 -0
  242. package/src/internal/formats/types.ts +180 -0
  243. package/src/internal/index.ts +38 -0
  244. package/src/internal/json-schema/annotations.ts +50 -0
  245. package/src/internal/json-schema/effect-schema.test.ts +143 -0
  246. package/src/internal/json-schema/index.ts +8 -0
  247. package/src/internal/json-schema/json-schema-normalize.ts +109 -0
  248. package/src/internal/json-schema/json-schema-type.ts +404 -0
  249. package/src/internal/json-schema/json-schema.test.ts +859 -0
  250. package/src/internal/json-schema/json-schema.ts +528 -0
  251. package/src/internal/object/common.ts +75 -0
  252. package/src/internal/object/create-object.test.ts +116 -0
  253. package/src/internal/object/create-object.ts +95 -0
  254. package/src/internal/object/deleted.ts +19 -0
  255. package/src/internal/object/ids.ts +12 -0
  256. package/src/internal/object/index.ts +11 -0
  257. package/src/internal/object/inspect.ts +46 -0
  258. package/src/internal/object/json-serializer.test.ts +94 -0
  259. package/src/internal/object/json-serializer.ts +230 -0
  260. package/src/internal/object/schema-validator.test.ts +186 -0
  261. package/src/internal/object/schema-validator.ts +242 -0
  262. package/src/internal/object/typed-object.test.ts +34 -0
  263. package/src/internal/object/typed-object.ts +94 -0
  264. package/src/internal/proxy/handler.test.ts +173 -0
  265. package/src/internal/proxy/index.ts +6 -0
  266. package/src/internal/proxy/make-object.ts +113 -0
  267. package/src/internal/proxy/schema.test.ts +137 -0
  268. package/src/internal/proxy/typed-handler.test.ts +102 -0
  269. package/src/internal/proxy/typed-handler.ts +233 -0
  270. package/src/internal/proxy/typed-object.test.ts +105 -0
  271. package/src/internal/ref/index.ts +6 -0
  272. package/src/internal/ref/ref-array.ts +39 -0
  273. package/src/internal/ref/ref.test.ts +101 -0
  274. package/src/internal/ref/ref.ts +525 -0
  275. package/src/internal/schema/compose.test.ts +42 -0
  276. package/src/internal/schema/compose.ts +37 -0
  277. package/src/internal/schema/echo-schema.ts +385 -0
  278. package/src/internal/schema/index.ts +9 -0
  279. package/src/internal/schema/manipulation.ts +92 -0
  280. package/src/internal/schema/persistent-schema.ts +28 -0
  281. package/src/internal/schema/runtime-schema-registry.ts +78 -0
  282. package/src/internal/schema/snapshot.ts +25 -0
  283. package/src/internal/types/base.ts +58 -0
  284. package/src/internal/types/entity.ts +23 -0
  285. package/src/internal/types/index.ts +9 -0
  286. package/src/internal/types/meta.ts +76 -0
  287. package/src/internal/types/typename.ts +45 -0
  288. package/src/internal/types/version.ts +20 -0
  289. package/src/query/filter.ts +455 -0
  290. package/src/query/index.ts +5 -1
  291. package/src/query/order.ts +34 -0
  292. package/src/query/query.test.ts +334 -0
  293. package/src/query/query.ts +303 -0
  294. package/src/query/testing.ts +64 -0
  295. package/src/query/types.ts +23 -0
  296. package/src/query/util.ts +25 -0
  297. package/src/testing/api.test.ts +100 -0
  298. package/src/testing/index.ts +3 -1
  299. package/src/testing/test-data.ts +130 -0
  300. package/src/testing/test-schema.ts +213 -0
  301. package/src/testing/util.ts +78 -0
  302. package/dist/lib/browser/chunk-2KNTYMIW.mjs +0 -697
  303. package/dist/lib/browser/chunk-2KNTYMIW.mjs.map +0 -7
  304. package/dist/lib/node-esm/chunk-EXNNC62J.mjs +0 -697
  305. package/dist/lib/node-esm/chunk-EXNNC62J.mjs.map +0 -7
  306. package/dist/types/src/experimental/database.d.ts +0 -8
  307. package/dist/types/src/experimental/database.d.ts.map +0 -1
  308. package/dist/types/src/experimental/index.d.ts +0 -1
  309. package/dist/types/src/experimental/index.d.ts.map +0 -1
  310. package/dist/types/src/experimental/queue.d.ts +0 -8
  311. package/dist/types/src/experimental/queue.d.ts.map +0 -1
  312. package/dist/types/src/experimental/space.d.ts +0 -8
  313. package/dist/types/src/experimental/space.d.ts.map +0 -1
  314. package/dist/types/src/query/dsl.d.ts +0 -218
  315. package/dist/types/src/query/dsl.d.ts.map +0 -1
  316. package/dist/types/src/query/dsl.test.d.ts +0 -2
  317. package/dist/types/src/query/dsl.test.d.ts.map +0 -1
  318. package/dist/types/src/testing/types.d.ts +0 -113
  319. package/dist/types/src/testing/types.d.ts.map +0 -1
  320. package/src/experimental/database.ts +0 -11
  321. package/src/experimental/index.ts +0 -7
  322. package/src/experimental/queue.ts +0 -11
  323. package/src/experimental/space.ts +0 -11
  324. package/src/query/dsl.test.ts +0 -324
  325. package/src/query/dsl.ts +0 -646
  326. package/src/test/api.test.ts +0 -173
  327. package/src/testing/types.ts +0 -91
  328. /package/dist/types/src/{test → testing}/api.test.d.ts +0 -0
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/internal/index.ts", "../../../src/internal/annotations/annotations.ts", "../../../src/internal/types/base.ts", "../../../src/internal/types/entity.ts", "../../../src/internal/types/meta.ts", "../../../src/internal/types/typename.ts", "../../../src/internal/types/version.ts", "../../../src/internal/annotations/util.ts", "../../../src/internal/entities/expando.ts", "../../../src/internal/entities/object.ts", "../../../src/internal/entities/entity.ts", "../../../src/internal/entities/model.ts", "../../../src/internal/entities/relation.ts", "../../../src/internal/entities/util.ts", "../../../src/internal/formats/number.ts", "../../../src/internal/formats/types.ts", "../../../src/internal/formats/object.ts", "../../../src/internal/formats/format.ts", "../../../src/internal/formats/date.ts", "../../../src/internal/formats/string.ts", "../../../src/internal/formats/select.ts", "../../../src/internal/json-schema/annotations.ts", "../../../src/internal/json-schema/json-schema-type.ts", "../../../src/internal/json-schema/json-schema-normalize.ts", "../../../src/internal/json-schema/json-schema.ts", "../../../src/internal/ref/ref.ts", "../../../src/internal/ref/ref-array.ts", "../../../src/internal/object/common.ts", "../../../src/internal/object/create-object.ts", "../../../src/internal/object/inspect.ts", "../../../src/internal/object/json-serializer.ts", "../../../src/internal/object/deleted.ts", "../../../src/internal/object/ids.ts", "../../../src/internal/object/schema-validator.ts", "../../../src/internal/object/typed-object.ts", "../../../src/internal/proxy/make-object.ts", "../../../src/internal/proxy/typed-handler.ts", "../../../src/internal/schema/echo-schema.ts", "../../../src/internal/schema/manipulation.ts", "../../../src/internal/schema/persistent-schema.ts", "../../../src/internal/schema/snapshot.ts", "../../../src/internal/schema/runtime-schema-registry.ts"],
4
+ "sourcesContent": ["//\n// Copyright 2024 DXOS.org\n//\n\n// TODO(burdon): Import directly (not part of ECHO API).\nexport { JsonPath, JsonProp, getValue, setValue, splitJsonPath } from '@dxos/effect';\n\nexport * from './annotations';\nexport * from './entities';\nexport * from './formats';\nexport * from './json-schema';\nexport * from './ref';\nexport * from './types';\n\n// TODO(wittjosiah): Required to ensure types are portable (need to export all types required for downstream inference).\nexport * from './object';\nexport * from './proxy';\nexport * from './schema';\n\n// export {\n// createObject,\n// createQueueDXN,\n// isDeleted,\n// objectFromJSON,\n// objectToJSON,\n// setRefResolverOnData,\n// SchemaValidator,\n// TypedObject,\n// } from './object';\n// export { makeObject } from './proxy';\n// export {\n// type BaseSchema,\n// EchoSchema,\n// ImmutableSchema,\n// RuntimeSchemaRegistry,\n// PersistentSchema,\n// isMutable,\n// } from './schema';\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport * as Function from 'effect/Function';\nimport * as Option from 'effect/Option';\nimport * as Schema from 'effect/Schema';\nimport * as SchemaAST from 'effect/SchemaAST';\n\nimport { Reference } from '@dxos/echo-protocol';\nimport { type JsonPath, getField } from '@dxos/effect';\nimport { assertArgument, invariant } from '@dxos/invariant';\nimport { DXN } from '@dxos/keys';\nimport { type Primitive } from '@dxos/util';\n\nimport { type AnyProperties, EntityKind, TypeId, getSchema } from '../types';\n\nimport { createAnnotationHelper } from './util';\n\n/**\n * @internal\n */\nexport const FIELD_PATH_ANNOTATION = 'path';\n\n/**\n * Sets the path for the field.\n * @param path Data source path in the json path format. This is the field path in the source object.\n */\n// TODO(burdon): Field, vs. path vs. property.\nexport const FieldPath = (path: string) => PropertyMeta(FIELD_PATH_ANNOTATION, path);\n\n/**\n * ECHO identifier (for a stored schema).\n * Must be a `dxn:echo:` URI.\n */\nexport const TypeIdentifierAnnotationId = Symbol.for('@dxos/schema/annotation/TypeIdentifier');\n\nexport const getTypeIdentifierAnnotation = (schema: Schema.Schema.All) =>\n Function.flow(\n SchemaAST.getAnnotation<string>(TypeIdentifierAnnotationId),\n Option.getOrElse(() => undefined),\n )(schema.ast);\n\n/**\n * Fully qualified globally unique typename.\n * Example: `dxos.org/type/Person`\n */\n// TODO(burdon): Reconcile with short DXN format.\n// TODO(burdon): Change type => schema throughout.\nexport const TypenameSchema = Schema.String.pipe(Schema.pattern(/^[a-zA-Z]\\w+\\.[a-zA-Z]\\w{1,}\\/[\\w/_-]+$/)).annotations(\n {\n description: 'Fully qualified globally unique typename',\n example: 'dxos.org/type/Person',\n },\n);\n\n/**\n * Semantic version format: `major.minor.patch`\n * Example: `1.0.0`\n */\nexport const VersionSchema = Schema.String.pipe(Schema.pattern(/^\\d+.\\d+.\\d+$/)).annotations({\n description: 'Semantic version format: `major.minor.patch`',\n example: '1.0.0',\n});\n\nexport const TypeMeta = Schema.Struct({\n typename: TypenameSchema,\n version: VersionSchema,\n});\n\nexport interface TypeMeta extends Schema.Schema.Type<typeof TypeMeta> {}\n\n/**\n * Entity type.\n */\nexport const TypeAnnotationId = Symbol.for('@dxos/schema/annotation/Type');\n\n/**\n * Payload stored under {@link TypeAnnotationId}.\n */\nexport const TypeAnnotation = Schema.extend(\n TypeMeta,\n Schema.Struct({\n kind: Schema.Enums(EntityKind),\n // kind: Schema.Enums(EntityKind),\n // typename: Typename,\n // version: VersionSchema,\n\n /**\n * If this is a relation, the schema of the source object.\n * Must be present if entity kind is {@link EntityKind.Relation}.\n */\n sourceSchema: Schema.optional(DXN.Schema),\n\n /**\n * If this is a relation, the schema of the target object.\n * Must be present if entity kind is {@link EntityKind.Relation}.\n */\n targetSchema: Schema.optional(DXN.Schema),\n }),\n);\n\nexport interface TypeAnnotation extends Schema.Schema.Type<typeof TypeAnnotation> {}\n\n// export type TypeMeta = Pick<TypeAnnotation, 'typename' | 'version'>;\n\n/**\n * @returns {@link TypeAnnotation} from a schema.\n * Schema must have been created with {@link TypedObject} or {@link TypedLink} or manually assigned an appropriate annotation.\n */\nexport const getTypeAnnotation = (schema: Schema.Schema.All): TypeAnnotation | undefined => {\n assertArgument(schema != null && schema.ast != null, 'schema', 'invalid schema');\n return Function.flow(\n SchemaAST.getAnnotation<TypeAnnotation>(TypeAnnotationId),\n Option.getOrElse(() => undefined),\n )(schema.ast);\n};\n\n/**\n * @returns {@link EntityKind} from a schema.\n */\nexport const getEntityKind = (schema: Schema.Schema.All): EntityKind | undefined => getTypeAnnotation(schema)?.kind;\n\n/**\n * @internal\n * @returns Schema typename (without dxn: prefix or version number).\n */\nexport const getSchemaTypename = (schema: Schema.Schema.All): string | undefined => getTypeAnnotation(schema)?.typename;\n\n/**\n * @internal\n * @returns Schema version in semver format.\n */\nexport const getSchemaVersion = (schema: Schema.Schema.All): string | undefined => getTypeAnnotation(schema)?.version;\n\n/**\n * Gets the typename of the object without the version.\n * Returns only the name portion, not the DXN.\n * @example \"example.org/type/Contact\"\n *\n * @internal (use Obj.getTypename)\n */\nexport const getTypename = (obj: AnyProperties): string | undefined => {\n const schema = getSchema(obj);\n if (schema != null) {\n // Try to extract typename from DXN.\n return getSchemaTypename(schema);\n } else {\n const type = getTypeDXN(obj);\n return type?.asTypeDXN()?.type;\n }\n};\n\n/**\n * @internal (use Type.setTypename)\n */\n// TODO(dmaretskyi): Rename setTypeDXN.\nexport const setTypename = (obj: any, typename: DXN): void => {\n invariant(typename instanceof DXN, 'Invalid type.');\n Object.defineProperty(obj, TypeId, {\n value: typename,\n writable: false,\n enumerable: false,\n configurable: false,\n });\n};\n\n/**\n * @returns Object type as {@link DXN}.\n * @returns undefined if the object doesn't have a type.\n * @example `dxn:example.com/type/Person:1.0.0`\n *\n * @internal (use Obj.getTypeDXN)\n */\n// TODO(burdon): Narrow type.\nexport const getTypeDXN = (obj: AnyProperties): DXN | undefined => {\n if (!obj) {\n return undefined;\n }\n\n const type = (obj as any)[TypeId];\n if (!type) {\n return undefined;\n }\n\n invariant(type instanceof DXN, 'Invalid object.');\n return type;\n};\n\n/**\n * Checks if the object is an instance of the schema.\n * Only typename is compared, the schema version is ignored.\n *\n * The following cases are considered to mean that the object is an instance of the schema:\n * - Object was created with this exact schema.\n * - Object was created with a different version of this schema.\n * - Object was created with a different schema (maybe dynamic) that has the same typename.\n */\n// TODO(burdon): Can we use `Schema.is`?\nexport const isInstanceOf = <Schema extends Schema.Schema.AnyNoContext>(\n schema: Schema,\n object: any,\n): object is Schema.Schema.Type<Schema> => {\n if (object == null) {\n return false;\n }\n\n const schemaDXN = getSchemaDXN(schema);\n if (!schemaDXN) {\n throw new Error('Schema must have an object annotation.');\n }\n\n const type = getTypeDXN(object);\n if (type && DXN.equals(type, schemaDXN)) {\n return true;\n }\n\n const typename = getTypename(object);\n if (!typename) {\n return false;\n }\n\n const typeDXN = schemaDXN.asTypeDXN();\n if (!typeDXN) {\n return false;\n }\n\n return typeDXN.type === typename;\n};\n\n/**\n * PropertyMeta (metadata for dynamic schema properties).\n * For user-defined annotations.\n */\nexport const PropertyMetaAnnotationId = Symbol.for('@dxos/schema/annotation/PropertyMeta');\n\nexport type PropertyMetaValue = Primitive | Record<string, Primitive> | Primitive[];\n\nexport type PropertyMetaAnnotation = {\n [name: string]: PropertyMetaValue;\n};\n\n// TODO(wittjosiah): Align with other annotations.\n// TODO(wittjosiah): Why is this separate from FormatAnnotation?\nexport const PropertyMeta = (name: string, value: PropertyMetaValue) => {\n return <A, I, R>(self: Schema.Schema<A, I, R>): Schema.Schema<A, I, R> => {\n const existingMeta = self.ast.annotations[PropertyMetaAnnotationId] as PropertyMetaAnnotation;\n return self.annotations({\n [PropertyMetaAnnotationId]: {\n ...existingMeta,\n [name]: value,\n },\n });\n };\n};\n\nexport const getPropertyMetaAnnotation = <T>(prop: SchemaAST.PropertySignature, name: string) =>\n Function.pipe(\n SchemaAST.getAnnotation<PropertyMetaAnnotation>(PropertyMetaAnnotationId)(prop.type),\n Option.map((meta) => meta[name] as T),\n Option.getOrElse(() => undefined),\n );\n\n/**\n * Schema reference.\n */\nexport const ReferenceAnnotationId = Symbol.for('@dxos/schema/annotation/Reference');\n\nexport type ReferenceAnnotationValue = TypeAnnotation;\n\nexport const getReferenceAnnotation = (schema: Schema.Schema.AnyNoContext) =>\n Function.pipe(\n SchemaAST.getAnnotation<ReferenceAnnotationValue>(ReferenceAnnotationId)(schema.ast),\n Option.getOrElse(() => undefined),\n );\n\n/**\n * SchemaMeta.\n */\nexport const SchemaMetaSymbol = Symbol.for('@dxos/schema/SchemaMeta');\nexport type SchemaMeta = TypeMeta & { id: string };\n\n/**\n * Identifies a schema as a schema for a hidden system type.\n */\nexport const SystemTypeAnnotationId = Symbol.for('@dxos/schema/annotation/SystemType');\nexport const SystemTypeAnnotation = createAnnotationHelper<boolean>(SystemTypeAnnotationId);\n\n/**\n * Identifies label property or JSON path expression.\n * Either a string or an array of strings representing field accessors each matched in priority order.\n */\nexport const LabelAnnotationId = Symbol.for('@dxos/schema/annotation/Label');\nexport const LabelAnnotation = createAnnotationHelper<string[]>(LabelAnnotationId);\n\n/**\n * Returns the label for a given object based on {@link LabelAnnotationId}.\n */\n// TODO(burdon): Convert to JsonPath?\nexport const getLabel = <S extends Schema.Schema.Any>(schema: S, object: Schema.Schema.Type<S>): string | undefined => {\n const annotation = LabelAnnotation.get(schema).pipe(Option.getOrElse(() => ['name']));\n for (const accessor of annotation) {\n assertArgument(\n typeof accessor === 'string',\n 'accessor',\n 'Label annotation must be a string or an array of strings',\n );\n const value = getField(object, accessor as JsonPath);\n switch (typeof value) {\n case 'string':\n case 'number':\n case 'boolean':\n case 'bigint':\n case 'symbol':\n return value.toString();\n case 'undefined':\n case 'object':\n case 'function':\n continue;\n }\n }\n\n return undefined;\n};\n\n/**\n * Sets the label for a given object based on {@link LabelAnnotationId}.\n */\nexport const setLabel = <S extends Schema.Schema.Any>(schema: S, object: Schema.Schema.Type<S>, label: string) => {\n const annotation = LabelAnnotation.get(schema).pipe(\n Option.map((field) => field[0]),\n Option.getOrElse(() => 'name'),\n );\n object[annotation] = label;\n};\n\n/**\n * Identifies description property or JSON path expression.\n * A string representing field accessor.\n */\nexport const DescriptionAnnotationId = Symbol.for('@dxos/schema/annotation/Description');\nexport const DescriptionAnnotation = createAnnotationHelper<string>(DescriptionAnnotationId);\n\n/**\n * Returns the label for a given object based on {@link LabelAnnotationId}.\n */\n// TODO(burdon): Convert to JsonPath?\nexport const getDescription = <S extends Schema.Schema.Any>(\n schema: S,\n object: Schema.Schema.Type<S>,\n): string | undefined => {\n const accessor = DescriptionAnnotation.get(schema).pipe(Option.getOrElse(() => 'description'));\n assertArgument(typeof accessor === 'string', 'accessor', 'Description annotation must be a string');\n const value = getField(object, accessor as JsonPath);\n switch (typeof value) {\n case 'string':\n case 'number':\n case 'boolean':\n case 'bigint':\n case 'symbol':\n return value.toString();\n case 'undefined':\n case 'object':\n case 'function':\n default:\n return undefined;\n }\n};\n\n/**\n * Sets the description for a given object based on {@link DescriptionAnnotationId}.\n */\nexport const setDescription = <S extends Schema.Schema.Any>(\n schema: S,\n object: Schema.Schema.Type<S>,\n description: string,\n) => {\n const accessor = DescriptionAnnotation.get(schema).pipe(Option.getOrElse(() => 'description'));\n object[accessor] = description;\n};\n\n/**\n * Identifies if a property should be included in a form or not.\n * By default, all properties are included in forms, so this is opt-out.\n */\n// TODO(burdon): UI concern.\nexport const FormInputAnnotationId = Symbol.for('@dxos/schema/annotation/FormInput');\nexport const FormInputAnnotation = createAnnotationHelper<boolean>(FormInputAnnotationId);\n\n/**\n * Default field to be used on referenced schema to lookup the value.\n */\nexport const FieldLookupAnnotationId = Symbol.for('@dxos/schema/annotation/FieldLookup');\n\n/**\n * Generate test data.\n */\nexport const GeneratorAnnotationId = Symbol.for('@dxos/schema/annotation/Generator');\n\nexport type GeneratorAnnotationValue =\n | string\n | {\n generator: string;\n args?: any[];\n probability?: number;\n };\n\nexport const GeneratorAnnotation = createAnnotationHelper<GeneratorAnnotationValue>(GeneratorAnnotationId);\n\n/**\n * @returns DXN of the schema.\n *\n * For non-stored schema returns `dxn:type:`.\n * For stored schema returns `dxn:echo:`.\n */\nexport const getSchemaDXN = (schema: Schema.Schema.All): DXN | undefined => {\n assertArgument(Schema.isSchema(schema), 'schema', 'invalid schema');\n\n const id = getTypeIdentifierAnnotation(schema);\n if (id) {\n return DXN.parse(id);\n }\n\n // TODO(dmaretskyi): Add support for dynamic schema.\n const objectAnnotation = getTypeAnnotation(schema);\n if (!objectAnnotation) {\n return undefined;\n }\n\n return DXN.fromTypenameAndVersion(objectAnnotation.typename, objectAnnotation.version);\n};\n\n/**\n * Returns a reference that will be used to point to a schema.\n * @deprecated Use {@link getSchemaDXN} instead.\n */\nexport const getTypeReference = (schema: Schema.Schema.All | undefined): Reference | undefined => {\n if (!schema) {\n return undefined;\n }\n\n const schemaDXN = getSchemaDXN(schema);\n if (!schemaDXN) {\n return undefined;\n }\n return Reference.fromDXN(schemaDXN);\n};\n\n/**\n * Returns a reference that will be used to point to a schema.\n * @throws If it is not possible to reference this schema.\n *\n * @deprecated Use {@link getSchemaDXN} instead.\n */\nexport const requireTypeReference = (schema: Schema.Schema.AnyNoContext): Reference => {\n const typeReference = getTypeReference(schema);\n if (typeReference == null) {\n // TODO(burdon): Catalog user-facing errors (this is too verbose).\n throw new Error('Schema must be defined via TypedObject.');\n }\n\n return typeReference;\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport * as Schema from 'effect/Schema';\nimport * as SchemaAST from 'effect/SchemaAST';\n\nimport { type ObjectId } from '@dxos/keys';\n\nimport { type ATTR_META, type ObjectMeta } from './meta';\n\n/**\n * Marker interface for object with an `id`.\n */\nexport interface HasId {\n readonly id: ObjectId;\n}\n\n/**\n * Object that has an associated typename.\n * The typename is retrievable using {@link getTypename}.\n * The object can be used with {@link isInstanceOf} to check if it is an instance of a schema.\n */\nexport type HasTypename = {};\n\n/**\n * Base type for all data objects (reactive, ECHO, and other raw objects).\n * NOTE: This describes the base type for all database objects.\n * It is stricter than `T extends {}` or `T extends object`.\n */\n// TODO(burdon): Make internal.\n// TODO(burdon): Prefer Record<string, unknown>.\n// TODO(burdon): Exclude \"id\", etc. from keys.\nexport type AnyProperties = Record<string, any>;\n\n/**\n * Canonical type for all ECHO objects.\n */\nexport interface AnyEchoObject extends HasId, HasTypename {}\n\n// TODO(dmaretskyi): Remove; this type effectively disables type safety due to `any`.\nexport type WithId<T extends AnyProperties = AnyProperties> = T & HasId;\n\nexport type ExcludeId<T extends AnyProperties> = Omit<T, 'id'>;\n\nexport type PropertyKey<T extends AnyProperties> = Extract<keyof ExcludeId<T>, string>;\n\n// TODO(dmaretskyi): Remove. This should be using the symbol type.\nexport type WithMeta = { [ATTR_META]?: ObjectMeta };\n\n/**\n * The raw object should not include the ECHO id, but may include metadata.\n */\nexport const RawObject = <S extends Schema.Schema.AnyNoContext>(\n schema: S,\n): Schema.Schema<ExcludeId<Schema.Schema.Type<S>> & WithMeta, Schema.Schema.Encoded<S>> => {\n return Schema.make(SchemaAST.omit(schema.ast, ['id']));\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport * as Schema from 'effect/Schema';\n\n/**\n * Entity kind.\n */\nconst EntityKindId = Symbol.for('@dxos/echo/EntityKind');\n\n/**\n * Kinds of entities stored in ECHO: objects and relations.\n */\nexport enum EntityKind {\n Object = 'object',\n Relation = 'relation',\n}\n\nexport const EntityKindSchema = Schema.Enums(EntityKind);\n\nexport const KindId: unique symbol = EntityKindId as any;\nexport type KindId = typeof KindId;\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport * as Schema from 'effect/Schema';\n\nimport { ForeignKey } from '@dxos/echo-protocol';\nimport { invariant } from '@dxos/invariant';\nimport { type Comparator, intersection } from '@dxos/util';\n\nimport { type AnyProperties, type WithMeta } from './base';\n\n/**\n * Property name for meta when object is serialized to JSON.\n */\nexport const ATTR_META = '@meta';\n\n/**\n * Metadata section.\n */\nexport const MetaId = Symbol.for('@dxos/echo/Meta');\n\n//\n// ObjectMeta\n//\n\n// TODO(dmaretskyi): Rename to ObjectMeta\nexport const ObjectMetaSchema = Schema.mutable(\n Schema.Struct({\n keys: Schema.mutable(Schema.Array(ForeignKey)),\n\n /**\n * A set of tags.\n * Tags are arbitrary application-defined strings.\n * ECHO makes no assumptions about the tag structure.\n */\n // TODO(dmaretskyi): Has to be optional for compatibility with old data.\n // Defaulting to an empty array is possible but requires a bit more work.\n tags: Schema.optional(Schema.mutable(Schema.Array(Schema.String))),\n }),\n);\nexport type ObjectMeta = Schema.Schema.Type<typeof ObjectMetaSchema>;\n\n/*\n * Get metadata from object.\n * Only callable on the object root.\n *\n * @internal (use Obj.getMeta or Relation.getMeta)\n */\n// TODO(burdon): Refine type to BaseObj.\nexport const getMeta = (obj: AnyProperties): ObjectMeta => {\n const metadata = (obj as any)[MetaId];\n invariant(metadata, 'ObjectMeta not found.');\n return metadata;\n};\n\n/**\n * Utility to split meta property from raw object.\n * @deprecated Bad API.\n */\nexport const splitMeta = <T>(object: T & WithMeta): { object: T; meta?: ObjectMeta } => {\n const meta = object[ATTR_META];\n delete object[ATTR_META];\n return { meta, object };\n};\n\n//\n// Foreign keys\n//\n\nexport const foreignKey = (source: string, id: string): ForeignKey => ({ source, id });\nexport const foreignKeyEquals = (a: ForeignKey, b: ForeignKey) => a.source === b.source && a.id === b.id;\n\n// TODO(dmaretskyi): Move to echo-schema.\nexport const compareForeignKeys: Comparator<AnyProperties> = (a: AnyProperties, b: AnyProperties) =>\n intersection(getMeta(a).keys, getMeta(b).keys, foreignKeyEquals).length > 0;\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport type * as Schema from 'effect/Schema';\n\n/**\n * Property name for typename when object is serialized to JSON.\n */\nexport const ATTR_TYPE = '@type';\n\n/**\n * DXN to the object type.\n */\nexport const TypeId = Symbol.for('@dxos/echo/Type');\n\n/**\n * Reference to the object schema.\n */\nexport const SchemaId = Symbol.for('@dxos/echo/Schema');\n\n/**\n * Returns the schema for the given object if one is defined.\n *\n * @internal (Use Obj.getSchema)\n */\n// TODO(burdon): Narrow type.\n// TODO(dmaretskyi): For echo objects, this always returns the root schema.\nexport const getSchema = (obj: unknown | undefined): Schema.Schema.AnyNoContext | undefined => {\n if (obj) {\n return (obj as any)[SchemaId];\n }\n};\n\n/**\n * @internal\n */\nexport const setSchema = (obj: any, schema: Schema.Schema.AnyNoContext): void => {\n Object.defineProperty(obj, SchemaId, {\n value: schema,\n writable: false,\n enumerable: false,\n configurable: false,\n });\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\n/**\n * Version type symbol.\n */\nexport const VersionTypeId: unique symbol = Symbol.for('@dxos/echo/VersionTypeId');\n\nexport type VersionTypeId = typeof VersionTypeId;\n\n/**\n * Represents the object version.\n * May be backed by Automerge.\n * Objects with no history are not versioned.\n */\nexport interface Version {\n [VersionTypeId]: {};\n automergeHeads?: string[];\n}\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport type * as Option from 'effect/Option';\nimport type * as Schema from 'effect/Schema';\nimport * as SchemaAST from 'effect/SchemaAST';\n\nimport { assertArgument } from '@dxos/invariant';\nimport { DXN } from '@dxos/keys';\n\nimport { EntityKind } from '../types';\n\nexport interface AnnotationHelper<T> {\n get: (schema: Schema.Schema.Any) => Option.Option<T>;\n set: (value: T) => <S extends Schema.Schema.Any>(schema: S) => S;\n}\n\nexport const createAnnotationHelper = <T>(id: symbol): AnnotationHelper<T> => {\n return {\n get: (schema) => SchemaAST.getAnnotation(schema.ast, id),\n set:\n (value) =>\n <S extends Schema.Schema.Any>(schema: S) =>\n schema.annotations({ [id]: value }) as S,\n };\n};\n\n/**\n * If property is optional returns the nested property, otherwise returns the property.\n */\n// TODO(wittjosiah): Is there a way to do this as a generic?\nexport const unwrapOptional = (property: SchemaAST.PropertySignature) => {\n if (!property.isOptional || !SchemaAST.isUnion(property.type)) {\n return property;\n }\n\n return property.type.types[0];\n};\n\n/**\n * @see JSONSchemaAnnotationId\n * @returns JSON-schema annotation so that the schema can be serialized with correct parameters.\n */\n// TODO(burdon): Required type.\nexport const makeTypeJsonSchemaAnnotation = (options: {\n identifier?: string;\n kind: EntityKind;\n typename: string;\n version: string;\n relationSource?: string;\n relationTarget?: string;\n}) => {\n assertArgument(!!options.relationSource === (options.kind === EntityKind.Relation), 'relationSource');\n assertArgument(!!options.relationTarget === (options.kind === EntityKind.Relation), 'relationTarget');\n\n const obj = {\n // TODO(dmaretskyi): Should this include the version?\n $id: options.identifier ?? DXN.fromTypename(options.typename).toString(),\n entityKind: options.kind,\n version: options.version,\n typename: options.typename,\n } as any;\n if (options.kind === EntityKind.Relation) {\n obj.relationSource = { $ref: options.relationSource };\n obj.relationTarget = { $ref: options.relationTarget };\n }\n\n return obj;\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport * as Schema from 'effect/Schema';\n\nimport { EchoObjectSchema } from './object';\n\nexport const EXPANDO_TYPENAME = 'dxos.org/type/Expando';\n\nconst ExpandoSchema = Schema.Struct({}, { key: Schema.String, value: Schema.Any }).pipe(\n EchoObjectSchema({\n typename: EXPANDO_TYPENAME,\n version: '0.1.0',\n }),\n);\n\n/**\n * Expando object is an object with an arbitrary set of properties.\n */\nexport interface Expando extends Schema.Schema.Type<typeof ExpandoSchema> {}\nexport interface ExpandoEncoded extends Schema.Schema.Encoded<typeof ExpandoSchema> {}\nexport const Expando: Schema.Schema<Expando, ExpandoEncoded> = ExpandoSchema;\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport * as Schema from 'effect/Schema';\nimport * as SchemaAST from 'effect/SchemaAST';\n\nimport { invariant } from '@dxos/invariant';\n\nimport { type TypeAnnotation, TypeAnnotationId, type TypeMeta, makeTypeJsonSchemaAnnotation } from '../annotations';\nimport { EntityKind } from '../types';\n\nimport { type EchoTypeSchema, makeEchoTypeSchema } from './entity';\n\n/**\n * Schema for Obj entity types.\n * Pipeable function to add ECHO object annotations to a schema.\n */\nexport const EchoObjectSchema: {\n // TODO(burdon): Tighten Self type to Schema.TypeLiteral or Schema.Struct to facilitate definition of `make` method.\n // (meta: TypeMeta): <Self extends Schema.Struct<Fields>, Fields extends Schema.Struct.Fields>(self: Self) => EchoObjectSchema<Self, Fields>;\n (meta: TypeMeta): <Self extends Schema.Schema.Any>(self: Self) => EchoTypeSchema<Self>;\n} = ({ typename, version }) => {\n return <Self extends Schema.Schema.Any>(self: Self): EchoTypeSchema<Self> => {\n invariant(typeof TypeAnnotationId === 'symbol', 'Sanity.');\n invariant(SchemaAST.isTypeLiteral(self.ast), 'Schema must be a TypeLiteral.');\n\n // TODO(dmaretskyi): Does `Schema.mutable` work for deep mutability here?\n // TODO(dmaretskyi): Do not do mutable here.\n const schemaWithId = Schema.extend(Schema.mutable(self), Schema.Struct({ id: Schema.String }));\n const ast = SchemaAST.annotations(schemaWithId.ast, {\n // TODO(dmaretskyi): `extend` kills the annotations.\n ...self.ast.annotations,\n [TypeAnnotationId]: { kind: EntityKind.Object, typename, version } satisfies TypeAnnotation,\n // TODO(dmaretskyi): TypeIdentifierAnnotationId?\n [SchemaAST.JSONSchemaAnnotationId]: makeTypeJsonSchemaAnnotation({\n kind: EntityKind.Object,\n typename,\n version,\n }),\n });\n\n return makeEchoTypeSchema<Self>(/* self.fields, */ ast, typename, version);\n };\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport * as Schema from 'effect/Schema';\nimport type * as SchemaAST from 'effect/SchemaAST';\nimport type * as Types from 'effect/Types';\n\nimport { type ToMutable } from '@dxos/util';\n\nimport { type TypeMeta } from '../annotations';\nimport { type HasId } from '../types';\n\n// TODO(burdon): Define Schema type for `typename` and use consistently for all DXN-like properties.\n\n// type RequiredKeys<T> = { [K in keyof T]-?: {} extends Pick<T, K> ? never : K }[keyof T];\nexport type EchoTypeSchemaProps<T, ExtraFields = {}> = Types.Simplify<HasId & ToMutable<T> & ExtraFields>;\n\n// TODO(burdon): Rename EchoEntitySchema.\nexport interface EchoTypeSchema<Self extends Schema.Schema.Any, ExtraFields = {}>\n extends TypeMeta,\n Schema.AnnotableClass<\n EchoTypeSchema<Self, ExtraFields>,\n EchoTypeSchemaProps<Schema.Schema.Type<Self>, ExtraFields>,\n EchoTypeSchemaProps<Schema.Schema.Encoded<Self>, ExtraFields>,\n Schema.Schema.Context<Self>\n > {\n // make(\n // props: RequiredKeys<Schema.TypeLiteral.Constructor<Fields, []>> extends never\n // ? void | Simplify<Schema.TypeLiteral.Constructor<Fields, []>>\n // : Simplify<Schema.TypeLiteral.Constructor<Fields, []>>,\n // options?: MakeOptions,\n // ): Simplify<Schema.TypeLiteral.Type<Fields, []>>;\n\n instanceOf(value: unknown): boolean;\n}\n\n// type MakeOptions =\n// | boolean\n// | {\n// readonly disableValidation?: boolean;\n// };\n\n// NOTE: Utils copied from Effect `Schema.ts`.\n// const _ownKeys = (o: object): Array<PropertyKey> =>\n// (Object.keys(o) as Array<PropertyKey>).concat(Object.getOwnPropertySymbols(o));\n\n// const _lazilyMergeDefaults = (\n// fields: Schema.Struct.Fields,\n// out: Record<PropertyKey, unknown>,\n// ): { [x: string | symbol]: unknown } => {\n// const ownKeys = _ownKeys(fields);\n// for (const key of ownKeys) {\n// const field = fields[key];\n// if (out[key] === undefined && Schema.isPropertySignature(field)) {\n// const ast = field.ast;\n// const defaultValue = ast._tag === 'PropertySignatureDeclaration' ? ast.defaultValue : ast.to.defaultValue;\n// if (defaultValue !== undefined) {\n// out[key] = defaultValue();\n// }\n// }\n// }\n// return out;\n// };\n\n// const _getDisableValidationMakeOption = (options: MakeOptions | undefined): boolean =>\n// Predicate.isBoolean(options) ? options : options?.disableValidation ?? false;\n\n/**\n * @internal\n */\nexport const makeEchoTypeSchema = <Self extends Schema.Schema.Any>(\n // fields: Fields,\n ast: SchemaAST.AST,\n typename: string,\n version: string,\n): EchoTypeSchema<Self> => {\n return class EchoObjectSchemaClass extends Schema.make<\n EchoTypeSchemaProps<Schema.Schema.Type<Self>>,\n EchoTypeSchemaProps<Schema.Schema.Encoded<Self>>,\n Schema.Schema.Context<Self>\n >(ast) {\n static readonly typename = typename;\n static readonly version = version;\n\n static override annotations(\n annotations: Schema.Annotations.GenericSchema<EchoTypeSchemaProps<Schema.Schema.Type<Self>>>,\n ): EchoTypeSchema<Self> {\n const schema = Schema.make<EchoTypeSchemaProps<Schema.Schema.Type<Self>>>(ast).annotations(annotations);\n return makeEchoTypeSchema<Self>(/* fields, */ schema.ast, typename, version);\n }\n\n // static make(\n // props: RequiredKeys<Schema.TypeLiteral.Constructor<Fields, []>> extends never\n // ? void | Simplify<Schema.TypeLiteral.Constructor<Fields, []>>\n // : Simplify<Schema.TypeLiteral.Constructor<Fields, []>>,\n // options?: MakeOptions,\n // ): Simplify<Schema.TypeLiteral.Type<Fields, []>> {\n // const propsWithDefaults: any = _lazilyMergeDefaults(fields, { ...(props as any) });\n // return _getDisableValidationMakeOption(options)\n // ? propsWithDefaults\n // : ParseResult.validateSync(this)(propsWithDefaults);\n // }\n\n static instanceOf(value: unknown): boolean {\n return Schema.is(this)(value);\n }\n };\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport type * as Schema from 'effect/Schema';\n\nimport { type ForeignKey } from '@dxos/echo-protocol';\nimport { invariant } from '@dxos/invariant';\nimport { DXN, ObjectId } from '@dxos/keys';\nimport { assumeType } from '@dxos/util';\n\nimport {\n type ATTR_META,\n type ATTR_TYPE,\n EntityKind,\n KindId,\n type MetaId,\n type ObjectMeta,\n type SchemaId,\n TypeId,\n type Version,\n} from '../types';\n\nimport {\n type ATTR_RELATION_SOURCE,\n type ATTR_RELATION_TARGET,\n RelationSourceDXNId,\n RelationSourceId,\n RelationTargetDXNId,\n RelationTargetId,\n} from './relation';\n\n//\n// Defines the internal model of the echo object.\n//\n\n/**\n * Property name for self DXN when object is serialized to JSON.\n */\nexport const ATTR_SELF_DXN = '@dxn';\n\n/**\n * DXN to the object itself.\n */\nexport const SelfDXNId = Symbol.for('@dxos/echo/DXN');\n\n/**\n * Property name for deleted when object is serialized to JSON.\n */\nexport const ATTR_DELETED = '@deleted';\n\n/**\n * Deletion marker.\n */\nexport const ObjectDeletedId = Symbol.for('@dxos/echo/Deleted');\n\n/**\n * Object version accessor symbol.\n */\nexport const ObjectVersionId: unique symbol = Symbol.for('@dxos/echo/Version');\n\n/**\n * Internal runtime representation of an object.\n * The fields are accessed through getter functions.\n */\nexport interface InternalObjectProps {\n id: ObjectId;\n\n // Echo supports untyped objects O_O.\n readonly [TypeId]?: DXN;\n\n //\n readonly [SelfDXNId]?: DXN;\n\n /**\n * Returns the schema for the object.\n */\n readonly [SchemaId]?: Schema.Schema.AnyNoContext;\n readonly [KindId]: EntityKind;\n readonly [MetaId]?: ObjectMeta;\n readonly [ObjectDeletedId]?: boolean;\n readonly [ObjectVersionId]?: Version;\n readonly [RelationSourceDXNId]?: DXN;\n readonly [RelationTargetDXNId]?: DXN;\n readonly [RelationSourceId]?: InternalObjectProps;\n readonly [RelationTargetId]?: InternalObjectProps;\n}\n\n/**\n * Entity metadata.\n */\nexport interface ObjectMetaJSON {\n keys: ForeignKey[];\n tags?: string[];\n}\n\n/**\n * JSON representation of an object or relation metadata.\n */\nexport interface ObjectJSON {\n id: string;\n [ATTR_TYPE]: DXN.String;\n [ATTR_SELF_DXN]?: DXN.String;\n [ATTR_DELETED]?: boolean;\n [ATTR_META]?: ObjectMetaJSON;\n [ATTR_RELATION_SOURCE]?: DXN.String;\n [ATTR_RELATION_TARGET]?: DXN.String;\n}\n\n/**\n * NOTE: Keep as `function` to avoid type inference issues.\n */\nexport function assertObjectModel(obj: unknown): asserts obj is InternalObjectProps {\n invariant(typeof obj === 'object' && obj !== null, 'Invalid object model: not an object');\n assumeType<InternalObjectProps>(obj);\n invariant(ObjectId.isValid(obj.id), 'Invalid object model: invalid id');\n invariant(obj[TypeId] === undefined || obj[TypeId] instanceof DXN, 'Invalid object model: invalid type');\n invariant(\n obj[KindId] === EntityKind.Object || obj[KindId] === EntityKind.Relation,\n 'Invalid object model: invalid entity kind',\n );\n\n if (obj[KindId] === EntityKind.Relation) {\n invariant(obj[RelationSourceDXNId] instanceof DXN, 'Invalid object model: invalid relation source');\n invariant(obj[RelationTargetDXNId] instanceof DXN, 'Invalid object model: invalid relation target');\n invariant(!(obj[RelationSourceId] instanceof DXN), 'Invalid object model: source pointer is a DXN');\n invariant(!(obj[RelationTargetId] instanceof DXN), 'Invalid object model: target pointer is a DXN');\n }\n}\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport * as Schema from 'effect/Schema';\nimport * as SchemaAST from 'effect/SchemaAST';\n\nimport { raise } from '@dxos/debug';\nimport { assertArgument, invariant } from '@dxos/invariant';\nimport { DXN } from '@dxos/keys';\n\nimport {\n type TypeAnnotation,\n TypeAnnotationId,\n type TypeMeta,\n getEntityKind,\n getSchemaTypename,\n getTypeIdentifierAnnotation,\n makeTypeJsonSchemaAnnotation,\n} from '../annotations';\nimport { EntityKind } from '../types';\n\nimport { type EchoTypeSchema, makeEchoTypeSchema } from './entity';\n\n/**\n * Property name for relation source when object is serialized to JSON.\n */\nexport const ATTR_RELATION_SOURCE = '@relationSource';\n\n/**\n * Used to access relation source ref on live ECHO objects.\n * Reading this symbol must return `Live<EchoObjectSchema<any>>` or a DXN.\n */\nexport const RelationSourceId: unique symbol = Symbol.for('@dxos/echo/RelationSource');\n\n/**\n * Used to access relation source ref on live ECHO objects.\n * Reading this symbol must return `Live<EchoObjectSchema<any>>` or a DXN.\n */\nexport const RelationSourceDXNId: unique symbol = Symbol.for('@dxos/echo/RelationSourceDXN');\n\n/**\n * Property name for relation target when object is serialized to JSON.\n */\nexport const ATTR_RELATION_TARGET = '@relationTarget';\n\n/**\n * Used to access relation target ref on live ECHO objects.\n * Reading this symbol must return `Live<EchoObjectSchema<any>>` or a DXN.\n */\nexport const RelationTargetId: unique symbol = Symbol.for('@dxos/echo/RelationTarget');\n\n/**\n * Used to access relation target ref on live ECHO objects.\n * Reading this symbol must return `Live<EchoObjectSchema<any>>` or a DXN.\n */\nexport const RelationTargetDXNId: unique symbol = Symbol.for('@dxos/echo/RelationTargetDXN');\n\n/**\n * Source and target props on relations.\n */\n// TODO(burdon): any?\nexport type RelationSourceTargetRefs<Source = any, Target = any> = {\n /**\n * Source ECHO live object.\n */\n [RelationSourceId]: Source;\n\n /**\n * Target ECHO live object.\n */\n [RelationTargetId]: Target;\n};\n\nexport type RelationSource<R> = R extends RelationSourceTargetRefs<infer Source, infer _Target> ? Source : never;\nexport type RelationTarget<R> = R extends RelationSourceTargetRefs<infer _Source, infer Target> ? Target : never;\n\nexport type EchoRelationSchemaOptions<\n TSource extends Schema.Schema.AnyNoContext,\n TTarget extends Schema.Schema.AnyNoContext,\n> = TypeMeta & {\n source: TSource;\n target: TTarget;\n};\n\n/**\n * Schema for Relation entity types.\n */\nexport const EchoRelationSchema = <\n Source extends Schema.Schema.AnyNoContext,\n Target extends Schema.Schema.AnyNoContext,\n>({\n source,\n target,\n typename,\n version,\n}: EchoRelationSchemaOptions<Source, Target>) => {\n assertArgument(Schema.isSchema(source), 'source');\n assertArgument(Schema.isSchema(target), 'target');\n const sourceDXN = getDXNForRelationSchemaRef(source);\n const targetDXN = getDXNForRelationSchemaRef(target);\n if (getEntityKind(source) !== EntityKind.Object) {\n raise(new Error('Source schema must be an echo object schema.'));\n }\n if (getEntityKind(target) !== EntityKind.Object) {\n raise(new Error('Target schema must be an echo object schema.'));\n }\n\n return <Self extends Schema.Schema.Any>(\n self: Self,\n ): EchoTypeSchema<Self, RelationSourceTargetRefs<Schema.Schema.Type<Source>, Schema.Schema.Type<Target>>> => {\n invariant(SchemaAST.isTypeLiteral(self.ast), 'Schema must be a TypeLiteral.');\n\n // TODO(dmaretskyi): Does `Schema.mutable` work for deep mutability here?\n // TODO(dmaretskyi): Do not do mutable here.\n const schemaWithId = Schema.extend(Schema.mutable(self), Schema.Struct({ id: Schema.String }));\n const ast = SchemaAST.annotations(schemaWithId.ast, {\n // TODO(dmaretskyi): `extend` kills the annotations.\n ...self.ast.annotations,\n [TypeAnnotationId]: {\n kind: EntityKind.Relation,\n typename,\n version,\n sourceSchema: sourceDXN,\n targetSchema: targetDXN,\n } satisfies TypeAnnotation,\n // TODO(dmaretskyi): TypeIdentifierAnnotationId?\n\n [SchemaAST.JSONSchemaAnnotationId]: makeTypeJsonSchemaAnnotation({\n kind: EntityKind.Relation,\n typename,\n version,\n relationSource: sourceDXN,\n relationTarget: targetDXN,\n }),\n });\n\n return makeEchoTypeSchema<Self>(/* self.fields, */ ast, typename, version);\n };\n};\n\nconst getDXNForRelationSchemaRef = (schema: Schema.Schema.Any): string => {\n assertArgument(Schema.isSchema(schema), 'schema');\n const identifier = getTypeIdentifierAnnotation(schema);\n if (identifier) {\n return identifier;\n }\n\n const typename = getSchemaTypename(schema);\n if (!typename) {\n throw new Error('Schema must have a typename');\n }\n\n return DXN.fromTypename(typename).toString();\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport * as Schema from 'effect/Schema';\n\nimport { assertArgument, invariant } from '@dxos/invariant';\nimport { DXN, ObjectId } from '@dxos/keys';\nimport { assumeType } from '@dxos/util';\n\nimport { type InternalObjectProps, SelfDXNId } from './model';\n\n/**\n * Returns a DXN for an object or schema.\n *\n * @internal\n */\nexport const getObjectDXN = (object: any): DXN | undefined => {\n invariant(!Schema.isSchema(object), 'schema not allowed in this function');\n assertArgument(typeof object === 'object' && object != null, 'object', 'expected object');\n assumeType<InternalObjectProps>(object);\n\n if (object[SelfDXNId]) {\n invariant(object[SelfDXNId] instanceof DXN, 'Invalid object model: invalid self dxn');\n return object[SelfDXNId];\n }\n\n if (!ObjectId.isValid(object.id)) {\n throw new TypeError('Object id is not valid.');\n }\n\n return DXN.fromLocalObjectId(object.id);\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport * as Schema from 'effect/Schema';\n\nimport { FormatAnnotation, TypeFormat } from './types';\n\nconst encodeMultipleOf = (divisor: number) => 1 / Math.pow(10, divisor);\n\nconst encodeMultiple =\n <A extends number>(divisor?: number) =>\n <I, R>(self: Schema.Schema<A, I, R>) =>\n divisor === undefined || divisor === 0 ? self : self.pipe(Schema.multipleOf(encodeMultipleOf(divisor)));\n\n/**\n * Convert number of digits to multipleOf annotation.\n */\nexport const DecimalPrecision = Schema.transform(Schema.Number, Schema.Number, {\n strict: true,\n encode: (value) => encodeMultipleOf(value),\n decode: (value) => Math.log10(1 / value),\n}).annotations({\n title: 'Number of digits',\n});\n\nexport const CurrencyAnnotationId = Symbol.for('@dxos/schema/annotation/Currency');\n\nexport type CurrencyAnnotation = {\n decimals?: number;\n code?: string;\n};\n\n/**\n * ISO 4217 currency code.\n */\nexport const Currency = ({ decimals, code }: CurrencyAnnotation = { decimals: 2 }) =>\n Schema.Number.pipe(\n encodeMultiple(decimals),\n FormatAnnotation.set(TypeFormat.Currency),\n Schema.annotations({\n title: 'Currency',\n description: 'Currency value',\n ...(code ? { [CurrencyAnnotationId]: code.toUpperCase() } : {}),\n }),\n );\n\nexport type PercentAnnotation = {\n decimals?: number;\n};\n\n/**\n * Integer.\n */\nexport const Integer = () =>\n Schema.Number.pipe(\n Schema.int(),\n FormatAnnotation.set(TypeFormat.Integer),\n Schema.annotations({\n title: 'Integer',\n description: 'Integer value',\n }),\n );\n\n/**\n * Percent.\n */\n// TODO(burdon): Define min/max (e.g., 0, 1).\nexport const Percent = ({ decimals }: PercentAnnotation = { decimals: 2 }) =>\n Schema.Number.pipe(\n encodeMultiple(decimals),\n FormatAnnotation.set(TypeFormat.Percent),\n Schema.annotations({\n title: 'Percent',\n description: 'Percentage value',\n }),\n );\n\n/**\n * Unix timestamp.\n * https://en.wikipedia.org/wiki/Unix_time\n */\nexport const Timestamp = Schema.Number.pipe(\n FormatAnnotation.set(TypeFormat.Timestamp),\n Schema.annotations({\n title: 'Timestamp',\n description: 'Unix timestamp',\n }),\n);\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport * as Function from 'effect/Function';\nimport type * as JSONSchema from 'effect/JSONSchema';\nimport * as Option from 'effect/Option';\nimport * as SchemaAST from 'effect/SchemaAST';\n\nimport { createAnnotationHelper } from '../annotations';\nimport { type JsonSchemaType } from '../json-schema';\n\n// TODO(burdon): Rename PropertyType.\nexport type ScalarType =\n | JSONSchema.JsonSchema7Object\n | JSONSchema.JsonSchema7String\n | JSONSchema.JsonSchema7Number\n | JSONSchema.JsonSchema7Boolean\n | JSONSchema.JsonSchema7Ref;\n\n// TODO(burdon): Rename ValueType and change to disciminated union.\n// export type ValueType = 'array' | 'object' | 'string' | 'number' | 'boolean' | 'ref';\nexport enum TypeEnum {\n Array = 'array', // TODO(burdon): Remove?\n Object = 'object',\n String = 'string',\n Number = 'number',\n Boolean = 'boolean',\n Ref = 'ref',\n}\n\n// TODO(burdon): Ref?\nexport const getTypeEnum = (property: JsonSchemaType): TypeEnum | undefined => {\n switch (property.type) {\n case 'array':\n return TypeEnum.Array;\n case 'object':\n return TypeEnum.Object;\n case 'string':\n return TypeEnum.String;\n case 'number':\n return TypeEnum.Number;\n case 'boolean':\n return TypeEnum.Boolean;\n default:\n return undefined;\n }\n};\n\n/**\n * https://json-schema.org/understanding-json-schema/reference/schema\n * https://json-schema.org/understanding-json-schema/reference/string#built-in-formats\n */\nexport const FormatAnnotationId = Symbol.for('@dxos/schema/annotation/Format');\n\nexport const FormatAnnotation = createAnnotationHelper<TypeFormat>(FormatAnnotationId);\n\nexport const getFormatAnnotation = (node: SchemaAST.AST): TypeFormat | undefined =>\n Function.pipe(SchemaAST.getAnnotation<TypeFormat>(FormatAnnotationId)(node), Option.getOrUndefined);\n\n// TODO(burdon): Rename Format; Change to discriminated union?\nexport enum TypeFormat {\n None = 'none',\n\n //\n // Scalar\n //\n\n String = 'string',\n Number = 'number',\n Boolean = 'boolean',\n Ref = 'ref',\n\n //\n // { type: 'string' }\n //\n\n DID = 'did', // Users, etc.\n DXN = 'dxn',\n Email = 'email',\n Formula = 'formula', // Spreadsheet formula.\n Hostname = 'hostname',\n JSON = 'json',\n Markdown = 'markdown',\n Regex = 'regex',\n SingleSelect = 'single-select',\n MultiSelect = 'multi-select',\n URL = 'url',\n UUID = 'uuid',\n\n //\n // { type: 'number' }\n //\n\n Currency = 'currency',\n Integer = 'integer',\n Percent = 'percent',\n Timestamp = 'timestamp',\n\n //\n // { type: 'date' }\n //\n\n DateTime = 'date-time',\n Date = 'date',\n Time = 'time',\n Duration = 'duration',\n\n //\n // { type: 'object' }\n //\n\n GeoPoint = 'lnglat',\n}\n\nexport const FormatEnums = Object.values(TypeFormat).sort();\n\nexport const PropertyKind = {\n type: TypeEnum,\n format: TypeFormat,\n};\n\n/**\n * Default formats\n */\nexport const typeToFormat: Partial<Record<TypeEnum, TypeFormat>> = {\n [TypeEnum.String]: TypeFormat.String,\n [TypeEnum.Number]: TypeFormat.Number,\n [TypeEnum.Boolean]: TypeFormat.Boolean,\n};\n\n/**\n * Map of format to type.\n */\nexport const formatToType: Record<TypeFormat, TypeEnum> = {\n [TypeFormat.None]: undefined as any,\n [TypeFormat.String]: TypeEnum.String,\n [TypeFormat.Number]: TypeEnum.Number,\n [TypeFormat.Boolean]: TypeEnum.Boolean,\n [TypeFormat.Ref]: TypeEnum.Ref,\n\n // Strings\n [TypeFormat.DID]: TypeEnum.String,\n [TypeFormat.DXN]: TypeEnum.String,\n [TypeFormat.Email]: TypeEnum.String,\n [TypeFormat.Formula]: TypeEnum.String,\n [TypeFormat.Hostname]: TypeEnum.String,\n [TypeFormat.JSON]: TypeEnum.String,\n [TypeFormat.Markdown]: TypeEnum.String,\n [TypeFormat.Regex]: TypeEnum.String,\n [TypeFormat.URL]: TypeEnum.String,\n [TypeFormat.UUID]: TypeEnum.String,\n [TypeFormat.SingleSelect]: TypeEnum.String,\n [TypeFormat.MultiSelect]: TypeEnum.Object,\n\n // Dates\n [TypeFormat.Date]: TypeEnum.String,\n [TypeFormat.DateTime]: TypeEnum.String,\n [TypeFormat.Duration]: TypeEnum.String,\n [TypeFormat.Time]: TypeEnum.String,\n\n // Numbers\n [TypeFormat.Currency]: TypeEnum.Number,\n [TypeFormat.Integer]: TypeEnum.Number,\n [TypeFormat.Percent]: TypeEnum.Number,\n [TypeFormat.Timestamp]: TypeEnum.Number,\n\n // Objects\n [TypeFormat.GeoPoint]: TypeEnum.Array,\n};\n\n/**\n * Allowed value options for select.\n */\nexport const OptionsAnnotationId = Symbol.for('@dxos/schema/annotation/Options');\n\nexport const getOptionsAnnotation = (node: SchemaAST.AST): OptionsAnnotationType[] | undefined =>\n Function.pipe(SchemaAST.getAnnotation<OptionsAnnotationType[]>(OptionsAnnotationId)(node), Option.getOrUndefined);\n\nexport type OptionsAnnotationType = string | number;\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport * as Schema from 'effect/Schema';\n\nimport { clamp } from '@dxos/util';\n\nimport { FormatAnnotation, TypeFormat } from './types';\n\n/**\n * GeoJSON Format\n * https://datatracker.ietf.org/doc/html/rfc7946\n * https://datatracker.ietf.org/doc/html/rfc7946#section-3.1.1\n * https://en.wikipedia.org/wiki/Geographic_coordinate_system\n * https://geojson.org\n * {\n * \"type\": \"Point\",\n * \"coordinates\": [0, 51.47] // [longitude, latitude]\n * }\n * Note: optional third element for altitude.\n */\nexport const GeoPoint = Schema.Tuple(\n Schema.Number.pipe(Schema.annotations({ title: 'Longitude' }), Schema.clamp(-180, 180), Schema.multipleOf(0.00001)),\n Schema.Number.pipe(Schema.annotations({ title: 'Latitude' }), Schema.clamp(-90, 90), Schema.multipleOf(0.00001)),\n Schema.optionalElement(Schema.Number).annotations({\n title: 'Height ASL (m)',\n }),\n).pipe(\n FormatAnnotation.set(TypeFormat.GeoPoint),\n Schema.annotations({\n title: 'GeoPoint',\n description: 'GeoJSON Position',\n }),\n);\n\nexport type GeoPoint = Schema.Schema.Type<typeof GeoPoint>;\n\nexport type GeoLocation = {\n longitude: number;\n latitude: number;\n height?: number;\n};\n\n/**\n * Geolocation utilities for working with GeoPoint format.\n */\nexport namespace GeoLocation {\n /**\n * Convert latitude and longitude to GeoPoint (GeoJSON format [longitude, latitude, height?]).\n * Clamps values to valid ranges: latitude [-90, 90], longitude [-180, 180].\n */\n export const toGeoPoint = ({ longitude, latitude, height }: GeoLocation): GeoPoint => {\n // TODO(ZaymonFC): Use schema validation instead of doing this manually.\n const clampedLongitude = clamp(longitude, -180, 180);\n const clampedLatitude = clamp(latitude, -90, 90);\n return height !== undefined ? [clampedLongitude, clampedLatitude, height] : [clampedLongitude, clampedLatitude];\n };\n\n /**\n * Extract latitude and longitude from GeoPoint (GeoJSON format [longitude, latitude, height?]).\n */\n export const fromGeoPoint = (geoPoint: GeoPoint | undefined): GeoLocation => {\n if (!geoPoint) {\n return { longitude: 0, latitude: 0 };\n }\n\n const result: GeoLocation = {\n longitude: geoPoint[0],\n latitude: geoPoint[1],\n };\n\n // Add height if defined.\n if (geoPoint[2] !== undefined) {\n result.height = geoPoint[2];\n }\n\n return result;\n };\n}\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport * as Schema from 'effect/Schema';\n\nimport * as Keys from '@dxos/keys';\n\nimport * as DateUtil from './date';\nimport * as NumberUtil from './number';\nimport * as ObjectUtil from './object';\nimport * as StringUtil from './string';\nimport { TypeFormat as TypeFormatEnum } from './types';\n\n// TODO(burdon): Consider factoring out to separate `@dxos/json-schema`\n// TODO(burdon): Media encoding.\n// - https://json-schema.org/understanding-json-schema/reference/non_json_data\n\n/**\n * Formats.\n * https://json-schema.org/understanding-json-schema/reference/string#built-in-formats\n * NOTE: A JSON Schema validator will ignore any format type that it does not understand.\n */\n// TODO(burdon): Add fields for `examples`, `message`, etc.\nexport namespace Format {\n export import TypeFormat = TypeFormatEnum;\n\n // Strings\n export const DXN = Keys.DXN.Schema;\n export const Email = StringUtil.Email;\n export const Formula = StringUtil.Formula;\n export const Hostname = StringUtil.Hostname;\n export const JSON = StringUtil.JSON;\n export const Markdown = StringUtil.Markdown;\n export const Regex = StringUtil.Regex;\n export const URL = StringUtil.URL;\n export const UUID = Schema.UUID;\n\n // Numbers\n // TODO(burdon): BigInt.\n export const Currency = NumberUtil.Currency;\n export const Integer = NumberUtil.Integer;\n export const Percent = NumberUtil.Percent;\n export const Timestamp = NumberUtil.Timestamp;\n\n // Dates and times\n export const DateTime = DateUtil.DateTime;\n export const Date = DateUtil.DateOnly;\n export const Time = DateUtil.TimeOnly;\n export const Duration = DateUtil.Duration;\n\n // Objects\n export const GeoPoint = ObjectUtil.GeoPoint;\n export type GeoPoint = ObjectUtil.GeoPoint;\n}\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport * as Schema from 'effect/Schema';\nimport * as SchemaAST from 'effect/SchemaAST';\n\nimport { FormatAnnotation, TypeFormat } from './types';\n\n/**\n * Datetime values should be stored as ISO strings or unix numbers (ms) in UTC.\n *\n * NOTE: HyperFormula uses Excel's time format (null date 1900/01/01)\n * It can be configured to use a different parser via `parseDateTime`.\n * https://hyperformula.handsontable.com/guide/date-and-time-handling.html#date-and-time-handling\n * https://github.com/handsontable/hyperformula/blob/master/src/DateTimeHelper.ts\n */\n\n// TODO(burdon): Annotations not present in JSON.\n// TODO(burdon): Timezone.\n// TODO(burdon): Format for timestamp (Unix UTC or ISO 8601)?\n// TODO(burdon): Refs\n// - https://www.npmjs.com/package/numfmt\n// - https://date-fns.org/docs/Getting-Started\n// - https://github.com/date-fns/tz\n\n/**\n * Simple date compatible with HF.\n */\nexport const SimpleDate = Schema.Struct({\n year: Schema.Number.pipe(Schema.between(1900, 9999)),\n month: Schema.Number.pipe(Schema.between(1, 12)),\n day: Schema.Number.pipe(Schema.between(1, 31)),\n});\n\nexport type SimpleDate = Schema.Schema.Type<typeof SimpleDate>;\n\nexport const toSimpleDate = (date: Date): SimpleDate => ({\n year: date.getUTCFullYear(),\n month: date.getUTCMonth() + 1,\n day: date.getUTCDate(),\n});\n\n/**\n * Simple time compatible with HF.\n */\nexport const SimpleTime = Schema.Struct({\n hours: Schema.Number.pipe(Schema.between(0, 23)),\n minutes: Schema.Number.pipe(Schema.between(0, 59)),\n seconds: Schema.Number.pipe(Schema.between(0, 59)),\n});\n\nexport type SimpleTime = Schema.Schema.Type<typeof SimpleTime>;\n\nexport const toSimpleTime = (date: Date): SimpleTime => ({\n hours: date.getUTCHours(),\n minutes: date.getUTCSeconds(),\n seconds: date.getUTCSeconds(),\n});\n\n/**\n * Simple date-time compatible with HF.\n */\nexport const SimpleDateTime = Schema.extend(SimpleDate, SimpleTime);\n\nexport type SimpleDateTime = Schema.Schema.Type<typeof SimpleDateTime>;\n\nexport const toSimpleDateTime = (date: Date): SimpleDateTime => ({\n ...toSimpleDate(date),\n ...toSimpleTime(date),\n});\n\n/**\n * https://effect.website/docs/guides/schema/transformations#date-transformations\n */\n\n// TODO(burdon): Consider if transformations should be supported with Automerge.\n\n/**\n * Format: 2018-11-13\n */\nexport const DateOnly = /* Schema.transformOrFail(Schema.String, SimpleDate, {\n strict: true,\n decode: (str, _, ast) => {\n if (!isValidDateFormat(str)) {\n return ParseResult.fail(new ParseResult.Type(ast, str, 'Expected YYYY-MM-DD format'));\n }\n if (!isValidDate(str)) {\n return ParseResult.fail(new ParseResult.Type(ast, str, 'Invalid date'));\n }\n\n const [year, month, day] = str.split('-').map(Number);\n return ParseResult.succeed({ year, month, day });\n },\n encode: (date) => {\n return ParseResult.succeed(\n [\n date.year.toString().padStart(4, '0'),\n date.month.toString().padStart(2, '0'),\n date.day.toString().padStart(2, '0'),\n ].join('-'),\n );\n },\n}) */ Schema.String.pipe(\n FormatAnnotation.set(TypeFormat.Date),\n Schema.annotations({\n title: 'Date',\n description: 'Valid date in ISO format',\n }),\n);\n\n/**\n * Format: 20:20:39+00:00\n */\nexport const TimeOnly = /* Schema.transformOrFail(Schema.String, SimpleTime, {\n strict: true,\n decode: (str, _, ast) => {\n if (!isValidTimeFormat(str)) {\n return ParseResult.fail(new ParseResult.Type(ast, str, 'Expected HH:mm:ss format'));\n }\n\n const [hours, minutes, seconds] = str.split(':').map(Number);\n return ParseResult.succeed({ hours, minutes, seconds });\n },\n encode: (time) => {\n return ParseResult.succeed(\n [\n time.hours.toString().padStart(2, '0'),\n time.minutes.toString().padStart(2, '0'),\n time.seconds.toString().padStart(2, '0'),\n ].join(':'),\n );\n },\n}) */ Schema.String.pipe(\n FormatAnnotation.set(TypeFormat.Time),\n Schema.annotations({\n title: 'Time',\n description: 'Valid time in ISO format',\n }),\n);\n\n/**\n * Format: 2018-11-13T20:20:39+00:00\n */\nexport const DateTime = /* Schema.transformOrFail(Schema.String, SimpleDateTime, {\n strict: false,\n decode: (str, _, ast) => {\n const [date, time] = str.split('T');\n if (!isValidDateFormat(date)) {\n return ParseResult.fail(new ParseResult.Type(ast, date, 'Expected YYYY-MM-DD format'));\n }\n if (!isValidDate(date)) {\n return ParseResult.fail(new ParseResult.Type(ast, date, 'Invalid date'));\n }\n if (!isValidTimeFormat(time)) {\n return ParseResult.fail(new ParseResult.Type(ast, str, 'Expected HH:mm:ss format'));\n }\n\n const [year, month, day] = date.split('-').map(Number);\n const [hours, minutes, seconds] = time.split(':').map(Number);\n return ParseResult.succeed({ year, month, day, hours, minutes, seconds });\n },\n encode: (datetime) => {\n return ParseResult.succeed(\n [\n [\n datetime.year.toString().padStart(4, '0'),\n datetime.month.toString().padStart(2, '0'),\n datetime.day.toString().padStart(2, '0'),\n ].join('-'),\n [\n datetime.hours.toString().padStart(2, '0'),\n datetime.minutes.toString().padStart(2, '0'),\n datetime.seconds.toString().padStart(2, '0'),\n ].join(':'),\n ].join('T'),\n );\n },\n}) */ Schema.String.pipe(\n FormatAnnotation.set(TypeFormat.DateTime),\n Schema.annotations({\n title: 'DateTime',\n description: 'Valid date and time in ISO format',\n }),\n);\n\n/**\n * https://datatracker.ietf.org/doc/html/rfc3339#appendix-A\n */\n// TODO(burdon): Define duration type.\nexport const Duration = Schema.String.pipe(\n FormatAnnotation.set(TypeFormat.Duration),\n Schema.annotations({\n title: 'Duration',\n description: 'Duration in ISO 8601 format',\n [SchemaAST.ExamplesAnnotationId]: ['1h', '3D'],\n }),\n);\n\n//\n// Utils\n//\n\n// YYYY-MM-DD\nconst DATE_REGEX = /^\\d{4}-\\d{2}-\\d{2}$/;\n\nconst _isValidDateFormat = (str: string) => DATE_REGEX.test(str);\n\nconst _isValidDate = (str: string) => {\n const date = new Date(str);\n return !isNaN(date.getTime()) && date.toISOString().startsWith(str);\n};\n\n// HH:mm:ss\nconst TIME_REGEX = /^([01]\\d|2[0-3]):([0-5]\\d):([0-5]\\d)$/;\n\nconst _isValidTimeFormat = (str: string) => TIME_REGEX.test(str);\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport * as Schema from 'effect/Schema';\nimport * as SchemaAST from 'effect/SchemaAST';\n\nimport { FormatAnnotation, TypeFormat } from './types';\n\n/**\n * Email address (RFC 5321)\n * https://datatracker.ietf.org/doc/html/rfc5321#section-4.1.2\n */\nexport const Email = Schema.String.pipe(\n Schema.pattern(/^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,}$/),\n FormatAnnotation.set(TypeFormat.Email),\n Schema.annotations({\n title: 'Email',\n description: 'Email address',\n }),\n);\n\n/**\n *\n */\n// TODO(burdon): Implement.\nexport const Formula = Schema.String.pipe(FormatAnnotation.set(TypeFormat.Formula));\n\n/**\n *\n */\n// TODO(burdon): Implement.\nexport const Hostname = Schema.String.pipe(FormatAnnotation.set(TypeFormat.Hostname));\n\n/**\n *\n */\n// TODO(burdon): Implement.\nexport const JSON = Schema.String.pipe(FormatAnnotation.set(TypeFormat.JSON));\n\n/**\n *\n */\n// TODO(burdon): Implement.\nexport const Markdown = Schema.String.pipe(FormatAnnotation.set(TypeFormat.Markdown));\n\n/**\n * Regex\n * https://json-schema.org/understanding-json-schema/reference/regular_expressions\n * https://ecma-international.org/publications-and-standards/standards/ecma-262\n */\n// TODO(burdon): Implement.\nexport const Regex = Schema.String.pipe(FormatAnnotation.set(TypeFormat.Regex));\n\n/**\n * https://datatracker.ietf.org/doc/html/rfc3986#section-1.1.3\n */\nexport const URL = Schema.String.pipe(\n Schema.pattern(/^(\\w+?:\\/\\/)?([\\da-z.-]+)\\.([a-z.]{2,6})([/\\w .-]*)*\\/?$/i),\n FormatAnnotation.set(TypeFormat.URL),\n Schema.annotations({\n title: 'URL',\n description: 'URL',\n }),\n);\n\n/**\n * UUID (RFC 4122)\n * https://datatracker.ietf.org/doc/html/rfc4122\n */\nexport const UUID = Schema.UUID.pipe(\n FormatAnnotation.set(TypeFormat.UUID),\n Schema.annotations({\n [SchemaAST.ExamplesAnnotationId]: ['3e4666bf-d5e5-4aa7-b8ce-cefe41c7568a'],\n }),\n);\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport * as Schema from 'effect/Schema';\n\n/** Schema for a single select option. Used to define choices in a {single|multi}-select field. */\nexport const SelectOptionSchema = Schema.Struct({\n /** Stable identifier for the option. */\n id: Schema.NonEmptyString,\n title: Schema.String,\n /** Color palette used for visual styling. */\n color: Schema.String,\n}).pipe(Schema.mutable);\n\nexport type SelectOption = Schema.Schema.Type<typeof SelectOptionSchema>;\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport * as SchemaAST from 'effect/SchemaAST';\n\nimport { GeneratorAnnotationId, LabelAnnotationId, PropertyMetaAnnotationId } from '../annotations';\nimport { CurrencyAnnotationId, FormatAnnotationId } from '../formats';\nimport { type JsonSchemaEchoAnnotations, type JsonSchemaType } from '../json-schema';\n\n//\n// This file configures annotations for JSON encoding/decoding.\n//\n\n// Go on the root level.\ntype RootJsonSchemaProperty = keyof JsonSchemaType;\n\n// Go on the namespaced `annotations` property.\ntype NamespacedJsonSchemaProperty = keyof JsonSchemaEchoAnnotations;\n\n/**\n * List of annotations for JSON encoding/decoding.\n * Omits default effect-schema annotations since they are encoded with default serializer.\n */\n// TODO(burdon): Reconcile with `EchoAnnotations`.\nexport const CustomAnnotations: Partial<Record<RootJsonSchemaProperty, symbol>> = {\n format: FormatAnnotationId,\n currency: CurrencyAnnotationId,\n};\n\n/**\n * List of annotations for JSON decoding only.\n * Includes default effect annotations.\n */\nexport const DecodedAnnotations: Partial<Record<RootJsonSchemaProperty, symbol>> = {\n title: SchemaAST.TitleAnnotationId,\n description: SchemaAST.DescriptionAnnotationId,\n};\n\n/**\n * Annotations that go into ECHO namespace in json-schema.\n */\n// TODO(dmaretskyi): Consider removing ECHO namespace and putting them at the top level.\n// TODO(dmaretskyi): Move to format.ts when circular imports are solved\nexport const EchoAnnotations: Partial<Record<NamespacedJsonSchemaProperty, symbol>> = {\n // TODO(dmaretskyi): `FieldLookupAnnotationId` might go here, but lets remove it entirely and use LabelAnnotation instead.\n meta: PropertyMetaAnnotationId,\n generator: GeneratorAnnotationId,\n labelProp: LabelAnnotationId,\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport * as Schema from 'effect/Schema';\n\nimport { JsonPath, type JsonProp } from '@dxos/effect';\n\nimport { FormatAnnotation, TypeFormat } from '../formats';\nimport { EntityKindSchema } from '../types';\n\n//\n// JSON Schema\n//\n\n// TODO(burdon): Reuse/reconcile with ScalarTypeEnum (handle arrays).\nconst SimpleTypes = Schema.Literal('array', 'boolean', 'integer', 'null', 'number', 'object', 'string');\n\nconst NonNegativeInteger = Schema.Number.pipe(Schema.greaterThanOrEqualTo(0));\n\nconst StringArray = Schema.Array(Schema.String).pipe(Schema.mutable);\n\nconst JsonSchemaOrBoolean = Schema.Union(\n Schema.suspend(() => JsonSchemaType),\n Schema.Boolean,\n);\n\n/**\n * Go under the `annotations` property.\n */\nexport const JsonSchemaEchoAnnotations = Schema.Struct({\n /**\n * Label for this schema.\n * Mapped from {@link LabelAnnotationId}.\n */\n labelProp: Schema.optional(Schema.Union(JsonPath, Schema.Array(JsonPath))),\n\n /**\n * Generator function for this schema.\n * Mapped from {@link GeneratorAnnotationId}.\n */\n generator: Schema.optional(Schema.Union(Schema.String, Schema.Tuple(Schema.String, Schema.Number))),\n\n /**\n * {@link PropertyMeta} annotations get serialized here.\n */\n meta: Schema.optional(\n Schema.Record({\n key: Schema.String,\n value: Schema.Any,\n }).pipe(Schema.mutable),\n ),\n\n /**\n * @deprecated\n */\n // TODO(dmaretskyi): We risk old schema not passing validation due to the extra fields. Remove when we are sure this is safe\n type: Schema.optional(\n Schema.Struct({\n typename: Schema.String,\n version: Schema.String,\n\n // Not used.\n schemaId: Schema.optional(Schema.String),\n }).pipe(Schema.mutable),\n ),\n\n /**\n * @deprecated Superseded by `meta`.\n */\n annotations: Schema.optional(\n Schema.Record({\n key: Schema.String,\n value: Schema.Any,\n }).pipe(Schema.mutable),\n ),\n}).pipe(Schema.mutable);\nexport type JsonSchemaEchoAnnotations = Schema.Schema.Type<typeof JsonSchemaEchoAnnotations>;\n\n/**\n * Describes a schema for the JSON-schema objects stored in ECHO.\n * Contains extensions for ECHO (e.g., references).\n * Ref: https://json-schema.org/draft-07/schema\n */\n// TODO(burdon): Integrate with Effect Serializable?\n// TODO(dmaretskyi): Update to latest draft: https://json-schema.org/draft/2020-12\nconst _JsonSchemaType = Schema.Struct({\n /**\n * Identifier for this schema.\n * This schema might be referenced by $ref clause in other schemas.\n */\n // TODO(dmaretskyi): Specify how the ids are generated.\n // TODO(dmaretskyi): For type dxns, should this include the version?\n $id: Schema.optional(Schema.String),\n\n /**\n * Schema of this schema.\n * Set to \"https://json-schema.org/draft-07/schema\".\n */\n $schema: Schema.optional(Schema.String),\n\n /**\n * Reference to another schema.\n */\n $ref: Schema.optional(Schema.String),\n\n /**\n * Comments are ignored when interpreting the schema.\n */\n $comment: Schema.optional(Schema.String),\n\n /**\n * Defines whether this schema is an object schema or a relation schema.\n */\n entityKind: Schema.optional(EntityKindSchema),\n\n /**\n * Typename of this schema.\n * Only on schema representing an ECHO object.\n *\n * @example 'example.com/type/MyType'\n */\n typename: Schema.optional(Schema.String),\n\n /**\n * Version of this schema.\n * Custom dialect for ECHO.\n */\n version: Schema.optional(Schema.String),\n\n /**\n * Target of this relation.\n * Only for relation schemas.\n * The referenced schema must be an object schema.\n */\n relationTarget: Schema.optional(Schema.suspend(() => JsonSchemaType)),\n\n /**\n * Source of this relation.\n * Only for relation schemas.\n * The referenced schema must be an object schema.\n */\n relationSource: Schema.optional(Schema.suspend(() => JsonSchemaType)),\n\n /**\n * Title of this schema.\n */\n title: Schema.optional(Schema.String),\n\n /**\n * Description of this schema.\n */\n description: Schema.optional(Schema.String),\n\n /**\n * Whether this schema is read-only.\n */\n readOnly: Schema.optional(Schema.Boolean),\n\n /**\n * Whether this schema is write-only.\n */\n writeOnly: Schema.optional(Schema.Boolean),\n\n /**\n * Examples of instances of this schema.\n */\n examples: Schema.optional(Schema.Array(Schema.Any)),\n\n /**\n * Default value for this schema.\n */\n default: Schema.optional(Schema.Any),\n\n /**\n * This schema only matches values that are equal to this value.\n */\n const: Schema.optional(Schema.Any),\n\n /**\n * This schema only matches one of the values in this array.\n */\n enum: Schema.optional(Schema.Array(Schema.Any)),\n\n /**\n * Base type of the schema.\n */\n type: Schema.optional(Schema.Union(SimpleTypes, Schema.Array(SimpleTypes))),\n\n //\n // Numbers.\n //\n\n multipleOf: Schema.optional(Schema.Number.pipe(Schema.greaterThan(0))),\n maximum: Schema.optional(Schema.Number),\n exclusiveMaximum: Schema.optional(Schema.Number),\n minimum: Schema.optional(Schema.Number),\n exclusiveMinimum: Schema.optional(Schema.Number),\n\n //\n // Strings.\n //\n\n maxLength: Schema.optional(NonNegativeInteger),\n\n /**\n * Regex pattern for strings.\n */\n pattern: Schema.optional(Schema.String.pipe(FormatAnnotation.set(TypeFormat.Regex))),\n\n /**\n * Serialized from {@link FormatAnnotationId}.\n */\n format: Schema.optional(Schema.String),\n\n //\n // Arrays\n //\n\n minLength: Schema.optional(NonNegativeInteger),\n items: Schema.optional(\n Schema.Union(\n Schema.suspend(() => JsonSchemaType),\n Schema.Array(Schema.suspend(() => JsonSchemaType)),\n ),\n ),\n additionalItems: Schema.optional(\n Schema.Union(\n Schema.suspend(() => JsonSchemaType),\n Schema.Boolean,\n ),\n ),\n maxItems: Schema.optional(NonNegativeInteger),\n minItems: Schema.optional(NonNegativeInteger),\n uniqueItems: Schema.optional(Schema.Boolean),\n contains: Schema.optional(Schema.suspend(() => JsonSchemaType)),\n\n //\n // Objects\n //\n\n maxProperties: Schema.optional(NonNegativeInteger),\n minProperties: Schema.optional(NonNegativeInteger),\n required: Schema.optional(StringArray),\n\n /**\n * Non-standard JSON Schema extension.\n * Defines the order of properties in the object.\n * The unmentioned properties are placed at the end.\n *\n * Related: https://github.com/json-schema/json-schema/issues/119\n */\n propertyOrder: Schema.optional(StringArray),\n\n additionalProperties: Schema.optional(JsonSchemaOrBoolean),\n properties: Schema.optional(\n Schema.Record({\n key: Schema.String,\n value: Schema.suspend(() => JsonSchemaType),\n }).pipe(Schema.mutable),\n ),\n patternProperties: Schema.optional(\n Schema.Record({\n key: Schema.String,\n value: Schema.suspend(() => JsonSchemaType),\n }).pipe(Schema.mutable),\n ),\n propertyNames: Schema.optional(Schema.suspend(() => JsonSchemaType)),\n\n definitions: Schema.optional(\n Schema.mutable(\n Schema.Record({\n key: Schema.String,\n value: Schema.suspend(() => JsonSchemaType),\n }),\n ),\n ),\n dependencies: Schema.optional(\n Schema.Record({\n key: Schema.String,\n value: Schema.suspend(() => Schema.Union(Schema.String, StringArray, JsonSchemaType)).annotations({\n identifier: 'dependency',\n description: 'Dependency',\n }),\n }),\n ),\n\n contentMediaType: Schema.optional(Schema.String),\n contentEncoding: Schema.optional(Schema.String),\n\n if: Schema.optional(Schema.suspend(() => JsonSchemaType)),\n then: Schema.optional(Schema.suspend(() => JsonSchemaType)),\n else: Schema.optional(Schema.suspend(() => JsonSchemaType)),\n allOf: Schema.optional(Schema.Array(Schema.suspend(() => JsonSchemaType))),\n anyOf: Schema.optional(Schema.Array(Schema.suspend(() => JsonSchemaType))),\n oneOf: Schema.optional(Schema.Array(Schema.suspend(() => JsonSchemaType))),\n not: Schema.optional(Schema.suspend(() => JsonSchemaType)),\n $defs: Schema.optional(\n Schema.mutable(\n Schema.Record({\n key: Schema.String,\n value: Schema.suspend(() => JsonSchemaType),\n }),\n ),\n ),\n\n //\n // ECHO extensions.\n //\n\n currency: Schema.optional(Schema.String),\n\n reference: Schema.optional(\n Schema.mutable(\n Schema.Struct({\n schema: Schema.suspend(() => JsonSchemaType),\n schemaVersion: Schema.optional(Schema.String),\n schemaObject: Schema.optional(Schema.String),\n }),\n ),\n ),\n\n /**\n * ECHO-specific annotations.\n */\n // TODO(dmaretskyi): Since we are adding a lot of new extensions to the JSON Schema, it is safer to namespace them here.\n annotations: Schema.optional(Schema.mutable(JsonSchemaEchoAnnotations)),\n\n /**\n * @deprecated Use `annotations` instead.\n */\n echo: Schema.optional(Schema.mutable(JsonSchemaEchoAnnotations)),\n}).annotations({ identifier: 'jsonSchema', description: 'JSON Schema' });\n\nexport const JsonSchemaFields = Object.keys(_JsonSchemaType.fields);\n\n/**\n * https://json-schema.org/draft-07/schema\n */\n// TODO(burdon): Reconcile with @effect/Schema/JSONSchema\nexport interface JsonSchemaType extends Schema.Schema.Type<Schema.mutable<typeof _JsonSchemaType>> {}\n\nexport const JsonSchemaType: Schema.Schema<JsonSchemaType> = _JsonSchemaType.pipe(Schema.mutable);\n\n// TODO(burdon): Factor out JSON schema utils.\n\nexport const getSchemaProperty = (schema: JsonSchemaType, property: JsonProp): JsonSchemaType | undefined => {\n return schema.properties?.[property];\n};\n\n// TODO(burdon): Properties should be ordered.\nexport const setSchemaProperty = (schema: JsonSchemaType, property: JsonProp, value: JsonSchemaType) => {\n schema.properties ??= {};\n schema.properties[property] = value;\n return schema;\n};\n\n/**\n * @internal\n */\nexport const ECHO_ANNOTATIONS_NS_DEPRECATED_KEY: keyof JsonSchemaType = 'echo';\n\n/**\n * @internal\n */\nexport const ECHO_ANNOTATIONS_NS_KEY = 'annotations';\n\n/**\n * @internal\n * @returns ECHO annotations namespace object in its normalized form.\n *\n * `meta` holds PropertyMeta annotations.\n * `annotations` holds other annotations.\n */\nexport const getNormalizedEchoAnnotations = (obj: JsonSchemaType): JsonSchemaEchoAnnotations | undefined => {\n if (obj[ECHO_ANNOTATIONS_NS_KEY] != null && obj[ECHO_ANNOTATIONS_NS_DEPRECATED_KEY] != null) {\n return normalizeEchoAnnotations({\n ...obj[ECHO_ANNOTATIONS_NS_DEPRECATED_KEY],\n ...obj[ECHO_ANNOTATIONS_NS_KEY],\n });\n } else if (obj[ECHO_ANNOTATIONS_NS_KEY] != null) {\n return normalizeEchoAnnotations(obj[ECHO_ANNOTATIONS_NS_KEY]!);\n } else if (obj[ECHO_ANNOTATIONS_NS_DEPRECATED_KEY] != null) {\n return normalizeEchoAnnotations(obj[ECHO_ANNOTATIONS_NS_DEPRECATED_KEY]!);\n } else {\n return undefined;\n }\n};\n\nconst normalizeEchoAnnotations = (obj: JsonSchemaEchoAnnotations): JsonSchemaEchoAnnotations => {\n if (!obj.annotations) {\n return obj;\n } else {\n const res = {\n ...obj,\n meta: {\n ...obj.annotations,\n ...(obj.meta ?? {}),\n },\n };\n delete res.annotations;\n return res;\n }\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { JsonSchemaFields, type JsonSchemaType } from './json-schema-type';\n\n/**\n * Normalize schema to to draft-07 format.\n * Note: the input type does not necessarily match the {@link JsonSchemaType} type.\n */\nexport const normalizeSchema = (schema: JsonSchemaType): JsonSchemaType => {\n const copy = structuredClone(schema);\n go(copy);\n return copy;\n};\n\nconst go = (schema: JsonSchemaType) => {\n if (typeof schema !== 'object' || schema === null) {\n return;\n }\n\n if ((schema as any).exclusiveMaximum === true) {\n schema.exclusiveMaximum = schema.maximum;\n delete (schema as any).exclusiveMaximum;\n } else if ((schema as any).exclusiveMaximum === false) {\n delete (schema as any).exclusiveMaximum;\n }\n\n if ((schema as any).exclusiveMinimum === true) {\n schema.exclusiveMinimum = schema.minimum;\n delete (schema as any).exclusiveMinimum;\n } else if ((schema as any).exclusiveMinimum === false) {\n delete (schema as any).exclusiveMinimum;\n }\n\n // Delete all properties that are not in the JsonSchemaFields.\n for (const key of Object.keys(schema)) {\n if (!JsonSchemaFields.includes(key)) {\n delete (schema as any)[key];\n }\n }\n\n // Recursively normalize the schema.\n // Recursively normalize the schema.\n if (schema.properties) {\n goOnRecord(schema.properties);\n }\n if (schema.patternProperties) {\n goOnRecord(schema.patternProperties);\n }\n if (schema.propertyNames) {\n go(schema.propertyNames);\n }\n if (schema.definitions) {\n goOnRecord(schema.definitions);\n }\n if (schema.items) {\n maybeGoOnArray(schema.items);\n }\n if (schema.additionalItems) {\n maybeGoOnArray(schema.additionalItems);\n }\n if (schema.contains) {\n go(schema.contains);\n }\n if (schema.if) {\n go(schema.if);\n }\n if (schema.then) {\n go(schema.then);\n }\n if (schema.else) {\n go(schema.else);\n }\n if (schema.allOf) {\n maybeGoOnArray(schema.allOf);\n }\n if (schema.anyOf) {\n maybeGoOnArray(schema.anyOf);\n }\n if (schema.oneOf) {\n maybeGoOnArray(schema.oneOf);\n }\n if (schema.not) {\n go(schema.not);\n }\n if (schema.$defs) {\n goOnRecord(schema.$defs);\n }\n if (schema.reference) {\n go(schema.reference.schema);\n }\n};\n\nconst maybeGoOnArray = (value: any) => {\n if (Array.isArray(value)) {\n for (const item of value) {\n go(item);\n }\n } else if (typeof value === 'object' && value !== null) {\n go(value);\n }\n};\n\nconst goOnRecord = (record: Record<string, any>) => {\n for (const key of Object.keys(record)) {\n go(record[key]);\n }\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport * as Array from 'effect/Array';\nimport * as Function from 'effect/Function';\nimport * as JSONSchema from 'effect/JSONSchema';\nimport * as Option from 'effect/Option';\nimport * as Schema from 'effect/Schema';\nimport * as SchemaAST from 'effect/SchemaAST';\nimport type * as Types from 'effect/Types';\n\nimport { raise } from '@dxos/debug';\nimport { mapAst } from '@dxos/effect';\nimport { assertArgument, invariant } from '@dxos/invariant';\nimport { DXN, ObjectId } from '@dxos/keys';\nimport { log } from '@dxos/log';\nimport { clearUndefined, orderKeys, removeProperties } from '@dxos/util';\n\nimport {\n type TypeAnnotation,\n TypeAnnotationId,\n TypeIdentifierAnnotationId,\n makeTypeJsonSchemaAnnotation,\n} from '../annotations';\nimport { Expando } from '../entities';\nimport { type JsonSchemaReferenceInfo, Ref, createEchoReferenceSchema } from '../ref';\nimport { EntityKind, EntityKindSchema } from '../types';\n\nimport { CustomAnnotations, DecodedAnnotations, EchoAnnotations } from './annotations';\nimport {\n ECHO_ANNOTATIONS_NS_DEPRECATED_KEY,\n ECHO_ANNOTATIONS_NS_KEY,\n type JsonSchemaEchoAnnotations,\n type JsonSchemaType,\n getNormalizedEchoAnnotations,\n} from './json-schema-type';\n\n// TODO(burdon): Are these values stored (can they be changed?)\nexport enum PropType {\n NONE = 0,\n STRING = 1, // TODO(burdon): vs TEXT?\n NUMBER = 2,\n BOOLEAN = 3,\n DATE = 4,\n REF = 5,\n RECORD = 6,\n ENUM = 7,\n}\n\n// TODO(burdon): Reconcile with @dxos/schema.\nexport const toPropType = (type?: PropType): string => {\n switch (type) {\n case PropType.STRING:\n return 'string';\n case PropType.NUMBER:\n return 'number';\n case PropType.BOOLEAN:\n return 'boolean';\n case PropType.DATE:\n return 'date';\n case PropType.REF:\n return 'ref';\n case PropType.RECORD:\n return 'object';\n default:\n throw new Error(`Invalid type: ${type}`);\n }\n};\n\nconst JSON_SCHEMA_URL = 'http://json-schema.org/draft-07/schema#';\n\nexport type JsonSchemaOptions = {\n strict?: boolean;\n};\n\n/**\n * Convert effect schema to JSON Schema.\n * NOTE: This handles custom annotations.\n * @param schema\n */\n// TODO(burdon): Reconcile with possibly extending @effect/Schema/JSONSchema\n// We add additional propertyOrder (but the object properties ARE ordered); and type \"string\" for literals.\nexport const toJsonSchema = (schema: Schema.Schema.All, options: JsonSchemaOptions = {}): JsonSchemaType => {\n assertArgument(Schema.isSchema(schema), 'schema');\n let jsonSchema = _toJsonSchemaAST(schema.ast);\n if (options.strict) {\n // TOOD(burdon): Workaround to ensure JSON schema is valid (for agv parsing).\n jsonSchema = removeProperties(jsonSchema, (key, value) => {\n if (key === '$id' && value === '/schemas/any') {\n return true;\n }\n if (key === '$ref' && value === '#/$defs/dependency') {\n return true;\n }\n if (key === '$ref' && value === '#/$defs/jsonSchema') {\n return true;\n }\n\n return false;\n });\n }\n\n return jsonSchema;\n};\n\nconst _toJsonSchemaAST = (ast: SchemaAST.AST): JsonSchemaType => {\n const withRefinements = withEchoRefinements(ast, '#');\n const jsonSchema = JSONSchema.fromAST(withRefinements, {\n definitions: {},\n }) as JsonSchemaType;\n\n return normalizeJsonSchema(jsonSchema);\n};\n\nconst withEchoRefinements = (\n ast: SchemaAST.AST,\n path: string | undefined,\n suspendCache = new Map<SchemaAST.AST, string>(),\n): SchemaAST.AST => {\n if (path) {\n suspendCache.set(ast, path);\n }\n\n let recursiveResult: SchemaAST.AST;\n if (SchemaAST.isSuspend(ast)) {\n // Precompute JSON schema for suspended AST since effect serializer does not support it.\n const suspendedAst = ast.f();\n const cachedPath = suspendCache.get(suspendedAst);\n if (cachedPath) {\n recursiveResult = new SchemaAST.Suspend(() => withEchoRefinements(suspendedAst, path, suspendCache), {\n [SchemaAST.JSONSchemaAnnotationId]: {\n $ref: cachedPath,\n },\n });\n } else {\n const jsonSchema = _toJsonSchemaAST(suspendedAst);\n recursiveResult = new SchemaAST.Suspend(() => withEchoRefinements(suspendedAst, path, suspendCache), {\n [SchemaAST.JSONSchemaAnnotationId]: jsonSchema,\n });\n }\n } else if (SchemaAST.isTypeLiteral(ast)) {\n // Add property order annotations\n recursiveResult = mapAst(ast, (ast, key) =>\n withEchoRefinements(ast, path && typeof key === 'string' ? `${path}/${key}` : undefined, suspendCache),\n );\n recursiveResult = addJsonSchemaFields(recursiveResult, {\n propertyOrder: [...ast.propertySignatures.map((p) => p.name)] as string[],\n });\n } else if (SchemaAST.isUndefinedKeyword(ast)) {\n // Ignore undefined keyword that appears in the optional fields.\n return ast;\n } else {\n recursiveResult = mapAst(ast, (ast, key) =>\n withEchoRefinements(\n ast,\n path && (typeof key === 'string' || typeof key === 'number') ? `${path}/${key}` : undefined,\n suspendCache,\n ),\n );\n }\n\n const annotationFields = annotations_toJsonSchemaFields(ast.annotations);\n if (Object.keys(annotationFields).length === 0) {\n return recursiveResult;\n } else {\n return addJsonSchemaFields(recursiveResult, annotationFields);\n }\n};\n\n/**\n * Convert JSON schema to effect schema.\n * @param root\n * @param definitions\n */\nexport const toEffectSchema = (root: JsonSchemaType, _defs?: JsonSchemaType['$defs']): Schema.Schema.AnyNoContext => {\n const defs = root.$defs ? { ..._defs, ...root.$defs } : (_defs ?? {});\n if ('type' in root && root.type === 'object') {\n return objectToEffectSchema(root, defs);\n }\n\n let result: Schema.Schema.AnyNoContext = Schema.Unknown;\n if ('$ref' in root) {\n switch (root.$ref) {\n case '/schemas/echo/ref': {\n result = refToEffectSchema(root);\n break;\n }\n }\n } else if ('$id' in root) {\n switch (root.$id as string) {\n case '/schemas/any': {\n result = anyToEffectSchema(root as JSONSchema.JsonSchema7Any);\n break;\n }\n case '/schemas/unknown': {\n result = Schema.Unknown;\n break;\n }\n case '/schemas/{}':\n case '/schemas/object': {\n result = Schema.Object;\n break;\n }\n // Custom ECHO object reference.\n case '/schemas/echo/ref': {\n result = refToEffectSchema(root);\n break;\n }\n }\n } else if ('enum' in root) {\n result = Schema.Union(...root.enum!.map((e) => Schema.Literal(e)));\n } else if ('oneOf' in root) {\n result = Schema.Union(...root.oneOf!.map((v) => toEffectSchema(v, defs)));\n } else if ('anyOf' in root) {\n result = Schema.Union(...root.anyOf!.map((v) => toEffectSchema(v, defs)));\n } else if ('allOf' in root) {\n if (root.allOf!.length === 1) {\n result = toEffectSchema(root.allOf![0], defs);\n } else {\n log.warn('allOf with multiple schemas is not supported');\n result = Schema.Unknown;\n }\n } else if ('type' in root) {\n switch (root.type) {\n case 'string': {\n result = Schema.String;\n if (root.pattern) {\n result = result.pipe(Schema.pattern(new RegExp(root.pattern)));\n }\n break;\n }\n case 'number': {\n result = Schema.Number;\n break;\n }\n case 'integer': {\n result = Schema.Number.pipe(Schema.int());\n break;\n }\n case 'boolean': {\n result = Schema.Boolean;\n break;\n }\n case 'array': {\n if (Array.isArray(root.items)) {\n const [required, optional] = Function.pipe(\n root.items,\n Array.map((v) => toEffectSchema(v as JsonSchemaType, defs)),\n Array.splitAt(root.minItems ?? root.items.length),\n );\n result = Schema.Tuple(...required, ...optional.map(Schema.optionalElement));\n } else {\n invariant(root.items);\n const items = root.items;\n result = Array.isArray(items)\n ? Schema.Tuple(...items.map((v) => toEffectSchema(v as JsonSchemaType, defs)))\n : Schema.Array(toEffectSchema(items as JsonSchemaType, defs));\n }\n break;\n }\n case 'null': {\n result = Schema.Null;\n break;\n }\n }\n } else if ('$ref' in root) {\n const refSegments = root.$ref!.split('/');\n const jsonSchema = defs[refSegments[refSegments.length - 1]];\n invariant(jsonSchema, `missing definition for ${root.$ref}`);\n result = toEffectSchema(jsonSchema, defs).pipe(\n Schema.annotations({ identifier: refSegments[refSegments.length - 1] }),\n );\n }\n\n const annotations = jsonSchemaFieldsToAnnotations(root);\n\n // log.info('toEffectSchema', { root, annotations });\n result = result.annotations(annotations);\n\n return result;\n};\n\nconst objectToEffectSchema = (root: JsonSchemaType, defs: JsonSchemaType['$defs']): Schema.Schema.AnyNoContext => {\n invariant('type' in root && root.type === 'object', `not an object: ${root}`);\n\n const echoRefinement: JsonSchemaEchoAnnotations = (root as any)[ECHO_ANNOTATIONS_NS_DEPRECATED_KEY];\n const isEchoObject =\n echoRefinement != null || ('$id' in root && typeof root.$id === 'string' && root.$id.startsWith('dxn:'));\n\n let fields: Schema.Struct.Fields = {};\n const propertyList = Object.entries(root.properties ?? {});\n let immutableIdField: Schema.Schema.AnyNoContext | undefined;\n for (const [key, value] of propertyList) {\n if (isEchoObject && key === 'id') {\n immutableIdField = toEffectSchema(value, defs);\n } else {\n // TODO(burdon): Mutable cast.\n (fields as any)[key] = root.required?.includes(key)\n ? toEffectSchema(value, defs)\n : Schema.optional(toEffectSchema(value, defs));\n }\n }\n\n if (root.propertyOrder) {\n fields = orderKeys(fields, root.propertyOrder as any);\n }\n\n let schema: Schema.Schema<any, any, unknown>;\n if (root.patternProperties) {\n invariant(propertyList.length === 0, 'pattern properties mixed with regular properties are not supported');\n invariant(\n Object.keys(root.patternProperties).length === 1 && Object.keys(root.patternProperties)[0] === '',\n 'only one pattern property is supported',\n );\n\n schema = Schema.Record({ key: Schema.String, value: toEffectSchema(root.patternProperties[''], defs) });\n } else if (typeof root.additionalProperties !== 'object') {\n schema = Schema.Struct(fields);\n } else {\n const indexValue = toEffectSchema(root.additionalProperties, defs);\n if (propertyList.length > 0) {\n schema = Schema.Struct(fields, { key: Schema.String, value: indexValue });\n } else {\n schema = Schema.Record({ key: Schema.String, value: indexValue });\n }\n }\n\n if (immutableIdField) {\n schema = Schema.extend(Schema.mutable(schema), Schema.Struct({ id: immutableIdField }));\n }\n\n const annotations = jsonSchemaFieldsToAnnotations(root);\n return schema.annotations(annotations) as any;\n};\n\nconst anyToEffectSchema = (root: JSONSchema.JsonSchema7Any): Schema.Schema.AnyNoContext => {\n const echoRefinement: JsonSchemaEchoAnnotations = (root as any)[ECHO_ANNOTATIONS_NS_DEPRECATED_KEY];\n // TODO(dmaretskyi): Is this branch still taken?\n if ((echoRefinement as any)?.reference != null) {\n const echoId = root.$id.startsWith('dxn:echo:') ? root.$id : undefined;\n return createEchoReferenceSchema(\n echoId,\n (echoRefinement as any).reference.typename,\n (echoRefinement as any).reference.version,\n );\n }\n\n return Schema.Any;\n};\n\n// TODO(dmaretskyi): Types.\nconst refToEffectSchema = (root: any): Schema.Schema.AnyNoContext => {\n if (!('reference' in root)) {\n return Ref(Expando);\n }\n\n const reference: JsonSchemaReferenceInfo = root.reference;\n if (typeof reference !== 'object') {\n throw new Error('Invalid reference field in ref schema');\n }\n\n const targetSchemaDXN = DXN.parse(reference.schema.$ref);\n invariant(targetSchemaDXN.kind === DXN.kind.TYPE);\n\n return createEchoReferenceSchema(\n targetSchemaDXN.toString(),\n targetSchemaDXN.kind === DXN.kind.TYPE ? targetSchemaDXN.parts[0] : undefined,\n reference.schemaVersion,\n );\n};\n\n//\n// Annotations\n//\n\nconst annotations_toJsonSchemaFields = (annotations: SchemaAST.Annotations): Record<symbol, any> => {\n const schemaFields: Record<string, any> = {};\n\n const echoAnnotations: JsonSchemaEchoAnnotations = {};\n for (const [key, annotationId] of Object.entries(EchoAnnotations)) {\n if (annotations[annotationId] != null) {\n echoAnnotations[key as keyof JsonSchemaEchoAnnotations] = annotations[annotationId] as any;\n }\n }\n if (Object.keys(echoAnnotations).length > 0) {\n // TODO(dmaretskyi): use new namespace.\n schemaFields[ECHO_ANNOTATIONS_NS_KEY] = echoAnnotations;\n }\n\n const echoIdentifier = annotations[TypeIdentifierAnnotationId];\n if (echoIdentifier) {\n schemaFields[ECHO_ANNOTATIONS_NS_KEY] ??= {};\n schemaFields[ECHO_ANNOTATIONS_NS_KEY].schemaId = echoIdentifier;\n }\n\n // Custom (at end).\n for (const [key, annotationId] of Object.entries(CustomAnnotations)) {\n const value = annotations[annotationId];\n if (value != null) {\n schemaFields[key] = value;\n }\n }\n\n return schemaFields;\n};\n\nconst decodeTypeIdentifierAnnotation = (schema: JsonSchemaType): string | undefined => {\n // Limit to dxn:echo: URIs.\n if (schema.$id && schema.$id.startsWith('dxn:echo:')) {\n return schema.$id;\n } else if (schema.$id && schema.$id.startsWith('dxn:type:') && schema?.echo?.type?.schemaId) {\n const id = schema?.echo?.type?.schemaId;\n if (ObjectId.isValid(id)) {\n return DXN.fromLocalObjectId(id).toString();\n }\n }\n return undefined;\n};\n\nconst decodeTypeAnnotation = (schema: JsonSchemaType): TypeAnnotation | undefined => {\n if (schema.typename) {\n const annotation: Types.Mutable<TypeAnnotation> = {\n // TODO(dmaretskyi): Decoding default.\n kind: schema.entityKind ? Schema.decodeSync(EntityKindSchema)(schema.entityKind) : EntityKind.Object,\n typename: schema.typename,\n version: schema.version ?? '0.1.0',\n };\n\n if (annotation.kind === EntityKind.Relation) {\n const source = schema.relationSource?.$ref ?? raise(new Error('Relation source not set'));\n const target = schema.relationTarget?.$ref ?? raise(new Error('Relation target not set'));\n annotation.sourceSchema = DXN.parse(source).toString();\n annotation.targetSchema = DXN.parse(target).toString();\n }\n\n return annotation;\n }\n\n // Decode legacy schema.\n if (!schema.typename && schema?.echo?.type) {\n return {\n kind: EntityKind.Object,\n typename: schema.echo.type.typename,\n version: schema.echo.type.version,\n };\n }\n\n return undefined;\n};\n\nconst jsonSchemaFieldsToAnnotations = (schema: JsonSchemaType): SchemaAST.Annotations => {\n const annotations: Types.Mutable<Schema.Annotations.Schema<any>> = {};\n\n const echoAnnotations: JsonSchemaEchoAnnotations = getNormalizedEchoAnnotations(schema) ?? {};\n if (echoAnnotations) {\n for (const [key, annotationId] of Object.entries(EchoAnnotations)) {\n if (echoAnnotations[key as keyof JsonSchemaEchoAnnotations]) {\n annotations[annotationId] = echoAnnotations[key as keyof JsonSchemaEchoAnnotations];\n }\n }\n }\n\n annotations[TypeIdentifierAnnotationId] = decodeTypeIdentifierAnnotation(schema);\n const typeAnnotation = decodeTypeAnnotation(schema);\n if (typeAnnotation) {\n annotations[TypeAnnotationId] = typeAnnotation;\n annotations[SchemaAST.JSONSchemaAnnotationId] = makeTypeJsonSchemaAnnotation({\n kind: typeAnnotation.kind,\n typename: typeAnnotation.typename,\n version: typeAnnotation.version,\n relationSource: typeAnnotation.sourceSchema,\n relationTarget: typeAnnotation.targetSchema,\n });\n }\n\n // Custom (at end).\n for (const [key, annotationId] of Object.entries({ ...CustomAnnotations, ...DecodedAnnotations })) {\n if (key in schema) {\n annotations[annotationId] = (schema as any)[key];\n }\n }\n\n return clearUndefined(annotations);\n};\n\nconst makeAnnotatedRefinement = (ast: SchemaAST.AST, annotations: SchemaAST.Annotations): SchemaAST.Refinement => {\n return new SchemaAST.Refinement(ast, () => Option.none(), annotations);\n};\n\nconst addJsonSchemaFields = (ast: SchemaAST.AST, schema: JsonSchemaType): SchemaAST.AST =>\n makeAnnotatedRefinement(ast, { [SchemaAST.JSONSchemaAnnotationId]: schema });\n\n/**\n * Fixes field order.\n * Sets `$schema` prop.\n */\nconst normalizeJsonSchema = (jsonSchema: JsonSchemaType): JsonSchemaType => {\n if (jsonSchema.properties && 'id' in jsonSchema.properties) {\n jsonSchema.properties = orderKeys(jsonSchema.properties, ['id']); // Put id first.\n }\n\n // TODO(dmaretskyi): Makes sure undefined is not left on optional fields for the resulting object.\n jsonSchema.$schema = JSON_SCHEMA_URL;\n jsonSchema = orderKeys(jsonSchema, [\n '$schema',\n '$id',\n\n 'entityKind',\n 'typename',\n 'version',\n 'relationTarget',\n 'relationSource',\n\n 'type',\n 'enum',\n\n 'properties',\n 'required',\n 'propertyOrder', // Custom.\n 'items',\n 'additionalProperties',\n\n 'anyOf',\n 'oneOf',\n ]);\n return jsonSchema;\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport * as Effect from 'effect/Effect';\nimport * as Option from 'effect/Option';\nimport * as ParseResult from 'effect/ParseResult';\nimport * as Schema from 'effect/Schema';\nimport * as SchemaAST from 'effect/SchemaAST';\n\nimport { type EncodedReference, Reference } from '@dxos/echo-protocol';\nimport { compositeRuntime } from '@dxos/echo-signals/runtime';\nimport { assertArgument, invariant } from '@dxos/invariant';\nimport { DXN, ObjectId } from '@dxos/keys';\n\nimport { ReferenceAnnotationId, getSchemaDXN, getTypeAnnotation, getTypeIdentifierAnnotation } from '../annotations';\nimport { type JsonSchemaType } from '../json-schema';\nimport type { AnyProperties, WithId } from '../types';\n\n/**\n * The `$id` and `$ref` fields for an ECHO reference schema.\n */\nexport const JSON_SCHEMA_ECHO_REF_ID = '/schemas/echo/ref';\n\nexport const getSchemaReference = (property: JsonSchemaType): { typename: string } | undefined => {\n const { $id, reference: { schema: { $ref } = {} } = {} } = property;\n if ($id === JSON_SCHEMA_ECHO_REF_ID && $ref) {\n return { typename: DXN.parse($ref).typename };\n }\n};\n\nexport const createSchemaReference = (typename: string): JsonSchemaType => {\n return {\n $id: JSON_SCHEMA_ECHO_REF_ID,\n reference: {\n schema: {\n $ref: DXN.fromTypename(typename).toString(),\n },\n },\n };\n};\n\n/**\n * Runtime type-info for a reference extracted from effect AST.\n */\nexport type RefereneAST = {\n /**\n * Typename of linked schema.\n */\n typename: string;\n\n /**\n * Version of linked schema.\n */\n version: string;\n};\n\nexport const getReferenceAst = (ast: SchemaAST.AST): RefereneAST | undefined => {\n if (ast._tag !== 'Declaration' || !ast.annotations[ReferenceAnnotationId]) {\n return undefined;\n }\n return {\n typename: (ast.annotations[ReferenceAnnotationId] as any).typename,\n version: (ast.annotations[ReferenceAnnotationId] as any).version,\n };\n};\n\nexport const RefTypeId: unique symbol = Symbol('@dxos/echo/internal/Ref');\n\n/**\n * Reference Schema.\n */\nexport interface RefSchema<T extends WithId> extends Schema.SchemaClass<Ref<T>, EncodedReference> {}\n\n/**\n * Type of the `Ref` function and extra methods attached to it.\n */\nexport interface RefFn {\n <S extends Schema.Schema.Any>(schema: S): RefSchema<Schema.Schema.Type<S>>;\n\n /**\n * @returns True if the object is a reference.\n */\n isRef: (obj: unknown) => obj is Ref<any>;\n\n /**\n * @returns True if the reference points to the given object id.\n */\n hasObjectId: (id: ObjectId) => (ref: Ref<any>) => boolean;\n\n /**\n * @returns True if the schema is a reference schema.\n */\n isRefSchema: (schema: Schema.Schema<any, any>) => schema is RefSchema<any>;\n\n /**\n * @returns True if the schema AST is a reference schema.\n */\n isRefSchemaAST: (ast: SchemaAST.AST) => boolean;\n\n /**\n * Constructs a reference that points to the given object.\n */\n // TODO(burdon): Narrow to Obj.Any?\n make: <T extends WithId>(object: T) => Ref<T>;\n\n /**\n * Constructs a reference that points to the object specified by the provided DXN.\n */\n fromDXN: (dxn: DXN) => Ref<any>;\n}\n\n/**\n * Schema builder for references.\n */\nexport const Ref: RefFn = <S extends Schema.Schema.Any>(schema: S): RefSchema<Schema.Schema.Type<S>> => {\n assertArgument(Schema.isSchema(schema), 'schema', 'Must call with an instance of effect-schema');\n\n const annotation = getTypeAnnotation(schema);\n if (annotation == null) {\n throw new Error('Reference target must be an ECHO schema.');\n }\n\n return createEchoReferenceSchema(\n getTypeIdentifierAnnotation(schema),\n annotation.typename,\n annotation.version,\n getSchemaExpectedName(schema.ast),\n );\n};\n\n/**\n * Represents materialized reference to a target.\n * This is the data type for the fields marked as ref.\n */\nexport interface Ref<T> {\n /**\n * Target object DXN.\n */\n get dxn(): DXN;\n\n /**\n * @returns The reference target.\n * May return `undefined` if the object is not loaded in the working set.\n * Accessing this property, even if it returns `undefined` will trigger the object to be loaded to the working set.\n *\n * @reactive Supports signal subscriptions.\n */\n get target(): T | undefined;\n\n /**\n * @returns Promise that will resolves with the target object.\n * Will load the object from disk if it is not present in the working set.\n * @throws If the object is not available locally.\n */\n load(): Promise<T>;\n\n /**\n * @returns Promise that will resolves with the target object or undefined if the object is not loaded locally.\n */\n tryLoad(): Promise<T | undefined>;\n\n /**\n * Do not inline the target object in the reference.\n * Makes .target unavailable unless the reference is connected to a database context.\n *\n * When serialized with toJSON, the difference is between:\n * `{ \"/\": \"dxn:...\" }`\n * and\n * `{ \"/\": \"dxn:...\", \"target\": { ... } }`\n *\n * Clones the reference object.\n */\n noInline(): Ref<T>;\n\n /**\n * Serializes the reference to a JSON object.\n * The serialization format is compatible with the IPLD-style encoded references.\n * When a reference has a saved target (i.e. the target or object holding the reference is not in the database),\n * the target is included in the serialized object.\n *\n * Examples:\n * `{ \"/\": \"dxn:...\" }`\n * `{ \"/\": \"dxn:...\", \"target\": { ... } }`\n */\n encode(): EncodedReference;\n\n [RefTypeId]: {\n _T: T;\n };\n}\n\nexport declare namespace Ref {\n /**\n * Target of the reference.\n */\n export type Target<R> = R extends Ref<infer U> ? U : never;\n}\n\nRef.isRef = (obj: any): obj is Ref<any> => {\n return obj && typeof obj === 'object' && RefTypeId in obj;\n};\n\nRef.hasObjectId = (id: ObjectId) => (ref: Ref<any>) => ref.dxn.isLocalObjectId() && ref.dxn.parts[1] === id;\n\nRef.isRefSchema = (schema: Schema.Schema<any, any>): schema is RefSchema<any> => {\n return Ref.isRefSchemaAST(schema.ast);\n};\n\nRef.isRefSchemaAST = (ast: SchemaAST.AST): boolean => {\n return SchemaAST.getAnnotation(ast, ReferenceAnnotationId).pipe(Option.isSome);\n};\n\nRef.make = <T extends AnyProperties>(obj: T): Ref<T> => {\n if (typeof obj !== 'object' || obj === null) {\n throw new TypeError('Expected: ECHO object.');\n }\n\n // TODO(dmaretskyi): Extract to `getObjectDXN` function.\n const id = obj.id;\n invariant(ObjectId.isValid(id), 'Invalid object ID');\n const dxn = Reference.localObjectReference(id).toDXN();\n return new RefImpl(dxn, obj);\n};\n\nRef.fromDXN = (dxn: DXN): Ref<any> => {\n assertArgument(dxn instanceof DXN, 'dxn', 'Expected DXN');\n return new RefImpl(dxn);\n};\n\n/**\n * `reference` field on the schema object.\n */\nexport type JsonSchemaReferenceInfo = {\n schema: { $ref: string };\n schemaVersion?: string;\n};\n\n/**\n * @internal\n */\n// TODO(burdon): Move to json schema and make private?\nexport const createEchoReferenceSchema = (\n echoId: string | undefined,\n typename: string | undefined,\n version: string | undefined,\n schemaName?: string, // TODO(burdon): Not used.\n): Schema.SchemaClass<Ref<any>, EncodedReference> => {\n if (!echoId && !typename) {\n throw new TypeError('Either echoId or typename must be provided.');\n }\n\n const referenceInfo: JsonSchemaReferenceInfo = {\n schema: {\n // TODO(dmaretskyi): Include version?\n $ref: echoId ?? DXN.fromTypename(typename!).toString(),\n },\n schemaVersion: version,\n };\n\n // TODO(dmaretskyi): Add name and description.\n const refSchema = Schema.declare<Ref<any>, EncodedReference, []>(\n [],\n {\n encode: () => {\n return (value) => {\n return Effect.succeed({\n '/': (value as Ref<any>).dxn.toString(),\n });\n };\n },\n decode: () => {\n return (value) => {\n // TODO(dmaretskyi): This branch seems to be taken by Schema.is\n if (Ref.isRef(value)) {\n return Effect.succeed(value);\n }\n\n if (typeof value !== 'object' || value == null || typeof (value as any)['/'] !== 'string') {\n return Effect.fail(new ParseResult.Unexpected(value, 'reference'));\n }\n\n return Effect.succeed(Ref.fromDXN(DXN.parse((value as any)['/'])));\n };\n },\n },\n {\n jsonSchema: {\n // TODO(dmaretskyi): We should remove `$id` and keep `$ref` with a fully qualified name.\n $id: JSON_SCHEMA_ECHO_REF_ID,\n $ref: JSON_SCHEMA_ECHO_REF_ID,\n reference: referenceInfo,\n },\n [ReferenceAnnotationId]: {\n typename: typename ?? '',\n version,\n },\n },\n );\n\n return refSchema;\n};\n\nconst getSchemaExpectedName = (ast: SchemaAST.Annotated): string | undefined => {\n return SchemaAST.getIdentifierAnnotation(ast).pipe(\n Option.orElse(() => SchemaAST.getTitleAnnotation(ast)),\n Option.orElse(() => SchemaAST.getDescriptionAnnotation(ast)),\n Option.getOrElse(() => undefined),\n );\n};\n\nexport interface RefResolver {\n /**\n * Resolve ref synchronously from the objects in the working set.\n *\n * @param dxn\n * @param load If true the resolver should attempt to load the object from disk.\n * @param onLoad Callback to call when the object is loaded.\n */\n resolveSync(dxn: DXN, load: boolean, onLoad?: () => void): AnyProperties | undefined;\n\n /**\n * Resolver ref asynchronously.\n */\n resolve(dxn: DXN): Promise<AnyProperties | undefined>;\n\n // TODO(dmaretskyi): Combine with `resolve`.\n resolveSchema(dxn: DXN): Promise<Schema.Schema.AnyNoContext | undefined>;\n}\n\nexport class RefImpl<T> implements Ref<T> {\n #dxn: DXN;\n #resolver?: RefResolver = undefined;\n #signal = compositeRuntime.createSignal();\n\n /**\n * Target is set when the reference is created from a specific object.\n * In this case, the target might not be in the database.\n */\n #target: T | undefined = undefined;\n\n /**\n * Callback to issue a reactive notification when object is resolved.\n */\n #resolverCallback = () => {\n this.#signal.notifyWrite();\n };\n\n constructor(dxn: DXN, target?: T) {\n this.#dxn = dxn;\n this.#target = target;\n }\n\n /**\n * @inheritdoc\n */\n get dxn(): DXN {\n return this.#dxn;\n }\n\n /**\n * @inheritdoc\n */\n get target(): T | undefined {\n this.#signal.notifyRead();\n if (this.#target) {\n return this.#target;\n }\n\n invariant(this.#resolver, 'Resolver is not set');\n return this.#resolver.resolveSync(this.#dxn, true, this.#resolverCallback) as T | undefined;\n }\n\n /**\n * @inheritdoc\n */\n async load(): Promise<T> {\n if (this.#target) {\n return this.#target;\n }\n invariant(this.#resolver, 'Resolver is not set');\n const obj = await this.#resolver.resolve(this.#dxn);\n if (obj == null) {\n throw new Error('Object not found');\n }\n return obj as T;\n }\n\n /**\n * @inheritdoc\n */\n async tryLoad(): Promise<T | undefined> {\n invariant(this.#resolver, 'Resolver is not set');\n return (await this.#resolver.resolve(this.#dxn)) as T | undefined;\n }\n\n /**\n * Do not inline the target object in the reference.\n * Makes .target unavailable unless the reference is connected to a database context.\n * Clones the reference object.\n */\n noInline(): RefImpl<T> {\n const ref = new RefImpl<T>(this.#dxn, undefined);\n ref.#resolver = this.#resolver;\n return ref;\n }\n\n encode(): EncodedReference {\n return {\n '/': this.#dxn.toString(),\n ...(this.#target ? { target: this.#target } : {}),\n };\n }\n\n /**\n * Serializes the reference to a JSON object.\n * The serialization format is compatible with the IPLD-style encoded references.\n * When a reference has a saved target (i.e. the target or object holding the reference is not in the database),\n * the target is included in the serialized object.\n */\n toJSON(): EncodedReference {\n return this.encode();\n }\n\n toString(): string {\n if (this.#target) {\n return `Ref(${this.#target.toString()})`;\n }\n\n return `Ref(${this.#dxn.toString()})`;\n }\n\n [RefTypeId] = refVariance;\n\n /**\n * Internal method to set the resolver.\n *\n * @internal\n */\n _setResolver(resolver: RefResolver): void {\n this.#resolver = resolver;\n }\n\n /**\n * Internal method to get the saved target.\n * Not the same as `target` which is resolved from the resolver.\n *\n * @internal\n */\n _getSavedTarget(): T | undefined {\n return this.#target;\n }\n}\n\n/**\n * Internal API for setting the reference resolver.\n */\nexport const setRefResolver = (ref: Ref<any>, resolver: RefResolver) => {\n invariant(ref instanceof RefImpl, 'Ref is not an instance of RefImpl');\n ref._setResolver(resolver);\n};\n\n/**\n * Internal API for getting the saved target on a reference.\n */\nexport const getRefSavedTarget = (ref: Ref<any>): AnyProperties | undefined => {\n invariant(ref instanceof RefImpl, 'Ref is not an instance of RefImpl');\n return ref._getSavedTarget();\n};\n\n// Used to validate reference target type.\nconst refVariance: Ref<any>[typeof RefTypeId] = {\n _T: null as any,\n};\n\nexport const refFromEncodedReference = (encodedReference: EncodedReference, resolver?: RefResolver): Ref<any> => {\n const dxn = DXN.parse(encodedReference['/']);\n const ref = new RefImpl(dxn);\n\n // TODO(dmaretskyi): Handle inline target in the encoded reference.\n\n if (resolver) {\n setRefResolver(ref, resolver);\n }\n return ref;\n};\n\nexport class StaticRefResolver implements RefResolver {\n public objects = new Map<ObjectId, AnyProperties>();\n public schemas = new Map<DXN.String, Schema.Schema.AnyNoContext>();\n\n addObject(obj: AnyProperties): this {\n this.objects.set(obj.id, obj);\n return this;\n }\n\n addSchema(schema: Schema.Schema.AnyNoContext): this {\n const dxn = getSchemaDXN(schema);\n invariant(dxn, 'Schema has no DXN');\n this.schemas.set(dxn.toString(), schema);\n return this;\n }\n\n resolveSync(dxn: DXN, _load: boolean, _onLoad?: () => void): AnyProperties | undefined {\n const id = dxn?.asEchoDXN()?.echoId;\n if (id == null) {\n return undefined;\n }\n\n return this.objects.get(id);\n }\n\n async resolve(dxn: DXN): Promise<AnyProperties | undefined> {\n const id = dxn?.asEchoDXN()?.echoId;\n if (id == null) {\n return undefined;\n }\n\n return this.objects.get(id);\n }\n\n async resolveSchema(dxn: DXN): Promise<Schema.Schema.AnyNoContext | undefined> {\n return this.schemas.get(dxn.toString());\n }\n}\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { type ObjectId } from '@dxos/keys';\nimport { isNonNullable } from '@dxos/util';\n\nimport { type AnyEchoObject } from '../types';\n\nimport { Ref } from './ref';\n\n/**\n * Helper functions for working with arrays of refs.\n */\nexport const RefArray = Object.freeze({\n /**\n * @returns all resolved targets.\n */\n targets: <T extends AnyEchoObject>(refs: readonly Ref<T>[]): T[] => {\n return refs.map((ref) => ref.target).filter(isNonNullable);\n },\n\n /**\n * Load all referenced objects.\n */\n loadAll: <T extends AnyEchoObject>(refs: readonly Ref<T>[]): Promise<T[]> => {\n return Promise.all(refs.map((ref) => ref.load()));\n },\n\n /**\n * Removes the ref with the given id.\n */\n removeById: (refs: Ref<AnyEchoObject>[], id: ObjectId) => {\n const index = refs.findIndex(Ref.hasObjectId(id));\n if (index >= 0) {\n refs.splice(index, 1);\n }\n },\n});\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport * as Schema from 'effect/Schema';\n\nimport { getTypename } from '../annotations';\nimport { type AnyProperties } from '../types';\n\n// TODO(dmaretskyi): Rename to represent commonality between objects and relations (e.g. `entity`).\nexport type TypedObjectOptions = {\n // TODO(burdon): Document.\n partial?: true;\n // TODO(burdon): Document.\n record?: true;\n};\n\n/**\n *\n */\n// TODO(burdon): Comment required.\n// TODO(dmaretskyi): Rename to represent commonality between objects and relations (e.g. `entity`).\ntype SimplifiedSchemaFields<\n SchemaFields extends Schema.Struct.Fields,\n Options extends TypedObjectOptions,\n> = Options['partial'] extends boolean\n ? Schema.SimplifyMutable<Partial<Schema.Struct.Type<SchemaFields>>>\n : Schema.SimplifyMutable<Schema.Struct.Type<SchemaFields>>;\n\n/**\n *\n */\n// TODO(burdon): Comment required.\n// TODO(dmaretskyi): Rename to represent commonality between objects and relations (e.g. `entity`).\nexport type TypedObjectFields<\n SchemaFields extends Schema.Struct.Fields,\n Options extends TypedObjectOptions,\n> = SimplifiedSchemaFields<SchemaFields, Options> & { id: string } & (Options['record'] extends boolean\n ? Schema.SimplifyMutable<Schema.IndexSignature.Type<Schema.IndexSignature.Records>>\n : {});\n\nexport const makeTypedEntityClass = (\n typename: string,\n version: string,\n baseSchema: Schema.Schema.AnyNoContext,\n): Schema.SchemaClass<any> => {\n return class {\n // Implement TypedObject properties.\n static readonly typename = typename;\n static readonly version = version;\n\n // Implement Schema.Schema properties.\n // TODO(burdon): Comment required.\n static readonly [Schema.TypeId] = schemaVariance;\n static readonly ast = baseSchema.ast;\n static readonly annotations = baseSchema.annotations.bind(baseSchema);\n static readonly pipe = baseSchema.pipe.bind(baseSchema);\n\n // TODO(burdon): Comment required.\n static [Symbol.hasInstance](obj: AnyProperties) {\n return obj != null && getTypename(obj) === typename;\n }\n\n // TODO(burdon): Throw APIError.\n private constructor() {\n throw new Error('Use live(Typename, { ...fields }) to instantiate an object.');\n }\n } as any;\n};\n\nconst schemaVariance = {\n _A: (_: any) => _,\n _I: (_: any) => _,\n _R: (_: never) => _,\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport type * as Schema from 'effect/Schema';\n\nimport { raise } from '@dxos/debug';\nimport { assertArgument, failedInvariant } from '@dxos/invariant';\nimport { ObjectId } from '@dxos/keys';\nimport { defineHiddenProperty } from '@dxos/live-object';\n\nimport { getSchemaDXN, getTypeAnnotation, setTypename } from '../annotations';\nimport {\n RelationSourceDXNId,\n RelationSourceId,\n RelationTargetDXNId,\n RelationTargetId,\n assertObjectModel,\n getObjectDXN,\n} from '../entities';\nimport { EntityKind, KindId, MetaId, setSchema } from '../types';\n\nimport { attachedTypedObjectInspector } from './inspect';\nimport { attachTypedJsonSerializer } from './json-serializer';\n\nexport type CreateObjectProps<T> = T extends { id: string } ? Omit<T, 'id' | KindId> & { id?: string } : T;\n\n/**\n * Creates a new object instance from a schema and data, without signal reactivity.\n * This static version creates plain JavaScript objects that are not reactive/observable.\n * For reactive objects that automatically update UI when changed, use the regular live() function.\n *\n * @param schema - The Effect schema that defines the object's structure and type, piped into EchoObjectSchema\n * @param data - The data to initialize the object with. The id and @type fields are handled automatically.\n * @returns A new non-reactive object instance conforming to the schema\n * @throws {Error} If the schema is not an object schema\n * @throws {TypeError} If data contains an @type field\n *\n * @example\n * ```ts\n * const Contact = Schema.Struct({\n * name: Schema.String,\n * email: Schema.String,\n * }).pipe(Type.Obj({\n * typename: 'example.com/type/Person',\n * version: '0.1.0',\n * }))\n *\n * const contact = createObject(Contact, {\n * name: \"John\",\n * email: \"john@example.com\",\n * })\n * ```\n */\n// TODO(burdon): Make internal.\nexport const createObject = <S extends Schema.Schema.AnyNoContext>(\n schema: S,\n props: CreateObjectProps<Schema.Schema.Type<S>>,\n): CreateObjectProps<Schema.Schema.Type<S>> & { id: string; [KindId]: EntityKind } => {\n const annotation = getTypeAnnotation(schema);\n if (!annotation) {\n throw new Error('Schema is not an ECHO schema');\n }\n assertArgument(!('@type' in props), 'data', '@type is not allowed');\n assertArgument(!(RelationSourceDXNId in props), 'data', 'Relation source DXN is not allowed in the constructor');\n assertArgument(!(RelationTargetDXNId in props), 'data', 'Relation target DXN is not allowed in the constructor');\n assertArgument(\n RelationSourceId in props === RelationTargetId in props,\n 'data',\n 'Relation source and target must be provided together',\n );\n\n // Raw object.\n const obj = { ...props, id: props.id ?? ObjectId.random() };\n\n // Metadata.\n const kind = RelationSourceId in props ? EntityKind.Relation : EntityKind.Object;\n defineHiddenProperty(obj, KindId, kind);\n defineHiddenProperty(obj, MetaId, { keys: [] });\n setSchema(obj, schema);\n setTypename(obj, getSchemaDXN(schema) ?? failedInvariant('Missing schema DXN'));\n attachTypedJsonSerializer(obj);\n attachedTypedObjectInspector(obj);\n\n // Relation.\n if (kind === EntityKind.Relation) {\n const sourceDXN = getObjectDXN(props[RelationSourceId]) ?? raise(new Error('Unresolved relation source'));\n const targetDXN = getObjectDXN(props[RelationTargetId]) ?? raise(new Error('Unresolved relation target'));\n defineHiddenProperty(obj, RelationSourceDXNId, sourceDXN);\n defineHiddenProperty(obj, RelationTargetDXNId, targetDXN);\n }\n\n assertObjectModel(obj);\n return obj;\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport type { InspectOptionsStylized, inspect as inspectFn } from 'node:util';\n\nimport { type CustomInspectFunction, inspectCustom } from '@dxos/debug';\n\nimport { getTypeDXN } from '../annotations';\nimport { ATTR_META, ATTR_TYPE, type AnyEchoObject, MetaId } from '../types';\n\n/*\n * @internal\n */\nexport const attachedTypedObjectInspector = (obj: any) => {\n const descriptor = Object.getOwnPropertyDescriptor(obj, inspectCustom);\n if (descriptor) {\n return;\n }\n\n Object.defineProperty(obj, inspectCustom, {\n value: typedObjectInspectFunction,\n writable: false,\n enumerable: false,\n configurable: true,\n });\n};\n\n// NOTE: KEEP as function.\nconst typedObjectInspectFunction: CustomInspectFunction<AnyEchoObject> = function (\n this: AnyEchoObject,\n depth: number,\n options: InspectOptionsStylized,\n inspect: typeof inspectFn,\n) {\n const { id, ...props } = this;\n return inspect(\n {\n id,\n [ATTR_TYPE]: getTypeDXN(this),\n ...props,\n [ATTR_META]: (this as any)[MetaId], // TODO(dmaretskyi): Couldn't use getMeta since that throw's if the object has no meta.\n },\n options,\n );\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport * as Schema from 'effect/Schema';\n\nimport { raise } from '@dxos/debug';\nimport { type EncodedReference, type ObjectMeta, isEncodedReference } from '@dxos/echo-protocol';\nimport { assertArgument, invariant } from '@dxos/invariant';\nimport { DXN, ObjectId } from '@dxos/keys';\nimport { defineHiddenProperty } from '@dxos/live-object';\nimport { assumeType, deepMapValues, visitValues } from '@dxos/util';\n\nimport { getTypeDXN, setTypename } from '../annotations';\nimport {\n ATTR_DELETED,\n ATTR_RELATION_SOURCE,\n ATTR_RELATION_TARGET,\n ATTR_SELF_DXN,\n type ObjectJSON,\n RelationSourceDXNId,\n RelationSourceId,\n RelationTargetDXNId,\n RelationTargetId,\n SelfDXNId,\n assertObjectModel,\n} from '../entities';\nimport { Ref, type RefResolver, refFromEncodedReference, setRefResolver } from '../ref';\nimport {\n ATTR_META,\n ATTR_TYPE,\n type AnyEchoObject,\n EntityKind,\n KindId,\n MetaId,\n ObjectMetaSchema,\n TypeId,\n setSchema,\n} from '../types';\n\ntype DeepReplaceRef<T> =\n T extends Ref<any>\n ? EncodedReference\n : T extends object\n ? {\n [K in keyof T]: DeepReplaceRef<T[K]>;\n }\n : T;\n\ntype SerializedObject<T extends { id: string }> = {\n [K in keyof T]: DeepReplaceRef<T[K]>;\n} & ObjectJSON;\n\n/**\n * Converts object to it's JSON representation.\n */\nexport const objectToJSON = <T extends AnyEchoObject>(obj: T): SerializedObject<T> => {\n const typename = getTypeDXN(obj)?.toString();\n invariant(typename && typeof typename === 'string');\n return typedJsonSerializer.call(obj);\n};\n\n/**\n * Creates an object from it's json representation.\n * Performs schema validation.\n * References and schema will be resolvable if the `refResolver` is provided.\n * The function need to be async to support resolving the schema as well as the relation endpoints.\n */\nexport const objectFromJSON = async (\n jsonData: unknown,\n { refResolver, dxn }: { refResolver?: RefResolver; dxn?: DXN } = {},\n): Promise<AnyEchoObject> => {\n assumeType<ObjectJSON>(jsonData);\n assertArgument(typeof jsonData === 'object' && jsonData !== null, 'jsonData', 'expect object');\n assertArgument(typeof jsonData[ATTR_TYPE] === 'string', 'jsonData[ATTR_TYPE]', 'expected object to have a type');\n assertArgument(typeof jsonData.id === 'string', 'jsonData.id', 'expected object to have an id');\n\n const type = DXN.parse(jsonData[ATTR_TYPE]);\n const schema = await refResolver?.resolveSchema(type);\n invariant(schema === undefined || Schema.isSchema(schema));\n\n let obj: any;\n if (schema != null) {\n obj = await schema.pipe(Schema.decodeUnknownPromise)(jsonData);\n if (refResolver) {\n setRefResolverOnData(obj, refResolver);\n }\n } else {\n obj = decodeGeneric(jsonData, { refResolver });\n }\n\n invariant(ObjectId.isValid(obj.id), 'Invalid object id');\n setTypename(obj, type);\n if (schema) {\n setSchema(obj, schema);\n }\n\n const isRelation =\n typeof jsonData[ATTR_RELATION_SOURCE] === 'string' || typeof jsonData[ATTR_RELATION_TARGET] === 'string';\n if (isRelation) {\n const sourceDxn: DXN = DXN.parse(jsonData[ATTR_RELATION_SOURCE] ?? raise(new TypeError('Missing relation source')));\n const targetDxn: DXN = DXN.parse(jsonData[ATTR_RELATION_TARGET] ?? raise(new TypeError('Missing relation target')));\n\n const source = (await refResolver?.resolve(sourceDxn)) as AnyEchoObject | undefined;\n const target = (await refResolver?.resolve(targetDxn)) as AnyEchoObject | undefined;\n\n defineHiddenProperty(obj, KindId, EntityKind.Relation);\n defineHiddenProperty(obj, RelationSourceDXNId, sourceDxn);\n defineHiddenProperty(obj, RelationTargetDXNId, targetDxn);\n defineHiddenProperty(obj, RelationSourceId, source);\n defineHiddenProperty(obj, RelationTargetId, target);\n } else {\n defineHiddenProperty(obj, KindId, EntityKind.Object);\n }\n\n if (typeof jsonData[ATTR_META] === 'object') {\n const meta = await ObjectMetaSchema.pipe(Schema.decodeUnknownPromise)(jsonData[ATTR_META]);\n invariant(Array.isArray(meta.keys));\n defineHiddenProperty(obj, MetaId, meta);\n }\n\n if (dxn) {\n defineHiddenProperty(obj, SelfDXNId, dxn);\n }\n\n assertObjectModel(obj);\n invariant((obj as any)[ATTR_TYPE] === undefined, 'Invalid object model');\n invariant((obj as any)[ATTR_META] === undefined, 'Invalid object model');\n invariant((obj as any)[ATTR_DELETED] === undefined, 'Invalid object model');\n invariant((obj as any)[ATTR_SELF_DXN] === undefined, 'Invalid object model');\n invariant((obj as any)[ATTR_RELATION_SOURCE] === undefined, 'Invalid object model');\n invariant((obj as any)[ATTR_RELATION_TARGET] === undefined, 'Invalid object model');\n return obj;\n};\n\nconst decodeGeneric = (jsonData: unknown, options: { refResolver?: RefResolver }) => {\n const {\n [ATTR_TYPE]: _type,\n [ATTR_META]: _meta,\n [ATTR_DELETED]: _deleted,\n [ATTR_SELF_DXN]: _selfDxn,\n [ATTR_RELATION_SOURCE]: _relationSource,\n [ATTR_RELATION_TARGET]: _relationTarget,\n ...props\n } = jsonData as any;\n\n return deepMapValues(props, (value, visitor) => {\n if (isEncodedReference(value)) {\n return refFromEncodedReference(value, options.refResolver);\n }\n\n return visitor(value);\n });\n};\n\nexport const setRefResolverOnData = (obj: AnyEchoObject, refResolver: RefResolver) => {\n const visitor = (value: unknown) => {\n if (Ref.isRef(value)) {\n setRefResolver(value, refResolver);\n } else {\n visitValues(value, visitor);\n }\n };\n\n visitor(obj);\n};\n\nexport const attachTypedJsonSerializer = (obj: any) => {\n const descriptor = Object.getOwnPropertyDescriptor(obj, 'toJSON');\n if (descriptor) {\n return;\n }\n\n Object.defineProperty(obj, 'toJSON', {\n value: typedJsonSerializer,\n writable: false,\n enumerable: false,\n // Setting `configurable` to false breaks proxy invariants, should be fixable.\n configurable: true,\n });\n};\n\n// NOTE: KEEP as function.\nconst typedJsonSerializer = function (this: any) {\n const { id, ...rest } = this;\n const result: any = {\n id,\n };\n\n if (this[TypeId]) {\n result[ATTR_TYPE] = this[TypeId].toString();\n }\n\n if (this[MetaId]) {\n result[ATTR_META] = serializeMeta(this[MetaId]);\n }\n\n if (this[SelfDXNId]) {\n result[ATTR_SELF_DXN] = this[SelfDXNId].toString();\n }\n\n if (this[RelationSourceDXNId]) {\n const sourceDXN = this[RelationSourceDXNId];\n invariant(sourceDXN instanceof DXN);\n result[ATTR_RELATION_SOURCE] = sourceDXN.toString();\n }\n if (this[RelationTargetDXNId]) {\n const targetDXN = this[RelationTargetDXNId];\n invariant(targetDXN instanceof DXN);\n result[ATTR_RELATION_TARGET] = targetDXN.toString();\n }\n\n Object.assign(result, serializeData(rest));\n return result;\n};\n\nconst serializeData = (data: unknown) => {\n return deepMapValues(data, (value, recurse) => {\n if (Ref.isRef(value)) {\n // TODO(dmaretskyi): Should this be configurable?\n return value.noInline().encode();\n }\n\n return recurse(value);\n });\n};\n\nconst serializeMeta = (meta: ObjectMeta) => {\n return deepMapValues(meta, (value, recurse) => recurse(value));\n};\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { ObjectDeletedId } from '../entities';\nimport { type AnyProperties } from '../types';\n\n/**\n * @returns `true` if the object has been marked as deleted.\n */\nexport const isDeleted = (obj: AnyProperties): boolean => {\n if ((obj as any)[ObjectDeletedId] === undefined) {\n // TODO(dmaretskyi): Return to prior behavior of throwing.\n // throw new Error('Object does not support deletion marker');\n return false;\n }\n\n return (obj as any)[ObjectDeletedId] ?? false;\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { DXN, ObjectId, QueueSubspaceTags, SpaceId } from '@dxos/keys';\n\n/**\n * @deprecated Use `db.queues.create()`\n */\n// TODO(burdon): Move to @dxos/keys.\nexport const createQueueDXN = (spaceId = SpaceId.random(), queueId = ObjectId.random()) =>\n new DXN(DXN.kind.QUEUE, [QueueSubspaceTags.DATA, spaceId, queueId]);\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport * as Schema from 'effect/Schema';\nimport * as SchemaAST from 'effect/SchemaAST';\n\nimport { invariant } from '@dxos/invariant';\n\nimport { SchemaId } from '../types';\n\n// TODO(burdon): Reconcile with @dxos/effect visit().\n\nexport class SchemaValidator {\n /**\n * Recursively check that schema specifies constructions we can handle.\n * Validates there are no ambiguous discriminated union types.\n */\n public static validateSchema(schema: Schema.Schema.AnyNoContext): void {\n const visitAll = (nodes: SchemaAST.AST[]) => nodes.forEach((node) => this.validateSchema(Schema.make(node)));\n if (SchemaAST.isUnion(schema.ast)) {\n const typeAstList = schema.ast.types.filter((type) => SchemaAST.isTypeLiteral(type)) as SchemaAST.TypeLiteral[];\n // Check we can handle a discriminated union.\n if (typeAstList.length > 1) {\n getTypeDiscriminators(typeAstList);\n }\n visitAll(typeAstList);\n } else if (SchemaAST.isTupleType(schema.ast)) {\n const positionalTypes = schema.ast.elements.map((t) => t.type);\n const allTypes = positionalTypes.concat(schema.ast.rest.map((t) => t.type));\n visitAll(allTypes);\n } else if (SchemaAST.isTypeLiteral(schema.ast)) {\n visitAll(SchemaAST.getPropertySignatures(schema.ast).map((p) => p.type));\n }\n }\n\n public static hasTypeAnnotation(\n rootObjectSchema: Schema.Schema.AnyNoContext,\n property: string,\n annotation: symbol,\n ): boolean {\n try {\n let type = this.getPropertySchema(rootObjectSchema, [property]);\n if (SchemaAST.isTupleType(type.ast)) {\n type = this.getPropertySchema(rootObjectSchema, [property, '0']);\n }\n\n return type.ast.annotations[annotation] != null;\n } catch {\n return false;\n }\n }\n\n public static getPropertySchema(\n rootObjectSchema: Schema.Schema.AnyNoContext,\n propertyPath: KeyPath,\n getProperty: (path: KeyPath) => any = () => null,\n ): Schema.Schema.AnyNoContext {\n let schema: Schema.Schema.AnyNoContext = rootObjectSchema;\n for (let i = 0; i < propertyPath.length; i++) {\n const propertyName = propertyPath[i];\n const tupleAst = unwrapArray(schema.ast);\n if (tupleAst != null) {\n schema = getArrayElementSchema(tupleAst, propertyName);\n } else {\n const propertyType = getPropertyType(schema.ast, propertyName.toString(), (propertyName) =>\n getProperty([...propertyPath.slice(0, i), propertyName]),\n );\n if (propertyType == null) {\n throw new TypeError(`unknown property: ${String(propertyName)} on object. Path: ${propertyPath}`);\n }\n\n schema = Schema.make(propertyType).annotations(propertyType.annotations);\n }\n }\n\n return schema;\n }\n\n public static getTargetPropertySchema(target: any, prop: string | symbol): Schema.Schema.AnyNoContext {\n const schema: Schema.Schema.AnyNoContext | undefined = (target as any)[SchemaId];\n invariant(schema, 'target has no schema');\n const arrayAst = unwrapArray(schema.ast);\n if (arrayAst != null) {\n return getArrayElementSchema(arrayAst, prop);\n }\n\n const propertyType = getPropertyType(schema.ast, prop.toString(), (prop) => target[prop]);\n if (propertyType == null) {\n return Schema.Any; // TODO(burdon): HACK.\n }\n\n invariant(propertyType, `invalid property: ${prop.toString()}`);\n return Schema.make(propertyType);\n }\n}\n\n/**\n * Tuple AST is used both for:\n * fixed-length tuples ([string, number]) in which case AST will be { elements: [Schema.String, Schema.Number] }\n * variable-length arrays (Array<string | number>) in which case AST will be { rest: [Schema.Union(Schema.String, Schema.Number)] }\n */\nconst getArrayElementSchema = (\n tupleAst: SchemaAST.TupleType,\n property: string | symbol | number,\n): Schema.Schema.AnyNoContext => {\n const elementIndex = typeof property === 'string' ? parseInt(property, 10) : Number.NaN;\n if (Number.isNaN(elementIndex)) {\n invariant(property === 'length', `invalid array property: ${String(property)}`);\n return Schema.Number;\n }\n if (elementIndex < tupleAst.elements.length) {\n const elementType = tupleAst.elements[elementIndex].type;\n return Schema.make(elementType).annotations(elementType.annotations);\n }\n\n const restType = tupleAst.rest;\n return Schema.make(restType[0].type).annotations(restType[0].annotations);\n};\n\nconst flattenUnion = (typeAst: SchemaAST.AST): SchemaAST.AST[] =>\n SchemaAST.isUnion(typeAst) ? typeAst.types.flatMap(flattenUnion) : [typeAst];\n\nconst getProperties = (\n typeAst: SchemaAST.AST,\n getTargetPropertyFn: (propertyName: string) => any,\n): SchemaAST.PropertySignature[] => {\n const astCandidates = flattenUnion(typeAst);\n const typeAstList = astCandidates.filter((type) => SchemaAST.isTypeLiteral(type)) as SchemaAST.TypeLiteral[];\n if (typeAstList.length === 0) {\n return [];\n }\n if (typeAstList.length === 1) {\n return SchemaAST.getPropertySignatures(typeAstList[0]);\n }\n\n const typeDiscriminators = getTypeDiscriminators(typeAstList);\n const targetPropertyValue = getTargetPropertyFn(String(typeDiscriminators[0].name));\n const typeIndex = typeDiscriminators.findIndex((p) => targetPropertyValue === (p.type as SchemaAST.Literal).literal);\n invariant(typeIndex !== -1, 'discriminator field not set on target');\n return SchemaAST.getPropertySignatures(typeAstList[typeIndex]);\n};\n\nconst getPropertyType = (\n ast: SchemaAST.AST,\n propertyName: string,\n getTargetPropertyFn: (propertyName: string) => any,\n): SchemaAST.AST | null => {\n const anyOrObject = unwrapAst(\n ast,\n (candidate) => SchemaAST.isAnyKeyword(candidate) || SchemaAST.isObjectKeyword(candidate),\n );\n if (anyOrObject != null) {\n return ast;\n }\n\n const typeOrDiscriminatedUnion = unwrapAst(ast, (t) => {\n return SchemaAST.isTypeLiteral(t) || (SchemaAST.isUnion(t) && t.types.some((t) => SchemaAST.isTypeLiteral(t)));\n });\n if (typeOrDiscriminatedUnion == null) {\n return null;\n }\n\n const targetProperty = getProperties(typeOrDiscriminatedUnion, getTargetPropertyFn).find(\n (p) => p.name === propertyName,\n );\n if (targetProperty != null) {\n return unwrapAst(targetProperty.type);\n }\n\n const indexSignatureType = unwrapAst(ast, SchemaAST.isTypeLiteral);\n if (\n indexSignatureType &&\n SchemaAST.isTypeLiteral(indexSignatureType) &&\n indexSignatureType.indexSignatures.length > 0\n ) {\n return unwrapAst(indexSignatureType.indexSignatures[0].type);\n }\n\n return null;\n};\n\nconst getTypeDiscriminators = (typeAstList: SchemaAST.TypeLiteral[]): SchemaAST.PropertySignature[] => {\n const discriminatorPropCandidates = typeAstList\n .flatMap(SchemaAST.getPropertySignatures)\n .filter((p) => SchemaAST.isLiteral(p.type));\n const propertyName = discriminatorPropCandidates[0].name;\n const isValidDiscriminator = discriminatorPropCandidates.every((p) => p.name === propertyName && !p.isOptional);\n const everyTypeHasDiscriminator = discriminatorPropCandidates.length === typeAstList.length;\n const isDiscriminatedUnion = isValidDiscriminator && everyTypeHasDiscriminator;\n invariant(isDiscriminatedUnion, 'type ambiguity: every type in a union must have a single unique-literal field');\n return discriminatorPropCandidates;\n};\n\n/**\n * Used to check that rootAst is for a type matching the provided predicate.\n * That's not always straightforward because types of optionality and recursive types.\n * const Task = Schema.Struct({\n * ...,\n * previous?: Schema.optional(Schema.suspend(() => Task)),\n * });\n * Here the AST for `previous` field is going to be Union(Suspend(Type), Undefined).\n * SchemaAST.isTypeLiteral(field) will return false, but unwrapAst(field, (ast) => SchemaAST.isTypeLiteral(ast))\n * will return true.\n */\nconst unwrapAst = (rootAst: SchemaAST.AST, predicate?: (ast: SchemaAST.AST) => boolean): SchemaAST.AST | null => {\n let ast: SchemaAST.AST | undefined = rootAst;\n while (ast != null) {\n if (predicate?.(ast)) {\n return ast;\n }\n\n if (SchemaAST.isUnion(ast)) {\n const next: any = ast.types.find((t) => (predicate != null && predicate(t)) || SchemaAST.isSuspend(t));\n if (next != null) {\n ast = next;\n continue;\n }\n }\n\n if (SchemaAST.isSuspend(ast)) {\n ast = ast.f();\n } else {\n return predicate == null ? ast : null;\n }\n }\n\n return null;\n};\n\nconst unwrapArray = (ast: SchemaAST.AST) => unwrapAst(ast, SchemaAST.isTupleType) as SchemaAST.TupleType | null;\n\nexport const checkIdNotPresentOnSchema = (schema: Schema.Schema<any, any, any>) => {\n invariant(SchemaAST.isTypeLiteral(schema.ast));\n const idProperty = SchemaAST.getPropertySignatures(schema.ast).find((prop) => prop.name === 'id');\n if (idProperty != null) {\n throw new Error('\"id\" property name is reserved');\n }\n};\n\n// TODO(burdon): Reconcile with JsonPath.\ntype KeyPath = readonly (string | number)[];\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport * as Schema from 'effect/Schema';\nimport * as SchemaAST from 'effect/SchemaAST';\n\nimport { invariant } from '@dxos/invariant';\n\nimport {\n type TypeAnnotation,\n TypeAnnotationId,\n type TypeMeta,\n TypenameSchema,\n VersionSchema,\n makeTypeJsonSchemaAnnotation,\n} from '../annotations';\nimport { EntityKind, type HasId } from '../types';\n\nimport { type TypedObjectFields, type TypedObjectOptions, makeTypedEntityClass } from './common';\n\n/**\n * Definition for an object type that can be stored in an ECHO database.\n * Implements effect schema to define object properties.\n * Has a typename and version.\n *\n * In contrast to {@link EchoSchema} this definition is not recorded in the database.\n */\nexport interface TypedObject<A = any, I = any> extends TypeMeta, Schema.Schema<A, I> {}\n\n/**\n * Typed object that could be used as a prototype in class definitions.\n * This is an internal API type.\n * Use {@link TypedObject} for the common use-cases.\n */\nexport interface TypedObjectPrototype<A = any, I = any> extends TypedObject<A, I> {\n /** Type constructor. */\n new (): HasId & A;\n}\n\nexport type TypedObjectProps = TypeMeta & {\n // TODO(dmaretskyi): Remove after all legacy types has been removed.\n disableValidation?: boolean;\n};\n\n/**\n * Base class factory for typed objects.\n * @deprecated Use Function.pipe(Type.Obj) instead.\n */\nexport const TypedObject = ({\n typename: typenameParam,\n version: versionParam,\n disableValidation,\n}: TypedObjectProps) => {\n const typename = TypenameSchema.make(typenameParam, { disableValidation });\n const version = VersionSchema.make(versionParam, { disableValidation });\n\n /**\n * Return class definition factory.\n */\n return <SchemaFields extends Schema.Struct.Fields, Options extends TypedObjectOptions>(\n fields: SchemaFields,\n options?: Options,\n ): TypedObjectPrototype<TypedObjectFields<SchemaFields, Options>, Schema.Struct.Encoded<SchemaFields>> => {\n // Create schema from fields.\n const schema: Schema.Schema.All = options?.record\n ? Schema.Struct(fields, { key: Schema.String, value: Schema.Any })\n : Schema.Struct(fields);\n\n // Set ECHO object id property.\n const typeSchema = Schema.extend(\n Schema.mutable(options?.partial ? Schema.partial(schema) : schema),\n Schema.Struct({ id: Schema.String }),\n );\n\n // Set ECHO annotations.\n invariant(typeof EntityKind.Object === 'string');\n const annotatedSchema = typeSchema.annotations({\n [TypeAnnotationId]: { kind: EntityKind.Object, typename, version } satisfies TypeAnnotation,\n [SchemaAST.JSONSchemaAnnotationId]: makeTypeJsonSchemaAnnotation({\n kind: EntityKind.Object,\n typename,\n version,\n }),\n });\n\n /**\n * Return class definition.\n * NOTE: Actual reactive ECHO objects must be created via the `live(Type)` function.\n */\n // TODO(burdon): This is missing fields required by TypedObject (e.g., Type, Encoded, Context)?\n return class TypedObject extends makeTypedEntityClass(typename, version, annotatedSchema as any) {} as any;\n };\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport type * as Schema from 'effect/Schema';\n\nimport { ObjectId } from '@dxos/keys';\nimport {\n type Live,\n UntypedReactiveHandler,\n createProxy,\n defineHiddenProperty,\n isValidProxyTarget,\n} from '@dxos/live-object';\n\nimport { getTypeAnnotation } from '../annotations';\nimport { Expando } from '../entities';\nimport { attachTypedJsonSerializer } from '../object';\nimport { type AnyProperties, KindId, MetaId, type ObjectMeta, ObjectMetaSchema } from '../types';\n\nimport { TypedReactiveHandler, prepareTypedTarget } from './typed-handler';\n\n/**\n *\n */\n// TODO(burdon): Make internal\nexport type MakeObjectProps<T extends AnyProperties> = Omit<T, 'id' | KindId>;\n\n/**\n * Creates a reactive object from a plain Javascript object.\n * Optionally provides a TS-effect schema.\n */\n// TODO(burdon): Make internal\n// TODO(dmaretskyi): Deep mutability.\n// TODO(dmaretskyi): Invert generics (generic over schema) to have better error messages.\n// TODO(dmaretskyi): Could mutate original object making it unusable.\nexport const makeObject: {\n <T extends AnyProperties>(obj: T): Live<T>;\n <T extends AnyProperties>(\n schema: Schema.Schema<T, any, never>,\n obj: NoInfer<MakeObjectProps<T>>,\n meta?: ObjectMeta,\n ): Live<T>;\n} = <T extends AnyProperties>(\n objOrSchema: Schema.Schema<T, any> | T,\n obj?: MakeObjectProps<T>,\n meta?: ObjectMeta,\n): Live<T> => {\n // TODO(dmaretskyi): Remove Expando special case.\n if (obj && (objOrSchema as any) !== Expando) {\n return createReactiveObject<T>({ ...obj } as T, meta, objOrSchema as Schema.Schema<T, any>);\n } else if (obj && (objOrSchema as any) === Expando) {\n return createReactiveObject<T>({ ...obj } as T, meta, undefined, { expando: true });\n } else {\n return createReactiveObject<T>(objOrSchema as T, meta);\n }\n};\n\nconst createReactiveObject = <T extends AnyProperties>(\n obj: T,\n meta?: ObjectMeta,\n schema?: Schema.Schema<T>,\n options?: { expando?: boolean },\n): Live<T> => {\n if (!isValidProxyTarget(obj)) {\n throw new Error('Value cannot be made into a reactive object.');\n }\n\n if (schema) {\n const annotation = getTypeAnnotation(schema);\n const shouldGenerateId = options?.expando || !!annotation;\n if (shouldGenerateId) {\n setIdOnTarget(obj);\n }\n if (annotation) {\n defineHiddenProperty(obj, KindId, annotation.kind);\n }\n initMeta(obj, meta);\n prepareTypedTarget(obj, schema);\n attachTypedJsonSerializer(obj);\n return createProxy<T>(obj, TypedReactiveHandler.instance);\n } else {\n if (options?.expando) {\n setIdOnTarget(obj);\n }\n initMeta(obj, meta);\n return createProxy<T>(obj, UntypedReactiveHandler.instance);\n }\n};\n\n/**\n * Set ID on ECHO object targets during creation.\n * Used for objects with schema and the ones explicitly marked as Expando.\n */\nconst setIdOnTarget = (target: any) => {\n // invariant(!('id' in target), 'Object already has an `id` field, which is reserved.');\n if ('id' in target && target.id !== undefined && target.id !== null) {\n if (!ObjectId.isValid(target.id)) {\n throw new Error('Invalid object id format.');\n }\n } else {\n target.id = ObjectId.random();\n }\n};\n\n/**\n * Set metadata on object.\n */\n// TODO(dmaretskyi): Move to echo-schema.\nconst initMeta = <T>(obj: T, meta: ObjectMeta = { keys: [] }) => {\n prepareTypedTarget(meta, ObjectMetaSchema);\n defineHiddenProperty(obj, MetaId, createProxy(meta, TypedReactiveHandler.instance as any));\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport { type InspectOptionsStylized } from 'node:util';\n\nimport * as Schema from 'effect/Schema';\nimport * as SchemaAST from 'effect/SchemaAST';\n\nimport { inspectCustom } from '@dxos/debug';\nimport { type GenericSignal, compositeRuntime } from '@dxos/echo-signals/runtime';\nimport { invariant } from '@dxos/invariant';\nimport {\n ReactiveArray,\n type ReactiveHandler,\n createProxy,\n defineHiddenProperty,\n isValidProxyTarget,\n objectData,\n symbolIsProxy,\n} from '@dxos/live-object';\n\nimport { getSchemaDXN } from '../annotations';\nimport { ObjectDeletedId } from '../entities';\nimport { SchemaValidator } from '../object';\nimport { SchemaId, TypeId } from '../types';\n\nconst symbolSignal = Symbol('signal');\nconst symbolPropertySignal = Symbol('property-signal');\n\ntype ProxyTarget = {\n /**\n * Typename or type DXN.\n */\n [TypeId]: string;\n\n /**\n * Schema for the root.\n */\n [SchemaId]: Schema.Schema.AnyNoContext;\n\n /**\n * For get and set operations on value properties.\n */\n // TODO(dmaretskyi): Turn into a map of signals per-field.\n [symbolSignal]: GenericSignal;\n\n /**\n * For modifying the structure of the object.\n */\n [symbolPropertySignal]: GenericSignal;\n} & ({ [key: keyof any]: any } | any[]);\n\n/**\n * Typed in-memory reactive store (with Schema).\n */\nexport class TypedReactiveHandler implements ReactiveHandler<ProxyTarget> {\n public static readonly instance: ReactiveHandler<any> = new TypedReactiveHandler();\n\n readonly _proxyMap = new WeakMap<object, any>();\n\n private constructor() {}\n\n init(target: ProxyTarget): void {\n invariant(typeof target === 'object' && target !== null);\n invariant(SchemaId in target, 'Schema is not defined for the target');\n\n if (!(symbolSignal in target)) {\n defineHiddenProperty(target, symbolSignal, compositeRuntime.createSignal());\n defineHiddenProperty(target, symbolPropertySignal, compositeRuntime.createSignal());\n }\n\n defineHiddenProperty(target, ObjectDeletedId, false);\n\n for (const key of Object.getOwnPropertyNames(target)) {\n const descriptor = Object.getOwnPropertyDescriptor(target, key)!;\n if (descriptor.get) {\n // Ignore getters.\n continue;\n }\n\n // Array reactivity is already handled by the schema validator.\n }\n\n // Maybe have been set by `create`.\n Object.defineProperty(target, inspectCustom, {\n enumerable: false,\n configurable: true,\n value: this._inspect.bind(target),\n });\n }\n\n get(target: ProxyTarget, prop: string | symbol, receiver: any): any {\n switch (prop) {\n // TODO(burdon): Remove?\n case objectData: {\n target[symbolSignal].notifyRead();\n return toJSON(target);\n }\n }\n\n // Handle getter properties. Will not subscribe the value signal.\n if (Object.getOwnPropertyDescriptor(target, prop)?.get) {\n target[symbolPropertySignal].notifyRead();\n\n // TODO(dmaretskyi): Turn getters into computed fields.\n return Reflect.get(target, prop, receiver);\n }\n\n target[symbolSignal].notifyRead();\n target[symbolPropertySignal].notifyRead();\n\n const value = Reflect.get(target, prop, receiver);\n if (isValidProxyTarget(value)) {\n return createProxy(value, this);\n }\n\n return value;\n }\n\n set(target: ProxyTarget, prop: string | symbol, value: any, receiver: any): boolean {\n // Convert arrays to reactive arrays on write.\n if (Array.isArray(value)) {\n value = ReactiveArray.from(value);\n }\n\n let result: boolean = false;\n compositeRuntime.batch(() => {\n const validatedValue = this._validateValue(target, prop, value);\n result = Reflect.set(target, prop, validatedValue, receiver);\n target[symbolSignal].notifyWrite();\n });\n return result;\n }\n\n ownKeys(target: ProxyTarget): ArrayLike<string | symbol> {\n // Touch both signals since `set` and `delete` operations may create or remove properties.\n target[symbolSignal].notifyRead();\n target[symbolPropertySignal].notifyRead();\n return Reflect.ownKeys(target);\n }\n\n defineProperty(target: ProxyTarget, property: string | symbol, attributes: PropertyDescriptor): boolean {\n const validatedValue = this._validateValue(target, property, attributes.value);\n const result = Reflect.defineProperty(target, property, {\n ...attributes,\n value: validatedValue,\n });\n target[symbolPropertySignal].notifyWrite();\n return result;\n }\n\n private _validateValue(target: any, prop: string | symbol, value: any) {\n const schema = SchemaValidator.getTargetPropertySchema(target, prop);\n const _ = Schema.asserts(schema)(value);\n if (Array.isArray(value)) {\n value = new ReactiveArray(...value);\n }\n if (isValidProxyTarget(value)) {\n setSchemaProperties(value, schema);\n }\n\n return value;\n }\n\n private _inspect(\n _: number,\n options: InspectOptionsStylized,\n inspectFn: (value: any, options?: InspectOptionsStylized) => string,\n ): string {\n const inspected = inspectFn(this, {\n ...options,\n showHidden: false,\n customInspect: false,\n });\n\n return `Typed ${inspected}`;\n }\n}\n\n/**\n * @deprecated Use `Obj.toJSON` instead.\n */\n// TODO(burdon): Remove?\nconst toJSON = (target: ProxyTarget): any => {\n return { '@type': 'TypedReactiveObject', ...target };\n};\n\n/**\n * Recursively set AST on all potential proxy targets.\n */\nconst setSchemaProperties = (obj: any, schema: Schema.Schema.AnyNoContext) => {\n const schemaType = getSchemaDXN(schema);\n if (schemaType != null) {\n defineHiddenProperty(obj, TypeId, schemaType);\n }\n\n defineHiddenProperty(obj, SchemaId, schema);\n for (const key in obj) {\n if (isValidProxyTarget(obj[key])) {\n const elementSchema = SchemaValidator.getTargetPropertySchema(obj, key);\n if (elementSchema != null) {\n setSchemaProperties(obj[key], elementSchema);\n }\n }\n }\n};\n\nexport const prepareTypedTarget = <T>(target: T, schema: Schema.Schema<T>) => {\n // log.info('prepareTypedTarget', { target, schema });\n if (!SchemaAST.isTypeLiteral(schema.ast)) {\n throw new Error('schema has to describe an object type');\n }\n\n SchemaValidator.validateSchema(schema);\n const _ = Schema.asserts(schema)(target);\n makeArraysReactive(target);\n setSchemaProperties(target, schema);\n};\n\nconst makeArraysReactive = (target: any) => {\n for (const key in target) {\n if (target[symbolIsProxy]) {\n continue;\n }\n if (Array.isArray(target[key])) {\n target[key] = ReactiveArray.from(target[key]);\n }\n if (typeof target[key] === 'object') {\n makeArraysReactive(target[key]);\n }\n }\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport * as Schema from 'effect/Schema';\nimport * as SchemaAST from 'effect/SchemaAST';\n\nimport { invariant } from '@dxos/invariant';\nimport { type ObjectId } from '@dxos/keys';\n\nimport { type SchemaMeta, SchemaMetaSymbol, type TypeAnnotation, getTypeAnnotation } from '../annotations';\nimport { type JsonSchemaType, toEffectSchema, toJsonSchema } from '../json-schema';\nimport { type TypedObject, type TypedObjectPrototype } from '../object';\n\nimport {\n addFieldsToSchema,\n removeFieldsFromSchema,\n setTypenameInSchema,\n updateFieldNameInSchema,\n updateFieldsInSchema,\n} from './manipulation';\nimport { PersistentSchema } from './persistent-schema';\nimport { getSnapshot } from './snapshot';\n\n/**\n * Base schema type.\n */\n// TODO(burdon): Merge with ImmutableSchema.\nexport interface BaseSchema<A = any, I = any> extends TypedObject<A, I> {\n // TODO(burdon): Different from mutable?\n get readonly(): boolean;\n // TODO(burdon): Change to external function.\n get mutable(): EchoSchema<A, I>;\n get snapshot(): Schema.Schema<A, I>;\n get jsonSchema(): JsonSchemaType;\n}\n\n/**\n * Immutable schema type.\n * @deprecated Use `Schema.Schema.AnyNoContext` instead.\n */\n// TODO(burdon): Common abstract base class?\nexport class ImmutableSchema<A = any, I = any> implements BaseSchema<A, I> {\n private readonly _objectAnnotation: TypeAnnotation;\n constructor(private readonly _schema: Schema.Schema<A, I>) {\n this._objectAnnotation = getTypeAnnotation(this._schema)!;\n invariant(this._objectAnnotation);\n }\n\n //\n // Effect Schema (push to abstract base class).\n //\n\n public get [Schema.TypeId]() {\n return schemaVariance;\n }\n\n public get Type() {\n return this._schema.Type;\n }\n\n public get Encoded() {\n return this._schema.Encoded;\n }\n\n public get Context() {\n return this._schema.Context;\n }\n\n public get ast(): SchemaAST.AST {\n return this._schema.ast;\n }\n\n public get annotations() {\n return this._schema.annotations;\n }\n\n public get pipe() {\n return this._schema.pipe;\n }\n\n //\n // TypedObject\n //\n\n get typename(): string {\n return this._objectAnnotation.typename;\n }\n\n get version(): string {\n return this._objectAnnotation.version;\n }\n\n //\n // BaseSchema\n //\n\n get readonly(): boolean {\n return true;\n }\n\n get snapshot(): Schema.Schema.AnyNoContext {\n return this._schema;\n }\n\n // TODO(burdon): Change from getter since this is expensive.\n get jsonSchema(): JsonSchemaType {\n return toJsonSchema(this._schema);\n }\n\n get mutable(): EchoSchema {\n throw new Error('Schema is readonly.');\n }\n}\n\n/**\n * Defines an effect-schema for the `EchoSchema` type.\n *\n * This is here so that `EchoSchema` class can be used as a part of another schema definition (e.g., `ref(EchoSchema)`).\n */\nconst EchoSchemaConstructor = (): TypedObjectPrototype => {\n /**\n * Return class definition satisfying Schema.Schema.\n */\n return class {\n private static get _schema() {\n // The field is DynamicEchoSchema in runtime, but is serialized as PersisentSchema in automerge.\n return Schema.Union(PersistentSchema, Schema.instanceOf(EchoSchema)).annotations(\n PersistentSchema.ast.annotations,\n );\n }\n\n static readonly [Schema.TypeId] = schemaVariance;\n\n static get ast() {\n const schema = this._schema;\n return schema.ast;\n }\n\n static get annotations() {\n const schema = this._schema;\n return schema.annotations.bind(schema);\n }\n\n static get pipe() {\n const schema = this._schema;\n return schema.pipe.bind(schema);\n }\n } as any;\n};\n\nexport const isMutable = (schema: Schema.Schema.AnyNoContext): schema is EchoSchema => {\n return schema instanceof EchoSchema;\n};\n\n// NOTE: Keep in this file.\nconst schemaVariance = {\n _A: (_: any) => _,\n _I: (_: any) => _,\n _R: (_: never) => _,\n};\n\n/**\n * Represents a schema that is persisted in the ECHO database.\n * Schema can me mutable or readonly (specified by the {@link EchoSchema.readonly} field).\n *\n * Schema that can be modified at runtime via the API.\n * Is an instance of effect-schema (`Schema.Schema.AnyNoContext`) so it can be used in the same way as a regular schema.\n * IMPORTANT: The schema AST will change reactively when the schema is updated, including synced updates from remote peers.\n *\n * The class constructor is a schema instance itself, and can be used in the echo object definitions:\n *\n * @example\n * ```ts\n * export class TableType extends Schema.Struct({...}).pipe(Type.Obj({ typename: 'example.org/type/Table', version: '0.1.0' })){\n * title: Schema.String,\n * schema: Schema.optional(ref(EchoSchema)),\n * props: Schema.mutable(S.Array(TablePropSchema)),\n * }) {}\n * ```\n *\n * The ECHO API will translate any references to PersistentSchema objects to be resolved as EchoSchema objects.\n */\nexport class EchoSchema<A = any, I = any> extends EchoSchemaConstructor() implements BaseSchema<A, I> {\n private _schema: Schema.Schema.AnyNoContext | undefined;\n private _isDirty = true;\n\n constructor(private readonly _persistentSchema: PersistentSchema) {\n super();\n }\n\n //\n // Effect Schema (push to abstract base class).\n //\n\n public get [Schema.TypeId]() {\n return schemaVariance;\n }\n\n public get Type() {\n return this._persistentSchema as A;\n }\n\n public get Encoded() {\n return this._persistentSchema as I;\n }\n\n public get Context() {\n const schema = this._getSchema();\n return schema.Context;\n }\n\n public get ast() {\n const schema = this._getSchema();\n return schema.ast;\n }\n\n public get annotations() {\n const schema = this._getSchema();\n return schema.annotations.bind(schema);\n }\n\n public get pipe(): Schema.Schema.AnyNoContext['pipe'] {\n const schema = this._getSchema();\n return schema.pipe.bind(schema);\n }\n\n //\n // BaseSchema\n //\n\n public get typename(): string {\n return this._persistentSchema.typename;\n }\n\n public get version(): string {\n return this._persistentSchema.version;\n }\n\n public get readonly(): boolean {\n return false;\n }\n\n /**\n * Returns an immutable schema snapshot of the current state of the schema.\n */\n public get snapshot(): Schema.Schema.AnyNoContext {\n return this._getSchema();\n }\n\n /**\n * @reactive\n */\n public get jsonSchema(): JsonSchemaType {\n return this._persistentSchema.jsonSchema;\n }\n\n /**\n * Returns a mutable schema.\n */\n public get mutable(): EchoSchema {\n invariant(!this.readonly, 'Schema is not mutable');\n return this;\n }\n\n //\n // Mutable Schema\n //\n\n /**\n * Id of the ECHO object containing the schema.\n */\n public get id(): ObjectId {\n return this._persistentSchema.id;\n }\n\n /**\n * Short name of the schema.\n */\n public get name(): string | undefined {\n return this._persistentSchema.name;\n }\n\n public get [SchemaMetaSymbol](): SchemaMeta {\n return { id: this.id, typename: this.typename, version: this._persistentSchema.version };\n }\n\n /**\n * Reference to the underlying persistent schema object.\n */\n public get persistentSchema(): PersistentSchema {\n return this._persistentSchema;\n }\n\n public getProperties(): SchemaAST.PropertySignature[] {\n const ast = this._getSchema().ast;\n invariant(SchemaAST.isTypeLiteral(ast));\n return [...ast.propertySignatures].filter((p) => p.name !== 'id').map(unwrapOptionality);\n }\n\n //\n // Mutation methods.\n // TODO(burdon): Create separate interface for dynamic schema.\n // TODO(burdon): Deprecate direct manipulation? Use JSONSchema directly.\n //\n\n /**\n * @throws Error if the schema is readonly.\n */\n public updateTypename(typename: string): void {\n const updated = setTypenameInSchema(this._getSchema(), typename);\n this._persistentSchema.typename = typename;\n this._persistentSchema.jsonSchema = toJsonSchema(updated);\n }\n\n /**\n * @throws Error if the schema is readonly.\n */\n public addFields(fields: Schema.Struct.Fields): void {\n const extended = addFieldsToSchema(this._getSchema(), fields);\n this._persistentSchema.jsonSchema = toJsonSchema(extended);\n }\n\n /**\n * @throws Error if the schema is readonly.\n */\n public updateFields(fields: Schema.Struct.Fields): void {\n const updated = updateFieldsInSchema(this._getSchema(), fields);\n this._persistentSchema.jsonSchema = toJsonSchema(updated);\n }\n\n /**\n * @throws Error if the schema is readonly.\n */\n public updateFieldPropertyName({ before, after }: { before: PropertyKey; after: PropertyKey }): void {\n const renamed = updateFieldNameInSchema(this._getSchema(), { before, after });\n this._persistentSchema.jsonSchema = toJsonSchema(renamed);\n }\n\n /**\n * @throws Error if the schema is readonly.\n */\n public removeFields(fieldNames: string[]): void {\n const removed = removeFieldsFromSchema(this._getSchema(), fieldNames);\n this._persistentSchema.jsonSchema = toJsonSchema(removed);\n }\n\n //\n // Internals\n //\n\n /**\n * Called by EchoSchemaRegistry on update.\n */\n _invalidate(): void {\n this._isDirty = true;\n }\n\n /**\n * Rebuilds this schema if it is dirty.\n */\n _rebuild(): void {\n if (this._isDirty || this._schema == null) {\n this._schema = toEffectSchema(getSnapshot(this._persistentSchema.jsonSchema));\n this._isDirty = false;\n }\n }\n\n _getSchema(): Schema.Schema.AnyNoContext {\n this._rebuild();\n return this._schema!;\n }\n}\n\n// TODO(burdon): Move to effect.\nconst unwrapOptionality = (property: SchemaAST.PropertySignature): SchemaAST.PropertySignature => {\n if (!SchemaAST.isUnion(property.type)) {\n return property;\n }\n\n return {\n ...property,\n type: property.type.types.find((type) => !SchemaAST.isUndefinedKeyword(type))!,\n } as any;\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport * as Schema from 'effect/Schema';\nimport * as SchemaAST from 'effect/SchemaAST';\n\nimport { invariant } from '@dxos/invariant';\nimport { DXN } from '@dxos/keys';\n\nimport { type TypeAnnotation, TypeAnnotationId, TypeIdentifierAnnotationId } from '../annotations';\n\n// TODO(ZaymonFC): Do this one at a time. This might be dangerous.\nexport const addFieldsToSchema = (\n schema: Schema.Schema.AnyNoContext,\n fields: Schema.Struct.Fields,\n): Schema.Schema.AnyNoContext => {\n const schemaExtension = Schema.partial(Schema.Struct(fields));\n return Schema.extend(schema, schemaExtension).annotations(\n schema.ast.annotations,\n ) as any as Schema.Schema.AnyNoContext;\n};\n\nexport const updateFieldsInSchema = (\n schema: Schema.Schema.AnyNoContext,\n fields: Schema.Struct.Fields,\n): Schema.Schema.AnyNoContext => {\n const ast = schema.ast as SchemaAST.TypeLiteral;\n invariant(SchemaAST.isTypeLiteral(ast));\n\n const updatedProperties = [...ast.propertySignatures];\n const propertiesToUpdate = (Schema.partial(Schema.Struct(fields)).ast as SchemaAST.TypeLiteral).propertySignatures;\n for (const property of propertiesToUpdate) {\n const index = updatedProperties.findIndex((p) => p.name === property.name);\n if (index !== -1) {\n updatedProperties[index] = property;\n } else {\n updatedProperties.push(property);\n }\n }\n\n return Schema.make(new SchemaAST.TypeLiteral(updatedProperties, ast.indexSignatures, ast.annotations));\n};\n\nexport const removeFieldsFromSchema = (\n schema: Schema.Schema.AnyNoContext,\n fieldNames: string[],\n): Schema.Schema.AnyNoContext => {\n return Schema.make(SchemaAST.omit(schema.ast, fieldNames)).annotations(schema.ast.annotations);\n};\n\nexport const updateFieldNameInSchema = (\n schema: Schema.Schema.AnyNoContext,\n { before, after }: { before: PropertyKey; after: PropertyKey },\n): Schema.Schema.AnyNoContext => {\n const ast = schema.ast as SchemaAST.TypeLiteral;\n invariant(SchemaAST.isTypeLiteral(ast));\n\n return Schema.make(\n new SchemaAST.TypeLiteral(\n ast.propertySignatures.map((p) =>\n p.name === before\n ? new SchemaAST.PropertySignature(after, p.type, p.isOptional, p.isReadonly, p.annotations)\n : p,\n ),\n ast.indexSignatures,\n ast.annotations,\n ),\n );\n};\n\nexport const setTypenameInSchema = (\n schema: Schema.Schema.AnyNoContext,\n typename: string,\n): Schema.Schema.AnyNoContext => {\n const existingAnnotation = schema.ast.annotations[TypeAnnotationId] as TypeAnnotation;\n invariant(existingAnnotation, `Missing ${String(TypeAnnotationId)}`);\n\n return schema.annotations({\n ...schema.ast.annotations,\n [TypeAnnotationId]: {\n kind: existingAnnotation.kind,\n typename,\n version: existingAnnotation.version,\n } satisfies TypeAnnotation,\n [SchemaAST.JSONSchemaAnnotationId]: {\n ...(schema.ast.annotations[SchemaAST.JSONSchemaAnnotationId] ?? {}),\n $id: schema.ast.annotations[TypeIdentifierAnnotationId] ?? DXN.fromTypename(typename).toString(),\n typename,\n },\n });\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport * as Schema from 'effect/Schema';\n\nimport { TypenameSchema, VersionSchema } from '../annotations';\nimport { EchoObjectSchema } from '../entities';\nimport { JsonSchemaType } from '../json-schema';\n\n/**\n * Persistent representation of a schema.\n */\n// TODO(burdon): Move.\nconst PersistentEchoSchema = Schema.Struct({\n name: Schema.optional(Schema.String),\n typename: TypenameSchema,\n version: VersionSchema,\n jsonSchema: JsonSchemaType,\n}).pipe(\n EchoObjectSchema({\n typename: 'dxos.org/type/Schema',\n version: '0.1.0',\n }),\n);\nexport interface PersistentSchema extends Schema.Schema.Type<typeof PersistentEchoSchema> {}\nexport interface PersistentSchemaEncoded extends Schema.Schema.Encoded<typeof PersistentEchoSchema> {}\nexport const PersistentSchema: Schema.Schema<PersistentSchema, PersistentSchemaEncoded> = PersistentEchoSchema;\n", "//\n// Copyright 2025 DXOS.org\n//\n\n/**\n * Returns a non-reactive snapshot of the given live object.\n * @deprecated Use `getSnapshot` from `@dxos/live-object` instead.\n */\n// TODO(wittjosiah): Types.\nexport const getSnapshot = (object: any): any => {\n if (typeof object !== 'object') {\n return object;\n }\n\n if (Array.isArray(object)) {\n return object.map(getSnapshot);\n }\n\n const result: any = {};\n for (const key in object) {\n result[key] = getSnapshot(object[key]);\n }\n\n return result;\n};\n", "//\n// Copyright 2022 DXOS.org\n//\n\nimport type * as Schema from 'effect/Schema';\n\nimport { raise } from '@dxos/debug';\nimport { invariant } from '@dxos/invariant';\nimport { type DXN } from '@dxos/keys';\nimport { defaultMap } from '@dxos/util';\n\nimport { getSchemaTypename, getSchemaVersion } from '../annotations';\n\nimport { PersistentSchema } from './persistent-schema';\n\n/**\n * Runtime registry of static schema objects (i.e., not Dynamic .\n */\n// TODO(burdon): Reconcile with EchoSchemaRegistry.\nexport class RuntimeSchemaRegistry {\n private readonly _registry = new Map<string, Schema.Schema.AnyNoContext[]>();\n\n constructor() {\n this._registry.set(getSchemaTypename(PersistentSchema)!, [PersistentSchema]);\n }\n\n get schemas(): Schema.Schema.AnyNoContext[] {\n return Array.from(this._registry.values()).flat();\n }\n\n hasSchema<S extends Schema.Schema.AnyNoContext>(schema: S): boolean {\n const typename = getSchemaTypename(schema);\n const version = getSchemaVersion(schema);\n invariant(typename, 'Invalid schema');\n\n const schemas = this._registry.get(typename);\n return schemas?.some((schema) => getSchemaVersion(schema) === version) ?? false;\n }\n\n getSchemaByDXN(dxn: DXN): Schema.Schema.AnyNoContext | undefined {\n const components = dxn.asTypeDXN();\n if (!components) {\n return undefined;\n }\n\n const { type, version } = components;\n const allSchemas = this._registry.get(type) ?? [];\n if (version) {\n return allSchemas.find((s) => getSchemaVersion(s) === version);\n } else {\n // If no version is specified, return the earliest version for backwards compatibility.\n // TODO(dmaretskyi): Probably not correct to compare lexicographically, but it's good enough for now.\n return allSchemas.sort((a, b) =>\n (getSchemaVersion(a) ?? '0.0.0').localeCompare(getSchemaVersion(b) ?? '0.0.0'),\n )[0];\n }\n }\n\n /**\n * @deprecated Use getSchemaByDXN.\n */\n getSchema(typename: string): Schema.Schema.AnyNoContext | undefined {\n return this._registry.get(typename)?.[0];\n }\n\n addSchema(types: readonly Schema.Schema.AnyNoContext[]): void {\n types.forEach((schema) => {\n const typename = getSchemaTypename(schema) ?? raise(new TypeError('Schema has no typename'));\n const version = getSchemaVersion(schema) ?? raise(new TypeError('Schema has no version'));\n const versions = defaultMap(this._registry, typename, () => []);\n if (versions.some((schema) => getSchemaVersion(schema) === version)) {\n throw new Error(`Schema version already registered: ${typename}:${version}`);\n }\n\n versions.push(schema);\n });\n }\n}\n"],
5
+ "mappings": "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",
6
+ "names": ["JsonPath", "JsonProp", "getValue", "setValue", "splitJsonPath", "Function", "Option", "Schema", "SchemaAST", "Reference", "getField", "assertArgument", "invariant", "DXN", "Schema", "SchemaAST", "RawObject", "schema", "make", "omit", "ast", "Schema", "EntityKindId", "Symbol", "for", "EntityKind", "EntityKindSchema", "Enums", "KindId", "Schema", "ForeignKey", "invariant", "intersection", "ATTR_META", "MetaId", "Symbol", "for", "ObjectMetaSchema", "mutable", "Struct", "keys", "Array", "tags", "optional", "String", "getMeta", "obj", "metadata", "splitMeta", "object", "meta", "foreignKey", "source", "id", "foreignKeyEquals", "a", "b", "compareForeignKeys", "length", "ATTR_TYPE", "TypeId", "Symbol", "for", "SchemaId", "getSchema", "obj", "setSchema", "schema", "Object", "defineProperty", "value", "writable", "enumerable", "configurable", "VersionTypeId", "Symbol", "for", "SchemaAST", "assertArgument", "DXN", "createAnnotationHelper", "id", "get", "schema", "getAnnotation", "ast", "set", "value", "annotations", "unwrapOptional", "property", "isOptional", "isUnion", "type", "types", "makeTypeJsonSchemaAnnotation", "options", "assertArgument", "relationSource", "kind", "EntityKind", "Relation", "relationTarget", "obj", "$id", "identifier", "DXN", "fromTypename", "typename", "toString", "entityKind", "version", "$ref", "FIELD_PATH_ANNOTATION", "FieldPath", "path", "PropertyMeta", "TypeIdentifierAnnotationId", "Symbol", "for", "getTypeIdentifierAnnotation", "schema", "flow", "getAnnotation", "getOrElse", "undefined", "ast", "TypenameSchema", "String", "pipe", "pattern", "annotations", "description", "example", "VersionSchema", "TypeMeta", "Struct", "typename", "version", "TypeAnnotationId", "TypeAnnotation", "extend", "kind", "Enums", "EntityKind", "sourceSchema", "optional", "DXN", "Schema", "targetSchema", "getTypeAnnotation", "assertArgument", "getEntityKind", "getSchemaTypename", "getSchemaVersion", "getTypename", "obj", "getSchema", "type", "getTypeDXN", "asTypeDXN", "setTypename", "invariant", "Object", "defineProperty", "TypeId", "value", "writable", "enumerable", "configurable", "isInstanceOf", "object", "schemaDXN", "getSchemaDXN", "Error", "equals", "typeDXN", "PropertyMetaAnnotationId", "name", "self", "existingMeta", "getPropertyMetaAnnotation", "prop", "map", "meta", "ReferenceAnnotationId", "getReferenceAnnotation", "SchemaMetaSymbol", "SystemTypeAnnotationId", "SystemTypeAnnotation", "createAnnotationHelper", "LabelAnnotationId", "LabelAnnotation", "getLabel", "annotation", "get", "accessor", "getField", "toString", "setLabel", "label", "field", "DescriptionAnnotationId", "DescriptionAnnotation", "getDescription", "setDescription", "FormInputAnnotationId", "FormInputAnnotation", "FieldLookupAnnotationId", "GeneratorAnnotationId", "GeneratorAnnotation", "isSchema", "id", "parse", "objectAnnotation", "fromTypenameAndVersion", "getTypeReference", "Reference", "fromDXN", "requireTypeReference", "typeReference", "Schema", "Schema", "SchemaAST", "invariant", "Schema", "makeEchoTypeSchema", "ast", "typename", "version", "EchoObjectSchemaClass", "make", "annotations", "schema", "instanceOf", "value", "is", "EchoObjectSchema", "typename", "version", "self", "invariant", "TypeAnnotationId", "isTypeLiteral", "ast", "schemaWithId", "extend", "mutable", "Struct", "id", "String", "annotations", "kind", "EntityKind", "Object", "JSONSchemaAnnotationId", "makeTypeJsonSchemaAnnotation", "makeEchoTypeSchema", "EXPANDO_TYPENAME", "ExpandoSchema", "Struct", "key", "String", "value", "Any", "pipe", "EchoObjectSchema", "typename", "version", "Expando", "invariant", "DXN", "ObjectId", "assumeType", "Schema", "SchemaAST", "raise", "assertArgument", "invariant", "DXN", "ATTR_RELATION_SOURCE", "RelationSourceId", "Symbol", "for", "RelationSourceDXNId", "ATTR_RELATION_TARGET", "RelationTargetId", "RelationTargetDXNId", "EchoRelationSchema", "source", "target", "typename", "version", "assertArgument", "isSchema", "sourceDXN", "getDXNForRelationSchemaRef", "targetDXN", "getEntityKind", "EntityKind", "Object", "raise", "Error", "self", "invariant", "isTypeLiteral", "ast", "schemaWithId", "extend", "mutable", "Struct", "id", "String", "annotations", "TypeAnnotationId", "kind", "Relation", "sourceSchema", "targetSchema", "JSONSchemaAnnotationId", "makeTypeJsonSchemaAnnotation", "relationSource", "relationTarget", "makeEchoTypeSchema", "schema", "identifier", "getTypeIdentifierAnnotation", "getSchemaTypename", "DXN", "fromTypename", "toString", "ATTR_SELF_DXN", "SelfDXNId", "Symbol", "for", "ATTR_DELETED", "ObjectDeletedId", "ObjectVersionId", "assertObjectModel", "obj", "invariant", "assumeType", "ObjectId", "isValid", "id", "TypeId", "undefined", "DXN", "KindId", "EntityKind", "Object", "Relation", "RelationSourceDXNId", "RelationTargetDXNId", "RelationSourceId", "RelationTargetId", "Schema", "assertArgument", "invariant", "DXN", "ObjectId", "assumeType", "getObjectDXN", "object", "invariant", "isSchema", "assertArgument", "assumeType", "SelfDXNId", "DXN", "ObjectId", "isValid", "id", "TypeError", "fromLocalObjectId", "Schema", "Function", "Option", "SchemaAST", "TypeEnum", "getTypeEnum", "property", "type", "undefined", "FormatAnnotationId", "Symbol", "for", "FormatAnnotation", "createAnnotationHelper", "getFormatAnnotation", "node", "pipe", "getAnnotation", "getOrUndefined", "TypeFormat", "FormatEnums", "Object", "values", "sort", "PropertyKind", "format", "typeToFormat", "formatToType", "OptionsAnnotationId", "getOptionsAnnotation", "encodeMultipleOf", "divisor", "Math", "pow", "encodeMultiple", "self", "undefined", "pipe", "multipleOf", "DecimalPrecision", "transform", "Number", "strict", "encode", "value", "decode", "log10", "annotations", "title", "CurrencyAnnotationId", "Symbol", "for", "Currency", "decimals", "code", "FormatAnnotation", "set", "TypeFormat", "description", "toUpperCase", "Integer", "int", "Percent", "Timestamp", "Schema", "clamp", "GeoPoint", "Tuple", "Number", "pipe", "annotations", "title", "clamp", "multipleOf", "optionalElement", "FormatAnnotation", "set", "TypeFormat", "description", "GeoLocation", "toGeoPoint", "longitude", "latitude", "height", "clampedLongitude", "clampedLatitude", "undefined", "fromGeoPoint", "geoPoint", "result", "Schema", "Keys", "Schema", "SchemaAST", "SimpleDate", "Struct", "year", "Number", "pipe", "between", "month", "day", "SimpleTime", "Struct", "hours", "Number", "pipe", "between", "minutes", "seconds", "SimpleDateTime", "extend", "SimpleDate", "SimpleTime", "DateOnly", "String", "pipe", "FormatAnnotation", "set", "TypeFormat", "Date", "annotations", "title", "description", "TimeOnly", "Time", "DateTime", "Duration", "ExamplesAnnotationId", "Schema", "SchemaAST", "Email", "String", "pipe", "pattern", "FormatAnnotation", "set", "TypeFormat", "annotations", "title", "description", "Formula", "Hostname", "JSON", "Markdown", "Regex", "URL", "UUID", "ExamplesAnnotationId", "Format", "TypeFormat", "DXN", "Schema", "Email", "Formula", "Hostname", "JSON", "Markdown", "Regex", "URL", "UUID", "Currency", "Integer", "Percent", "Timestamp", "DateTime", "Date", "DateOnly", "Time", "TimeOnly", "Duration", "GeoPoint", "Schema", "SelectOptionSchema", "Struct", "id", "NonEmptyString", "title", "String", "color", "pipe", "mutable", "SchemaAST", "CustomAnnotations", "format", "FormatAnnotationId", "currency", "CurrencyAnnotationId", "DecodedAnnotations", "title", "TitleAnnotationId", "description", "DescriptionAnnotationId", "EchoAnnotations", "meta", "PropertyMetaAnnotationId", "generator", "GeneratorAnnotationId", "labelProp", "LabelAnnotationId", "Schema", "JsonPath", "SimpleTypes", "Literal", "NonNegativeInteger", "Number", "pipe", "greaterThanOrEqualTo", "StringArray", "Array", "String", "mutable", "JsonSchemaOrBoolean", "Union", "suspend", "JsonSchemaType", "Boolean", "JsonSchemaEchoAnnotations", "Struct", "labelProp", "optional", "JsonPath", "generator", "Tuple", "meta", "Record", "key", "value", "Any", "type", "typename", "version", "schemaId", "annotations", "_JsonSchemaType", "$id", "$schema", "$ref", "$comment", "entityKind", "EntityKindSchema", "relationTarget", "relationSource", "title", "description", "readOnly", "writeOnly", "examples", "default", "const", "enum", "multipleOf", "greaterThan", "maximum", "exclusiveMaximum", "minimum", "exclusiveMinimum", "maxLength", "pattern", "FormatAnnotation", "set", "TypeFormat", "Regex", "format", "minLength", "items", "additionalItems", "maxItems", "minItems", "uniqueItems", "contains", "maxProperties", "minProperties", "required", "propertyOrder", "additionalProperties", "properties", "patternProperties", "propertyNames", "definitions", "dependencies", "identifier", "contentMediaType", "contentEncoding", "if", "then", "else", "allOf", "anyOf", "oneOf", "not", "$defs", "currency", "reference", "schema", "schemaVersion", "schemaObject", "echo", "JsonSchemaFields", "Object", "keys", "fields", "getSchemaProperty", "property", "setSchemaProperty", "ECHO_ANNOTATIONS_NS_DEPRECATED_KEY", "ECHO_ANNOTATIONS_NS_KEY", "getNormalizedEchoAnnotations", "obj", "normalizeEchoAnnotations", "undefined", "res", "normalizeSchema", "schema", "copy", "structuredClone", "go", "exclusiveMaximum", "maximum", "exclusiveMinimum", "minimum", "key", "Object", "keys", "JsonSchemaFields", "includes", "properties", "goOnRecord", "patternProperties", "propertyNames", "definitions", "items", "maybeGoOnArray", "additionalItems", "contains", "if", "then", "else", "allOf", "anyOf", "oneOf", "not", "$defs", "reference", "value", "Array", "isArray", "item", "record", "Array", "Function", "JSONSchema", "Option", "Schema", "SchemaAST", "raise", "mapAst", "assertArgument", "invariant", "DXN", "ObjectId", "log", "clearUndefined", "orderKeys", "removeProperties", "Effect", "Option", "ParseResult", "Schema", "SchemaAST", "Reference", "compositeRuntime", "assertArgument", "invariant", "DXN", "ObjectId", "JSON_SCHEMA_ECHO_REF_ID", "getSchemaReference", "property", "$id", "reference", "schema", "$ref", "typename", "DXN", "parse", "createSchemaReference", "fromTypename", "toString", "getReferenceAst", "ast", "_tag", "annotations", "ReferenceAnnotationId", "undefined", "version", "RefTypeId", "Symbol", "Ref", "assertArgument", "isSchema", "annotation", "getTypeAnnotation", "Error", "createEchoReferenceSchema", "getTypeIdentifierAnnotation", "getSchemaExpectedName", "isRef", "obj", "hasObjectId", "id", "ref", "dxn", "isLocalObjectId", "parts", "isRefSchema", "isRefSchemaAST", "getAnnotation", "pipe", "isSome", "make", "TypeError", "invariant", "ObjectId", "isValid", "Reference", "localObjectReference", "toDXN", "RefImpl", "fromDXN", "echoId", "schemaName", "referenceInfo", "schemaVersion", "refSchema", "declare", "encode", "value", "succeed", "decode", "fail", "Unexpected", "jsonSchema", "getIdentifierAnnotation", "orElse", "getTitleAnnotation", "getDescriptionAnnotation", "getOrElse", "compositeRuntime", "createSignal", "notifyWrite", "target", "notifyRead", "resolveSync", "load", "resolve", "tryLoad", "noInline", "toJSON", "refVariance", "_setResolver", "resolver", "_getSavedTarget", "setRefResolver", "getRefSavedTarget", "_T", "refFromEncodedReference", "encodedReference", "StaticRefResolver", "objects", "Map", "schemas", "addObject", "set", "addSchema", "getSchemaDXN", "_load", "_onLoad", "asEchoDXN", "get", "resolveSchema", "isNonNullable", "RefArray", "Object", "freeze", "targets", "refs", "map", "ref", "target", "filter", "isNonNullable", "loadAll", "Promise", "all", "load", "removeById", "id", "index", "findIndex", "Ref", "hasObjectId", "splice", "PropType", "toPropType", "type", "Error", "JSON_SCHEMA_URL", "toJsonSchema", "schema", "options", "assertArgument", "isSchema", "jsonSchema", "_toJsonSchemaAST", "ast", "strict", "removeProperties", "key", "value", "withRefinements", "withEchoRefinements", "fromAST", "definitions", "normalizeJsonSchema", "path", "suspendCache", "Map", "set", "recursiveResult", "isSuspend", "suspendedAst", "f", "cachedPath", "get", "Suspend", "JSONSchemaAnnotationId", "$ref", "isTypeLiteral", "mapAst", "undefined", "addJsonSchemaFields", "propertyOrder", "propertySignatures", "map", "p", "name", "isUndefinedKeyword", "annotationFields", "annotations_toJsonSchemaFields", "annotations", "Object", "keys", "length", "toEffectSchema", "root", "_defs", "defs", "$defs", "objectToEffectSchema", "result", "Unknown", "refToEffectSchema", "$id", "anyToEffectSchema", "Union", "enum", "e", "Literal", "oneOf", "v", "anyOf", "allOf", "log", "warn", "String", "pattern", "pipe", "RegExp", "Number", "int", "Boolean", "isArray", "items", "required", "optional", "splitAt", "minItems", "Tuple", "optionalElement", "invariant", "Array", "Null", "refSegments", "split", "identifier", "jsonSchemaFieldsToAnnotations", "echoRefinement", "ECHO_ANNOTATIONS_NS_DEPRECATED_KEY", "isEchoObject", "startsWith", "fields", "propertyList", "entries", "properties", "immutableIdField", "includes", "orderKeys", "patternProperties", "Record", "additionalProperties", "Struct", "indexValue", "extend", "mutable", "id", "reference", "echoId", "createEchoReferenceSchema", "typename", "version", "Any", "Ref", "Expando", "targetSchemaDXN", "DXN", "parse", "kind", "TYPE", "toString", "parts", "schemaVersion", "schemaFields", "echoAnnotations", "annotationId", "EchoAnnotations", "ECHO_ANNOTATIONS_NS_KEY", "echoIdentifier", "TypeIdentifierAnnotationId", "schemaId", "CustomAnnotations", "decodeTypeIdentifierAnnotation", "echo", "ObjectId", "isValid", "fromLocalObjectId", "decodeTypeAnnotation", "annotation", "entityKind", "decodeSync", "EntityKindSchema", "EntityKind", "Relation", "source", "relationSource", "raise", "target", "relationTarget", "sourceSchema", "targetSchema", "getNormalizedEchoAnnotations", "typeAnnotation", "TypeAnnotationId", "makeTypeJsonSchemaAnnotation", "DecodedAnnotations", "clearUndefined", "makeAnnotatedRefinement", "Refinement", "none", "$schema", "Schema", "makeTypedEntityClass", "typename", "version", "baseSchema", "TypeId", "schemaVariance", "ast", "annotations", "bind", "pipe", "Symbol", "hasInstance", "obj", "getTypename", "Error", "_A", "_", "_I", "_R", "raise", "assertArgument", "failedInvariant", "ObjectId", "defineHiddenProperty", "inspectCustom", "attachedTypedObjectInspector", "obj", "descriptor", "Object", "getOwnPropertyDescriptor", "inspectCustom", "defineProperty", "value", "typedObjectInspectFunction", "writable", "enumerable", "configurable", "depth", "options", "inspect", "id", "props", "ATTR_TYPE", "getTypeDXN", "ATTR_META", "MetaId", "Schema", "raise", "isEncodedReference", "assertArgument", "invariant", "DXN", "ObjectId", "defineHiddenProperty", "assumeType", "deepMapValues", "visitValues", "objectToJSON", "obj", "typename", "getTypeDXN", "toString", "invariant", "typedJsonSerializer", "call", "objectFromJSON", "jsonData", "refResolver", "dxn", "assumeType", "assertArgument", "ATTR_TYPE", "id", "type", "DXN", "parse", "schema", "resolveSchema", "undefined", "isSchema", "pipe", "decodeUnknownPromise", "setRefResolverOnData", "decodeGeneric", "ObjectId", "isValid", "setTypename", "setSchema", "isRelation", "ATTR_RELATION_SOURCE", "ATTR_RELATION_TARGET", "sourceDxn", "raise", "TypeError", "targetDxn", "source", "resolve", "target", "defineHiddenProperty", "KindId", "EntityKind", "Relation", "RelationSourceDXNId", "RelationTargetDXNId", "RelationSourceId", "RelationTargetId", "Object", "ATTR_META", "meta", "ObjectMetaSchema", "Array", "isArray", "keys", "MetaId", "SelfDXNId", "assertObjectModel", "ATTR_DELETED", "ATTR_SELF_DXN", "options", "_type", "_meta", "_deleted", "_selfDxn", "_relationSource", "_relationTarget", "props", "deepMapValues", "value", "visitor", "isEncodedReference", "refFromEncodedReference", "Ref", "isRef", "setRefResolver", "visitValues", "attachTypedJsonSerializer", "descriptor", "getOwnPropertyDescriptor", "defineProperty", "writable", "enumerable", "configurable", "rest", "result", "TypeId", "serializeMeta", "sourceDXN", "targetDXN", "assign", "serializeData", "data", "recurse", "noInline", "encode", "createObject", "schema", "props", "annotation", "getTypeAnnotation", "Error", "assertArgument", "RelationSourceDXNId", "RelationTargetDXNId", "RelationSourceId", "RelationTargetId", "obj", "id", "ObjectId", "random", "kind", "EntityKind", "Relation", "Object", "defineHiddenProperty", "KindId", "MetaId", "keys", "setSchema", "setTypename", "getSchemaDXN", "failedInvariant", "attachTypedJsonSerializer", "attachedTypedObjectInspector", "sourceDXN", "getObjectDXN", "raise", "targetDXN", "assertObjectModel", "isDeleted", "obj", "ObjectDeletedId", "undefined", "DXN", "ObjectId", "QueueSubspaceTags", "SpaceId", "createQueueDXN", "spaceId", "SpaceId", "random", "queueId", "ObjectId", "DXN", "kind", "QUEUE", "QueueSubspaceTags", "DATA", "Schema", "SchemaAST", "invariant", "SchemaValidator", "validateSchema", "schema", "visitAll", "nodes", "forEach", "node", "make", "isUnion", "ast", "typeAstList", "types", "filter", "type", "isTypeLiteral", "length", "getTypeDiscriminators", "isTupleType", "positionalTypes", "elements", "map", "t", "allTypes", "concat", "rest", "getPropertySignatures", "p", "hasTypeAnnotation", "rootObjectSchema", "property", "annotation", "getPropertySchema", "annotations", "propertyPath", "getProperty", "i", "propertyName", "tupleAst", "unwrapArray", "getArrayElementSchema", "propertyType", "getPropertyType", "toString", "slice", "TypeError", "String", "getTargetPropertySchema", "target", "prop", "SchemaId", "invariant", "arrayAst", "Any", "elementIndex", "parseInt", "Number", "NaN", "isNaN", "elementType", "restType", "flattenUnion", "typeAst", "flatMap", "getProperties", "getTargetPropertyFn", "astCandidates", "typeDiscriminators", "targetPropertyValue", "name", "typeIndex", "findIndex", "literal", "anyOrObject", "unwrapAst", "candidate", "isAnyKeyword", "isObjectKeyword", "typeOrDiscriminatedUnion", "some", "targetProperty", "find", "indexSignatureType", "indexSignatures", "discriminatorPropCandidates", "isLiteral", "isValidDiscriminator", "every", "isOptional", "everyTypeHasDiscriminator", "isDiscriminatedUnion", "rootAst", "predicate", "next", "isSuspend", "f", "checkIdNotPresentOnSchema", "idProperty", "Error", "Schema", "SchemaAST", "invariant", "TypedObject", "typename", "typenameParam", "version", "versionParam", "disableValidation", "TypenameSchema", "make", "VersionSchema", "fields", "options", "schema", "record", "Struct", "key", "String", "value", "Any", "typeSchema", "extend", "mutable", "partial", "id", "invariant", "EntityKind", "Object", "annotatedSchema", "annotations", "TypeAnnotationId", "kind", "JSONSchemaAnnotationId", "makeTypeJsonSchemaAnnotation", "makeTypedEntityClass", "ObjectId", "UntypedReactiveHandler", "createProxy", "defineHiddenProperty", "isValidProxyTarget", "Schema", "SchemaAST", "inspectCustom", "compositeRuntime", "invariant", "ReactiveArray", "createProxy", "defineHiddenProperty", "isValidProxyTarget", "objectData", "symbolIsProxy", "symbolSignal", "Symbol", "symbolPropertySignal", "TypedReactiveHandler", "instance", "_proxyMap", "WeakMap", "init", "target", "invariant", "SchemaId", "defineHiddenProperty", "compositeRuntime", "createSignal", "ObjectDeletedId", "key", "Object", "getOwnPropertyNames", "descriptor", "getOwnPropertyDescriptor", "get", "defineProperty", "inspectCustom", "enumerable", "configurable", "value", "_inspect", "bind", "prop", "receiver", "objectData", "notifyRead", "toJSON", "Reflect", "isValidProxyTarget", "createProxy", "set", "Array", "isArray", "ReactiveArray", "from", "result", "batch", "validatedValue", "_validateValue", "notifyWrite", "ownKeys", "property", "attributes", "schema", "SchemaValidator", "getTargetPropertySchema", "_", "asserts", "setSchemaProperties", "options", "inspectFn", "inspected", "showHidden", "customInspect", "obj", "schemaType", "getSchemaDXN", "TypeId", "elementSchema", "prepareTypedTarget", "isTypeLiteral", "ast", "Error", "validateSchema", "makeArraysReactive", "symbolIsProxy", "makeObject", "objOrSchema", "obj", "meta", "Expando", "createReactiveObject", "undefined", "expando", "schema", "options", "isValidProxyTarget", "Error", "annotation", "getTypeAnnotation", "shouldGenerateId", "setIdOnTarget", "defineHiddenProperty", "KindId", "kind", "initMeta", "prepareTypedTarget", "attachTypedJsonSerializer", "createProxy", "TypedReactiveHandler", "instance", "UntypedReactiveHandler", "target", "id", "ObjectId", "isValid", "random", "keys", "ObjectMetaSchema", "MetaId", "Schema", "SchemaAST", "invariant", "Schema", "SchemaAST", "invariant", "DXN", "addFieldsToSchema", "schema", "fields", "schemaExtension", "partial", "Struct", "extend", "annotations", "ast", "updateFieldsInSchema", "invariant", "isTypeLiteral", "updatedProperties", "propertySignatures", "propertiesToUpdate", "property", "index", "findIndex", "p", "name", "push", "make", "TypeLiteral", "indexSignatures", "removeFieldsFromSchema", "fieldNames", "omit", "updateFieldNameInSchema", "before", "after", "map", "PropertySignature", "type", "isOptional", "isReadonly", "setTypenameInSchema", "typename", "existingAnnotation", "TypeAnnotationId", "String", "kind", "version", "JSONSchemaAnnotationId", "$id", "TypeIdentifierAnnotationId", "DXN", "fromTypename", "toString", "Schema", "PersistentEchoSchema", "Struct", "name", "optional", "String", "typename", "TypenameSchema", "version", "VersionSchema", "jsonSchema", "JsonSchemaType", "pipe", "EchoObjectSchema", "PersistentSchema", "getSnapshot", "object", "Array", "isArray", "map", "result", "key", "ImmutableSchema", "_objectAnnotation", "_schema", "getTypeAnnotation", "invariant", "TypeId", "schemaVariance", "Type", "Encoded", "Context", "ast", "annotations", "pipe", "typename", "version", "readonly", "snapshot", "jsonSchema", "toJsonSchema", "mutable", "Error", "EchoSchemaConstructor", "Union", "PersistentSchema", "instanceOf", "EchoSchema", "schema", "bind", "isMutable", "_A", "_", "_I", "_R", "_isDirty", "_persistentSchema", "_getSchema", "id", "name", "SchemaMetaSymbol", "persistentSchema", "getProperties", "isTypeLiteral", "propertySignatures", "filter", "p", "map", "unwrapOptionality", "updateTypename", "updated", "setTypenameInSchema", "addFields", "fields", "extended", "addFieldsToSchema", "updateFields", "updateFieldsInSchema", "updateFieldPropertyName", "before", "after", "renamed", "updateFieldNameInSchema", "removeFields", "fieldNames", "removed", "removeFieldsFromSchema", "_invalidate", "_rebuild", "toEffectSchema", "getSnapshot", "property", "isUnion", "type", "types", "find", "isUndefinedKeyword", "raise", "invariant", "defaultMap", "RuntimeSchemaRegistry", "_registry", "Map", "set", "getSchemaTypename", "PersistentSchema", "schemas", "Array", "from", "values", "flat", "hasSchema", "schema", "typename", "version", "getSchemaVersion", "invariant", "get", "some", "getSchemaByDXN", "dxn", "components", "asTypeDXN", "undefined", "type", "allSchemas", "find", "s", "sort", "a", "b", "localeCompare", "getSchema", "addSchema", "types", "forEach", "raise", "TypeError", "versions", "defaultMap", "Error", "push"]
7
+ }