@dxos/echo 0.8.4-main.c85a9c8dae → 0.8.4-main.cb12b3f963

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 (554) hide show
  1. package/dist/lib/neutral/Annotation.mjs +3 -3
  2. package/dist/lib/neutral/Database.mjs +8 -4
  3. package/dist/lib/neutral/Entity.mjs +16 -11
  4. package/dist/lib/neutral/Err.mjs +1 -1
  5. package/dist/lib/neutral/Extension.mjs +18 -0
  6. package/dist/lib/neutral/Extension.mjs.map +7 -0
  7. package/dist/lib/neutral/Feed.mjs +21 -14
  8. package/dist/lib/neutral/Filter.mjs +21 -10
  9. package/dist/lib/neutral/Format.mjs +3 -3
  10. package/dist/lib/neutral/JsonSchema.mjs +8 -7
  11. package/dist/lib/neutral/Key.mjs +1 -1
  12. package/dist/lib/neutral/Migration.mjs +17 -0
  13. package/dist/lib/neutral/Migration.mjs.map +7 -0
  14. package/dist/lib/neutral/Obj.mjs +16 -10
  15. package/dist/lib/neutral/Order.mjs +1 -1
  16. package/dist/lib/neutral/Query.mjs +19 -13
  17. package/dist/lib/neutral/QueryResult.mjs +1 -1
  18. package/dist/lib/neutral/Ref.mjs +7 -7
  19. package/dist/lib/neutral/Relation.mjs +15 -11
  20. package/dist/lib/neutral/SchemaRegistry.mjs +1 -1
  21. package/dist/lib/neutral/Tag.mjs +14 -10
  22. package/dist/lib/neutral/Type.mjs +10 -7
  23. package/dist/lib/neutral/{chunk-ALOGSVBP.mjs → chunk-3U5PIVPZ.mjs} +59 -4
  24. package/dist/lib/neutral/chunk-3U5PIVPZ.mjs.map +7 -0
  25. package/dist/lib/neutral/{chunk-DZQSL6RW.mjs → chunk-44HT3MEC.mjs} +2 -2
  26. package/dist/lib/neutral/{chunk-DZQSL6RW.mjs.map → chunk-44HT3MEC.mjs.map} +1 -1
  27. package/dist/lib/neutral/{chunk-5ELDDYWE.mjs → chunk-4VTRFJV3.mjs} +17 -19
  28. package/dist/lib/neutral/chunk-4VTRFJV3.mjs.map +7 -0
  29. package/dist/lib/neutral/chunk-5NR2KWDU.mjs +34 -0
  30. package/dist/lib/neutral/chunk-5NR2KWDU.mjs.map +7 -0
  31. package/dist/lib/neutral/chunk-62RJTYOZ.mjs +346 -0
  32. package/dist/lib/neutral/chunk-62RJTYOZ.mjs.map +7 -0
  33. package/dist/lib/neutral/{chunk-OVUBTQLT.mjs → chunk-7OO5B5DD.mjs} +2 -2
  34. package/dist/lib/neutral/chunk-7OO5B5DD.mjs.map +7 -0
  35. package/dist/lib/neutral/{chunk-ANHVGJI4.mjs → chunk-7RVZT53K.mjs} +1 -1
  36. package/dist/lib/neutral/{chunk-GAWKQ5DZ.mjs → chunk-AG7JS76F.mjs} +5 -5
  37. package/dist/lib/neutral/chunk-AG7JS76F.mjs.map +7 -0
  38. package/dist/lib/neutral/{chunk-PP4DNUZU.mjs → chunk-AVPYX7FF.mjs} +1399 -2882
  39. package/dist/lib/neutral/chunk-AVPYX7FF.mjs.map +7 -0
  40. package/dist/lib/neutral/{chunk-ZWKJ4LZJ.mjs → chunk-BCKTAKBX.mjs} +23 -51
  41. package/dist/lib/neutral/chunk-BCKTAKBX.mjs.map +7 -0
  42. package/dist/lib/neutral/{chunk-T6JEFNP6.mjs → chunk-BICZKPQG.mjs} +1 -1
  43. package/dist/lib/neutral/{chunk-T6JEFNP6.mjs.map → chunk-BICZKPQG.mjs.map} +1 -1
  44. package/dist/lib/neutral/{chunk-F7KMHDPJ.mjs → chunk-GECFB2UL.mjs} +49 -31
  45. package/dist/lib/neutral/chunk-GECFB2UL.mjs.map +7 -0
  46. package/dist/lib/neutral/chunk-GWFFC34K.mjs +50 -0
  47. package/dist/lib/neutral/chunk-GWFFC34K.mjs.map +7 -0
  48. package/dist/lib/neutral/{chunk-BRJSLACP.mjs → chunk-M7ET73JD.mjs} +71 -17
  49. package/dist/lib/neutral/chunk-M7ET73JD.mjs.map +7 -0
  50. package/dist/lib/neutral/{chunk-4KG6IGL4.mjs → chunk-N4B7FHQT.mjs} +4 -4
  51. package/dist/lib/neutral/{chunk-4KG6IGL4.mjs.map → chunk-N4B7FHQT.mjs.map} +2 -2
  52. package/dist/lib/neutral/{chunk-KGV3QIRX.mjs → chunk-NCSIQP3L.mjs} +124 -17
  53. package/dist/lib/neutral/chunk-NCSIQP3L.mjs.map +7 -0
  54. package/dist/lib/neutral/{chunk-QXF3LGN2.mjs → chunk-NGQNU3KX.mjs} +5 -3
  55. package/dist/lib/neutral/chunk-NGQNU3KX.mjs.map +7 -0
  56. package/dist/lib/neutral/chunk-PRCRETDK.mjs +36 -0
  57. package/dist/lib/neutral/chunk-PRCRETDK.mjs.map +7 -0
  58. package/dist/lib/neutral/{chunk-AQP4QKYP.mjs → chunk-S4JXD2RO.mjs} +44 -9
  59. package/dist/lib/neutral/chunk-S4JXD2RO.mjs.map +7 -0
  60. package/dist/lib/neutral/{chunk-W7OP5HGZ.mjs → chunk-SVEGO3DJ.mjs} +14 -10
  61. package/dist/lib/neutral/chunk-SVEGO3DJ.mjs.map +7 -0
  62. package/dist/lib/neutral/{chunk-M2KVTHZM.mjs → chunk-TRPZU2HV.mjs} +10 -10
  63. package/dist/lib/neutral/chunk-TRPZU2HV.mjs.map +7 -0
  64. package/dist/lib/neutral/{chunk-ZTUBYOGB.mjs → chunk-TTCSATUD.mjs} +1 -1
  65. package/dist/lib/neutral/chunk-TTCSATUD.mjs.map +7 -0
  66. package/dist/lib/neutral/{chunk-GFNCSK7F.mjs → chunk-TTUIJXGD.mjs} +54 -23
  67. package/dist/lib/neutral/chunk-TTUIJXGD.mjs.map +7 -0
  68. package/dist/lib/neutral/{chunk-OMUPQMLR.mjs → chunk-V72DY6LU.mjs} +1 -1
  69. package/dist/lib/neutral/{chunk-T4MPQJ7X.mjs → chunk-WGMPVUUL.mjs} +6 -22
  70. package/dist/lib/neutral/chunk-WGMPVUUL.mjs.map +7 -0
  71. package/dist/lib/neutral/{chunk-O3TZFQCT.mjs → chunk-YDRLYZKW.mjs} +2 -2
  72. package/dist/lib/neutral/chunk-YDRLYZKW.mjs.map +7 -0
  73. package/dist/lib/neutral/chunk-Z25FPDXG.mjs +734 -0
  74. package/dist/lib/neutral/chunk-Z25FPDXG.mjs.map +7 -0
  75. package/dist/lib/neutral/{chunk-MXQJZCPY.mjs → chunk-ZISMEVKD.mjs} +1 -1
  76. package/dist/lib/neutral/chunk-ZISMEVKD.mjs.map +7 -0
  77. package/dist/lib/neutral/index.mjs +38 -25
  78. package/dist/lib/neutral/internal/index.mjs +48 -38
  79. package/dist/lib/neutral/meta.json +1 -1
  80. package/dist/lib/neutral/testing/index.mjs +41 -35
  81. package/dist/lib/neutral/testing/index.mjs.map +2 -2
  82. package/dist/types/src/Annotation.d.ts +3 -3
  83. package/dist/types/src/Annotation.d.ts.map +1 -1
  84. package/dist/types/src/Collection.d.ts.map +1 -1
  85. package/dist/types/src/Database.d.ts +15 -3
  86. package/dist/types/src/Database.d.ts.map +1 -1
  87. package/dist/types/src/Dataset.d.ts +2 -1
  88. package/dist/types/src/Dataset.d.ts.map +1 -1
  89. package/dist/types/src/Entity.d.ts +17 -11
  90. package/dist/types/src/Entity.d.ts.map +1 -1
  91. package/dist/types/src/Err.d.ts +18 -18
  92. package/dist/types/src/Err.d.ts.map +1 -1
  93. package/dist/types/src/Extension.d.ts +80 -0
  94. package/dist/types/src/Extension.d.ts.map +1 -0
  95. package/dist/types/src/Extension.test.d.ts +2 -0
  96. package/dist/types/src/Extension.test.d.ts.map +1 -0
  97. package/dist/types/src/Feed.d.ts +40 -23
  98. package/dist/types/src/Feed.d.ts.map +1 -1
  99. package/dist/types/src/Filter.d.ts +33 -4
  100. package/dist/types/src/Filter.d.ts.map +1 -1
  101. package/dist/types/src/Filter.test.d.ts +2 -0
  102. package/dist/types/src/Filter.test.d.ts.map +1 -0
  103. package/dist/types/src/Format.d.ts +1 -1
  104. package/dist/types/src/Format.d.ts.map +1 -1
  105. package/dist/types/src/Hypergraph.d.ts +6 -1
  106. package/dist/types/src/Hypergraph.d.ts.map +1 -1
  107. package/dist/types/src/Json.d.ts +33 -0
  108. package/dist/types/src/Json.d.ts.map +1 -0
  109. package/dist/types/src/Json.test.d.ts +2 -0
  110. package/dist/types/src/Json.test.d.ts.map +1 -0
  111. package/dist/types/src/JsonSchema.d.ts +5 -5
  112. package/dist/types/src/JsonSchema.d.ts.map +1 -1
  113. package/dist/types/src/Migration.d.ts +57 -0
  114. package/dist/types/src/Migration.d.ts.map +1 -0
  115. package/dist/types/src/Obj.d.ts +45 -29
  116. package/dist/types/src/Obj.d.ts.map +1 -1
  117. package/dist/types/src/Order.d.ts.map +1 -1
  118. package/dist/types/src/Query.d.ts +13 -2
  119. package/dist/types/src/Query.d.ts.map +1 -1
  120. package/dist/types/src/Ref.d.ts +11 -11
  121. package/dist/types/src/Ref.d.ts.map +1 -1
  122. package/dist/types/src/Relation.d.ts +16 -16
  123. package/dist/types/src/Relation.d.ts.map +1 -1
  124. package/dist/types/src/SchemaRegistry.d.ts +1 -1
  125. package/dist/types/src/Tag.d.ts +2 -2
  126. package/dist/types/src/Tag.d.ts.map +1 -1
  127. package/dist/types/src/Type.d.ts +10 -9
  128. package/dist/types/src/Type.d.ts.map +1 -1
  129. package/dist/types/src/View.d.ts +1 -1
  130. package/dist/types/src/View.d.ts.map +1 -1
  131. package/dist/types/src/exemplars.test.d.ts +2 -0
  132. package/dist/types/src/exemplars.test.d.ts.map +1 -0
  133. package/dist/types/src/index.d.ts +3 -0
  134. package/dist/types/src/index.d.ts.map +1 -1
  135. package/dist/types/src/internal/{annotations → Annotation}/annotations.d.ts +24 -2
  136. package/dist/types/src/internal/Annotation/annotations.d.ts.map +1 -0
  137. package/dist/types/src/internal/Annotation/annotations.test.d.ts.map +1 -0
  138. package/dist/types/src/internal/Annotation/index.d.ts +4 -0
  139. package/dist/types/src/internal/Annotation/index.d.ts.map +1 -0
  140. package/dist/types/src/internal/{api → Annotation}/sorting.d.ts +1 -1
  141. package/dist/types/src/internal/Annotation/sorting.d.ts.map +1 -0
  142. package/dist/types/src/internal/{annotations → Annotation}/util.d.ts +2 -2
  143. package/dist/types/src/internal/Annotation/util.d.ts.map +1 -0
  144. package/dist/types/src/internal/{api/entity.d.ts → Entity/api.d.ts} +2 -2
  145. package/dist/types/src/internal/Entity/api.d.ts.map +1 -0
  146. package/dist/types/src/internal/{entities → Entity}/entity.d.ts +2 -2
  147. package/dist/types/src/internal/Entity/entity.d.ts.map +1 -0
  148. package/dist/types/src/internal/{entities → Entity}/index.d.ts +2 -0
  149. package/dist/types/src/internal/Entity/index.d.ts.map +1 -0
  150. package/dist/types/src/internal/{entities → Entity}/model.d.ts +2 -26
  151. package/dist/types/src/internal/Entity/model.d.ts.map +1 -0
  152. package/dist/types/src/internal/{entities → Entity}/object.d.ts +2 -2
  153. package/dist/types/src/internal/Entity/object.d.ts.map +1 -0
  154. package/dist/types/src/internal/{entities → Entity}/relation.d.ts +3 -30
  155. package/dist/types/src/internal/Entity/relation.d.ts.map +1 -0
  156. package/dist/types/src/internal/Entity/util.d.ts.map +1 -0
  157. package/dist/types/src/internal/{api → Entity}/version.d.ts +1 -1
  158. package/dist/types/src/internal/Entity/version.d.ts.map +1 -0
  159. package/dist/types/src/internal/Format/date.d.ts.map +1 -0
  160. package/dist/types/src/internal/Format/date.test.d.ts.map +1 -0
  161. package/dist/types/src/internal/Format/format.d.ts.map +1 -0
  162. package/dist/types/src/internal/Format/format.test.d.ts.map +1 -0
  163. package/dist/types/src/internal/Format/index.d.ts.map +1 -0
  164. package/dist/types/src/internal/Format/number.d.ts.map +1 -0
  165. package/dist/types/src/internal/Format/object.d.ts.map +1 -0
  166. package/dist/types/src/internal/Format/select.d.ts.map +1 -0
  167. package/dist/types/src/internal/Format/string.d.ts.map +1 -0
  168. package/dist/types/src/internal/{formats → Format}/types.d.ts +1 -1
  169. package/dist/types/src/internal/Format/types.d.ts.map +1 -0
  170. package/dist/types/src/internal/{json-schema → JsonSchema}/annotations.d.ts +1 -1
  171. package/dist/types/src/internal/JsonSchema/annotations.d.ts.map +1 -0
  172. package/dist/types/src/internal/JsonSchema/effect-schema.test.d.ts.map +1 -0
  173. package/dist/types/src/internal/JsonSchema/index.d.ts.map +1 -0
  174. package/dist/types/src/internal/JsonSchema/json-schema-normalize.d.ts.map +1 -0
  175. package/dist/types/src/internal/{json-schema → JsonSchema}/json-schema-type.d.ts +23 -23
  176. package/dist/types/src/internal/JsonSchema/json-schema-type.d.ts.map +1 -0
  177. package/dist/types/src/internal/{json-schema → JsonSchema}/json-schema.d.ts +1 -1
  178. package/dist/types/src/internal/JsonSchema/json-schema.d.ts.map +1 -0
  179. package/dist/types/src/internal/JsonSchema/json-schema.test.d.ts.map +1 -0
  180. package/dist/types/src/internal/Obj/clone.d.ts.map +1 -0
  181. package/dist/types/src/internal/Obj/common.d.ts.map +1 -0
  182. package/dist/types/src/internal/{object → Obj}/create-object.d.ts +2 -2
  183. package/dist/types/src/internal/Obj/create-object.d.ts.map +1 -0
  184. package/dist/types/src/internal/Obj/create-object.test.d.ts.map +1 -0
  185. package/dist/types/src/internal/{object → Obj}/deleted.d.ts +1 -1
  186. package/dist/types/src/internal/Obj/deleted.d.ts.map +1 -0
  187. package/dist/types/src/internal/Obj/ids.d.ts.map +1 -0
  188. package/dist/types/src/internal/Obj/index.d.ts.map +1 -0
  189. package/dist/types/src/internal/Obj/inspect.d.ts.map +1 -0
  190. package/dist/types/src/internal/{object → Obj}/json-serializer.d.ts +13 -5
  191. package/dist/types/src/internal/Obj/json-serializer.d.ts.map +1 -0
  192. package/dist/types/src/internal/Obj/json-serializer.test.d.ts.map +1 -0
  193. package/dist/types/src/internal/Obj/schema-validator.d.ts +2 -0
  194. package/dist/types/src/internal/Obj/schema-validator.d.ts.map +1 -0
  195. package/dist/types/src/internal/Obj/schema-validator.test.d.ts.map +1 -0
  196. package/dist/types/src/internal/{object → Obj}/set-value.d.ts +2 -2
  197. package/dist/types/src/internal/Obj/set-value.d.ts.map +1 -0
  198. package/dist/types/src/internal/Obj/set-value.test.d.ts.map +1 -0
  199. package/dist/types/src/internal/Obj/snapshot.d.ts.map +1 -0
  200. package/dist/types/src/internal/{object → Obj}/typed-object.d.ts +2 -2
  201. package/dist/types/src/internal/Obj/typed-object.d.ts.map +1 -0
  202. package/dist/types/src/internal/Obj/typed-object.test.d.ts.map +1 -0
  203. package/dist/types/src/internal/Query.d.ts +10 -0
  204. package/dist/types/src/internal/Query.d.ts.map +1 -0
  205. package/dist/types/src/internal/Ref/index.d.ts.map +1 -0
  206. package/dist/types/src/internal/{ref → Ref}/ref-array.d.ts +1 -1
  207. package/dist/types/src/internal/Ref/ref-array.d.ts.map +1 -0
  208. package/dist/types/src/internal/{ref → Ref}/ref.d.ts +15 -2
  209. package/dist/types/src/internal/Ref/ref.d.ts.map +1 -0
  210. package/dist/types/src/internal/Ref/ref.test.d.ts.map +1 -0
  211. package/dist/types/src/internal/{schema → Type}/compose.d.ts +1 -1
  212. package/dist/types/src/internal/Type/compose.d.ts.map +1 -0
  213. package/dist/types/src/internal/Type/compose.test.d.ts.map +1 -0
  214. package/dist/types/src/internal/{schema → Type}/echo-schema.d.ts +6 -6
  215. package/dist/types/src/internal/Type/echo-schema.d.ts.map +1 -0
  216. package/dist/types/src/internal/Type/index.d.ts.map +1 -0
  217. package/dist/types/src/internal/Type/manipulation.d.ts.map +1 -0
  218. package/dist/types/src/internal/{schema → Type}/persistent-schema.d.ts +2 -2
  219. package/dist/types/src/internal/Type/persistent-schema.d.ts.map +1 -0
  220. package/dist/types/src/internal/{api → common/api}/index.d.ts +0 -4
  221. package/dist/types/src/internal/common/api/index.d.ts.map +1 -0
  222. package/dist/types/src/internal/{api → common/api}/meta.d.ts +3 -3
  223. package/dist/types/src/internal/common/api/meta.d.ts.map +1 -0
  224. package/dist/types/src/internal/common/index.d.ts +4 -0
  225. package/dist/types/src/internal/common/index.d.ts.map +1 -0
  226. package/dist/types/src/internal/{proxy → common/proxy}/change-context.d.ts +1 -1
  227. package/dist/types/src/internal/common/proxy/change-context.d.ts.map +1 -0
  228. package/dist/types/src/internal/common/proxy/change.test.d.ts.map +1 -0
  229. package/dist/types/src/internal/common/proxy/define-hidden-property.d.ts.map +1 -0
  230. package/dist/types/src/internal/{proxy → common/proxy}/errors.d.ts +1 -1
  231. package/dist/types/src/internal/common/proxy/errors.d.ts.map +1 -0
  232. package/dist/types/src/internal/common/proxy/event-batch.d.ts.map +1 -0
  233. package/dist/types/src/internal/common/proxy/handler.test.d.ts.map +1 -0
  234. package/dist/types/src/internal/common/proxy/index.d.ts.map +1 -0
  235. package/dist/types/src/internal/common/proxy/json-serializer.d.ts.map +1 -0
  236. package/dist/types/src/internal/common/proxy/make-object.d.ts.map +1 -0
  237. package/dist/types/src/internal/common/proxy/ownership.d.ts.map +1 -0
  238. package/dist/types/src/internal/common/proxy/proxy-types.d.ts.map +1 -0
  239. package/dist/types/src/internal/common/proxy/proxy-utils.d.ts.map +1 -0
  240. package/dist/types/src/internal/{proxy → common/proxy}/reactive-array.d.ts +1 -1
  241. package/dist/types/src/internal/common/proxy/reactive-array.d.ts.map +1 -0
  242. package/dist/types/src/internal/{proxy → common/proxy}/reactive.d.ts +2 -2
  243. package/dist/types/src/internal/{proxy → common/proxy}/reactive.d.ts.map +1 -1
  244. package/dist/types/src/internal/common/proxy/reactive.test.d.ts +2 -0
  245. package/dist/types/src/internal/common/proxy/reactive.test.d.ts.map +1 -0
  246. package/dist/types/src/internal/common/proxy/schema-validator.d.ts.map +1 -0
  247. package/dist/types/src/internal/common/proxy/schema.test.d.ts.map +1 -0
  248. package/dist/types/src/internal/common/proxy/symbols.d.ts.map +1 -0
  249. package/dist/types/src/internal/common/proxy/typed-handler.d.ts.map +1 -0
  250. package/dist/types/src/internal/common/proxy/typed-handler.test.d.ts.map +1 -0
  251. package/dist/types/src/internal/common/proxy/typed-object.test.d.ts.map +1 -0
  252. package/dist/types/src/internal/common/types/base.d.ts.map +1 -0
  253. package/dist/types/src/internal/{types → common/types}/entity.d.ts +4 -4
  254. package/dist/types/src/internal/common/types/entity.d.ts.map +1 -0
  255. package/dist/types/src/internal/{types → common/types}/index.d.ts +1 -0
  256. package/dist/types/src/internal/common/types/index.d.ts.map +1 -0
  257. package/dist/types/src/internal/{types → common/types}/meta.d.ts +3 -3
  258. package/dist/types/src/internal/common/types/meta.d.ts.map +1 -0
  259. package/dist/types/src/internal/common/types/model-symbols.d.ts +54 -0
  260. package/dist/types/src/internal/common/types/model-symbols.d.ts.map +1 -0
  261. package/dist/types/src/internal/common/types/typename.d.ts.map +1 -0
  262. package/dist/types/src/internal/{types → common/types}/version.d.ts +1 -1
  263. package/dist/types/src/internal/common/types/version.d.ts.map +1 -0
  264. package/dist/types/src/internal/index.d.ts +9 -10
  265. package/dist/types/src/internal/index.d.ts.map +1 -1
  266. package/dist/types/src/testing/test-data.d.ts.map +1 -1
  267. package/dist/types/src/testing/test-schema.d.ts +53 -53
  268. package/dist/types/src/testing/test-schema.d.ts.map +1 -1
  269. package/dist/types/src/testing/util.d.ts.map +1 -1
  270. package/dist/types/tsconfig.tsbuildinfo +1 -1
  271. package/package.json +24 -14
  272. package/src/Annotation.ts +5 -3
  273. package/src/Collection.ts +8 -1
  274. package/src/Database.ts +54 -17
  275. package/src/Dataset.ts +2 -0
  276. package/src/Entity.ts +20 -11
  277. package/src/Err.ts +2 -0
  278. package/src/Extension.test.ts +235 -0
  279. package/src/Extension.ts +122 -0
  280. package/src/Feed.ts +86 -36
  281. package/src/Filter.test.ts +90 -0
  282. package/src/Filter.ts +68 -3
  283. package/src/Format.ts +1 -1
  284. package/src/Hypergraph.ts +7 -2
  285. package/src/Json.test.ts +175 -0
  286. package/src/Json.ts +102 -0
  287. package/src/JsonSchema.ts +7 -5
  288. package/src/Migration.ts +94 -0
  289. package/src/Obj.test.ts +107 -15
  290. package/src/Obj.ts +166 -40
  291. package/src/Order.ts +2 -0
  292. package/src/Query.test.ts +221 -31
  293. package/src/Query.ts +50 -3
  294. package/src/Ref.ts +14 -12
  295. package/src/Relation.test.ts +2 -2
  296. package/src/Relation.ts +28 -21
  297. package/src/SchemaRegistry.ts +1 -1
  298. package/src/Tag.ts +3 -1
  299. package/src/Type.ts +14 -11
  300. package/src/View.ts +9 -2
  301. package/src/exemplars.test.ts +21 -0
  302. package/src/index.ts +4 -0
  303. package/src/internal/{annotations → Annotation}/annotations.test.ts +56 -7
  304. package/src/internal/{annotations → Annotation}/annotations.ts +71 -20
  305. package/src/internal/{annotations → Annotation}/index.ts +1 -0
  306. package/src/internal/{api → Annotation}/sorting.ts +2 -4
  307. package/src/internal/{annotations → Annotation}/util.ts +1 -1
  308. package/src/internal/{api/entity.ts → Entity/api.ts} +3 -2
  309. package/src/internal/{entities → Entity}/entity.ts +2 -2
  310. package/src/internal/{entities → Entity}/index.ts +2 -0
  311. package/src/internal/{entities → Entity}/model.ts +13 -42
  312. package/src/internal/{entities → Entity}/object.ts +2 -3
  313. package/src/internal/{entities → Entity}/relation.ts +19 -36
  314. package/src/internal/{api → Entity}/version.ts +2 -2
  315. package/src/internal/{formats → Format}/date.test.ts +1 -2
  316. package/src/internal/{formats → Format}/format.test.ts +1 -2
  317. package/src/internal/{formats → Format}/types.ts +2 -2
  318. package/src/internal/{json-schema → JsonSchema}/annotations.ts +3 -3
  319. package/src/internal/{json-schema → JsonSchema}/json-schema-type.ts +4 -4
  320. package/src/internal/{json-schema → JsonSchema}/json-schema.test.ts +48 -49
  321. package/src/internal/{json-schema → JsonSchema}/json-schema.ts +3 -4
  322. package/src/internal/{object → Obj}/clone.ts +3 -3
  323. package/src/internal/{object → Obj}/common.ts +2 -2
  324. package/src/internal/{object → Obj}/create-object.test.ts +5 -7
  325. package/src/internal/{object → Obj}/create-object.ts +5 -6
  326. package/src/internal/{object → Obj}/deleted.ts +2 -2
  327. package/src/internal/{object → Obj}/inspect.ts +2 -2
  328. package/src/internal/{object → Obj}/json-serializer.test.ts +8 -9
  329. package/src/internal/{object → Obj}/json-serializer.ts +36 -18
  330. package/src/internal/{object → Obj}/schema-validator.ts +1 -1
  331. package/src/internal/{object → Obj}/set-value.test.ts +24 -24
  332. package/src/internal/{object → Obj}/set-value.ts +3 -3
  333. package/src/internal/{object → Obj}/snapshot.ts +14 -5
  334. package/src/internal/{object → Obj}/typed-object.test.ts +3 -3
  335. package/src/internal/{object → Obj}/typed-object.ts +2 -2
  336. package/src/internal/Query.ts +137 -0
  337. package/src/internal/{ref → Ref}/ref-array.ts +1 -2
  338. package/src/internal/{ref → Ref}/ref.test.ts +4 -5
  339. package/src/internal/{ref → Ref}/ref.ts +20 -3
  340. package/src/internal/{schema → Type}/compose.test.ts +5 -6
  341. package/src/internal/{schema → Type}/compose.ts +1 -1
  342. package/src/internal/{schema → Type}/echo-schema.ts +7 -8
  343. package/src/internal/{schema → Type}/manipulation.ts +1 -1
  344. package/src/internal/{schema → Type}/persistent-schema.ts +7 -7
  345. package/src/internal/{README.md → common/README.md} +1 -1
  346. package/src/internal/{api → common/api}/index.ts +0 -4
  347. package/src/internal/{api → common/api}/meta.ts +3 -3
  348. package/src/internal/common/index.ts +7 -0
  349. package/src/internal/{proxy → common/proxy}/change-context.ts +1 -1
  350. package/src/internal/{proxy → common/proxy}/change.test.ts +97 -97
  351. package/src/internal/{proxy → common/proxy}/errors.ts +2 -2
  352. package/src/internal/{proxy → common/proxy}/handler.test.ts +2 -4
  353. package/src/internal/{proxy → common/proxy}/json-serializer.ts +6 -3
  354. package/src/internal/{proxy → common/proxy}/make-object.ts +1 -2
  355. package/src/internal/{proxy → common/proxy}/ownership.ts +0 -1
  356. package/src/internal/{proxy → common/proxy}/reactive-array.ts +1 -1
  357. package/src/internal/common/proxy/reactive.test.ts +54 -0
  358. package/src/internal/{proxy → common/proxy}/reactive.ts +12 -4
  359. package/src/internal/{proxy → common/proxy}/schema.test.ts +10 -10
  360. package/src/internal/{proxy → common/proxy}/typed-handler.test.ts +6 -7
  361. package/src/internal/{proxy → common/proxy}/typed-handler.ts +10 -13
  362. package/src/internal/{proxy → common/proxy}/typed-object.test.ts +5 -6
  363. package/src/internal/{types → common/types}/entity.ts +1 -1
  364. package/src/internal/{types → common/types}/index.ts +1 -0
  365. package/src/internal/{types → common/types}/meta.ts +1 -2
  366. package/src/internal/common/types/model-symbols.ts +69 -0
  367. package/src/internal/index.ts +9 -31
  368. package/src/testing/api.test.ts +2 -3
  369. package/src/testing/test-data.ts +0 -1
  370. package/src/testing/test-schema.ts +9 -9
  371. package/dist/lib/neutral/chunk-5ELDDYWE.mjs.map +0 -7
  372. package/dist/lib/neutral/chunk-ALOGSVBP.mjs.map +0 -7
  373. package/dist/lib/neutral/chunk-AQP4QKYP.mjs.map +0 -7
  374. package/dist/lib/neutral/chunk-BRJSLACP.mjs.map +0 -7
  375. package/dist/lib/neutral/chunk-F7KMHDPJ.mjs.map +0 -7
  376. package/dist/lib/neutral/chunk-GAWKQ5DZ.mjs.map +0 -7
  377. package/dist/lib/neutral/chunk-GFNCSK7F.mjs.map +0 -7
  378. package/dist/lib/neutral/chunk-KGV3QIRX.mjs.map +0 -7
  379. package/dist/lib/neutral/chunk-M2KVTHZM.mjs.map +0 -7
  380. package/dist/lib/neutral/chunk-MXQJZCPY.mjs.map +0 -7
  381. package/dist/lib/neutral/chunk-O3TZFQCT.mjs.map +0 -7
  382. package/dist/lib/neutral/chunk-OVUBTQLT.mjs.map +0 -7
  383. package/dist/lib/neutral/chunk-PP4DNUZU.mjs.map +0 -7
  384. package/dist/lib/neutral/chunk-QXF3LGN2.mjs.map +0 -7
  385. package/dist/lib/neutral/chunk-T4MPQJ7X.mjs.map +0 -7
  386. package/dist/lib/neutral/chunk-W7OP5HGZ.mjs.map +0 -7
  387. package/dist/lib/neutral/chunk-ZTUBYOGB.mjs.map +0 -7
  388. package/dist/lib/neutral/chunk-ZWKJ4LZJ.mjs.map +0 -7
  389. package/dist/types/src/internal/annotations/annotations.d.ts.map +0 -1
  390. package/dist/types/src/internal/annotations/annotations.test.d.ts.map +0 -1
  391. package/dist/types/src/internal/annotations/index.d.ts +0 -3
  392. package/dist/types/src/internal/annotations/index.d.ts.map +0 -1
  393. package/dist/types/src/internal/annotations/util.d.ts.map +0 -1
  394. package/dist/types/src/internal/api/annotations.d.ts +0 -23
  395. package/dist/types/src/internal/api/annotations.d.ts.map +0 -1
  396. package/dist/types/src/internal/api/entity.d.ts.map +0 -1
  397. package/dist/types/src/internal/api/index.d.ts.map +0 -1
  398. package/dist/types/src/internal/api/meta.d.ts.map +0 -1
  399. package/dist/types/src/internal/api/sorting.d.ts.map +0 -1
  400. package/dist/types/src/internal/api/version.d.ts.map +0 -1
  401. package/dist/types/src/internal/entities/entity.d.ts.map +0 -1
  402. package/dist/types/src/internal/entities/index.d.ts.map +0 -1
  403. package/dist/types/src/internal/entities/model.d.ts.map +0 -1
  404. package/dist/types/src/internal/entities/object.d.ts.map +0 -1
  405. package/dist/types/src/internal/entities/relation.d.ts.map +0 -1
  406. package/dist/types/src/internal/entities/util.d.ts.map +0 -1
  407. package/dist/types/src/internal/formats/date.d.ts.map +0 -1
  408. package/dist/types/src/internal/formats/date.test.d.ts.map +0 -1
  409. package/dist/types/src/internal/formats/format.d.ts.map +0 -1
  410. package/dist/types/src/internal/formats/format.test.d.ts.map +0 -1
  411. package/dist/types/src/internal/formats/index.d.ts.map +0 -1
  412. package/dist/types/src/internal/formats/number.d.ts.map +0 -1
  413. package/dist/types/src/internal/formats/object.d.ts.map +0 -1
  414. package/dist/types/src/internal/formats/select.d.ts.map +0 -1
  415. package/dist/types/src/internal/formats/string.d.ts.map +0 -1
  416. package/dist/types/src/internal/formats/types.d.ts.map +0 -1
  417. package/dist/types/src/internal/json-schema/annotations.d.ts.map +0 -1
  418. package/dist/types/src/internal/json-schema/effect-schema.test.d.ts.map +0 -1
  419. package/dist/types/src/internal/json-schema/index.d.ts.map +0 -1
  420. package/dist/types/src/internal/json-schema/json-schema-normalize.d.ts.map +0 -1
  421. package/dist/types/src/internal/json-schema/json-schema-type.d.ts.map +0 -1
  422. package/dist/types/src/internal/json-schema/json-schema.d.ts.map +0 -1
  423. package/dist/types/src/internal/json-schema/json-schema.test.d.ts.map +0 -1
  424. package/dist/types/src/internal/object/clone.d.ts.map +0 -1
  425. package/dist/types/src/internal/object/common.d.ts.map +0 -1
  426. package/dist/types/src/internal/object/create-object.d.ts.map +0 -1
  427. package/dist/types/src/internal/object/create-object.test.d.ts.map +0 -1
  428. package/dist/types/src/internal/object/deleted.d.ts.map +0 -1
  429. package/dist/types/src/internal/object/ids.d.ts.map +0 -1
  430. package/dist/types/src/internal/object/index.d.ts.map +0 -1
  431. package/dist/types/src/internal/object/inspect.d.ts.map +0 -1
  432. package/dist/types/src/internal/object/json-serializer.d.ts.map +0 -1
  433. package/dist/types/src/internal/object/json-serializer.test.d.ts.map +0 -1
  434. package/dist/types/src/internal/object/schema-validator.d.ts +0 -2
  435. package/dist/types/src/internal/object/schema-validator.d.ts.map +0 -1
  436. package/dist/types/src/internal/object/schema-validator.test.d.ts.map +0 -1
  437. package/dist/types/src/internal/object/set-value.d.ts.map +0 -1
  438. package/dist/types/src/internal/object/set-value.test.d.ts.map +0 -1
  439. package/dist/types/src/internal/object/snapshot.d.ts.map +0 -1
  440. package/dist/types/src/internal/object/typed-object.d.ts.map +0 -1
  441. package/dist/types/src/internal/object/typed-object.test.d.ts.map +0 -1
  442. package/dist/types/src/internal/proxy/change-context.d.ts.map +0 -1
  443. package/dist/types/src/internal/proxy/change.test.d.ts.map +0 -1
  444. package/dist/types/src/internal/proxy/define-hidden-property.d.ts.map +0 -1
  445. package/dist/types/src/internal/proxy/errors.d.ts.map +0 -1
  446. package/dist/types/src/internal/proxy/event-batch.d.ts.map +0 -1
  447. package/dist/types/src/internal/proxy/handler.test.d.ts.map +0 -1
  448. package/dist/types/src/internal/proxy/index.d.ts.map +0 -1
  449. package/dist/types/src/internal/proxy/json-serializer.d.ts.map +0 -1
  450. package/dist/types/src/internal/proxy/make-object.d.ts.map +0 -1
  451. package/dist/types/src/internal/proxy/ownership.d.ts.map +0 -1
  452. package/dist/types/src/internal/proxy/proxy-types.d.ts.map +0 -1
  453. package/dist/types/src/internal/proxy/proxy-utils.d.ts.map +0 -1
  454. package/dist/types/src/internal/proxy/reactive-array.d.ts.map +0 -1
  455. package/dist/types/src/internal/proxy/schema-validator.d.ts.map +0 -1
  456. package/dist/types/src/internal/proxy/schema.test.d.ts.map +0 -1
  457. package/dist/types/src/internal/proxy/symbols.d.ts.map +0 -1
  458. package/dist/types/src/internal/proxy/typed-handler.d.ts.map +0 -1
  459. package/dist/types/src/internal/proxy/typed-handler.test.d.ts.map +0 -1
  460. package/dist/types/src/internal/proxy/typed-object.test.d.ts.map +0 -1
  461. package/dist/types/src/internal/ref/index.d.ts.map +0 -1
  462. package/dist/types/src/internal/ref/ref-array.d.ts.map +0 -1
  463. package/dist/types/src/internal/ref/ref.d.ts.map +0 -1
  464. package/dist/types/src/internal/ref/ref.test.d.ts.map +0 -1
  465. package/dist/types/src/internal/schema/compose.d.ts.map +0 -1
  466. package/dist/types/src/internal/schema/compose.test.d.ts.map +0 -1
  467. package/dist/types/src/internal/schema/echo-schema.d.ts.map +0 -1
  468. package/dist/types/src/internal/schema/index.d.ts.map +0 -1
  469. package/dist/types/src/internal/schema/manipulation.d.ts.map +0 -1
  470. package/dist/types/src/internal/schema/persistent-schema.d.ts.map +0 -1
  471. package/dist/types/src/internal/types/base.d.ts.map +0 -1
  472. package/dist/types/src/internal/types/entity.d.ts.map +0 -1
  473. package/dist/types/src/internal/types/index.d.ts.map +0 -1
  474. package/dist/types/src/internal/types/meta.d.ts.map +0 -1
  475. package/dist/types/src/internal/types/typename.d.ts.map +0 -1
  476. package/dist/types/src/internal/types/version.d.ts.map +0 -1
  477. package/src/internal/api/annotations.ts +0 -60
  478. /package/dist/lib/neutral/{chunk-ANHVGJI4.mjs.map → chunk-7RVZT53K.mjs.map} +0 -0
  479. /package/dist/lib/neutral/{chunk-OMUPQMLR.mjs.map → chunk-V72DY6LU.mjs.map} +0 -0
  480. /package/dist/types/src/internal/{annotations → Annotation}/annotations.test.d.ts +0 -0
  481. /package/dist/types/src/internal/{entities → Entity}/util.d.ts +0 -0
  482. /package/dist/types/src/internal/{formats → Format}/date.d.ts +0 -0
  483. /package/dist/types/src/internal/{formats → Format}/date.test.d.ts +0 -0
  484. /package/dist/types/src/internal/{formats → Format}/format.d.ts +0 -0
  485. /package/dist/types/src/internal/{formats → Format}/format.test.d.ts +0 -0
  486. /package/dist/types/src/internal/{formats → Format}/index.d.ts +0 -0
  487. /package/dist/types/src/internal/{formats → Format}/number.d.ts +0 -0
  488. /package/dist/types/src/internal/{formats → Format}/object.d.ts +0 -0
  489. /package/dist/types/src/internal/{formats → Format}/select.d.ts +0 -0
  490. /package/dist/types/src/internal/{formats → Format}/string.d.ts +0 -0
  491. /package/dist/types/src/internal/{json-schema → JsonSchema}/effect-schema.test.d.ts +0 -0
  492. /package/dist/types/src/internal/{json-schema → JsonSchema}/index.d.ts +0 -0
  493. /package/dist/types/src/internal/{json-schema → JsonSchema}/json-schema-normalize.d.ts +0 -0
  494. /package/dist/types/src/internal/{json-schema → JsonSchema}/json-schema.test.d.ts +0 -0
  495. /package/dist/types/src/internal/{object → Obj}/clone.d.ts +0 -0
  496. /package/dist/types/src/internal/{object → Obj}/common.d.ts +0 -0
  497. /package/dist/types/src/internal/{object → Obj}/create-object.test.d.ts +0 -0
  498. /package/dist/types/src/internal/{object → Obj}/ids.d.ts +0 -0
  499. /package/dist/types/src/internal/{object → Obj}/index.d.ts +0 -0
  500. /package/dist/types/src/internal/{object → Obj}/inspect.d.ts +0 -0
  501. /package/dist/types/src/internal/{object → Obj}/json-serializer.test.d.ts +0 -0
  502. /package/dist/types/src/internal/{object → Obj}/schema-validator.test.d.ts +0 -0
  503. /package/dist/types/src/internal/{object → Obj}/set-value.test.d.ts +0 -0
  504. /package/dist/types/src/internal/{object → Obj}/snapshot.d.ts +0 -0
  505. /package/dist/types/src/internal/{object → Obj}/typed-object.test.d.ts +0 -0
  506. /package/dist/types/src/internal/{ref → Ref}/index.d.ts +0 -0
  507. /package/dist/types/src/internal/{ref → Ref}/ref.test.d.ts +0 -0
  508. /package/dist/types/src/internal/{schema → Type}/compose.test.d.ts +0 -0
  509. /package/dist/types/src/internal/{schema → Type}/index.d.ts +0 -0
  510. /package/dist/types/src/internal/{schema → Type}/manipulation.d.ts +0 -0
  511. /package/dist/types/src/internal/{proxy → common/proxy}/change.test.d.ts +0 -0
  512. /package/dist/types/src/internal/{proxy → common/proxy}/define-hidden-property.d.ts +0 -0
  513. /package/dist/types/src/internal/{proxy → common/proxy}/event-batch.d.ts +0 -0
  514. /package/dist/types/src/internal/{proxy → common/proxy}/handler.test.d.ts +0 -0
  515. /package/dist/types/src/internal/{proxy → common/proxy}/index.d.ts +0 -0
  516. /package/dist/types/src/internal/{proxy → common/proxy}/json-serializer.d.ts +0 -0
  517. /package/dist/types/src/internal/{proxy → common/proxy}/make-object.d.ts +0 -0
  518. /package/dist/types/src/internal/{proxy → common/proxy}/ownership.d.ts +0 -0
  519. /package/dist/types/src/internal/{proxy → common/proxy}/proxy-types.d.ts +0 -0
  520. /package/dist/types/src/internal/{proxy → common/proxy}/proxy-utils.d.ts +0 -0
  521. /package/dist/types/src/internal/{proxy → common/proxy}/schema-validator.d.ts +0 -0
  522. /package/dist/types/src/internal/{proxy → common/proxy}/schema.test.d.ts +0 -0
  523. /package/dist/types/src/internal/{proxy → common/proxy}/symbols.d.ts +0 -0
  524. /package/dist/types/src/internal/{proxy → common/proxy}/typed-handler.d.ts +0 -0
  525. /package/dist/types/src/internal/{proxy → common/proxy}/typed-handler.test.d.ts +0 -0
  526. /package/dist/types/src/internal/{proxy → common/proxy}/typed-object.test.d.ts +0 -0
  527. /package/dist/types/src/internal/{types → common/types}/base.d.ts +0 -0
  528. /package/dist/types/src/internal/{types → common/types}/typename.d.ts +0 -0
  529. /package/src/internal/{entities → Entity}/util.ts +0 -0
  530. /package/src/internal/{formats → Format}/date.ts +0 -0
  531. /package/src/internal/{formats → Format}/format.ts +0 -0
  532. /package/src/internal/{formats → Format}/index.ts +0 -0
  533. /package/src/internal/{formats → Format}/number.ts +0 -0
  534. /package/src/internal/{formats → Format}/object.ts +0 -0
  535. /package/src/internal/{formats → Format}/select.ts +0 -0
  536. /package/src/internal/{formats → Format}/string.ts +0 -0
  537. /package/src/internal/{json-schema → JsonSchema}/effect-schema.test.ts +0 -0
  538. /package/src/internal/{json-schema → JsonSchema}/index.ts +0 -0
  539. /package/src/internal/{json-schema → JsonSchema}/json-schema-normalize.ts +0 -0
  540. /package/src/internal/{object → Obj}/ids.ts +0 -0
  541. /package/src/internal/{object → Obj}/index.ts +0 -0
  542. /package/src/internal/{object → Obj}/schema-validator.test.ts +0 -0
  543. /package/src/internal/{ref → Ref}/index.ts +0 -0
  544. /package/src/internal/{schema → Type}/index.ts +0 -0
  545. /package/src/internal/{proxy → common/proxy}/define-hidden-property.ts +0 -0
  546. /package/src/internal/{proxy → common/proxy}/event-batch.ts +0 -0
  547. /package/src/internal/{proxy → common/proxy}/index.ts +0 -0
  548. /package/src/internal/{proxy → common/proxy}/proxy-types.ts +0 -0
  549. /package/src/internal/{proxy → common/proxy}/proxy-utils.ts +0 -0
  550. /package/src/internal/{proxy → common/proxy}/schema-validator.ts +0 -0
  551. /package/src/internal/{proxy → common/proxy}/symbols.ts +0 -0
  552. /package/src/internal/{types → common/types}/base.ts +0 -0
  553. /package/src/internal/{types → common/types}/typename.ts +0 -0
  554. /package/src/internal/{types → common/types}/version.ts +0 -0
@@ -0,0 +1,36 @@
1
+ import {
2
+ getSchemaDXN
3
+ } from "./chunk-GECFB2UL.mjs";
4
+ import {
5
+ __export
6
+ } from "./chunk-J5LGTIGS.mjs";
7
+
8
+ // src/Migration.ts
9
+ var Migration_exports = {};
10
+ __export(Migration_exports, {
11
+ define: () => define
12
+ });
13
+ var define = (options) => {
14
+ const fromType = getSchemaDXN(options.from);
15
+ if (!fromType) {
16
+ throw new Error("Invalid from schema");
17
+ }
18
+ const toType = getSchemaDXN(options.to);
19
+ if (!toType) {
20
+ throw new Error("Invalid to schema");
21
+ }
22
+ return {
23
+ fromType,
24
+ toType,
25
+ fromSchema: options.from,
26
+ toSchema: options.to,
27
+ transform: options.transform,
28
+ onMigration: options.onMigration
29
+ };
30
+ };
31
+
32
+ export {
33
+ define,
34
+ Migration_exports
35
+ };
36
+ //# sourceMappingURL=chunk-PRCRETDK.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/Migration.ts"],
4
+ "sourcesContent": ["//\n// Copyright 2024 DXOS.org\n//\n\n// @import-as-namespace\n\nimport type * as Schema from 'effect/Schema';\n\nimport { type DXN } from '@dxos/keys';\n\nimport type * as Database from './Database';\nimport type * as Entity from './Entity';\nimport { getSchemaDXN } from './internal';\n\ntype DefineObjectMigrationOptions<From extends Schema.Schema.AnyNoContext, To extends Schema.Schema.AnyNoContext> = {\n from: From;\n to: To;\n /**\n * Pure function that converts the old object data to the new object data.\n */\n // TODO(dmaretskyi): `id` should not be a part of the schema.\n transform: (\n from: Schema.Schema.Type<From>,\n context: ObjectMigrationContext,\n ) => Promise<Omit<Schema.Schema.Type<To>, 'id' | Entity.KindId>>;\n\n /**\n * Callback that is called after the object is migrated. Called for every object that is migrated.\n *\n * NOTE: Database mutations performed in this callback are not guaranteed to be idempotent.\n * If multiple peers run the migration separately, the effects may be applied multiple times.\n */\n onMigration: (params: OnMigrateProps<From, To>) => Promise<void>;\n};\n\n/**\n * Context passed to object migration callbacks.\n */\nexport type ObjectMigrationContext = {\n db: Database.Database;\n};\n\ntype OnMigrateProps<From extends Schema.Schema.AnyNoContext, To extends Schema.Schema.AnyNoContext> = {\n before: Schema.Schema.Type<From>;\n object: Schema.Schema.Type<To>;\n db: Database.Database;\n};\n\n/**\n * Definition of a migration from one object schema version to another.\n */\nexport type ObjectMigration = {\n fromType: DXN;\n toType: DXN;\n fromSchema: Schema.Schema.AnyNoContext;\n toSchema: Schema.Schema.AnyNoContext;\n transform: (from: unknown, context: ObjectMigrationContext) => Promise<unknown>;\n onMigration: (params: OnMigrateProps<any, any>) => Promise<void>;\n};\n\n/**\n * Define a migration between two object schemas.\n *\n * @example\n * ```ts\n * const migration = Migration.define({\n * from: ContactV1,\n * to: ContactV2,\n * transform: async (from) => ({ name: `${from.firstName} ${from.lastName}` }),\n * onMigration: async () => {},\n * });\n * ```\n */\nexport const define = <From extends Schema.Schema.AnyNoContext, To extends Schema.Schema.AnyNoContext>(\n options: DefineObjectMigrationOptions<From, To>,\n): ObjectMigration => {\n const fromType = getSchemaDXN(options.from);\n if (!fromType) {\n throw new Error('Invalid from schema');\n }\n const toType = getSchemaDXN(options.to);\n if (!toType) {\n throw new Error('Invalid to schema');\n }\n\n return {\n fromType,\n toType,\n fromSchema: options.from,\n toSchema: options.to,\n transform: options.transform as any,\n onMigration: options.onMigration as any,\n };\n};\n"],
5
+ "mappings": ";;;;;;;;AAAA;;;;AAyEO,IAAMA,SAAS,CACpBC,YAAAA;AAEA,QAAMC,WAAWC,aAAaF,QAAQG,IAAI;AAC1C,MAAI,CAACF,UAAU;AACb,UAAM,IAAIG,MAAM,qBAAA;EAClB;AACA,QAAMC,SAASH,aAAaF,QAAQM,EAAE;AACtC,MAAI,CAACD,QAAQ;AACX,UAAM,IAAID,MAAM,mBAAA;EAClB;AAEA,SAAO;IACLH;IACAI;IACAE,YAAYP,QAAQG;IACpBK,UAAUR,QAAQM;IAClBG,WAAWT,QAAQS;IACnBC,aAAaV,QAAQU;EACvB;AACF;",
6
+ "names": ["define", "options", "fromType", "getSchemaDXN", "from", "Error", "toType", "to", "fromSchema", "toSchema", "transform", "onMigration"]
7
+ }
@@ -1,21 +1,26 @@
1
1
  import {
2
+ Feed,
2
3
  getQueueDxn
3
- } from "./chunk-GFNCSK7F.mjs";
4
+ } from "./chunk-TTUIJXGD.mjs";
4
5
  import {
5
6
  everything,
6
7
  is,
7
8
  props,
8
9
  type
9
- } from "./chunk-ALOGSVBP.mjs";
10
+ } from "./chunk-3U5PIVPZ.mjs";
10
11
  import {
11
- getTypename
12
- } from "./chunk-KGV3QIRX.mjs";
12
+ getTypename,
13
+ instanceOf
14
+ } from "./chunk-NCSIQP3L.mjs";
15
+ import {
16
+ prettyQuery
17
+ } from "./chunk-AVPYX7FF.mjs";
13
18
  import {
14
19
  isDatabase
15
- } from "./chunk-5ELDDYWE.mjs";
20
+ } from "./chunk-4VTRFJV3.mjs";
16
21
  import {
17
22
  getTypeDXNFromSpecifier
18
- } from "./chunk-F7KMHDPJ.mjs";
23
+ } from "./chunk-GECFB2UL.mjs";
19
24
  import {
20
25
  __export
21
26
  } from "./chunk-J5LGTIGS.mjs";
@@ -27,6 +32,7 @@ __export(Query_exports, {
27
32
  from: () => from,
28
33
  fromAst: () => fromAst,
29
34
  is: () => is2,
35
+ pretty: () => pretty,
30
36
  select: () => select,
31
37
  type: () => type2,
32
38
  without: () => without
@@ -128,6 +134,9 @@ var QueryClass = class _QueryClass {
128
134
  });
129
135
  }
130
136
  from(arg, options) {
137
+ if (arg == null) {
138
+ throw new TypeError('Query.from() requires a valid data source argument (database, feed, query, scope, or "all-accessible-spaces").');
139
+ }
131
140
  if (is2(arg)) {
132
141
  return new _QueryClass({
133
142
  type: "from",
@@ -183,12 +192,17 @@ var QueryClass = class _QueryClass {
183
192
  }
184
193
  if (items.length > 0) {
185
194
  const typename = getTypename(items[0]);
186
- if (typename === "dxos.org/type/View") {
195
+ if (typename === "org.dxos.type.view") {
187
196
  throw new Error("Query.from(view) is not yet supported.");
188
197
  }
189
- if (typename === "dxos.org/type/Collection") {
198
+ if (typename === "org.dxos.type.collection") {
190
199
  throw new Error("Query.from(collection) is not yet supported.");
191
200
  }
201
+ for (const item of items) {
202
+ if (!instanceOf(Feed, item)) {
203
+ throw new TypeError(`Query.from() expects Feed objects (org.dxos.type.feed), but received an object with typename '${typename ?? "unknown"}'.`);
204
+ }
205
+ }
192
206
  }
193
207
  const feeds = items;
194
208
  const queueDxns = feeds.flatMap((feed) => {
@@ -215,6 +229,25 @@ var QueryClass = class _QueryClass {
215
229
  options
216
230
  });
217
231
  }
232
+ debugLabel(label) {
233
+ if (this.ast.type === "options") {
234
+ return new _QueryClass({
235
+ type: "options",
236
+ query: this.ast.query,
237
+ options: {
238
+ ...this.ast.options,
239
+ debugLabel: label
240
+ }
241
+ });
242
+ }
243
+ return new _QueryClass({
244
+ type: "options",
245
+ query: this.ast,
246
+ options: {
247
+ debugLabel: label
248
+ }
249
+ });
250
+ }
218
251
  };
219
252
  var is2 = (value) => {
220
253
  return typeof value === "object" && value !== null && "~Query" in value;
@@ -269,6 +302,7 @@ var _isScope = (value) => {
269
302
  }
270
303
  return Object.keys(value).every((key) => SCOPE_KEYS.has(key));
271
304
  };
305
+ var pretty = (query) => prettyQuery(query.ast);
272
306
 
273
307
  export {
274
308
  is2 as is,
@@ -278,6 +312,7 @@ export {
278
312
  all,
279
313
  without,
280
314
  from,
315
+ pretty,
281
316
  Query_exports
282
317
  };
283
- //# sourceMappingURL=chunk-AQP4QKYP.mjs.map
318
+ //# sourceMappingURL=chunk-S4JXD2RO.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/Query.ts"],
4
+ "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\n// @import-as-namespace\n\nimport type * as EffectArray from 'effect/Array';\nimport type * as Schema from 'effect/Schema';\n\nimport { type QueryAST } from '@dxos/echo-protocol';\n\nimport type * as Collection from './Collection';\nimport * as Database from './Database';\nimport type * as Dataset from './Dataset';\nimport * as Feed from './Feed';\nimport * as Filter from './Filter';\nimport * as internal from './internal';\nimport * as Obj from './Obj';\nimport type * as Order from './Order';\nimport type * as Ref from './Ref';\nimport type * as Relation from './Relation';\nimport type * as View from './View';\n\n// TODO(dmaretskyi): Split up into interfaces for objects and relations so they can have separate verbs.\n// TODO(dmaretskyi): Undirected relation traversals.\n// TODO(wittjosiah): Make Filter & Query pipeable.\n\n/**\n * All property paths inside T that are references.\n */\n// TODO(dmaretskyi): Filter only properties that are references (or optional references, or unions that include references).\ntype RefPropKey<T> = keyof T & string;\n\n// TODO(burdon): Narrow T to Entity.Unknown?\nexport interface Query<T> {\n // TODO(dmaretskyi): See new effect-schema approach to variance.\n '~Query': { value: T };\n\n ast: QueryAST.Query;\n\n /**\n * Filter the current selection based on a filter.\n * @param filter - Filter to select the objects.\n * @returns Query for the selected objects.\n */\n 'select'(filter: Filter.Filter<T>): Query<T>;\n 'select'(props: Filter.Props<T>): Query<T>;\n\n /**\n * Traverse an outgoing reference.\n * @param key - Property path inside T that is a reference or optional reference.\n * @returns Query for the target of the reference.\n */\n 'reference'<K extends RefPropKey<T>>(\n key: K,\n ): Query<\n T[K] extends Ref.Unknown\n ? Ref.Target<T[K]>\n : T[K] extends Ref.Unknown | undefined\n ? Ref.Target<Exclude<T[K], undefined>>\n : never\n >;\n\n /**\n * Find objects referencing this object.\n * @param target - Schema of the referencing object. If not provided, matches any type.\n * @param key - Property path inside the referencing object that is a reference. If not provided, matches any property.\n * @returns Query for the referencing objects.\n */\n // TODO(dmaretskyi): any way to enforce `Ref.Target<Schema.Schema.Type<S>[key]> == T`?\n // TODO(dmaretskyi): Ability to go through arrays of references.\n 'referencedBy'<S extends Schema.Schema.All>(\n target: S | string,\n key: RefPropKey<Schema.Schema.Type<S>>,\n ): Query<Schema.Schema.Type<S>>;\n 'referencedBy'<S extends Schema.Schema.All>(target: S | string): Query<Schema.Schema.Type<S>>;\n 'referencedBy'(): Query<any>;\n\n /**\n * Find relations where this object is the source.\n * @returns Query for the relation objects.\n * @param relation - Schema of the relation.\n * @param predicates - Predicates to filter the relation objects.\n */\n 'sourceOf'<S extends Schema.Schema.All>(\n relation?: S | string,\n predicates?: Filter.Props<Schema.Schema.Type<S>>,\n ): Query<Schema.Schema.Type<S>>;\n\n /**\n * Find relations where this object is the target.\n * @returns Query for the relation objects.\n * @param relation - Schema of the relation.\n * @param predicates - Predicates to filter the relation objects.\n */\n 'targetOf'<S extends Schema.Schema.All>(\n relation?: S | string,\n predicates?: Filter.Props<Schema.Schema.Type<S>>,\n ): Query<Schema.Schema.Type<S>>;\n\n /**\n * For a query for relations, get the source objects.\n * @returns Query for the source objects.\n */\n 'source'(): Query<Relation.SourceOf<T>>;\n\n /**\n * For a query for relations, get the target objects.\n * @returns Query for the target objects.\n */\n 'target'(): Query<Relation.TargetOf<T>>;\n\n /**\n * Get the parent object of the current selection.\n * @returns Query for the parent objects.\n */\n 'parent'(): Query<any>;\n\n /**\n * Get all child objects of the current selection.\n * @returns Query for the child objects.\n */\n 'children'(): Query<any>;\n\n /**\n * Order the query results.\n * Orders are specified in priority order. The first order will be applied first, etc.\n * @param order - Order to sort the results.\n * @returns Query for the ordered results.\n */\n 'orderBy'(...order: EffectArray.NonEmptyArray<Order.Order<T>>): Query<T>;\n\n /**\n * Limit the number of results.\n * @param limit - Maximum number of results to return.\n * @returns Query for the limited results.\n */\n 'limit'(limit: number): Query<T>;\n\n /**\n * Query from selected databases only.\n *\n * Example:\n *\n * ```ts\n * Query.select(Filter.type(Person)).from(db);\n * ```\n *\n * @param options.includeFeeds [false] - Whether to include feeds in the query. Default is to query from automerge documents only.\n */\n 'from'(database: Database.Database | Database.Database[], options?: { includeFeeds?: boolean }): Query<T>;\n\n /**\n * Query from selected feeds only.\n *\n * Example:\n *\n * ```ts\n * Query.select(Filter.type(Person)).from(feed);\n * ```\n *\n */\n 'from'(feeds: Feed.Feed | Feed.Feed[]): Query<T>;\n\n /**\n * Query from all accessible spaces.\n *\n * Example:\n *\n * ```ts\n * Query.select(Filter.type(Person)).from('all-accessible-spaces');\n * ```\n *\n * @param options.includeFeeds [false] - Whether to include feeds in the query. Default is to query from automerge documents only.\n */\n 'from'(allSpaces: 'all-accessible-spaces', options?: { includeFeeds?: boolean }): Query<T>;\n\n /**\n * Query from a dataset.\n * Currently only feeds are supported.\n *\n * Example:\n *\n * ```ts\n * Query.type(Person).from(feed);\n * ```\n */\n 'from'(dataset: Dataset.Dataset): Query<T>;\n\n /**\n * Query from the results of another query.\n *\n * Example:\n *\n * ```ts\n * Query.select(Filter.props({ foo: 'foo' })).from(Query.select(Filter.type(Contact)).reference('org'));\n * ```\n */\n 'from'(query: Any): Query<T>;\n\n /**\n * Query from a raw scope specification.\n */\n 'from'(scope: QueryAST.Scope): Query<T>;\n\n /**\n * Add options to a query.\n */\n 'options'(options: QueryAST.QueryOptions): Query<T>;\n\n /**\n * Attach a diagnostic label for logs and tooling (execution semantics unchanged).\n */\n 'debugLabel'(label: string): Query<T>;\n}\n\nexport type Any = Query<any>;\n\nexport type Type<Q extends Any> = Q extends Query<infer T> ? T : never;\n\nclass QueryClass implements Any {\n private static 'variance': Any['~Query'] = {} as Any['~Query'];\n\n constructor(public readonly ast: QueryAST.Query) {}\n\n '~Query' = QueryClass.variance;\n\n select(filter: Filter.Any | Filter.Props<any>): Any {\n if (Filter.is(filter)) {\n return new QueryClass({\n type: 'filter',\n selection: this.ast,\n filter: filter.ast,\n });\n } else {\n return new QueryClass({\n type: 'filter',\n selection: this.ast,\n filter: Filter.props(filter).ast,\n });\n }\n }\n\n reference(key: string): Any {\n return new QueryClass({\n type: 'reference-traversal',\n anchor: this.ast,\n property: key,\n });\n }\n\n referencedBy(target?: Schema.Schema.All | string, key?: string): Any {\n const dxn = target !== undefined ? internal.getTypeDXNFromSpecifier(target) : null;\n return new QueryClass({\n type: 'incoming-references',\n anchor: this.ast,\n property: key ?? null,\n typename: dxn?.toString() ?? null,\n });\n }\n\n sourceOf(relation?: Schema.Schema.All | string, predicates?: Filter.Props<unknown> | undefined): Any {\n return new QueryClass({\n type: 'relation',\n anchor: this.ast,\n direction: 'outgoing',\n filter: relation !== undefined ? Filter.type(relation, predicates).ast : undefined,\n });\n }\n\n targetOf(relation?: Schema.Schema.All | string, predicates?: Filter.Props<unknown> | undefined): Any {\n return new QueryClass({\n type: 'relation',\n anchor: this.ast,\n direction: 'incoming',\n filter: relation !== undefined ? Filter.type(relation, predicates).ast : undefined,\n });\n }\n\n source(): Any {\n return new QueryClass({\n type: 'relation-traversal',\n anchor: this.ast,\n direction: 'source',\n });\n }\n\n target(): Any {\n return new QueryClass({\n type: 'relation-traversal',\n anchor: this.ast,\n direction: 'target',\n });\n }\n\n parent(): Any {\n return new QueryClass({\n type: 'hierarchy-traversal',\n anchor: this.ast,\n direction: 'to-parent',\n });\n }\n\n children(): Any {\n return new QueryClass({\n type: 'hierarchy-traversal',\n anchor: this.ast,\n direction: 'to-children',\n });\n }\n\n orderBy(...order: Order.Order<any>[]): Any {\n return new QueryClass({\n type: 'order',\n query: this.ast,\n order: order.map((o) => o.ast),\n });\n }\n\n limit(limit: number): Any {\n return new QueryClass({\n type: 'limit',\n query: this.ast,\n limit,\n });\n }\n\n from(\n arg:\n | Database.Database\n | Database.Database[]\n | Feed.Feed\n | Feed.Feed[]\n | Collection.Collection\n | View.View\n | Any\n | QueryAST.Scope\n | 'all-accessible-spaces',\n options?: { includeFeeds?: boolean },\n ): Any {\n if (arg == null) {\n throw new TypeError(\n 'Query.from() requires a valid data source argument (database, feed, query, scope, or \"all-accessible-spaces\").',\n );\n }\n\n if (is(arg)) {\n return new QueryClass({\n type: 'from',\n query: this.ast,\n from: { _tag: 'query', query: arg.ast },\n });\n }\n\n if (arg === 'all-accessible-spaces') {\n return new QueryClass({\n type: 'from',\n query: this.ast,\n from: {\n _tag: 'scope',\n scope: {\n ...(options?.includeFeeds ? { allQueuesFromSpaces: true } : {}),\n },\n },\n });\n }\n\n if (_isScope(arg)) {\n return new QueryClass({\n type: 'from',\n query: this.ast,\n from: { _tag: 'scope', scope: arg },\n });\n }\n\n const items = Array.isArray(arg) ? arg : [arg];\n\n if (items.length > 0 && Database.isDatabase(items[0])) {\n const databases = items as Database.Database[];\n return new QueryClass({\n type: 'from',\n query: this.ast,\n from: {\n _tag: 'scope',\n scope: {\n spaceIds: databases.map((db) => db.spaceId),\n ...(options?.includeFeeds ? { allQueuesFromSpaces: true } : {}),\n },\n },\n });\n }\n\n if (items.length > 0) {\n const typename = Obj.getTypename(items[0] as Obj.Unknown);\n // TODO(dmaretskyi): Support querying from views.\n if (typename === 'org.dxos.type.view') {\n throw new Error('Query.from(view) is not yet supported.');\n }\n // TODO(dmaretskyi): Support querying from collections.\n if (typename === 'org.dxos.type.collection') {\n throw new Error('Query.from(collection) is not yet supported.');\n }\n // Validate that the items are Feed.Feed instances.\n for (const item of items) {\n if (!Obj.instanceOf(Feed.Feed, item)) {\n throw new TypeError(\n `Query.from() expects Feed objects (org.dxos.type.feed), but received an object with typename '${typename ?? 'unknown'}'.`,\n );\n }\n }\n }\n\n const feeds = items as Feed.Feed[];\n const queueDxns = feeds.flatMap((feed) => {\n const dxn = Feed.getQueueDxn(feed);\n return dxn ? [dxn.toString()] : [];\n });\n return new QueryClass({\n type: 'from',\n query: this.ast,\n from: {\n _tag: 'scope',\n scope: {\n queues: queueDxns,\n },\n },\n });\n }\n\n options(options: QueryAST.QueryOptions): Any {\n return new QueryClass({\n type: 'options',\n query: this.ast,\n options,\n });\n }\n\n debugLabel(label: string): Any {\n if (this.ast.type === 'options') {\n return new QueryClass({\n type: 'options',\n query: this.ast.query,\n options: { ...this.ast.options, debugLabel: label },\n });\n }\n return new QueryClass({\n type: 'options',\n query: this.ast,\n options: { debugLabel: label },\n });\n }\n}\n\nexport const is = (value: unknown): value is Any => {\n return typeof value === 'object' && value !== null && '~Query' in value;\n};\n\n/** Construct a query from an ast. */\nexport const fromAst = (ast: QueryAST.Query): Any => {\n return new QueryClass(ast);\n};\n\n/**\n * Select objects based on a filter.\n * @param filter - Filter to select the objects.\n * @returns Query for the selected objects.\n */\nexport const select = <F extends Filter.Any>(filter: F): Query<Filter.Type<F>> => {\n return new QueryClass({\n type: 'select',\n filter: filter.ast,\n });\n};\n\n/**\n * Query for objects of a given schema.\n * @param schema - Schema of the objects.\n * @param predicates - Predicates to filter the objects.\n * @returns Query for the objects.\n *\n * Shorthand for: `Query.select(Filter.type(schema, predicates))`.\n */\nexport const type: {\n <S extends Schema.Schema.All>(\n schema: S,\n predicates?: Filter.Props<Schema.Schema.Type<S>>,\n ): Query<Schema.Schema.Type<S>>;\n (schema: string, predicates?: Filter.Props<unknown>): Query<any>;\n} = (schema: Schema.Schema.All | string, predicates?: Filter.Props<unknown>): Any => {\n return new QueryClass({\n type: 'select',\n filter: Filter.type(schema, predicates).ast,\n });\n};\n\n/**\n * Combine results of multiple queries.\n * @param queries - Queries to combine.\n * @returns Query for the combined results.\n */\n// TODO(dmaretskyi): Rename to `combine` or `union`.\nexport const all = (...queries: Any[]): Any => {\n if (queries.length === 0) {\n throw new TypeError(\n 'Query.all combines results of multiple queries, to query all objects use Query.select(Filter.everything())',\n );\n }\n return new QueryClass({\n type: 'union',\n queries: queries.map((q) => q.ast),\n });\n};\n\n/**\n * Subtract one query from another.\n * @param source - Query to subtract from.\n * @param exclude - Query to subtract.\n * @returns Query for the results of the source query minus the results of the exclude query.\n */\nexport const without = <T>(source: Query<T>, exclude: Query<T>): Query<T> => {\n return new QueryClass({\n type: 'set-difference',\n source: source.ast,\n exclude: exclude.ast,\n });\n};\n\n/**\n * Create a query scoped to a data source.\n * The returned query selects everything from the source; chain `.select()` to narrow results.\n *\n * @param source - Data source: database, feed, 'all-accessible-spaces', or another query.\n * @returns Query scoped to the given source.\n */\nexport const from = (\n source:\n | Database.Database\n | Database.Database[]\n | Feed.Feed\n | Feed.Feed[]\n | Any\n | QueryAST.Scope\n | 'all-accessible-spaces',\n options?: { includeFeeds?: boolean },\n): Any => {\n const baseQuery: QueryAST.Query = {\n type: 'select',\n filter: Filter.everything().ast,\n };\n const wrapper = new QueryClass(baseQuery);\n return wrapper.from(source as any, options);\n};\n\nconst SCOPE_KEYS = new Set(['spaceIds', 'queues', 'allQueuesFromSpaces']);\n\n/** Detect a raw Scope object (plain object with only Scope-valid keys). */\nconst _isScope = (value: unknown): value is QueryAST.Scope => {\n if (typeof value !== 'object' || value === null || Array.isArray(value)) {\n return false;\n }\n return Object.keys(value).every((key) => SCOPE_KEYS.has(key));\n};\n\n/**\n * Returns a human-readable string representation of a Query AST.\n */\nexport const pretty = (query: Any): string => internal.prettyQuery(query.ast);\n"],
5
+ "mappings": "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",
6
+ "names": ["is", "type", "QueryClass", "ast", "variance", "select", "filter", "is", "type", "selection", "props", "reference", "key", "anchor", "property", "referencedBy", "target", "dxn", "undefined", "getTypeDXNFromSpecifier", "typename", "toString", "sourceOf", "relation", "predicates", "direction", "targetOf", "source", "parent", "children", "orderBy", "order", "query", "map", "o", "limit", "from", "arg", "options", "TypeError", "_tag", "scope", "includeFeeds", "allQueuesFromSpaces", "_isScope", "items", "Array", "isArray", "length", "isDatabase", "databases", "spaceIds", "db", "spaceId", "getTypename", "Error", "item", "instanceOf", "Feed", "feeds", "queueDxns", "flatMap", "feed", "getQueueDxn", "queues", "debugLabel", "label", "value", "fromAst", "schema", "all", "queries", "q", "without", "exclude", "baseQuery", "everything", "wrapper", "SCOPE_KEYS", "Set", "Object", "keys", "every", "has", "pretty", "prettyQuery"]
7
+ }
@@ -4,26 +4,27 @@ import {
4
4
  change,
5
5
  getDXN,
6
6
  getDatabase,
7
- getDescription,
8
7
  getKeys,
9
- getLabel,
10
8
  getMetaChecked,
11
9
  isDeleted,
12
10
  objectToJSON,
13
11
  removeTag,
14
12
  subscribe
15
- } from "./chunk-PP4DNUZU.mjs";
13
+ } from "./chunk-AVPYX7FF.mjs";
16
14
  import {
15
+ getDescription,
17
16
  getEntityKind,
17
+ getLabel,
18
+ getSchema,
18
19
  getTypeDXN,
19
20
  getTypename
20
- } from "./chunk-F7KMHDPJ.mjs";
21
+ } from "./chunk-GECFB2UL.mjs";
21
22
  import {
22
23
  EntityKind,
23
24
  EntityKindSchema,
24
25
  KindId,
25
26
  SnapshotKindId
26
- } from "./chunk-4KG6IGL4.mjs";
27
+ } from "./chunk-N4B7FHQT.mjs";
27
28
  import {
28
29
  __export
29
30
  } from "./chunk-J5LGTIGS.mjs";
@@ -37,7 +38,6 @@ __export(Entity_exports, {
37
38
  Meta: () => Meta,
38
39
  SnapshotKindId: () => SnapshotKindId2,
39
40
  addTag: () => addTag2,
40
- change: () => change2,
41
41
  getDXN: () => getDXN2,
42
42
  getDatabase: () => getDatabase2,
43
43
  getDescription: () => getDescription2,
@@ -45,6 +45,7 @@ __export(Entity_exports, {
45
45
  getKind: () => getKind,
46
46
  getLabel: () => getLabel2,
47
47
  getMeta: () => getMeta,
48
+ getSchema: () => getSchema2,
48
49
  getTypeDXN: () => getTypeDXN2,
49
50
  getTypename: () => getTypename2,
50
51
  isDeleted: () => isDeleted2,
@@ -52,7 +53,8 @@ __export(Entity_exports, {
52
53
  isSnapshot: () => isSnapshot,
53
54
  removeTag: () => removeTag2,
54
55
  subscribe: () => subscribe2,
55
- toJSON: () => toJSON
56
+ toJSON: () => toJSON,
57
+ update: () => update
56
58
  });
57
59
  var KindId2 = KindId;
58
60
  var SnapshotKindId2 = SnapshotKindId;
@@ -74,6 +76,7 @@ var getKind = getEntityKind;
74
76
  var Meta = MetaId;
75
77
  var getDXN2 = (entity) => getDXN(entity);
76
78
  var getTypeDXN2 = getTypeDXN;
79
+ var getSchema2 = getSchema;
77
80
  var getTypename2 = (entity) => getTypename(entity);
78
81
  var getDatabase2 = (entity) => getDatabase(entity);
79
82
  function getMeta(entity) {
@@ -87,7 +90,7 @@ var toJSON = (entity) => objectToJSON(entity);
87
90
  var subscribe2 = (entity, callback) => {
88
91
  return subscribe(entity, callback);
89
92
  };
90
- var change2 = (entity, callback) => {
93
+ var update = (entity, callback) => {
91
94
  change(entity, callback);
92
95
  };
93
96
  var addTag2 = (entity, tag) => addTag(entity, tag);
@@ -104,6 +107,7 @@ export {
104
107
  Meta,
105
108
  getDXN2 as getDXN,
106
109
  getTypeDXN2 as getTypeDXN,
110
+ getSchema2 as getSchema,
107
111
  getTypename2 as getTypename,
108
112
  getDatabase2 as getDatabase,
109
113
  getMeta,
@@ -113,9 +117,9 @@ export {
113
117
  getDescription2 as getDescription,
114
118
  toJSON,
115
119
  subscribe2 as subscribe,
116
- change2 as change,
120
+ update,
117
121
  addTag2 as addTag,
118
122
  removeTag2 as removeTag,
119
123
  Entity_exports
120
124
  };
121
- //# sourceMappingURL=chunk-W7OP5HGZ.mjs.map
125
+ //# sourceMappingURL=chunk-SVEGO3DJ.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/Entity.ts"],
4
+ "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\n// @import-as-namespace\n\nimport type { ForeignKey } from '@dxos/echo-protocol';\nimport type { DXN, ObjectId } from '@dxos/keys';\n\nimport * as internal from './internal';\nimport type * as Relation from './Relation';\nimport type * as Type from './Type';\n\n// Re-export KindId and SnapshotKindId from internal.\nexport const KindId = internal.KindId;\nexport type KindId = typeof internal.KindId;\nexport const SnapshotKindId = internal.SnapshotKindId;\nexport type SnapshotKindId = typeof internal.SnapshotKindId;\n\n// NOTE: Relation does not extend Obj so that, for example, we can prevent Relations from being used as source and target objects.\n// However, we generally refer to Obj and Relation instances as \"objects\",\n// and many API methods accept both Obj.Unknown and Relation.Unknown (i.e., Entity.Unknown) instances.\n\nexport const Kind = internal.EntityKind;\nexport type Kind = internal.EntityKind;\nexport const KindSchema = internal.EntityKindSchema;\n\n/**\n * Assigns a kind to an Object or Relation instance.\n * NOTE: Needed to make `isRelation` and `isObject` checks work.\n */\nexport interface OfKind<K extends Kind> {\n readonly [KindId]: K;\n readonly id: ObjectId;\n}\n\n/**\n * Assigns a snapshot kind to an Object or Relation snapshot.\n */\nexport interface SnapshotOfKind<K extends Kind> {\n readonly [SnapshotKindId]: K;\n readonly id: ObjectId;\n}\n\n/**\n * Obj or Relation with a specific set of properties.\n */\nexport type Entity<Props> = OfKind<Kind> & Props;\n\n/**\n * Unknown Obj or Relation (reactive).\n */\nexport interface Unknown extends OfKind<Kind> {}\n\n/**\n * Snapshot of an Obj or Relation.\n * Branded with SnapshotKindId instead of KindId.\n */\nexport interface Snapshot extends SnapshotOfKind<Kind> {}\n\n/**\n * Object with arbitrary properties.\n *\n * NOTE: Due to how typescript works, this type is not assignable to a specific schema type.\n * In that case, use `Obj.instanceOf` to check if an object is of a specific type.\n *\n * This type is very permissive and allows accessing any property on the object.\n * We should move to Obj.Unknown that is not permissive and requires explicit instanceof checks..\n */\nexport interface Any extends OfKind<Kind> {\n [key: string]: unknown;\n}\n\n/**\n * Returns all properties of an object or relation except for the id and kind.\n */\nexport type Properties<T> = Omit<T, 'id' | KindId | Relation.Source | Relation.Target>;\n\n/**\n * Check if a value is an ECHO entity (object or relation).\n * Returns `false` for snapshots.\n */\nexport const isEntity = (value: unknown): value is Unknown => {\n if (typeof value !== 'object' || value === null) {\n return false;\n }\n return (value as any)[KindId] !== undefined;\n};\n\n/**\n * Check if a value is an ECHO entity snapshot.\n * Returns `false` for entities.\n */\nexport const isSnapshot = (value: unknown): value is Snapshot => {\n if (typeof value !== 'object' || value === null) {\n return false;\n }\n return (value as any)[SnapshotKindId] !== undefined;\n};\n\n// TODO(dmaretskyi): Type introspection -- move to kind.\nexport const getKind = internal.getEntityKind;\n\n/**\n * Property that accesses metadata for an entity.\n */\nexport const Meta: unique symbol = internal.MetaId as any;\n\n/**\n * Property that accesses metadata for an entity.\n */\nexport type Meta = typeof Meta;\n\n//\n// Entity-level functions that work on any entity (object or relation).\n// Use these when you don't know or care about the specific entity kind.\n// For kind-specific functions, use Obj.* or Relation.*.\n//\n\n/**\n * JSON representation of an entity.\n */\nexport type JSON = internal.ObjectJSON;\n\n/**\n * Get the DXN of an entity (object or relation).\n */\nexport const getDXN = (entity: Unknown | Snapshot): DXN => internal.getDXN(entity);\n\n/**\n * Get the DXN of an entity's type.\n */\nexport const getTypeDXN = internal.getTypeDXN;\n\n/**\n * Get the schema of an entity.\n * Returns the branded ECHO schema used to create the entity.\n */\nexport const getSchema: (entity: Unknown | Snapshot) => Type.AnyEntity | undefined = internal.getSchema as any;\n\n/**\n * Get the typename of an entity's type.\n */\nexport const getTypename = (entity: Unknown | Snapshot): string | undefined => internal.getTypename(entity);\n\n/**\n * Get the database an entity belongs to.\n */\nexport const getDatabase = (entity: Unknown | Snapshot): any | undefined => internal.getDatabase(entity);\n\n/**\n * Get the metadata for an entity.\n * Returns mutable meta when passed a mutable entity (inside change callback).\n * Returns read-only meta when passed a regular entity or snapshot.\n */\n// TODO(wittjosiah): When passed a Snapshot, should return a snapshot of meta, not the live meta proxy.\nexport function getMeta(entity: Mutable<Unknown>): internal.ObjectMeta;\nexport function getMeta(entity: Unknown | Snapshot): internal.ReadonlyMeta;\nexport function getMeta(entity: Unknown | Snapshot | Mutable<Unknown>): internal.ObjectMeta | internal.ReadonlyMeta {\n return internal.getMetaChecked(entity);\n}\n\n/**\n * Get foreign keys for an entity from the specified source.\n */\nexport const getKeys = (entity: Unknown | Snapshot, source: string): ForeignKey[] => internal.getKeys(entity, source);\n\n/**\n * Check if an entity is deleted.\n */\nexport const isDeleted = (entity: Unknown | Snapshot): boolean => internal.isDeleted(entity);\n\n/**\n * Get the label of an entity.\n */\nexport const getLabel = (entity: Unknown | Snapshot): string | undefined => internal.getLabel(entity);\n\n/**\n * Get the description of an entity.\n */\nexport const getDescription = (entity: Unknown | Snapshot): string | undefined => internal.getDescription(entity);\n\n/**\n * Convert an entity to its JSON representation.\n */\nexport const toJSON = (entity: Unknown | Snapshot): JSON => internal.objectToJSON(entity);\n\n/**\n * Subscribe to changes on an entity (object or relation).\n * @returns Unsubscribe function.\n */\nexport const subscribe = (entity: Unknown, callback: () => void): (() => void) => {\n return internal.subscribe(entity, callback);\n};\n\n//\n// Change\n//\n\n/**\n * Used to provide a mutable view of an entity within `Entity.update`.\n */\nexport type Mutable<T> = internal.Mutable<T>;\n\n/**\n * Perform mutations on an entity (object or relation) within a change context.\n *\n * Entities are read-only by default. Mutations are batched and notifications fire\n * when the callback completes. Direct mutations outside of `Entity.update` will throw\n * at runtime.\n *\n * @param entity - The echo entity (object or relation) to mutate.\n * @param callback - Receives a mutable view of the entity. All mutations must occur here.\n *\n * @example\n * ```typescript\n * // Mutate within Entity.update\n * Entity.update(entity, (obj) => {\n * obj.name = 'Updated';\n * obj.count = 42;\n * });\n *\n * // Direct mutation throws\n * entity.name = 'Bob'; // Error: Cannot modify outside Entity.update()\n * ```\n *\n * Note: For type-specific operations, prefer `Obj.update` or `Relation.update`.\n */\nexport const update = <T extends Unknown>(entity: T, callback: internal.ChangeCallback<T>): void => {\n internal.change(entity, callback);\n};\n\n/**\n * Add a tag to an entity.\n * Must be called within an `Entity.update`, `Obj.update`, or `Relation.update` callback.\n */\nexport const addTag = (entity: Mutable<Unknown>, tag: string): void => internal.addTag(entity, tag);\n\n/**\n * Remove a tag from an entity.\n * Must be called within an `Entity.update`, `Obj.update`, or `Relation.update` callback.\n */\nexport const removeTag = (entity: Mutable<Unknown>, tag: string): void => internal.removeTag(entity, tag);\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;;;gBAAAA;EAAA;;wBAAAC;EAAA,cAAAC;EAAA,cAAAC;EAAA,mBAAAC;EAAA,sBAAAC;EAAA,eAAAC;EAAA;kBAAAC;EAAA;mBAAAC;EAAA,kBAAAC;EAAA,mBAAAC;EAAA,iBAAAC;EAAA;;mBAAAC;EAAA,iBAAAC;EAAA;;;AAcO,IAAMC,UAAkBA;AAExB,IAAMC,kBAA0BA;AAOhC,IAAMC,OAAgBC;AAEtB,IAAMC,aAAsBC;AAyD5B,IAAMC,WAAW,CAACC,UAAAA;AACvB,MAAI,OAAOA,UAAU,YAAYA,UAAU,MAAM;AAC/C,WAAO;EACT;AACA,SAAQA,MAAcP,OAAAA,MAAYQ;AACpC;AAMO,IAAMC,aAAa,CAACF,UAAAA;AACzB,MAAI,OAAOA,UAAU,YAAYA,UAAU,MAAM;AAC/C,WAAO;EACT;AACA,SAAQA,MAAcN,eAAAA,MAAoBO;AAC5C;AAGO,IAAME,UAAmBC;AAKzB,IAAMC,OAA+BC;AAqBrC,IAAMC,UAAS,CAACC,WAA6CD,OAAOC,MAAAA;AAKpE,IAAMC,cAAsBA;AAM5B,IAAMC,aAAiFA;AAKvF,IAAMC,eAAc,CAACH,WAA4DG,YAAYH,MAAAA;AAK7F,IAAMI,eAAc,CAACJ,WAAyDI,YAAYJ,MAAAA;AAU1F,SAASK,QAAQL,QAA6C;AACnE,SAAgBM,eAAeN,MAAAA;AACjC;AAKO,IAAMO,WAAU,CAACP,QAA4BQ,WAA0CD,QAAQP,QAAQQ,MAAAA;AAKvG,IAAMC,aAAY,CAACT,WAAiDS,UAAUT,MAAAA;AAK9E,IAAMU,YAAW,CAACV,WAA4DU,SAASV,MAAAA;AAKvF,IAAMW,kBAAiB,CAACX,WAA4DW,eAAeX,MAAAA;AAKnG,IAAMY,SAAS,CAACZ,WAA8Ca,aAAab,MAAAA;AAM3E,IAAMc,aAAY,CAACd,QAAiBe,aAAAA;AACzC,SAAgBD,UAAUd,QAAQe,QAAAA;AACpC;AAmCO,IAAMC,SAAS,CAAoBhB,QAAWe,aAAAA;AACnDE,EAASC,OAAOlB,QAAQe,QAAAA;AAC1B;AAMO,IAAMI,UAAS,CAACnB,QAA0BoB,QAA+BD,OAAOnB,QAAQoB,GAAAA;AAMxF,IAAMC,aAAY,CAACrB,QAA0BoB,QAA+BC,UAAUrB,QAAQoB,GAAAA;",
6
+ "names": ["KindId", "SnapshotKindId", "addTag", "getDXN", "getDatabase", "getDescription", "getKeys", "getLabel", "getSchema", "getTypeDXN", "getTypename", "isDeleted", "removeTag", "subscribe", "KindId", "SnapshotKindId", "Kind", "EntityKind", "KindSchema", "EntityKindSchema", "isEntity", "value", "undefined", "isSnapshot", "getKind", "getEntityKind", "Meta", "MetaId", "getDXN", "entity", "getTypeDXN", "getSchema", "getTypename", "getDatabase", "getMeta", "getMetaChecked", "getKeys", "source", "isDeleted", "getLabel", "getDescription", "toJSON", "objectToJSON", "subscribe", "callback", "update", "internal", "change", "addTag", "tag", "removeTag"]
7
+ }
@@ -1,8 +1,8 @@
1
1
  import {
2
2
  createAnnotationHelper
3
- } from "./chunk-4KG6IGL4.mjs";
3
+ } from "./chunk-N4B7FHQT.mjs";
4
4
 
5
- // src/internal/formats/types.ts
5
+ // src/internal/Format/types.ts
6
6
  import * as Function from "effect/Function";
7
7
  import * as Option from "effect/Option";
8
8
  import * as SchemaAST from "effect/SchemaAST";
@@ -107,7 +107,7 @@ var OptionsAnnotationId = /* @__PURE__ */ Symbol.for("@dxos/schema/annotation/Op
107
107
  var OptionsAnnotation = createAnnotationHelper(OptionsAnnotationId);
108
108
  var getOptionsAnnotation = (node) => Function.pipe(SchemaAST.getAnnotation(OptionsAnnotationId)(node), Option.getOrUndefined);
109
109
 
110
- // src/internal/formats/number.ts
110
+ // src/internal/Format/number.ts
111
111
  import * as Schema from "effect/Schema";
112
112
  var encodeMultipleOf = (divisor) => 1 / Math.pow(10, divisor);
113
113
  var encodeMultiple = (divisor) => (self) => divisor === void 0 || divisor === 0 ? self : self.pipe(Schema.multipleOf(encodeMultipleOf(divisor)));
@@ -143,7 +143,7 @@ var Timestamp = Schema.Number.pipe(FormatAnnotation.set(TypeFormat.Timestamp), S
143
143
  description: "Unix timestamp"
144
144
  }));
145
145
 
146
- // src/internal/formats/object.ts
146
+ // src/internal/Format/object.ts
147
147
  import * as Schema2 from "effect/Schema";
148
148
  import { clamp as clamp2 } from "@dxos/util";
149
149
  var GeoPoint = Schema2.Tuple(Schema2.Number.pipe(Schema2.annotations({
@@ -188,7 +188,7 @@ var GeoPoint = Schema2.Tuple(Schema2.Number.pipe(Schema2.annotations({
188
188
  })(GeoLocation || (GeoLocation = {}));
189
189
  var GeoLocation;
190
190
 
191
- // src/internal/formats/string.ts
191
+ // src/internal/Format/string.ts
192
192
  import * as Schema3 from "effect/Schema";
193
193
  import * as SchemaAST2 from "effect/SchemaAST";
194
194
  var Email = Schema3.String.pipe(Schema3.pattern(/^[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA-Z]{2,}$/), FormatAnnotation.set(TypeFormat.Email), Schema3.annotations({
@@ -211,11 +211,11 @@ var UUID2 = Schema3.UUID.pipe(FormatAnnotation.set(TypeFormat.UUID), Schema3.ann
211
211
  ]
212
212
  }));
213
213
 
214
- // src/internal/formats/format.ts
214
+ // src/internal/Format/format.ts
215
215
  import * as Schema5 from "effect/Schema";
216
216
  import * as Keys from "@dxos/keys";
217
217
 
218
- // src/internal/formats/date.ts
218
+ // src/internal/Format/date.ts
219
219
  import * as Schema4 from "effect/Schema";
220
220
  import * as SchemaAST3 from "effect/SchemaAST";
221
221
  var SimpleDate = Schema4.Struct({
@@ -334,7 +334,7 @@ var Duration = Schema4.String.pipe(FormatAnnotation.set(TypeFormat.Duration), Sc
334
334
  ]
335
335
  }));
336
336
 
337
- // src/internal/formats/format.ts
337
+ // src/internal/Format/format.ts
338
338
  (function(Format2) {
339
339
  Format2.TypeFormat = TypeFormat;
340
340
  Format2.DXN = Keys.DXN.Schema;
@@ -358,7 +358,7 @@ var Duration = Schema4.String.pipe(FormatAnnotation.set(TypeFormat.Duration), Sc
358
358
  })(Format || (Format = {}));
359
359
  var Format;
360
360
 
361
- // src/internal/formats/select.ts
361
+ // src/internal/Format/select.ts
362
362
  import * as Schema6 from "effect/Schema";
363
363
  var SelectOption = Schema6.Struct({
364
364
  /** Stable identifier for the option. */
@@ -399,4 +399,4 @@ export {
399
399
  Format,
400
400
  SelectOption
401
401
  };
402
- //# sourceMappingURL=chunk-M2KVTHZM.mjs.map
402
+ //# sourceMappingURL=chunk-TRPZU2HV.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/internal/Format/types.ts", "../../../src/internal/Format/number.ts", "../../../src/internal/Format/object.ts", "../../../src/internal/Format/string.ts", "../../../src/internal/Format/format.ts", "../../../src/internal/Format/date.ts", "../../../src/internal/Format/select.ts"],
4
+ "sourcesContent": ["//\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 '../Annotation';\nimport { type JsonSchemaType } from '../JsonSchema';\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\n/** @deprecated */\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 Text = 'text',\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]: TypeEnum.String,\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.Text]: 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\n// TODO(wittjosiah): Reconcile with `SelectOption`.\nexport type Options = string | number;\nexport const OptionsAnnotation = createAnnotationHelper<Options[]>(OptionsAnnotationId);\n\n/** @deprecated */\nexport const getOptionsAnnotation = (node: SchemaAST.AST): Options[] | undefined =>\n Function.pipe(SchemaAST.getAnnotation<Options[]>(OptionsAnnotationId)(node), Option.getOrUndefined);\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 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.000001)),\n Schema.Number.pipe(Schema.annotations({ title: 'Latitude' }), Schema.clamp(-90, 90), Schema.multipleOf(0.000001)),\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';\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 * Multi-line text.\n */\nexport const Text = Schema.String.pipe(FormatAnnotation.set(TypeFormat.Text));\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 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 TypeFormat$ } from './types';\n\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 = TypeFormat$;\n\n // String\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 Date = DateUtil.DateOnly;\n export const DateTime = DateUtil.DateTime;\n export const Duration = DateUtil.Duration;\n export const Time = DateUtil.TimeOnly;\n\n // Objects\n export const GeoPoint = ObjectUtil.GeoPoint;\n export type GeoPoint = ObjectUtil.GeoPoint; // TODO(burdon): Export types.\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 2025 DXOS.org\n//\n\nimport * as Schema from 'effect/Schema';\n\n/**\n * Schema for a single select option. Used to define choices in a {single|multi}-select field.\n */\nexport const SelectOption = 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});\n\nexport type SelectOption = Schema.Schema.Type<typeof SelectOption>;\n"],
5
+ "mappings": "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",
6
+ "names": ["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", "OptionsAnnotation", "getOptionsAnnotation", "Schema", "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", "SchemaAST", "Email", "String", "pipe", "pattern", "FormatAnnotation", "set", "TypeFormat", "annotations", "title", "description", "Formula", "Hostname", "JSON", "Markdown", "Regex", "Text", "URL", "UUID", "ExamplesAnnotationId", "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", "Format", "TypeFormat", "DXN", "Schema", "Email", "Formula", "Hostname", "JSON", "Markdown", "Regex", "URL", "UUID", "Currency", "Integer", "Percent", "Timestamp", "Date", "DateOnly", "DateTime", "Duration", "Time", "TimeOnly", "GeoPoint", "Schema", "SelectOption", "Struct", "id", "NonEmptyString", "title", "String", "color"]
7
+ }
@@ -39,4 +39,4 @@ export {
39
39
  rank,
40
40
  Order_exports
41
41
  };
42
- //# sourceMappingURL=chunk-ZTUBYOGB.mjs.map
42
+ //# sourceMappingURL=chunk-TTCSATUD.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/Order.ts"],
4
+ "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\n// @import-as-namespace\n\nimport { type QueryAST } from '@dxos/echo-protocol';\n\nexport interface Order<T> {\n // TODO(dmaretskyi): See new effect-schema approach to variance.\n '~Order': { value: T };\n\n ast: QueryAST.Order;\n}\n\nexport type Any = Order<any>;\n\nclass OrderClass implements Order<any> {\n private static 'variance': Order<any>['~Order'] = {} as Order<any>['~Order'];\n\n static is(value: unknown): value is Order<any> {\n return typeof value === 'object' && value !== null && '~Order' in value;\n }\n\n constructor(public readonly ast: QueryAST.Order) {}\n\n '~Order' = OrderClass.variance;\n}\n\nexport const natural: Order<any> = new OrderClass({ kind: 'natural' });\nexport const property = <T>(property: keyof T & string, direction: QueryAST.OrderDirection): Order<T> =>\n new OrderClass({\n kind: 'property',\n property,\n direction,\n });\n\n/**\n * Order by relevance rank (for FTS/vector search results).\n * Higher rank = better match. Default direction is 'desc' (best matches first).\n */\nexport const rank = <T>(direction: QueryAST.OrderDirection = 'desc'): Order<T> =>\n new OrderClass({\n kind: 'rank',\n direction,\n });\n"],
5
+ "mappings": ";;;;;AAAA;;;;;;AAiBA,IAAMA,aAAN,MAAMA,YAAAA;;EACJ,OAAe,aAAmC,CAAC;EAEnD,OAAOC,GAAGC,OAAqC;AAC7C,WAAO,OAAOA,UAAU,YAAYA,UAAU,QAAQ,YAAYA;EACpE;EAEA,YAA4BC,KAAqB;SAArBA,MAAAA;EAAsB;EAElD,WAAWH,YAAWI;AACxB;AAEO,IAAMC,UAAsB,IAAIL,WAAW;EAAEM,MAAM;AAAU,CAAA;AAC7D,IAAMC,WAAW,CAAIA,WAA4BC,cACtD,IAAIR,WAAW;EACbM,MAAM;EACNC,UAAAA;EACAC;AACF,CAAA;AAMK,IAAMC,OAAO,CAAID,YAAqC,WAC3D,IAAIR,WAAW;EACbM,MAAM;EACNE;AACF,CAAA;",
6
+ "names": ["OrderClass", "is", "value", "ast", "variance", "natural", "kind", "property", "direction", "rank"]
7
+ }