@dxos/echo 0.8.4-main.fffef41 → 0.8.4-staging.60fe92afc8

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 (731) hide show
  1. package/LICENSE +102 -5
  2. package/README.md +10 -11
  3. package/dist/lib/neutral/Annotation.mjs +68 -0
  4. package/dist/lib/neutral/Database.mjs +38 -0
  5. package/dist/lib/neutral/Entity.mjs +72 -0
  6. package/dist/lib/neutral/Err.mjs +12 -0
  7. package/dist/lib/neutral/Feed.mjs +54 -0
  8. package/dist/lib/neutral/Filter.mjs +70 -0
  9. package/dist/lib/neutral/Format.mjs +86 -0
  10. package/dist/lib/neutral/Format.mjs.map +7 -0
  11. package/dist/lib/neutral/JsonSchema.mjs +18 -0
  12. package/dist/lib/neutral/JsonSchema.mjs.map +7 -0
  13. package/dist/lib/neutral/Key.mjs +16 -0
  14. package/dist/lib/neutral/Key.mjs.map +7 -0
  15. package/dist/lib/neutral/Migration.mjs +18 -0
  16. package/dist/lib/neutral/Migration.mjs.map +7 -0
  17. package/dist/lib/neutral/Obj.mjs +122 -0
  18. package/dist/lib/neutral/Obj.mjs.map +7 -0
  19. package/dist/lib/neutral/Order.mjs +16 -0
  20. package/dist/lib/neutral/Order.mjs.map +7 -0
  21. package/dist/lib/neutral/Query.mjs +38 -0
  22. package/dist/lib/neutral/Query.mjs.map +7 -0
  23. package/dist/lib/neutral/QueryResult.mjs +2 -0
  24. package/dist/lib/neutral/QueryResult.mjs.map +7 -0
  25. package/dist/lib/neutral/Ref.mjs +25 -0
  26. package/dist/lib/neutral/Ref.mjs.map +7 -0
  27. package/dist/lib/neutral/Registry.mjs +14 -0
  28. package/dist/lib/neutral/Registry.mjs.map +7 -0
  29. package/dist/lib/neutral/Relation.mjs +97 -0
  30. package/dist/lib/neutral/Relation.mjs.map +7 -0
  31. package/dist/lib/neutral/Scope.mjs +12 -0
  32. package/dist/lib/neutral/Scope.mjs.map +7 -0
  33. package/dist/lib/neutral/Tag.mjs +32 -0
  34. package/dist/lib/neutral/Tag.mjs.map +7 -0
  35. package/dist/lib/neutral/Type.mjs +65 -0
  36. package/dist/lib/neutral/Type.mjs.map +7 -0
  37. package/dist/lib/neutral/chunk-35INCYOE.mjs +7 -0
  38. package/dist/lib/neutral/chunk-35INCYOE.mjs.map +7 -0
  39. package/dist/lib/neutral/chunk-3PBP4V4O.mjs +101 -0
  40. package/dist/lib/neutral/chunk-3PBP4V4O.mjs.map +7 -0
  41. package/dist/lib/neutral/chunk-4ZUHOTCG.mjs +184 -0
  42. package/dist/lib/neutral/chunk-4ZUHOTCG.mjs.map +7 -0
  43. package/dist/lib/neutral/chunk-5SMDBFVB.mjs +108 -0
  44. package/dist/lib/neutral/chunk-5SMDBFVB.mjs.map +7 -0
  45. package/dist/lib/neutral/chunk-5SUJPHAE.mjs +34 -0
  46. package/dist/lib/neutral/chunk-5SUJPHAE.mjs.map +7 -0
  47. package/dist/lib/neutral/chunk-6M2Z6WBH.mjs +93 -0
  48. package/dist/lib/neutral/chunk-6M2Z6WBH.mjs.map +7 -0
  49. package/dist/lib/neutral/chunk-6YDI3J37.mjs +346 -0
  50. package/dist/lib/neutral/chunk-6YDI3J37.mjs.map +7 -0
  51. package/dist/lib/neutral/chunk-7FPIAJIV.mjs +2279 -0
  52. package/dist/lib/neutral/chunk-7FPIAJIV.mjs.map +7 -0
  53. package/dist/lib/neutral/chunk-7LOUAPYZ.mjs +25 -0
  54. package/dist/lib/neutral/chunk-7LOUAPYZ.mjs.map +7 -0
  55. package/dist/lib/neutral/chunk-7PI7C4EF.mjs +747 -0
  56. package/dist/lib/neutral/chunk-7PI7C4EF.mjs.map +7 -0
  57. package/dist/lib/neutral/chunk-BBFJWWAV.mjs +51 -0
  58. package/dist/lib/neutral/chunk-BBFJWWAV.mjs.map +7 -0
  59. package/dist/lib/neutral/chunk-EVK6XBXO.mjs +56 -0
  60. package/dist/lib/neutral/chunk-EVK6XBXO.mjs.map +7 -0
  61. package/dist/lib/neutral/chunk-IGK6FN65.mjs +27 -0
  62. package/dist/lib/neutral/chunk-IGK6FN65.mjs.map +7 -0
  63. package/dist/lib/neutral/chunk-J5LGTIGS.mjs +10 -0
  64. package/dist/lib/neutral/chunk-J5LGTIGS.mjs.map +7 -0
  65. package/dist/lib/neutral/chunk-LWXVKPPW.mjs +281 -0
  66. package/dist/lib/neutral/chunk-LWXVKPPW.mjs.map +7 -0
  67. package/dist/lib/neutral/chunk-MZ7K3MLL.mjs +48 -0
  68. package/dist/lib/neutral/chunk-MZ7K3MLL.mjs.map +7 -0
  69. package/dist/lib/neutral/chunk-O6BH7EPN.mjs +94 -0
  70. package/dist/lib/neutral/chunk-O6BH7EPN.mjs.map +7 -0
  71. package/dist/lib/neutral/chunk-QQIYS74I.mjs +336 -0
  72. package/dist/lib/neutral/chunk-QQIYS74I.mjs.map +7 -0
  73. package/dist/lib/neutral/chunk-R5W6DXR4.mjs +678 -0
  74. package/dist/lib/neutral/chunk-R5W6DXR4.mjs.map +7 -0
  75. package/dist/lib/neutral/chunk-RIVWNMSF.mjs +41 -0
  76. package/dist/lib/neutral/chunk-RIVWNMSF.mjs.map +7 -0
  77. package/dist/lib/neutral/chunk-SBVFRTST.mjs +160 -0
  78. package/dist/lib/neutral/chunk-SBVFRTST.mjs.map +7 -0
  79. package/dist/lib/neutral/chunk-T6E37YIP.mjs +251 -0
  80. package/dist/lib/neutral/chunk-T6E37YIP.mjs.map +7 -0
  81. package/dist/lib/neutral/chunk-TFEWTY5A.mjs +428 -0
  82. package/dist/lib/neutral/chunk-TFEWTY5A.mjs.map +7 -0
  83. package/dist/lib/neutral/chunk-TYGKCRMK.mjs +437 -0
  84. package/dist/lib/neutral/chunk-TYGKCRMK.mjs.map +7 -0
  85. package/dist/lib/neutral/chunk-UUP46KUQ.mjs +205 -0
  86. package/dist/lib/neutral/chunk-UUP46KUQ.mjs.map +7 -0
  87. package/dist/lib/neutral/chunk-WISOH2XH.mjs +36 -0
  88. package/dist/lib/neutral/chunk-WISOH2XH.mjs.map +7 -0
  89. package/dist/lib/neutral/chunk-WTQJHC75.mjs +395 -0
  90. package/dist/lib/neutral/chunk-WTQJHC75.mjs.map +7 -0
  91. package/dist/lib/neutral/chunk-WU3GIANS.mjs +31 -0
  92. package/dist/lib/neutral/chunk-WU3GIANS.mjs.map +7 -0
  93. package/dist/lib/neutral/chunk-ZGNNFYHS.mjs +132 -0
  94. package/dist/lib/neutral/chunk-ZGNNFYHS.mjs.map +7 -0
  95. package/dist/lib/neutral/index.mjs +111 -0
  96. package/dist/lib/neutral/index.mjs.map +7 -0
  97. package/dist/lib/neutral/internal/index.mjs +539 -0
  98. package/dist/lib/neutral/internal/index.mjs.map +7 -0
  99. package/dist/lib/neutral/meta.json +1 -0
  100. package/dist/lib/neutral/testing/index.mjs +458 -0
  101. package/dist/lib/neutral/testing/index.mjs.map +7 -0
  102. package/dist/types/src/Annotation.d.ts +128 -0
  103. package/dist/types/src/Annotation.d.ts.map +1 -0
  104. package/dist/types/src/Annotation.test.d.ts +2 -0
  105. package/dist/types/src/Annotation.test.d.ts.map +1 -0
  106. package/dist/types/src/Collection.d.ts +15 -0
  107. package/dist/types/src/Collection.d.ts.map +1 -0
  108. package/dist/types/src/Database.d.ts +208 -0
  109. package/dist/types/src/Database.d.ts.map +1 -0
  110. package/dist/types/src/Dataset.d.ts +29 -0
  111. package/dist/types/src/Dataset.d.ts.map +1 -0
  112. package/dist/types/src/Entity.d.ts +247 -0
  113. package/dist/types/src/Entity.d.ts.map +1 -0
  114. package/dist/types/src/Entity.test.d.ts +2 -0
  115. package/dist/types/src/Entity.test.d.ts.map +1 -0
  116. package/dist/types/src/Err.d.ts +107 -0
  117. package/dist/types/src/Err.d.ts.map +1 -0
  118. package/dist/types/src/Feed.d.ts +229 -0
  119. package/dist/types/src/Feed.d.ts.map +1 -0
  120. package/dist/types/src/Filter.d.ts +175 -0
  121. package/dist/types/src/Filter.d.ts.map +1 -0
  122. package/dist/types/src/Filter.test.d.ts +2 -0
  123. package/dist/types/src/Filter.test.d.ts.map +1 -0
  124. package/dist/types/src/Format.d.ts +2 -0
  125. package/dist/types/src/Format.d.ts.map +1 -0
  126. package/dist/types/src/Hypergraph.d.ts +70 -0
  127. package/dist/types/src/Hypergraph.d.ts.map +1 -0
  128. package/dist/types/src/Json.d.ts +33 -0
  129. package/dist/types/src/Json.d.ts.map +1 -0
  130. package/dist/types/src/Json.test.d.ts +2 -0
  131. package/dist/types/src/Json.test.d.ts.map +1 -0
  132. package/dist/types/src/JsonSchema.d.ts +16 -0
  133. package/dist/types/src/JsonSchema.d.ts.map +1 -0
  134. package/dist/types/src/Key.d.ts +2 -1
  135. package/dist/types/src/Key.d.ts.map +1 -1
  136. package/dist/types/src/Migration.d.ts +72 -0
  137. package/dist/types/src/Migration.d.ts.map +1 -0
  138. package/dist/types/src/Obj.d.ts +483 -110
  139. package/dist/types/src/Obj.d.ts.map +1 -1
  140. package/dist/types/src/Obj.test.d.ts +2 -0
  141. package/dist/types/src/Obj.test.d.ts.map +1 -0
  142. package/dist/types/src/Order.d.ts +26 -0
  143. package/dist/types/src/Order.d.ts.map +1 -0
  144. package/dist/types/src/Query.d.ts +231 -0
  145. package/dist/types/src/Query.d.ts.map +1 -0
  146. package/dist/types/src/Query.test.d.ts +2 -0
  147. package/dist/types/src/Query.test.d.ts.map +1 -0
  148. package/dist/types/src/QueryResult.d.ts +101 -0
  149. package/dist/types/src/QueryResult.d.ts.map +1 -0
  150. package/dist/types/src/Ref.d.ts +69 -11
  151. package/dist/types/src/Ref.d.ts.map +1 -1
  152. package/dist/types/src/Registry.d.ts +131 -0
  153. package/dist/types/src/Registry.d.ts.map +1 -0
  154. package/dist/types/src/Relation.d.ts +321 -23
  155. package/dist/types/src/Relation.d.ts.map +1 -1
  156. package/dist/types/src/Relation.test.d.ts +2 -0
  157. package/dist/types/src/Relation.test.d.ts.map +1 -0
  158. package/dist/types/src/Scope.d.ts +35 -0
  159. package/dist/types/src/Scope.d.ts.map +1 -0
  160. package/dist/types/src/Tag.d.ts +26 -9
  161. package/dist/types/src/Tag.d.ts.map +1 -1
  162. package/dist/types/src/Type.d.ts +397 -106
  163. package/dist/types/src/Type.d.ts.map +1 -1
  164. package/dist/types/src/Type.test.d.ts +2 -0
  165. package/dist/types/src/Type.test.d.ts.map +1 -0
  166. package/dist/types/src/View.d.ts +65 -0
  167. package/dist/types/src/View.d.ts.map +1 -0
  168. package/dist/types/src/exemplars.test.d.ts +2 -0
  169. package/dist/types/src/exemplars.test.d.ts.map +1 -0
  170. package/dist/types/src/hierarchy.test.d.ts +2 -0
  171. package/dist/types/src/hierarchy.test.d.ts.map +1 -0
  172. package/dist/types/src/index.d.ts +21 -5
  173. package/dist/types/src/index.d.ts.map +1 -1
  174. package/dist/types/src/internal/Annotation/annotations.d.ts +272 -0
  175. package/dist/types/src/internal/Annotation/annotations.d.ts.map +1 -0
  176. package/dist/types/src/internal/Annotation/annotations.test.d.ts.map +1 -0
  177. package/dist/types/src/internal/Annotation/dictionary.d.ts +24 -0
  178. package/dist/types/src/internal/Annotation/dictionary.d.ts.map +1 -0
  179. package/dist/types/src/internal/Annotation/entity-dictionary.d.ts +14 -0
  180. package/dist/types/src/internal/Annotation/entity-dictionary.d.ts.map +1 -0
  181. package/dist/types/src/internal/Annotation/index.d.ts +6 -0
  182. package/dist/types/src/internal/Annotation/index.d.ts.map +1 -0
  183. package/dist/types/src/internal/Annotation/sorting.d.ts +24 -0
  184. package/dist/types/src/internal/Annotation/sorting.d.ts.map +1 -0
  185. package/dist/types/src/internal/Annotation/util.d.ts +48 -0
  186. package/dist/types/src/internal/Annotation/util.d.ts.map +1 -0
  187. package/dist/types/src/internal/Entity/api.d.ts +27 -0
  188. package/dist/types/src/internal/Entity/api.d.ts.map +1 -0
  189. package/dist/types/src/internal/Entity/entity.d.ts +84 -0
  190. package/dist/types/src/internal/Entity/entity.d.ts.map +1 -0
  191. package/dist/types/src/internal/Entity/guard.d.ts +10 -0
  192. package/dist/types/src/internal/Entity/guard.d.ts.map +1 -0
  193. package/dist/types/src/internal/Entity/index.d.ts +10 -0
  194. package/dist/types/src/internal/Entity/index.d.ts.map +1 -0
  195. package/dist/types/src/internal/Entity/model.d.ts +59 -0
  196. package/dist/types/src/internal/Entity/model.d.ts.map +1 -0
  197. package/dist/types/src/internal/Entity/object.d.ts +18 -0
  198. package/dist/types/src/internal/Entity/object.d.ts.map +1 -0
  199. package/dist/types/src/internal/Entity/relation.d.ts +58 -0
  200. package/dist/types/src/internal/Entity/relation.d.ts.map +1 -0
  201. package/dist/types/src/internal/Entity/type-kind.d.ts +24 -0
  202. package/dist/types/src/internal/Entity/type-kind.d.ts.map +1 -0
  203. package/dist/types/src/internal/Entity/type-uri.d.ts +24 -0
  204. package/dist/types/src/internal/Entity/type-uri.d.ts.map +1 -0
  205. package/dist/types/src/internal/Entity/util.d.ts +2 -0
  206. package/dist/types/src/internal/Entity/util.d.ts.map +1 -0
  207. package/dist/types/src/internal/Entity/version.d.ts +42 -0
  208. package/dist/types/src/internal/Entity/version.d.ts.map +1 -0
  209. package/dist/types/src/internal/Format/date.d.ts.map +1 -0
  210. package/dist/types/src/internal/Format/date.test.d.ts.map +1 -0
  211. package/dist/types/src/internal/{formats → Format}/format.d.ts +7 -4
  212. package/dist/types/src/internal/Format/format.d.ts.map +1 -0
  213. package/dist/types/src/internal/Format/format.test.d.ts.map +1 -0
  214. package/dist/types/src/internal/{formats → Format}/index.d.ts +2 -2
  215. package/dist/types/src/internal/Format/index.d.ts.map +1 -0
  216. package/dist/types/src/internal/Format/number.d.ts.map +1 -0
  217. package/dist/types/src/internal/{formats → Format}/object.d.ts +3 -1
  218. package/dist/types/src/internal/Format/object.d.ts.map +1 -0
  219. package/dist/types/src/internal/{formats → Format}/select.d.ts +6 -4
  220. package/dist/types/src/internal/Format/select.d.ts.map +1 -0
  221. package/dist/types/src/internal/{formats → Format}/string.d.ts +4 -0
  222. package/dist/types/src/internal/Format/string.d.ts.map +1 -0
  223. package/dist/types/src/internal/{formats → Format}/types.d.ts +14 -10
  224. package/dist/types/src/internal/Format/types.d.ts.map +1 -0
  225. package/dist/types/src/internal/{json → JsonSchema}/annotations.d.ts +1 -1
  226. package/dist/types/src/internal/JsonSchema/annotations.d.ts.map +1 -0
  227. package/dist/types/src/internal/JsonSchema/effect-schema.test.d.ts.map +1 -0
  228. package/dist/types/src/internal/JsonSchema/index.d.ts +5 -0
  229. package/dist/types/src/internal/JsonSchema/index.d.ts.map +1 -0
  230. package/dist/types/src/internal/JsonSchema/json-schema-normalize.d.ts.map +1 -0
  231. package/dist/types/src/internal/{json-schema → JsonSchema}/json-schema-type.d.ts +136 -35
  232. package/dist/types/src/internal/JsonSchema/json-schema-type.d.ts.map +1 -0
  233. package/dist/types/src/internal/{json → JsonSchema}/json-schema.d.ts +6 -3
  234. package/dist/types/src/internal/JsonSchema/json-schema.d.ts.map +1 -0
  235. package/dist/types/src/internal/JsonSchema/json-schema.test.d.ts.map +1 -0
  236. package/dist/types/src/internal/Obj/atoms.d.ts +38 -0
  237. package/dist/types/src/internal/Obj/atoms.d.ts.map +1 -0
  238. package/dist/types/src/internal/Obj/clone.d.ts +8 -0
  239. package/dist/types/src/internal/Obj/clone.d.ts.map +1 -0
  240. package/dist/types/src/internal/Obj/common.d.ts.map +1 -0
  241. package/dist/types/src/internal/{object/create.d.ts → Obj/create-object.d.ts} +15 -16
  242. package/dist/types/src/internal/Obj/create-object.d.ts.map +1 -0
  243. package/dist/types/src/internal/Obj/create-object.test.d.ts +2 -0
  244. package/dist/types/src/internal/Obj/create-object.test.d.ts.map +1 -0
  245. package/dist/types/src/internal/Obj/deleted.d.ts +6 -0
  246. package/dist/types/src/internal/Obj/deleted.d.ts.map +1 -0
  247. package/dist/types/src/internal/Obj/index.d.ts +11 -0
  248. package/dist/types/src/internal/Obj/index.d.ts.map +1 -0
  249. package/dist/types/src/internal/Obj/inspect.d.ts.map +1 -0
  250. package/dist/types/src/internal/Obj/json-serializer.d.ts +45 -0
  251. package/dist/types/src/internal/Obj/json-serializer.d.ts.map +1 -0
  252. package/dist/types/src/internal/Obj/json-serializer.test.d.ts.map +1 -0
  253. package/dist/types/src/internal/Obj/schema-validator.d.ts +2 -0
  254. package/dist/types/src/internal/Obj/schema-validator.d.ts.map +1 -0
  255. package/dist/types/src/internal/Obj/schema-validator.test.d.ts.map +1 -0
  256. package/dist/types/src/internal/Obj/set-value.d.ts +7 -0
  257. package/dist/types/src/internal/Obj/set-value.d.ts.map +1 -0
  258. package/dist/types/src/internal/Obj/set-value.test.d.ts +2 -0
  259. package/dist/types/src/internal/Obj/set-value.test.d.ts.map +1 -0
  260. package/dist/types/src/internal/Obj/snapshot.d.ts +6 -0
  261. package/dist/types/src/internal/Obj/snapshot.d.ts.map +1 -0
  262. package/dist/types/src/internal/Obj/typed-object.d.ts +25 -0
  263. package/dist/types/src/internal/Obj/typed-object.d.ts.map +1 -0
  264. package/dist/types/src/internal/Obj/typed-object.test.d.ts.map +1 -0
  265. package/dist/types/src/internal/Query/index.d.ts +2 -0
  266. package/dist/types/src/internal/Query/index.d.ts.map +1 -0
  267. package/dist/types/src/internal/Query/pretty.d.ts +10 -0
  268. package/dist/types/src/internal/Query/pretty.d.ts.map +1 -0
  269. package/dist/types/src/internal/Ref/atoms.d.ts +10 -0
  270. package/dist/types/src/internal/Ref/atoms.d.ts.map +1 -0
  271. package/dist/types/src/internal/Ref/index.d.ts.map +1 -0
  272. package/dist/types/src/internal/Ref/ref-array.d.ts +21 -0
  273. package/dist/types/src/internal/Ref/ref-array.d.ts.map +1 -0
  274. package/dist/types/src/internal/{ref → Ref}/ref.d.ts +88 -32
  275. package/dist/types/src/internal/Ref/ref.d.ts.map +1 -0
  276. package/dist/types/src/internal/Ref/ref.test.d.ts.map +1 -0
  277. package/dist/types/src/internal/Ref/utils.d.ts +8 -0
  278. package/dist/types/src/internal/Ref/utils.d.ts.map +1 -0
  279. package/dist/types/src/internal/Type/compose.d.ts +7 -0
  280. package/dist/types/src/internal/Type/compose.d.ts.map +1 -0
  281. package/dist/types/src/internal/Type/compose.test.d.ts.map +1 -0
  282. package/dist/types/src/internal/Type/index.d.ts +3 -0
  283. package/dist/types/src/internal/Type/index.d.ts.map +1 -0
  284. package/dist/types/src/internal/{schema → Type}/manipulation.d.ts +0 -1
  285. package/dist/types/src/internal/Type/manipulation.d.ts.map +1 -0
  286. package/dist/types/src/internal/Type/type-schema.d.ts +52 -0
  287. package/dist/types/src/internal/Type/type-schema.d.ts.map +1 -0
  288. package/dist/types/src/internal/common/api/index.d.ts +11 -0
  289. package/dist/types/src/internal/common/api/index.d.ts.map +1 -0
  290. package/dist/types/src/internal/common/api/meta.d.ts +45 -0
  291. package/dist/types/src/internal/common/api/meta.d.ts.map +1 -0
  292. package/dist/types/src/internal/common/index.d.ts +4 -0
  293. package/dist/types/src/internal/common/index.d.ts.map +1 -0
  294. package/dist/types/src/internal/common/proxy/change-context.d.ts +55 -0
  295. package/dist/types/src/internal/common/proxy/change-context.d.ts.map +1 -0
  296. package/dist/types/src/internal/common/proxy/change.test.d.ts +2 -0
  297. package/dist/types/src/internal/common/proxy/change.test.d.ts.map +1 -0
  298. package/dist/types/src/internal/common/proxy/define-hidden-property.d.ts +5 -0
  299. package/dist/types/src/internal/common/proxy/define-hidden-property.d.ts.map +1 -0
  300. package/dist/types/src/internal/common/proxy/errors.d.ts +19 -0
  301. package/dist/types/src/internal/common/proxy/errors.d.ts.map +1 -0
  302. package/dist/types/src/internal/common/proxy/event-batch.d.ts +10 -0
  303. package/dist/types/src/internal/common/proxy/event-batch.d.ts.map +1 -0
  304. package/dist/types/src/internal/common/proxy/handler.test.d.ts.map +1 -0
  305. package/dist/types/src/internal/common/proxy/index.d.ts +14 -0
  306. package/dist/types/src/internal/common/proxy/index.d.ts.map +1 -0
  307. package/dist/types/src/internal/common/proxy/json-serializer.d.ts +6 -0
  308. package/dist/types/src/internal/common/proxy/json-serializer.d.ts.map +1 -0
  309. package/dist/types/src/internal/common/proxy/make-object.d.ts +20 -0
  310. package/dist/types/src/internal/common/proxy/make-object.d.ts.map +1 -0
  311. package/dist/types/src/internal/common/proxy/ownership.d.ts +57 -0
  312. package/dist/types/src/internal/common/proxy/ownership.d.ts.map +1 -0
  313. package/dist/types/src/internal/common/proxy/proxy-types.d.ts +18 -0
  314. package/dist/types/src/internal/common/proxy/proxy-types.d.ts.map +1 -0
  315. package/dist/types/src/internal/common/proxy/proxy-utils.d.ts +47 -0
  316. package/dist/types/src/internal/common/proxy/proxy-utils.d.ts.map +1 -0
  317. package/dist/types/src/internal/common/proxy/reactive-array.d.ts +8 -0
  318. package/dist/types/src/internal/common/proxy/reactive-array.d.ts.map +1 -0
  319. package/dist/types/src/internal/common/proxy/reactive.d.ts +39 -0
  320. package/dist/types/src/internal/common/proxy/reactive.d.ts.map +1 -0
  321. package/dist/types/src/internal/common/proxy/reactive.test.d.ts +2 -0
  322. package/dist/types/src/internal/common/proxy/reactive.test.d.ts.map +1 -0
  323. package/dist/types/src/internal/common/proxy/schema-validator.d.ts.map +1 -0
  324. package/dist/types/src/internal/common/proxy/schema.test.d.ts.map +1 -0
  325. package/dist/types/src/internal/common/proxy/symbols.d.ts +3 -0
  326. package/dist/types/src/internal/common/proxy/symbols.d.ts.map +1 -0
  327. package/dist/types/src/internal/common/proxy/typed-handler.d.ts +64 -0
  328. package/dist/types/src/internal/common/proxy/typed-handler.d.ts.map +1 -0
  329. package/dist/types/src/internal/common/proxy/typed-handler.test.d.ts.map +1 -0
  330. package/dist/types/src/internal/common/proxy/typed-object.test.d.ts.map +1 -0
  331. package/dist/types/src/internal/common/types/base.d.ts +27 -0
  332. package/dist/types/src/internal/common/types/base.d.ts.map +1 -0
  333. package/dist/types/src/internal/common/types/entity.d.ts +94 -0
  334. package/dist/types/src/internal/common/types/entity.d.ts.map +1 -0
  335. package/dist/types/src/internal/common/types/index.d.ts +7 -0
  336. package/dist/types/src/internal/common/types/index.d.ts.map +1 -0
  337. package/dist/types/src/internal/common/types/meta.d.ts +54 -0
  338. package/dist/types/src/internal/common/types/meta.d.ts.map +1 -0
  339. package/dist/types/src/internal/common/types/model-symbols.d.ts +65 -0
  340. package/dist/types/src/internal/common/types/model-symbols.d.ts.map +1 -0
  341. package/dist/types/src/internal/common/types/typename.d.ts +28 -0
  342. package/dist/types/src/internal/common/types/typename.d.ts.map +1 -0
  343. package/dist/types/src/internal/common/types/version.d.ts +15 -0
  344. package/dist/types/src/internal/common/types/version.d.ts.map +1 -0
  345. package/dist/types/src/internal/common/types/well-known-types.d.ts +11 -0
  346. package/dist/types/src/internal/common/types/well-known-types.d.ts.map +1 -0
  347. package/dist/types/src/internal/index.d.ts +10 -14
  348. package/dist/types/src/internal/index.d.ts.map +1 -1
  349. package/dist/types/src/{test → testing}/api.test.d.ts.map +1 -1
  350. package/dist/types/src/testing/index.d.ts +4 -3
  351. package/dist/types/src/testing/index.d.ts.map +1 -1
  352. package/dist/types/src/testing/registry.d.ts +9 -0
  353. package/dist/types/src/testing/registry.d.ts.map +1 -0
  354. package/dist/types/src/testing/test-data.d.ts +18 -0
  355. package/dist/types/src/testing/test-data.d.ts.map +1 -0
  356. package/dist/types/src/testing/test-schema.d.ts +298 -0
  357. package/dist/types/src/testing/test-schema.d.ts.map +1 -0
  358. package/dist/types/src/testing/util.d.ts +23 -0
  359. package/dist/types/src/testing/util.d.ts.map +1 -0
  360. package/dist/types/tsconfig.tsbuildinfo +1 -1
  361. package/package.json +119 -66
  362. package/src/Annotation.test.ts +439 -0
  363. package/src/Annotation.ts +202 -0
  364. package/src/Collection.ts +33 -0
  365. package/src/Database.ts +345 -0
  366. package/src/Dataset.ts +34 -0
  367. package/src/Entity.test.ts +132 -0
  368. package/src/Entity.ts +345 -0
  369. package/src/Err.ts +40 -0
  370. package/src/Feed.ts +352 -0
  371. package/src/Filter.test.ts +90 -0
  372. package/src/Filter.ts +484 -0
  373. package/src/Format.ts +5 -0
  374. package/src/Hypergraph.ts +84 -0
  375. package/src/Json.test.ts +175 -0
  376. package/src/Json.ts +103 -0
  377. package/src/JsonSchema.ts +26 -0
  378. package/src/Key.ts +4 -1
  379. package/src/Migration.ts +114 -0
  380. package/src/Obj.test.ts +641 -0
  381. package/src/Obj.ts +778 -281
  382. package/src/Order.ts +68 -0
  383. package/src/Query.test.ts +835 -0
  384. package/src/Query.ts +634 -0
  385. package/src/QueryResult.ts +132 -0
  386. package/src/Ref.ts +98 -10
  387. package/src/Registry.ts +155 -0
  388. package/src/Relation.test.ts +88 -0
  389. package/src/Relation.ts +503 -67
  390. package/src/Scope.ts +50 -0
  391. package/src/Tag.md +88 -0
  392. package/src/Tag.ts +53 -8
  393. package/src/Type.test.ts +257 -0
  394. package/src/Type.ts +643 -151
  395. package/src/View.ts +98 -0
  396. package/src/exemplars.test.ts +21 -0
  397. package/src/hierarchy.test.ts +33 -0
  398. package/src/index.ts +22 -6
  399. package/src/internal/Annotation/annotations.test.ts +165 -0
  400. package/src/internal/Annotation/annotations.ts +609 -0
  401. package/src/internal/Annotation/dictionary.ts +47 -0
  402. package/src/internal/Annotation/entity-dictionary.ts +74 -0
  403. package/src/internal/Annotation/index.ts +9 -0
  404. package/src/internal/Annotation/sorting.ts +51 -0
  405. package/src/internal/Annotation/util.ts +94 -0
  406. package/src/internal/Entity/api.ts +77 -0
  407. package/src/internal/Entity/entity.ts +277 -0
  408. package/src/internal/Entity/guard.ts +26 -0
  409. package/src/internal/Entity/index.ts +13 -0
  410. package/src/internal/Entity/model.ts +119 -0
  411. package/src/internal/Entity/object.ts +73 -0
  412. package/src/internal/Entity/relation.ts +188 -0
  413. package/src/internal/Entity/type-kind.ts +75 -0
  414. package/src/internal/Entity/type-uri.ts +92 -0
  415. package/src/internal/Entity/util.ts +33 -0
  416. package/src/internal/Entity/version.ts +96 -0
  417. package/src/internal/{formats → Format}/date.test.ts +1 -2
  418. package/src/internal/{formats → Format}/date.ts +5 -9
  419. package/src/internal/{formats → Format}/format.test.ts +27 -7
  420. package/src/internal/{formats → Format}/format.ts +8 -6
  421. package/src/internal/{formats → Format}/index.ts +2 -3
  422. package/src/internal/{formats → Format}/number.ts +5 -5
  423. package/src/internal/{formats → Format}/object.ts +23 -6
  424. package/src/internal/{formats → Format}/select.ts +6 -4
  425. package/src/internal/{formats → Format}/string.ts +14 -9
  426. package/src/internal/{formats → Format}/types.ts +54 -43
  427. package/src/internal/{json → JsonSchema}/annotations.ts +3 -3
  428. package/src/internal/{json-schema → JsonSchema}/index.ts +2 -0
  429. package/src/internal/{json-schema → JsonSchema}/json-schema-normalize.ts +4 -2
  430. package/src/internal/{json-schema → JsonSchema}/json-schema-type.ts +39 -39
  431. package/src/internal/{json → JsonSchema}/json-schema.test.ts +119 -182
  432. package/src/internal/{json → JsonSchema}/json-schema.ts +70 -42
  433. package/src/internal/Obj/atoms.ts +244 -0
  434. package/src/internal/Obj/clone.ts +53 -0
  435. package/src/internal/{object → Obj}/common.ts +3 -4
  436. package/src/internal/Obj/create-object.test.ts +116 -0
  437. package/src/internal/Obj/create-object.ts +140 -0
  438. package/src/internal/Obj/deleted.ts +19 -0
  439. package/src/internal/Obj/index.ts +14 -0
  440. package/src/internal/{object → Obj}/inspect.ts +7 -7
  441. package/src/internal/Obj/json-serializer.test.ts +199 -0
  442. package/src/internal/Obj/json-serializer.ts +278 -0
  443. package/src/internal/{object → Obj}/schema-validator.test.ts +3 -7
  444. package/src/internal/Obj/schema-validator.ts +6 -0
  445. package/src/internal/Obj/set-value.test.ts +258 -0
  446. package/src/internal/Obj/set-value.ts +158 -0
  447. package/src/internal/Obj/snapshot.ts +114 -0
  448. package/src/internal/Obj/typed-object.test.ts +32 -0
  449. package/src/internal/Obj/typed-object.ts +30 -0
  450. package/src/internal/{json → Query}/index.ts +1 -1
  451. package/src/internal/Query/pretty.ts +162 -0
  452. package/src/internal/Ref/atoms.ts +20 -0
  453. package/src/internal/{ref → Ref}/ref-array.ts +6 -7
  454. package/src/internal/Ref/ref.test.ts +91 -0
  455. package/src/internal/{ref → Ref}/ref.ts +230 -101
  456. package/src/internal/Ref/utils.ts +45 -0
  457. package/src/internal/{projection → Type}/compose.test.ts +9 -9
  458. package/src/internal/{projection → Type}/compose.ts +14 -9
  459. package/src/internal/Type/index.ts +6 -0
  460. package/src/internal/{schema → Type}/manipulation.ts +0 -25
  461. package/src/internal/Type/type-schema.ts +60 -0
  462. package/src/internal/common/README.md +102 -0
  463. package/src/internal/common/api/index.ts +15 -0
  464. package/src/internal/common/api/meta.ts +90 -0
  465. package/src/internal/{testing → common}/index.ts +2 -1
  466. package/src/internal/common/proxy/change-context.ts +138 -0
  467. package/src/internal/common/proxy/change.test.ts +527 -0
  468. package/src/internal/common/proxy/define-hidden-property.ts +14 -0
  469. package/src/internal/common/proxy/errors.ts +42 -0
  470. package/src/internal/common/proxy/event-batch.ts +44 -0
  471. package/src/internal/common/proxy/handler.test.ts +121 -0
  472. package/src/internal/common/proxy/index.ts +17 -0
  473. package/src/internal/common/proxy/json-serializer.ts +101 -0
  474. package/src/internal/common/proxy/make-object.ts +129 -0
  475. package/src/internal/common/proxy/ownership.ts +252 -0
  476. package/src/internal/common/proxy/proxy-types.ts +23 -0
  477. package/src/internal/common/proxy/proxy-utils.ts +150 -0
  478. package/src/internal/common/proxy/reactive-array.ts +71 -0
  479. package/src/internal/common/proxy/reactive.test.ts +54 -0
  480. package/src/internal/common/proxy/reactive.ts +77 -0
  481. package/src/internal/{object → common/proxy}/schema-validator.ts +6 -3
  482. package/src/internal/common/proxy/schema.test.ts +107 -0
  483. package/src/internal/common/proxy/symbols.ts +7 -0
  484. package/src/internal/common/proxy/typed-handler.test.ts +314 -0
  485. package/src/internal/common/proxy/typed-handler.ts +509 -0
  486. package/src/internal/common/proxy/typed-object.test.ts +103 -0
  487. package/src/internal/common/types/base.ts +43 -0
  488. package/src/internal/common/types/entity.ts +133 -0
  489. package/src/internal/common/types/index.ts +15 -0
  490. package/src/internal/common/types/meta.ts +109 -0
  491. package/src/internal/common/types/model-symbols.ts +89 -0
  492. package/src/internal/common/types/typename.ts +91 -0
  493. package/src/internal/common/types/version.ts +19 -0
  494. package/src/internal/common/types/well-known-types.ts +15 -0
  495. package/src/internal/index.ts +14 -17
  496. package/src/testing/api.test.ts +131 -0
  497. package/src/testing/index.ts +4 -3
  498. package/src/testing/registry.ts +44 -0
  499. package/src/testing/test-data.ts +189 -0
  500. package/src/testing/test-schema.ts +204 -0
  501. package/src/testing/util.ts +88 -0
  502. package/dist/lib/browser/chunk-BIDAASFK.mjs +0 -3727
  503. package/dist/lib/browser/chunk-BIDAASFK.mjs.map +0 -7
  504. package/dist/lib/browser/chunk-ZDLCWGEW.mjs +0 -410
  505. package/dist/lib/browser/chunk-ZDLCWGEW.mjs.map +0 -7
  506. package/dist/lib/browser/chunk-ZFRJKT4A.mjs +0 -585
  507. package/dist/lib/browser/chunk-ZFRJKT4A.mjs.map +0 -7
  508. package/dist/lib/browser/index.mjs +0 -35
  509. package/dist/lib/browser/internal/index.mjs +0 -336
  510. package/dist/lib/browser/meta.json +0 -1
  511. package/dist/lib/browser/query/index.mjs +0 -13
  512. package/dist/lib/browser/testing/index.mjs +0 -267
  513. package/dist/lib/browser/testing/index.mjs.map +0 -7
  514. package/dist/lib/node-esm/chunk-3SVRRCUU.mjs +0 -3727
  515. package/dist/lib/node-esm/chunk-3SVRRCUU.mjs.map +0 -7
  516. package/dist/lib/node-esm/chunk-CGDHRZWH.mjs +0 -585
  517. package/dist/lib/node-esm/chunk-CGDHRZWH.mjs.map +0 -7
  518. package/dist/lib/node-esm/chunk-HWS6VBQC.mjs +0 -410
  519. package/dist/lib/node-esm/chunk-HWS6VBQC.mjs.map +0 -7
  520. package/dist/lib/node-esm/index.mjs +0 -35
  521. package/dist/lib/node-esm/internal/index.mjs +0 -336
  522. package/dist/lib/node-esm/meta.json +0 -1
  523. package/dist/lib/node-esm/query/index.mjs +0 -13
  524. package/dist/lib/node-esm/testing/index.mjs +0 -267
  525. package/dist/lib/node-esm/testing/index.mjs.map +0 -7
  526. package/dist/types/src/errors.d.ts +0 -68
  527. package/dist/types/src/errors.d.ts.map +0 -1
  528. package/dist/types/src/internal/ast/annotation-helper.d.ts +0 -8
  529. package/dist/types/src/internal/ast/annotation-helper.d.ts.map +0 -1
  530. package/dist/types/src/internal/ast/annotations.d.ts +0 -131
  531. package/dist/types/src/internal/ast/annotations.d.ts.map +0 -1
  532. package/dist/types/src/internal/ast/annotations.test.d.ts.map +0 -1
  533. package/dist/types/src/internal/ast/entity-kind.d.ts +0 -10
  534. package/dist/types/src/internal/ast/entity-kind.d.ts.map +0 -1
  535. package/dist/types/src/internal/ast/index.d.ts +0 -5
  536. package/dist/types/src/internal/ast/index.d.ts.map +0 -1
  537. package/dist/types/src/internal/ast/types.d.ts +0 -6
  538. package/dist/types/src/internal/ast/types.d.ts.map +0 -1
  539. package/dist/types/src/internal/formats/date.d.ts.map +0 -1
  540. package/dist/types/src/internal/formats/date.test.d.ts.map +0 -1
  541. package/dist/types/src/internal/formats/format.d.ts.map +0 -1
  542. package/dist/types/src/internal/formats/format.test.d.ts.map +0 -1
  543. package/dist/types/src/internal/formats/index.d.ts.map +0 -1
  544. package/dist/types/src/internal/formats/number.d.ts.map +0 -1
  545. package/dist/types/src/internal/formats/object.d.ts.map +0 -1
  546. package/dist/types/src/internal/formats/select.d.ts.map +0 -1
  547. package/dist/types/src/internal/formats/string.d.ts.map +0 -1
  548. package/dist/types/src/internal/formats/types.d.ts.map +0 -1
  549. package/dist/types/src/internal/json/annotations.d.ts.map +0 -1
  550. package/dist/types/src/internal/json/effect-schema.test.d.ts.map +0 -1
  551. package/dist/types/src/internal/json/index.d.ts +0 -2
  552. package/dist/types/src/internal/json/index.d.ts.map +0 -1
  553. package/dist/types/src/internal/json/json-schema.d.ts.map +0 -1
  554. package/dist/types/src/internal/json/json-schema.test.d.ts.map +0 -1
  555. package/dist/types/src/internal/json-schema/index.d.ts +0 -3
  556. package/dist/types/src/internal/json-schema/index.d.ts.map +0 -1
  557. package/dist/types/src/internal/json-schema/json-schema-normalize.d.ts.map +0 -1
  558. package/dist/types/src/internal/json-schema/json-schema-type.d.ts.map +0 -1
  559. package/dist/types/src/internal/object/accessors.d.ts +0 -37
  560. package/dist/types/src/internal/object/accessors.d.ts.map +0 -1
  561. package/dist/types/src/internal/object/common.d.ts.map +0 -1
  562. package/dist/types/src/internal/object/create.d.ts.map +0 -1
  563. package/dist/types/src/internal/object/create.test.d.ts +0 -2
  564. package/dist/types/src/internal/object/create.test.d.ts.map +0 -1
  565. package/dist/types/src/internal/object/deleted.d.ts +0 -6
  566. package/dist/types/src/internal/object/deleted.d.ts.map +0 -1
  567. package/dist/types/src/internal/object/entity.d.ts +0 -33
  568. package/dist/types/src/internal/object/entity.d.ts.map +0 -1
  569. package/dist/types/src/internal/object/expando.d.ts +0 -14
  570. package/dist/types/src/internal/object/expando.d.ts.map +0 -1
  571. package/dist/types/src/internal/object/ids.d.ts +0 -6
  572. package/dist/types/src/internal/object/ids.d.ts.map +0 -1
  573. package/dist/types/src/internal/object/index.d.ts +0 -16
  574. package/dist/types/src/internal/object/index.d.ts.map +0 -1
  575. package/dist/types/src/internal/object/inspect.d.ts.map +0 -1
  576. package/dist/types/src/internal/object/json-serializer.d.ts +0 -32
  577. package/dist/types/src/internal/object/json-serializer.d.ts.map +0 -1
  578. package/dist/types/src/internal/object/json-serializer.test.d.ts.map +0 -1
  579. package/dist/types/src/internal/object/meta.d.ts +0 -31
  580. package/dist/types/src/internal/object/meta.d.ts.map +0 -1
  581. package/dist/types/src/internal/object/model.d.ts +0 -117
  582. package/dist/types/src/internal/object/model.d.ts.map +0 -1
  583. package/dist/types/src/internal/object/relation.d.ts +0 -17
  584. package/dist/types/src/internal/object/relation.d.ts.map +0 -1
  585. package/dist/types/src/internal/object/schema-validator.d.ts.map +0 -1
  586. package/dist/types/src/internal/object/schema-validator.test.d.ts.map +0 -1
  587. package/dist/types/src/internal/object/typed-object.d.ts +0 -31
  588. package/dist/types/src/internal/object/typed-object.d.ts.map +0 -1
  589. package/dist/types/src/internal/object/typed-object.test.d.ts.map +0 -1
  590. package/dist/types/src/internal/object/typename.d.ts +0 -15
  591. package/dist/types/src/internal/object/typename.d.ts.map +0 -1
  592. package/dist/types/src/internal/object/version.d.ts +0 -14
  593. package/dist/types/src/internal/object/version.d.ts.map +0 -1
  594. package/dist/types/src/internal/projection/compose.d.ts +0 -6
  595. package/dist/types/src/internal/projection/compose.d.ts.map +0 -1
  596. package/dist/types/src/internal/projection/compose.test.d.ts.map +0 -1
  597. package/dist/types/src/internal/projection/index.d.ts +0 -2
  598. package/dist/types/src/internal/projection/index.d.ts.map +0 -1
  599. package/dist/types/src/internal/proxy/handler.test.d.ts.map +0 -1
  600. package/dist/types/src/internal/proxy/reactive-object.d.ts +0 -15
  601. package/dist/types/src/internal/proxy/reactive-object.d.ts.map +0 -1
  602. package/dist/types/src/internal/proxy/schema.test.d.ts.map +0 -1
  603. package/dist/types/src/internal/proxy/typed-handler.d.ts +0 -44
  604. package/dist/types/src/internal/proxy/typed-handler.d.ts.map +0 -1
  605. package/dist/types/src/internal/proxy/typed-handler.test.d.ts.map +0 -1
  606. package/dist/types/src/internal/proxy/typed-object.test.d.ts.map +0 -1
  607. package/dist/types/src/internal/query/index.d.ts +0 -2
  608. package/dist/types/src/internal/query/index.d.ts.map +0 -1
  609. package/dist/types/src/internal/query/query.d.ts +0 -17
  610. package/dist/types/src/internal/query/query.d.ts.map +0 -1
  611. package/dist/types/src/internal/ref/index.d.ts.map +0 -1
  612. package/dist/types/src/internal/ref/ref-array.d.ts +0 -21
  613. package/dist/types/src/internal/ref/ref-array.d.ts.map +0 -1
  614. package/dist/types/src/internal/ref/ref.d.ts.map +0 -1
  615. package/dist/types/src/internal/ref/ref.test.d.ts.map +0 -1
  616. package/dist/types/src/internal/schema/echo-schema.d.ts +0 -168
  617. package/dist/types/src/internal/schema/echo-schema.d.ts.map +0 -1
  618. package/dist/types/src/internal/schema/index.d.ts +0 -7
  619. package/dist/types/src/internal/schema/index.d.ts.map +0 -1
  620. package/dist/types/src/internal/schema/manipulation.d.ts.map +0 -1
  621. package/dist/types/src/internal/schema/runtime-schema-registry.d.ts +0 -18
  622. package/dist/types/src/internal/schema/runtime-schema-registry.d.ts.map +0 -1
  623. package/dist/types/src/internal/schema/snapshot.d.ts +0 -6
  624. package/dist/types/src/internal/schema/snapshot.d.ts.map +0 -1
  625. package/dist/types/src/internal/schema/stored-schema.d.ts +0 -13
  626. package/dist/types/src/internal/schema/stored-schema.d.ts.map +0 -1
  627. package/dist/types/src/internal/testing/index.d.ts +0 -3
  628. package/dist/types/src/internal/testing/index.d.ts.map +0 -1
  629. package/dist/types/src/internal/testing/types.d.ts +0 -381
  630. package/dist/types/src/internal/testing/types.d.ts.map +0 -1
  631. package/dist/types/src/internal/testing/utils.d.ts +0 -10
  632. package/dist/types/src/internal/testing/utils.d.ts.map +0 -1
  633. package/dist/types/src/internal/types/index.d.ts +0 -3
  634. package/dist/types/src/internal/types/index.d.ts.map +0 -1
  635. package/dist/types/src/internal/types/types.d.ts +0 -79
  636. package/dist/types/src/internal/types/types.d.ts.map +0 -1
  637. package/dist/types/src/internal/types/types.test.d.ts +0 -2
  638. package/dist/types/src/internal/types/types.test.d.ts.map +0 -1
  639. package/dist/types/src/internal/types/util.d.ts +0 -5
  640. package/dist/types/src/internal/types/util.d.ts.map +0 -1
  641. package/dist/types/src/query/index.d.ts +0 -2
  642. package/dist/types/src/query/index.d.ts.map +0 -1
  643. package/dist/types/src/query/query.d.ts +0 -248
  644. package/dist/types/src/query/query.d.ts.map +0 -1
  645. package/dist/types/src/query/query.test.d.ts +0 -2
  646. package/dist/types/src/query/query.test.d.ts.map +0 -1
  647. package/dist/types/src/testing/echo-schema.d.ts +0 -7
  648. package/dist/types/src/testing/echo-schema.d.ts.map +0 -1
  649. package/dist/types/src/testing/types.d.ts +0 -228
  650. package/dist/types/src/testing/types.d.ts.map +0 -1
  651. package/src/errors.ts +0 -18
  652. package/src/internal/ast/annotation-helper.ts +0 -22
  653. package/src/internal/ast/annotations.test.ts +0 -98
  654. package/src/internal/ast/annotations.ts +0 -226
  655. package/src/internal/ast/entity-kind.ts +0 -15
  656. package/src/internal/ast/index.ts +0 -8
  657. package/src/internal/ast/types.ts +0 -17
  658. package/src/internal/object/accessors.ts +0 -153
  659. package/src/internal/object/create.test.ts +0 -118
  660. package/src/internal/object/create.ts +0 -96
  661. package/src/internal/object/deleted.ts +0 -19
  662. package/src/internal/object/entity.ts +0 -248
  663. package/src/internal/object/expando.ts +0 -21
  664. package/src/internal/object/ids.ts +0 -12
  665. package/src/internal/object/index.ts +0 -19
  666. package/src/internal/object/json-serializer.test.ts +0 -99
  667. package/src/internal/object/json-serializer.ts +0 -225
  668. package/src/internal/object/meta.ts +0 -61
  669. package/src/internal/object/model.ts +0 -170
  670. package/src/internal/object/relation.ts +0 -24
  671. package/src/internal/object/typed-object.test.ts +0 -34
  672. package/src/internal/object/typed-object.ts +0 -88
  673. package/src/internal/object/typename.ts +0 -61
  674. package/src/internal/object/version.ts +0 -22
  675. package/src/internal/projection/index.ts +0 -5
  676. package/src/internal/proxy/handler.test.ts +0 -163
  677. package/src/internal/proxy/reactive-object.ts +0 -108
  678. package/src/internal/proxy/schema.test.ts +0 -136
  679. package/src/internal/proxy/typed-handler.test.ts +0 -102
  680. package/src/internal/proxy/typed-handler.ts +0 -228
  681. package/src/internal/proxy/typed-object.test.ts +0 -100
  682. package/src/internal/query/index.ts +0 -5
  683. package/src/internal/query/query.ts +0 -23
  684. package/src/internal/ref/ref.test.ts +0 -100
  685. package/src/internal/schema/echo-schema.ts +0 -383
  686. package/src/internal/schema/index.ts +0 -10
  687. package/src/internal/schema/runtime-schema-registry.ts +0 -78
  688. package/src/internal/schema/snapshot.ts +0 -25
  689. package/src/internal/schema/stored-schema.ts +0 -26
  690. package/src/internal/testing/types.ts +0 -144
  691. package/src/internal/testing/utils.ts +0 -54
  692. package/src/internal/types/index.ts +0 -6
  693. package/src/internal/types/types.test.ts +0 -48
  694. package/src/internal/types/types.ts +0 -176
  695. package/src/internal/types/util.ts +0 -9
  696. package/src/query/index.ts +0 -6
  697. package/src/query/query.test.ts +0 -401
  698. package/src/query/query.ts +0 -789
  699. package/src/test/api.test.ts +0 -180
  700. package/src/testing/echo-schema.ts +0 -39
  701. package/src/testing/types.ts +0 -108
  702. /package/dist/lib/{browser/index.mjs.map → neutral/Annotation.mjs.map} +0 -0
  703. /package/dist/lib/{browser/internal/index.mjs.map → neutral/Database.mjs.map} +0 -0
  704. /package/dist/lib/{browser/query/index.mjs.map → neutral/Entity.mjs.map} +0 -0
  705. /package/dist/lib/{node-esm/index.mjs.map → neutral/Err.mjs.map} +0 -0
  706. /package/dist/lib/{node-esm/internal/index.mjs.map → neutral/Feed.mjs.map} +0 -0
  707. /package/dist/lib/{node-esm/query/index.mjs.map → neutral/Filter.mjs.map} +0 -0
  708. /package/dist/types/src/internal/{ast → Annotation}/annotations.test.d.ts +0 -0
  709. /package/dist/types/src/internal/{formats → Format}/date.d.ts +0 -0
  710. /package/dist/types/src/internal/{formats → Format}/date.test.d.ts +0 -0
  711. /package/dist/types/src/internal/{formats → Format}/format.test.d.ts +0 -0
  712. /package/dist/types/src/internal/{formats → Format}/number.d.ts +0 -0
  713. /package/dist/types/src/internal/{json → JsonSchema}/effect-schema.test.d.ts +0 -0
  714. /package/dist/types/src/internal/{json-schema → JsonSchema}/json-schema-normalize.d.ts +0 -0
  715. /package/dist/types/src/internal/{json → JsonSchema}/json-schema.test.d.ts +0 -0
  716. /package/dist/types/src/internal/{object → Obj}/common.d.ts +0 -0
  717. /package/dist/types/src/internal/{object → Obj}/inspect.d.ts +0 -0
  718. /package/dist/types/src/internal/{object → Obj}/json-serializer.test.d.ts +0 -0
  719. /package/dist/types/src/internal/{object → Obj}/schema-validator.test.d.ts +0 -0
  720. /package/dist/types/src/internal/{object → Obj}/typed-object.test.d.ts +0 -0
  721. /package/dist/types/src/internal/{ref → Ref}/index.d.ts +0 -0
  722. /package/dist/types/src/internal/{ref → Ref}/ref.test.d.ts +0 -0
  723. /package/dist/types/src/internal/{projection → Type}/compose.test.d.ts +0 -0
  724. /package/dist/types/src/internal/{proxy → common/proxy}/handler.test.d.ts +0 -0
  725. /package/dist/types/src/internal/{object → common/proxy}/schema-validator.d.ts +0 -0
  726. /package/dist/types/src/internal/{proxy → common/proxy}/schema.test.d.ts +0 -0
  727. /package/dist/types/src/internal/{proxy → common/proxy}/typed-handler.test.d.ts +0 -0
  728. /package/dist/types/src/internal/{proxy → common/proxy}/typed-object.test.d.ts +0 -0
  729. /package/dist/types/src/{test → testing}/api.test.d.ts +0 -0
  730. /package/src/internal/{json → JsonSchema}/effect-schema.test.ts +0 -0
  731. /package/src/internal/{ref → Ref}/index.ts +0 -0
@@ -0,0 +1,609 @@
1
+ //
2
+ // Copyright 2024 DXOS.org
3
+ //
4
+
5
+ import * as Function from 'effect/Function';
6
+ import * as Option from 'effect/Option';
7
+ import * as Schema from 'effect/Schema';
8
+ import * as SchemaAST from 'effect/SchemaAST';
9
+
10
+ import { SchemaEx } from '@dxos/effect';
11
+ import { assertArgument, invariant } from '@dxos/invariant';
12
+ import { DXN, URI } from '@dxos/keys';
13
+ import { type Primitive } from '@dxos/util';
14
+
15
+ import type * as Annotation from '../../Annotation';
16
+ import { type Mutable } from '../common/proxy';
17
+ import { type AnyProperties, EntityKind, TypeId, getSchema } from '../common/types';
18
+ import { createAnnotationHelper } from './util';
19
+
20
+ const ANNOTATION_TYPE_ID: Annotation.TypeId = '~@dxos/echo/Annotation' as const;
21
+
22
+ /**
23
+ * @internal
24
+ */
25
+ export const FIELD_PATH_ANNOTATION = 'path';
26
+
27
+ /**
28
+ * Sets the path for the field.
29
+ * @param path Data source path in the json path format. This is the field path in the source object.
30
+ */
31
+ // TODO(burdon): Field, vs. path vs. property.
32
+ export const FieldPath = (path: string) => PropertyMeta(FIELD_PATH_ANNOTATION, path);
33
+
34
+ //
35
+ // Type
36
+ //
37
+
38
+ /**
39
+ * ECHO identifier (for a stored schema).
40
+ * Must be an `echo:` URI.
41
+ */
42
+ export const TypeIdentifierAnnotationId = Symbol.for('@dxos/schema/annotation/TypeIdentifier');
43
+
44
+ export const getTypeIdentifierAnnotation = (schema: Schema.Schema.All) =>
45
+ Function.flow(
46
+ SchemaAST.getAnnotation<string>(TypeIdentifierAnnotationId),
47
+ Option.getOrElse(() => undefined),
48
+ )(schema.ast);
49
+
50
+ /**
51
+ * @returns The schema's type identifier URI — whichever URI fits.
52
+ *
53
+ * - Stored (dynamic) schemas: the schema-as-object's EID, so loaded objects ride
54
+ * along with their schema as a strong dependency.
55
+ * - Non-stored (static) schemas: the typename DXN built from `TypeAnnotation`.
56
+ *
57
+ * This URI is what gets written to an object's `system.type`; queries that filter by
58
+ * type also use it (see `Filter.type` / `getTypeURIFromSpecifier`), so both sides
59
+ * stay symmetric without per-schema branching.
60
+ */
61
+ export const getSchemaURI = (schema: Schema.Schema.All): URI.URI | undefined => {
62
+ assertArgument(Schema.isSchema(schema), 'schema', 'invalid schema');
63
+ const id = getTypeIdentifierAnnotation(schema);
64
+ if (id) {
65
+ return URI.make(id);
66
+ }
67
+ const objectAnnotation = getTypeAnnotation(schema);
68
+ if (objectAnnotation) {
69
+ return DXN.make(objectAnnotation.typename, objectAnnotation.version);
70
+ }
71
+ return undefined;
72
+ };
73
+
74
+ //
75
+ // TypeAnnotation
76
+ //
77
+
78
+ /**
79
+ * Fully qualified globally unique typename.
80
+ * Example: `org.dxos.type.message`
81
+ */
82
+ // TODO(wittjosiah): Factor out to DXN spec.
83
+ export const TypenameSchema = Schema.String.pipe(
84
+ Schema.pattern(
85
+ /^[a-zA-Z]([a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(\.[a-zA-Z0-9]([a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)+(\.[a-zA-Z]([a-zA-Z0-9]{0,62})?)$/,
86
+ ),
87
+ ).annotations({
88
+ description: 'Fully qualified globally unique typename in reverse-DNS form.',
89
+ example: 'org.dxos.type.message',
90
+ });
91
+
92
+ /**
93
+ * Semantic version format: `major.minor.patch`
94
+ * Example: `1.0.0`
95
+ */
96
+ export const VersionSchema = Schema.String.pipe(Schema.pattern(/^\d+.\d+.\d+$/)).annotations({
97
+ description: 'Semantic version format: `major.minor.patch`',
98
+ example: '1.0.0',
99
+ });
100
+
101
+ export const TypeMeta = Schema.Struct({
102
+ typename: TypenameSchema,
103
+ version: VersionSchema,
104
+ });
105
+
106
+ export interface TypeMeta extends Schema.Schema.Type<typeof TypeMeta> {}
107
+
108
+ /**
109
+ * Entity type.
110
+ */
111
+ export const TypeAnnotationId = Symbol.for('@dxos/schema/annotation/Type');
112
+
113
+ /**
114
+ * Payload stored under {@link TypeAnnotationId}.
115
+ */
116
+ export const TypeAnnotation = Schema.extend(
117
+ TypeMeta,
118
+ Schema.Struct({
119
+ kind: Schema.Enums(EntityKind),
120
+
121
+ /**
122
+ * If this is a relation, the schema of the source object.
123
+ * Must be present if entity kind is {@link EntityKind.Relation}.
124
+ */
125
+ sourceSchema: Schema.optional(DXN.Schema),
126
+
127
+ /**
128
+ * If this is a relation, the schema of the target object.
129
+ * Must be present if entity kind is {@link EntityKind.Relation}.
130
+ */
131
+ targetSchema: Schema.optional(DXN.Schema),
132
+ }),
133
+ );
134
+
135
+ export interface TypeAnnotation extends Schema.Schema.Type<typeof TypeAnnotation> {}
136
+
137
+ /**
138
+ * @returns {@link TypeAnnotation} from a schema.
139
+ * Schema must have been created with {@link TypedObject} or {@link TypedLink} or manually assigned an appropriate annotation.
140
+ */
141
+ export const getTypeAnnotation = (schema: Schema.Schema.All): TypeAnnotation | undefined => {
142
+ assertArgument(schema != null && schema.ast != null, 'schema', 'invalid schema');
143
+ return Function.flow(
144
+ SchemaAST.getAnnotation<TypeAnnotation>(TypeAnnotationId),
145
+ Option.getOrElse(() => undefined),
146
+ )(schema.ast);
147
+ };
148
+
149
+ /**
150
+ * @returns {@link EntityKind} from a schema.
151
+ */
152
+ export const getEntityKind = (schema: Schema.Schema.All): EntityKind | undefined => getTypeAnnotation(schema)?.kind;
153
+
154
+ /**
155
+ * @internal
156
+ * @returns Schema typename (without dxn: prefix or version number).
157
+ */
158
+ export const getSchemaTypename = (schema: Schema.Schema.All): string | undefined => getTypeAnnotation(schema)?.typename;
159
+
160
+ /**
161
+ * @internal
162
+ * @returns Schema version in semver format.
163
+ */
164
+ export const getSchemaVersion = (schema: Schema.Schema.All): string | undefined => getTypeAnnotation(schema)?.version;
165
+
166
+ /**
167
+ * Gets the typename of the object without the version.
168
+ * Returns only the name portion, not the DXN.
169
+ * @example "org.example.type.contact"
170
+ *
171
+ * @internal (use Obj.getTypename)
172
+ */
173
+ export const getTypename = (obj: AnyProperties): string | undefined => {
174
+ const schema = getSchema(obj);
175
+ if (schema != null) {
176
+ // Try to extract typename from DXN.
177
+ return getSchemaTypename(schema);
178
+ } else {
179
+ // `obj` may be an arbitrary value (e.g. from `isInstanceOf`); read TypeId
180
+ // directly so we return undefined for non-entities instead of throwing.
181
+ const type = (obj as any)?.[TypeId];
182
+ // Parse the URI string to extract typename.
183
+ if (DXN.isDXN(type)) {
184
+ const parsed = DXN.tryMake(type);
185
+ return parsed && DXN.getName(parsed);
186
+ }
187
+ return undefined;
188
+ }
189
+ };
190
+
191
+ /**
192
+ * @internal (use Type.setTypename)
193
+ */
194
+ // TODO(dmaretskyi): Rename setTypeDXN.
195
+ export const setTypename = (obj: any, typename: URI.URI): void => {
196
+ assertArgument(typeof typename === 'string', 'typename', 'Invalid type.');
197
+ Object.defineProperty(obj, TypeId, {
198
+ value: typename,
199
+ writable: false,
200
+ enumerable: false,
201
+ configurable: false,
202
+ });
203
+ };
204
+
205
+ /**
206
+ * @returns Object type URI — either a typename {@link DXN} or an `echo:` reference to a stored Schema object.
207
+ * @returns undefined if the object has no registered type URI (e.g. unresolved query result).
208
+ * @example `dxn:com.example.type.person:1.0.0`
209
+ * @example `echo:/01KKKG2FHWCMTR0BY00GJSVT1X` (stored schema)
210
+ *
211
+ * @internal (use Obj.getTypeURI)
212
+ */
213
+ export const getTypeURI = (obj: AnyProperties): URI.URI | undefined => {
214
+ if (obj == null) {
215
+ return undefined;
216
+ }
217
+ const type = (obj as any)[TypeId];
218
+ if (type == null) {
219
+ return undefined;
220
+ }
221
+ invariant(URI.isURI(type), 'Invalid object.');
222
+ return type;
223
+ };
224
+
225
+ //
226
+ // PropertyMeta
227
+ //
228
+
229
+ /**
230
+ * PropertyMeta (metadata for dynamic schema properties).
231
+ * For user-defined annotations.
232
+ */
233
+ export const PropertyMetaAnnotationId = Symbol.for('@dxos/schema/annotation/PropertyMeta');
234
+
235
+ export type PropertyMetaValue = Primitive | Record<string, Primitive> | Primitive[];
236
+
237
+ export type PropertyMetaAnnotation = {
238
+ [name: string]: PropertyMetaValue;
239
+ };
240
+
241
+ // TODO(wittjosiah): Align with other annotations.
242
+ // TODO(wittjosiah): Why is this separate from FormatAnnotation?
243
+ /**
244
+ * Apply property-level metadata to an Effect schema. Only accepts
245
+ * `Schema.Schema.Any` — apply BEFORE wrapping the schema with
246
+ * `Type.makeObject` / `Type.makeRelation`. To read property meta off a
247
+ * `Type.Type` entity, unwrap it first with `Type.getSchema(entity)`.
248
+ */
249
+ export const PropertyMeta = (name: string, value: PropertyMetaValue) => {
250
+ return <A, I, R>(self: Schema.Schema<A, I, R>): Schema.Schema<A, I, R> => {
251
+ const existingMeta = self.ast.annotations[PropertyMetaAnnotationId] as PropertyMetaAnnotation;
252
+ return self.annotations({
253
+ [PropertyMetaAnnotationId]: {
254
+ ...existingMeta,
255
+ [name]: value,
256
+ },
257
+ });
258
+ };
259
+ };
260
+
261
+ export const getPropertyMetaAnnotation = <T>(prop: SchemaAST.PropertySignature, name: string) =>
262
+ Function.pipe(
263
+ SchemaAST.getAnnotation<PropertyMetaAnnotation>(PropertyMetaAnnotationId)(prop.type),
264
+ Option.map((meta) => meta[name] as T),
265
+ Option.getOrElse(() => undefined),
266
+ );
267
+
268
+ //
269
+ // Reference
270
+ //
271
+
272
+ /**
273
+ * Schema reference.
274
+ */
275
+ export const ReferenceAnnotationId = Symbol.for('@dxos/schema/annotation/Reference');
276
+ export type ReferenceAnnotationValue = TypeAnnotation;
277
+ export const ReferenceAnnotation = createAnnotationHelper<ReferenceAnnotationValue>(ReferenceAnnotationId);
278
+
279
+ /**
280
+ * SchemaMeta.
281
+ */
282
+ export const SchemaMetaSymbol = Symbol.for('@dxos/schema/SchemaMeta');
283
+ export type SchemaMeta = TypeMeta & { id: string };
284
+
285
+ /**
286
+ * Identifies a schema as hidden from user-facing surfaces (like dotfiles — visible only via an advanced setting).
287
+ */
288
+ export const HiddenAnnotationId = Symbol.for('@dxos/schema/annotation/Hidden');
289
+ export const HiddenAnnotation = createAnnotationHelper<boolean>(HiddenAnnotationId);
290
+
291
+ /**
292
+ * Identifies label property or JSON path expression.
293
+ * Either a string or an array of strings representing field accessors each matched in priority order.
294
+ */
295
+ export const LabelAnnotationId = Symbol.for('@dxos/schema/annotation/Label');
296
+ export const LabelAnnotation = createAnnotationHelper<string[]>(LabelAnnotationId);
297
+
298
+ /**
299
+ * Returns the label for a given object based on {@link LabelAnnotationId}.
300
+ * Lower-level version that requires explicit schema parameter.
301
+ * Skips empty strings and whitespace-only strings, continuing to the next field.
302
+ */
303
+ // TODO(burdon): Convert to SchemaEx.JsonPath?
304
+ export const getLabelWithSchema = <S extends Schema.Schema.Any>(
305
+ schema: S,
306
+ object: Schema.Schema.Type<S>,
307
+ ): string | undefined => {
308
+ const annotation = LabelAnnotation.get(schema).pipe(Option.getOrElse(() => ['name']));
309
+ for (const accessor of annotation) {
310
+ assertArgument(
311
+ typeof accessor === 'string',
312
+ 'accessor',
313
+ 'Label annotation must be a string or an array of strings',
314
+ );
315
+ const value = SchemaEx.getField(object, accessor as SchemaEx.JsonPath);
316
+ switch (typeof value) {
317
+ case 'string': {
318
+ const trimmed = value.trim();
319
+ if (trimmed.length > 0) {
320
+ return value;
321
+ }
322
+ continue;
323
+ }
324
+ case 'number':
325
+ case 'boolean':
326
+ case 'bigint':
327
+ case 'symbol':
328
+ return value.toString();
329
+ case 'undefined':
330
+ case 'object':
331
+ case 'function':
332
+ continue;
333
+ }
334
+ }
335
+
336
+ return undefined;
337
+ };
338
+
339
+ /**
340
+ * Sets the label for a given object based on {@link LabelAnnotationId}.
341
+ * Lower-level version that requires explicit schema parameter.
342
+ */
343
+ export const setLabelWithSchema = <S extends Schema.Schema.Any>(
344
+ schema: S,
345
+ object: Schema.Schema.Type<S>,
346
+ label: string,
347
+ ) => {
348
+ const annotation = LabelAnnotation.get(schema).pipe(
349
+ Option.map((field) => field[0]),
350
+ Option.getOrElse(() => 'name'),
351
+ );
352
+ object[annotation] = label;
353
+ };
354
+
355
+ /**
356
+ * Identifies description property or JSON path expression.
357
+ * A string representing field accessor.
358
+ */
359
+ export const DescriptionAnnotationId = Symbol.for('@dxos/schema/annotation/Description');
360
+ export const DescriptionAnnotation = createAnnotationHelper<string>(DescriptionAnnotationId);
361
+
362
+ /**
363
+ * Returns the description for a given object based on {@link DescriptionAnnotationId}.
364
+ * Lower-level version that requires explicit schema parameter.
365
+ */
366
+ // TODO(burdon): Convert to SchemaEx.JsonPath?
367
+ export const getDescriptionWithSchema = <S extends Schema.Schema.Any>(
368
+ schema: S,
369
+ object: Schema.Schema.Type<S>,
370
+ ): string | undefined => {
371
+ const accessor = DescriptionAnnotation.get(schema).pipe(Option.getOrElse(() => 'description'));
372
+ assertArgument(typeof accessor === 'string', 'accessor', 'Description annotation must be a string');
373
+ const value = SchemaEx.getField(object, accessor as SchemaEx.JsonPath);
374
+ switch (typeof value) {
375
+ case 'string':
376
+ case 'number':
377
+ case 'boolean':
378
+ case 'bigint':
379
+ case 'symbol':
380
+ return value.toString();
381
+ case 'undefined':
382
+ case 'object':
383
+ case 'function':
384
+ default:
385
+ return undefined;
386
+ }
387
+ };
388
+
389
+ /**
390
+ * Sets the description for a given object based on {@link DescriptionAnnotationId}.
391
+ * Lower-level version that requires explicit schema parameter.
392
+ */
393
+ export const setDescriptionWithSchema = <S extends Schema.Schema.Any>(
394
+ schema: S,
395
+ object: Schema.Schema.Type<S>,
396
+ description: string,
397
+ ) => {
398
+ const accessor = DescriptionAnnotation.get(schema).pipe(Option.getOrElse(() => 'description'));
399
+ object[accessor] = description;
400
+ };
401
+
402
+ /**
403
+ * Identifies if a property should be included in a form or not.
404
+ * By default, all properties are included in forms, so this is opt-out.
405
+ */
406
+ export const FormInputAnnotationId = Symbol.for('@dxos/schema/annotation/FormInput');
407
+ export const FormInputAnnotation = createAnnotationHelper<boolean>(FormInputAnnotationId);
408
+
409
+ /**
410
+ * When set on a `Ref` property, the form renders the referenced object's own
411
+ * fields inline (a nested form bound to the target) instead of a picker.
412
+ */
413
+ export const FormInlineAnnotationId = Symbol.for('@dxos/schema/annotation/FormInline');
414
+ export const FormInlineAnnotation = createAnnotationHelper<boolean>(FormInlineAnnotationId);
415
+
416
+ /**
417
+ * Default field to be used on referenced schema to lookup the value.
418
+ */
419
+ export const FieldLookupAnnotationId = Symbol.for('@dxos/schema/annotation/FieldLookup');
420
+
421
+ /**
422
+ * Generate test data.
423
+ */
424
+ export const GeneratorAnnotationId = Symbol.for('@dxos/schema/annotation/Generator');
425
+
426
+ export type GeneratorAnnotationValue =
427
+ | string
428
+ | {
429
+ generator: string;
430
+ args?: any[];
431
+ probability?: number;
432
+ };
433
+
434
+ export const GeneratorAnnotation = createAnnotationHelper<GeneratorAnnotationValue>(GeneratorAnnotationId);
435
+
436
+ interface MakeAnnoationsProps<T> {
437
+ id: string;
438
+ schema: Schema.Schema<T, any, never>;
439
+ }
440
+
441
+ // Annotation ids use the same NSID / reverse-DNS format as TypenameSchema —
442
+ // dot-separated segments, middle segments may be hyphenated, final segment may be camelCase.
443
+ // At least 3 segments are required (e.g. org.dxos.annotation.example).
444
+ export const makeUserAnnotation = <T>(props: MakeAnnoationsProps<T>): Annotation.Annotation<T> => {
445
+ assertArgument(
446
+ /^[a-zA-Z]([a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(\.[a-zA-Z0-9]([a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?){2,}(\.[a-zA-Z]([a-zA-Z0-9]{0,62})?)?$/.test(
447
+ props.id,
448
+ ),
449
+ 'id',
450
+ 'Annotation id must be in the FQN format (org.dxos.annotation.example or org.dxos.space.rootCollection).',
451
+ );
452
+
453
+ const annotation: Annotation.Annotation<T> = {
454
+ [ANNOTATION_TYPE_ID]: { _Type: {} as T },
455
+ key: props.id as Annotation.Key,
456
+ schema: props.schema,
457
+ get: (schema) => getFromAst(schema.ast, annotation),
458
+ getFromAst: (ast) => getFromAst(ast, annotation),
459
+ set: (value) =>
460
+ PropertyMeta(props.id, Schema.encodeSync(props.schema)(value)) as <S extends Schema.Schema.Any>(schema: S) => S,
461
+ };
462
+
463
+ return annotation;
464
+ };
465
+
466
+ const IconAnnotationSchema = Schema.Struct({
467
+ /**
468
+ * Phosphor icon name (e.g., 'ph--user--regular', 'ph--cube--regular', 'ph--link--regular ', etc.)
469
+ */
470
+ icon: Schema.String.pipe(Schema.pattern(/^ph--[a-z-]+--[a-z]+$/)),
471
+
472
+ /**
473
+ * Color name.
474
+ *
475
+ * List of colors:
476
+ * - 'red'
477
+ * - 'orange'
478
+ * - 'amber'
479
+ * - 'yellow'
480
+ * - 'lime'
481
+ * - 'green'
482
+ * - 'emerald'
483
+ * - 'teal'
484
+ * - 'cyan'
485
+ * - 'violet'
486
+ * - 'purple'
487
+ * - 'fuchsia'
488
+ * - 'pink'
489
+ * - 'rose'
490
+ */
491
+ hue: Schema.optional(Schema.String),
492
+ });
493
+
494
+ export interface IconAnnotation extends Schema.Schema.Type<typeof IconAnnotationSchema> {}
495
+
496
+ /**
497
+ * Icon to render in the UI.
498
+ */
499
+ export const IconAnnotation = makeUserAnnotation<IconAnnotation>({
500
+ id: 'org.dxos.annotation.icon',
501
+ schema: IconAnnotationSchema,
502
+ });
503
+
504
+ /**
505
+ * Indicates that this entity's icon should be resolved from a property whose value is a `Ref`
506
+ * to another entity. Consumers (e.g. graph node builders) resolve the ref target and use that
507
+ * target's schema `IconAnnotation` in place of the static one declared on this schema.
508
+ *
509
+ * Useful for wrapper schemas that delegate their visual identity to a referenced sub-entity
510
+ * (e.g. a generic `Game` whose icon should come from its `variant` ref's typed state).
511
+ */
512
+ export const IconFromRefAnnotation = makeUserAnnotation<string>({
513
+ id: 'org.dxos.annotation.icon.from-ref',
514
+ schema: Schema.String,
515
+ });
516
+
517
+ /**
518
+ * Options for {@link getLabel}.
519
+ */
520
+ export type GetLabelOptions = {
521
+ /**
522
+ * Strategy for deriving a label when the entity has no `LabelAnnotation` value.
523
+ * - `'typename'`: use the entity's typename (e.g. `org.dxos.type.table`).
524
+ * Useful for Card.Title chrome that must always display something, even
525
+ * for unlabeled objects.
526
+ */
527
+ fallback?: 'typename';
528
+ };
529
+
530
+ /**
531
+ * Get the label of an entity.
532
+ * Accepts both reactive entities and snapshots.
533
+ *
534
+ * If `options.fallback === 'typename'` and no label is set, returns the
535
+ * entity's typename instead.
536
+ */
537
+ export const getLabel = (entity: AnyProperties, options?: GetLabelOptions): string | undefined => {
538
+ const schema = getSchema(entity);
539
+ const label = schema != null ? getLabelWithSchema(schema, entity) : undefined;
540
+ if (label != null) {
541
+ return label;
542
+ }
543
+ if (options?.fallback === 'typename') {
544
+ return getTypename(entity);
545
+ }
546
+ return undefined;
547
+ };
548
+
549
+ /**
550
+ * Set the label of an entity.
551
+ * Must be called within an Obj.update or Relation.update callback.
552
+ */
553
+ export const setLabel = (entity: Mutable<AnyProperties>, label: string) => {
554
+ const schema = getSchema(entity);
555
+ if (schema != null) {
556
+ setLabelWithSchema(schema, entity, label);
557
+ }
558
+ };
559
+
560
+ /**
561
+ * Get the description of an entity.
562
+ * Accepts both reactive entities and snapshots.
563
+ */
564
+ export const getDescription = (entity: AnyProperties): string | undefined => {
565
+ const schema = getSchema(entity);
566
+ if (schema != null) {
567
+ return getDescriptionWithSchema(schema, entity);
568
+ }
569
+ };
570
+
571
+ /**
572
+ * Get the icon annotation for an entity, resolved via its type-level `IconAnnotation`.
573
+ * Accepts both reactive entities and snapshots.
574
+ *
575
+ * Returns the full `{ icon, hue }` annotation so callers can use both the phosphor icon
576
+ * name and the suggested colour. Callers wanting just the icon name typically write
577
+ * `Obj.getIcon(obj)?.icon ?? 'ph--cube--regular'`.
578
+ *
579
+ * Note: this is the "static" icon from the object's own schema. It does not follow
580
+ * `IconFromRefAnnotation` delegation — call sites needing that (e.g. app-graph node
581
+ * builders) should resolve the ref themselves.
582
+ */
583
+ export const getIcon = (entity: AnyProperties): IconAnnotation | undefined => {
584
+ const schema = getSchema(entity);
585
+ if (schema == null) {
586
+ return undefined;
587
+ }
588
+ return Option.getOrUndefined(IconAnnotation.get(schema));
589
+ };
590
+
591
+ /**
592
+ * Set the description of an entity.
593
+ * Must be called within an Obj.update or Relation.update callback.
594
+ */
595
+ export const setDescription = (entity: Mutable<AnyProperties>, description: string) => {
596
+ const schema = getSchema(entity);
597
+ if (schema != null) {
598
+ setDescriptionWithSchema(schema, entity, description);
599
+ }
600
+ };
601
+
602
+ export { Dictionary, Key, getDictionary, setDictionary } from './dictionary';
603
+
604
+ export const getFromAst = <T>(ast: SchemaAST.AST, annotation: Annotation.Annotation<T>): Option.Option<T> => {
605
+ return SchemaAST.getAnnotation<PropertyMetaAnnotation>(PropertyMetaAnnotationId)(ast).pipe(
606
+ Option.flatMap((meta) => Option.fromNullable(meta[annotation.key])),
607
+ Option.map(Schema.decodeUnknownSync(annotation.schema)),
608
+ );
609
+ };
@@ -0,0 +1,47 @@
1
+ //
2
+ // Copyright 2026 DXOS.org
3
+ //
4
+
5
+ import * as Function from 'effect/Function';
6
+ import * as Option from 'effect/Option';
7
+ import * as Schema from 'effect/Schema';
8
+ import * as Types from 'effect/Types';
9
+
10
+ import type * as Annotation from '../../Annotation';
11
+
12
+ /**
13
+ * Unique identifier for an annotation.
14
+ */
15
+ export const Key = Schema.String.pipe(Schema.brand('~@dxos/echo/AnnotationKey'));
16
+ export type Key = Schema.Schema.Type<typeof Key>;
17
+
18
+ /**
19
+ * Set of annotation values stored on entity meta or nested in schemas.
20
+ */
21
+ export const Dictionary = Schema.Record({ key: Key, value: Schema.Unknown });
22
+ export interface Dictionary extends Schema.Schema.Type<typeof Dictionary> {}
23
+
24
+ /**
25
+ * Get the value of an annotation from a dictionary.
26
+ */
27
+ export const getDictionary = <T>(
28
+ values: Annotation.Dictionary,
29
+ annotation: Annotation.Annotation<T>,
30
+ ): Option.Option<T> => {
31
+ if (!(annotation.key in values)) {
32
+ return Option.none();
33
+ }
34
+
35
+ return Function.pipe(values[annotation.key], Schema.decodeUnknownSync(annotation.schema), Option.some);
36
+ };
37
+
38
+ /**
39
+ * Set the value of an annotation in a dictionary.
40
+ */
41
+ export const setDictionary = <T>(
42
+ values: Types.Mutable<Annotation.Dictionary>,
43
+ annotation: Annotation.Annotation<T>,
44
+ value: T,
45
+ ): void => {
46
+ values[annotation.key] = Schema.encodeSync(annotation.schema)(value);
47
+ };