@dxos/echo 0.8.4-main.74a063c4e0 → 0.8.4-main.765dc60934

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 (248) hide show
  1. package/LICENSE +102 -5
  2. package/README.md +3 -3
  3. package/dist/lib/neutral/Annotation.mjs +5 -3
  4. package/dist/lib/neutral/Database.mjs +6 -4
  5. package/dist/lib/neutral/Entity.mjs +16 -14
  6. package/dist/lib/neutral/Err.mjs +1 -1
  7. package/dist/lib/neutral/Extension.mjs +1 -1
  8. package/dist/lib/neutral/Feed.mjs +21 -17
  9. package/dist/lib/neutral/Filter.mjs +15 -11
  10. package/dist/lib/neutral/Format.mjs +3 -3
  11. package/dist/lib/neutral/JsonSchema.mjs +8 -8
  12. package/dist/lib/neutral/Key.mjs +1 -1
  13. package/dist/lib/neutral/Migration.mjs +17 -0
  14. package/dist/lib/neutral/Migration.mjs.map +7 -0
  15. package/dist/lib/neutral/Obj.mjs +14 -14
  16. package/dist/lib/neutral/Order.mjs +1 -1
  17. package/dist/lib/neutral/Query.mjs +17 -17
  18. package/dist/lib/neutral/QueryResult.mjs +1 -1
  19. package/dist/lib/neutral/Ref.mjs +9 -7
  20. package/dist/lib/neutral/Relation.mjs +15 -15
  21. package/dist/lib/neutral/SchemaRegistry.mjs +1 -1
  22. package/dist/lib/neutral/Tag.mjs +14 -14
  23. package/dist/lib/neutral/Type.mjs +10 -10
  24. package/dist/lib/neutral/{chunk-GZQTCRJB.mjs → chunk-44HT3MEC.mjs} +2 -2
  25. package/dist/lib/neutral/{chunk-ZIXGDU6F.mjs → chunk-5SL5LDLD.mjs} +4 -2
  26. package/dist/lib/neutral/chunk-5SL5LDLD.mjs.map +7 -0
  27. package/dist/lib/neutral/{chunk-ANHVGJI4.mjs → chunk-7RVZT53K.mjs} +1 -1
  28. package/dist/lib/neutral/{chunk-MYMU4TWK.mjs → chunk-7VWWUTRQ.mjs} +38 -17
  29. package/dist/lib/neutral/chunk-7VWWUTRQ.mjs.map +7 -0
  30. package/dist/lib/neutral/{chunk-66GBFH43.mjs → chunk-A6IYRT5A.mjs} +17 -45
  31. package/dist/lib/neutral/chunk-A6IYRT5A.mjs.map +7 -0
  32. package/dist/lib/neutral/{chunk-R72KFH2X.mjs → chunk-APHSOTIX.mjs} +2 -2
  33. package/dist/lib/neutral/{chunk-XZJUNTML.mjs → chunk-APJKDGFL.mjs} +36 -6
  34. package/dist/lib/neutral/chunk-APJKDGFL.mjs.map +7 -0
  35. package/dist/lib/neutral/{chunk-BNCCGLJN.mjs → chunk-BICZKPQG.mjs} +1 -1
  36. package/dist/lib/neutral/{chunk-QWAOTFCY.mjs → chunk-BMB7IHGB.mjs} +16 -66
  37. package/dist/lib/neutral/chunk-BMB7IHGB.mjs.map +7 -0
  38. package/dist/lib/neutral/{chunk-KPY6FC5I.mjs → chunk-BVOWYVTD.mjs} +17 -12
  39. package/dist/lib/neutral/chunk-BVOWYVTD.mjs.map +7 -0
  40. package/dist/lib/neutral/chunk-FIWO2FZK.mjs +36 -0
  41. package/dist/lib/neutral/chunk-FIWO2FZK.mjs.map +7 -0
  42. package/dist/lib/neutral/{chunk-WMFVS4KR.mjs → chunk-G54OX4IX.mjs} +102 -480
  43. package/dist/lib/neutral/chunk-G54OX4IX.mjs.map +7 -0
  44. package/dist/lib/neutral/{chunk-7QQMUDE6.mjs → chunk-GMS5PKGQ.mjs} +59 -12
  45. package/dist/lib/neutral/chunk-GMS5PKGQ.mjs.map +7 -0
  46. package/dist/lib/neutral/{chunk-YS6Q3XAD.mjs → chunk-GWFFC34K.mjs} +1 -1
  47. package/dist/lib/neutral/{chunk-YS6Q3XAD.mjs.map → chunk-GWFFC34K.mjs.map} +1 -1
  48. package/dist/lib/neutral/{chunk-EBVB5NOH.mjs → chunk-I2DARWPX.mjs} +15 -20
  49. package/dist/lib/neutral/chunk-I2DARWPX.mjs.map +7 -0
  50. package/dist/lib/neutral/{chunk-FNEFSO2C.mjs → chunk-MLS7U7AT.mjs} +12 -65
  51. package/dist/lib/neutral/{chunk-FNEFSO2C.mjs.map → chunk-MLS7U7AT.mjs.map} +2 -2
  52. package/dist/lib/neutral/{chunk-TBKX6JQO.mjs → chunk-N4B7FHQT.mjs} +1 -1
  53. package/dist/lib/neutral/{chunk-46QNGNTY.mjs → chunk-N7VOEPSV.mjs} +6 -3
  54. package/dist/lib/neutral/{chunk-46QNGNTY.mjs.map → chunk-N7VOEPSV.mjs.map} +3 -3
  55. package/dist/lib/neutral/{chunk-MZXWVR3T.mjs → chunk-PSZBLH53.mjs} +6 -22
  56. package/dist/lib/neutral/{chunk-MZXWVR3T.mjs.map → chunk-PSZBLH53.mjs.map} +2 -2
  57. package/dist/lib/neutral/{chunk-XZM7FERR.mjs → chunk-QBIKZ3TY.mjs} +4 -4
  58. package/dist/lib/neutral/{chunk-E5PBQJWV.mjs → chunk-QRZ2I3ZM.mjs} +2 -2
  59. package/dist/lib/neutral/{chunk-2U2BZDLU.mjs → chunk-SCPFDS2E.mjs} +12 -8
  60. package/dist/lib/neutral/chunk-SCPFDS2E.mjs.map +7 -0
  61. package/dist/lib/neutral/{chunk-VCAP4OOT.mjs → chunk-SKDTKHDC.mjs} +21 -5
  62. package/dist/lib/neutral/chunk-SKDTKHDC.mjs.map +7 -0
  63. package/dist/lib/neutral/{chunk-6URFBQJH.mjs → chunk-TNBK56IN.mjs} +11 -22
  64. package/dist/lib/neutral/chunk-TNBK56IN.mjs.map +7 -0
  65. package/dist/lib/neutral/{chunk-DQYLD2RB.mjs → chunk-TRPZU2HV.mjs} +2 -2
  66. package/dist/lib/neutral/{chunk-UI6MWK5W.mjs → chunk-TTCSATUD.mjs} +1 -1
  67. package/dist/lib/neutral/{chunk-OMUPQMLR.mjs → chunk-V72DY6LU.mjs} +1 -1
  68. package/dist/lib/neutral/{chunk-UBEZSGXY.mjs → chunk-ZISMEVKD.mjs} +1 -1
  69. package/dist/lib/neutral/{chunk-UBEZSGXY.mjs.map → chunk-ZISMEVKD.mjs.map} +2 -2
  70. package/dist/lib/neutral/index.mjs +33 -27
  71. package/dist/lib/neutral/internal/index.mjs +11 -9
  72. package/dist/lib/neutral/meta.json +1 -1
  73. package/dist/lib/neutral/testing/index.mjs +183 -128
  74. package/dist/lib/neutral/testing/index.mjs.map +3 -3
  75. package/dist/types/src/Annotation.d.ts +1 -1
  76. package/dist/types/src/Annotation.d.ts.map +1 -1
  77. package/dist/types/src/Collection.d.ts.map +1 -1
  78. package/dist/types/src/Database.d.ts +6 -1
  79. package/dist/types/src/Database.d.ts.map +1 -1
  80. package/dist/types/src/Dataset.d.ts +1 -1
  81. package/dist/types/src/Entity.d.ts +15 -9
  82. package/dist/types/src/Entity.d.ts.map +1 -1
  83. package/dist/types/src/Err.d.ts +18 -18
  84. package/dist/types/src/Err.d.ts.map +1 -1
  85. package/dist/types/src/Extension.d.ts +4 -4
  86. package/dist/types/src/Extension.d.ts.map +1 -1
  87. package/dist/types/src/Feed.d.ts +37 -2
  88. package/dist/types/src/Feed.d.ts.map +1 -1
  89. package/dist/types/src/Filter.d.ts +34 -0
  90. package/dist/types/src/Filter.d.ts.map +1 -1
  91. package/dist/types/src/Hypergraph.d.ts +3 -3
  92. package/dist/types/src/Hypergraph.d.ts.map +1 -1
  93. package/dist/types/src/Json.d.ts +33 -0
  94. package/dist/types/src/Json.d.ts.map +1 -0
  95. package/dist/types/src/Json.test.d.ts +2 -0
  96. package/dist/types/src/Json.test.d.ts.map +1 -0
  97. package/dist/types/src/JsonSchema.d.ts +1 -1
  98. package/dist/types/src/Migration.d.ts +69 -0
  99. package/dist/types/src/Migration.d.ts.map +1 -0
  100. package/dist/types/src/Obj.d.ts +23 -21
  101. package/dist/types/src/Obj.d.ts.map +1 -1
  102. package/dist/types/src/Order.d.ts.map +1 -1
  103. package/dist/types/src/Query.d.ts +5 -1
  104. package/dist/types/src/Query.d.ts.map +1 -1
  105. package/dist/types/src/Ref.d.ts +1 -0
  106. package/dist/types/src/Ref.d.ts.map +1 -1
  107. package/dist/types/src/Relation.d.ts +15 -15
  108. package/dist/types/src/Relation.d.ts.map +1 -1
  109. package/dist/types/src/Tag.d.ts +2 -2
  110. package/dist/types/src/Tag.d.ts.map +1 -1
  111. package/dist/types/src/Type.d.ts.map +1 -1
  112. package/dist/types/src/View.d.ts +1 -1
  113. package/dist/types/src/View.d.ts.map +1 -1
  114. package/dist/types/src/exemplars.test.d.ts +2 -0
  115. package/dist/types/src/exemplars.test.d.ts.map +1 -0
  116. package/dist/types/src/index.d.ts +2 -0
  117. package/dist/types/src/index.d.ts.map +1 -1
  118. package/dist/types/src/internal/Annotation/annotations.d.ts +11 -2
  119. package/dist/types/src/internal/Annotation/annotations.d.ts.map +1 -1
  120. package/dist/types/src/internal/Annotation/sorting.d.ts.map +1 -1
  121. package/dist/types/src/internal/Annotation/util.d.ts +1 -1
  122. package/dist/types/src/internal/Annotation/util.d.ts.map +1 -1
  123. package/dist/types/src/internal/Entity/api.d.ts.map +1 -1
  124. package/dist/types/src/internal/Entity/model.d.ts +2 -0
  125. package/dist/types/src/internal/Entity/model.d.ts.map +1 -1
  126. package/dist/types/src/internal/Entity/relation.d.ts.map +1 -1
  127. package/dist/types/src/internal/Entity/version.d.ts.map +1 -1
  128. package/dist/types/src/internal/Format/date.d.ts.map +1 -1
  129. package/dist/types/src/internal/Format/format.d.ts.map +1 -1
  130. package/dist/types/src/internal/Format/number.d.ts.map +1 -1
  131. package/dist/types/src/internal/Format/object.d.ts.map +1 -1
  132. package/dist/types/src/internal/Format/types.d.ts.map +1 -1
  133. package/dist/types/src/internal/JsonSchema/json-schema-normalize.d.ts.map +1 -1
  134. package/dist/types/src/internal/JsonSchema/json-schema-type.d.ts +28 -28
  135. package/dist/types/src/internal/JsonSchema/json-schema-type.d.ts.map +1 -1
  136. package/dist/types/src/internal/JsonSchema/json-schema.d.ts +1 -1
  137. package/dist/types/src/internal/JsonSchema/json-schema.d.ts.map +1 -1
  138. package/dist/types/src/internal/Obj/clone.d.ts.map +1 -1
  139. package/dist/types/src/internal/Obj/common.d.ts.map +1 -1
  140. package/dist/types/src/internal/Obj/create-object.d.ts.map +1 -1
  141. package/dist/types/src/internal/Obj/deleted.d.ts.map +1 -1
  142. package/dist/types/src/internal/Obj/ids.d.ts +1 -1
  143. package/dist/types/src/internal/Obj/ids.d.ts.map +1 -1
  144. package/dist/types/src/internal/Obj/json-serializer.d.ts +2 -1
  145. package/dist/types/src/internal/Obj/json-serializer.d.ts.map +1 -1
  146. package/dist/types/src/internal/Obj/set-value.d.ts +1 -1
  147. package/dist/types/src/internal/Obj/set-value.d.ts.map +1 -1
  148. package/dist/types/src/internal/Obj/snapshot.d.ts.map +1 -1
  149. package/dist/types/src/internal/Query.d.ts.map +1 -1
  150. package/dist/types/src/internal/Ref/ref.d.ts +13 -0
  151. package/dist/types/src/internal/Ref/ref.d.ts.map +1 -1
  152. package/dist/types/src/internal/Type/compose.d.ts.map +1 -1
  153. package/dist/types/src/internal/Type/echo-schema.d.ts +1 -1
  154. package/dist/types/src/internal/Type/echo-schema.d.ts.map +1 -1
  155. package/dist/types/src/internal/Type/manipulation.d.ts.map +1 -1
  156. package/dist/types/src/internal/common/api/meta.d.ts +3 -3
  157. package/dist/types/src/internal/common/api/meta.d.ts.map +1 -1
  158. package/dist/types/src/internal/common/proxy/change-context.d.ts +1 -1
  159. package/dist/types/src/internal/common/proxy/change-context.d.ts.map +1 -1
  160. package/dist/types/src/internal/common/proxy/define-hidden-property.d.ts.map +1 -1
  161. package/dist/types/src/internal/common/proxy/errors.d.ts +1 -1
  162. package/dist/types/src/internal/common/proxy/errors.d.ts.map +1 -1
  163. package/dist/types/src/internal/common/proxy/event-batch.d.ts.map +1 -1
  164. package/dist/types/src/internal/common/proxy/json-serializer.d.ts.map +1 -1
  165. package/dist/types/src/internal/common/proxy/ownership.d.ts.map +1 -1
  166. package/dist/types/src/internal/common/proxy/proxy-utils.d.ts.map +1 -1
  167. package/dist/types/src/internal/common/proxy/reactive-array.d.ts +1 -1
  168. package/dist/types/src/internal/common/proxy/reactive.d.ts +1 -1
  169. package/dist/types/src/internal/common/proxy/reactive.d.ts.map +1 -1
  170. package/dist/types/src/internal/common/proxy/reactive.test.d.ts +2 -0
  171. package/dist/types/src/internal/common/proxy/reactive.test.d.ts.map +1 -0
  172. package/dist/types/src/internal/common/proxy/schema-validator.d.ts.map +1 -1
  173. package/dist/types/src/internal/common/proxy/typed-handler.d.ts.map +1 -1
  174. package/dist/types/src/internal/common/types/base.d.ts.map +1 -1
  175. package/dist/types/src/internal/common/types/entity.d.ts +3 -3
  176. package/dist/types/src/internal/common/types/meta.d.ts +10 -0
  177. package/dist/types/src/internal/common/types/meta.d.ts.map +1 -1
  178. package/dist/types/src/internal/common/types/version.d.ts +1 -1
  179. package/dist/types/src/testing/test-data.d.ts +8 -8
  180. package/dist/types/src/testing/test-data.d.ts.map +1 -1
  181. package/dist/types/src/testing/test-schema.d.ts +53 -53
  182. package/dist/types/src/testing/test-schema.d.ts.map +1 -1
  183. package/dist/types/src/testing/util.d.ts.map +1 -1
  184. package/dist/types/tsconfig.tsbuildinfo +1 -1
  185. package/package.json +19 -14
  186. package/src/Annotation.ts +1 -0
  187. package/src/Collection.ts +1 -1
  188. package/src/Database.ts +36 -14
  189. package/src/Entity.ts +16 -9
  190. package/src/Extension.ts +3 -3
  191. package/src/Feed.ts +54 -2
  192. package/src/Filter.ts +61 -0
  193. package/src/Hypergraph.ts +3 -3
  194. package/src/Json.test.ts +175 -0
  195. package/src/Json.ts +102 -0
  196. package/src/Migration.ts +106 -0
  197. package/src/Obj.test.ts +23 -23
  198. package/src/Obj.ts +28 -25
  199. package/src/Query.test.ts +129 -5
  200. package/src/Query.ts +32 -7
  201. package/src/Ref.ts +2 -0
  202. package/src/Relation.ts +21 -17
  203. package/src/exemplars.test.ts +21 -0
  204. package/src/index.ts +3 -0
  205. package/src/internal/Annotation/annotations.ts +19 -7
  206. package/src/internal/Entity/model.ts +2 -0
  207. package/src/internal/Obj/ids.ts +1 -1
  208. package/src/internal/Obj/json-serializer.test.ts +2 -2
  209. package/src/internal/Obj/json-serializer.ts +17 -10
  210. package/src/internal/Obj/set-value.test.ts +24 -24
  211. package/src/internal/Obj/set-value.ts +1 -1
  212. package/src/internal/Query.ts +28 -4
  213. package/src/internal/Ref/ref.ts +17 -0
  214. package/src/internal/Type/echo-schema.ts +1 -1
  215. package/src/internal/common/README.md +1 -1
  216. package/src/internal/common/api/meta.ts +3 -3
  217. package/src/internal/common/proxy/change-context.ts +1 -1
  218. package/src/internal/common/proxy/change.test.ts +66 -66
  219. package/src/internal/common/proxy/errors.ts +2 -2
  220. package/src/internal/common/proxy/reactive-array.ts +1 -1
  221. package/src/internal/common/proxy/reactive.test.ts +54 -0
  222. package/src/internal/common/proxy/reactive.ts +11 -2
  223. package/src/internal/common/proxy/typed-handler.ts +7 -7
  224. package/src/internal/common/proxy/typed-object.test.ts +1 -1
  225. package/src/internal/common/types/meta.ts +12 -0
  226. package/src/testing/test-data.ts +157 -97
  227. package/dist/lib/neutral/chunk-2U2BZDLU.mjs.map +0 -7
  228. package/dist/lib/neutral/chunk-66GBFH43.mjs.map +0 -7
  229. package/dist/lib/neutral/chunk-6URFBQJH.mjs.map +0 -7
  230. package/dist/lib/neutral/chunk-7QQMUDE6.mjs.map +0 -7
  231. package/dist/lib/neutral/chunk-EBVB5NOH.mjs.map +0 -7
  232. package/dist/lib/neutral/chunk-KPY6FC5I.mjs.map +0 -7
  233. package/dist/lib/neutral/chunk-MYMU4TWK.mjs.map +0 -7
  234. package/dist/lib/neutral/chunk-QWAOTFCY.mjs.map +0 -7
  235. package/dist/lib/neutral/chunk-VCAP4OOT.mjs.map +0 -7
  236. package/dist/lib/neutral/chunk-WMFVS4KR.mjs.map +0 -7
  237. package/dist/lib/neutral/chunk-XZJUNTML.mjs.map +0 -7
  238. package/dist/lib/neutral/chunk-ZIXGDU6F.mjs.map +0 -7
  239. /package/dist/lib/neutral/{chunk-GZQTCRJB.mjs.map → chunk-44HT3MEC.mjs.map} +0 -0
  240. /package/dist/lib/neutral/{chunk-ANHVGJI4.mjs.map → chunk-7RVZT53K.mjs.map} +0 -0
  241. /package/dist/lib/neutral/{chunk-R72KFH2X.mjs.map → chunk-APHSOTIX.mjs.map} +0 -0
  242. /package/dist/lib/neutral/{chunk-BNCCGLJN.mjs.map → chunk-BICZKPQG.mjs.map} +0 -0
  243. /package/dist/lib/neutral/{chunk-TBKX6JQO.mjs.map → chunk-N4B7FHQT.mjs.map} +0 -0
  244. /package/dist/lib/neutral/{chunk-XZM7FERR.mjs.map → chunk-QBIKZ3TY.mjs.map} +0 -0
  245. /package/dist/lib/neutral/{chunk-E5PBQJWV.mjs.map → chunk-QRZ2I3ZM.mjs.map} +0 -0
  246. /package/dist/lib/neutral/{chunk-DQYLD2RB.mjs.map → chunk-TRPZU2HV.mjs.map} +0 -0
  247. /package/dist/lib/neutral/{chunk-UI6MWK5W.mjs.map → chunk-TTCSATUD.mjs.map} +0 -0
  248. /package/dist/lib/neutral/{chunk-OMUPQMLR.mjs.map → chunk-V72DY6LU.mjs.map} +0 -0
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/Feed.ts"],
4
+ "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\n// @import-as-namespace\n\nimport * as Context from 'effect/Context';\nimport * as Effect from 'effect/Effect';\nimport * as Layer from 'effect/Layer';\nimport type * as Option from 'effect/Option';\nimport * as Schema from 'effect/Schema';\n\nimport { DXN } from '@dxos/keys';\n\nimport * as Annotation from './Annotation';\nimport type * as Entity from './Entity';\nimport type * as Filter from './Filter';\nimport * as internal from './internal';\nimport * as Obj from './Obj';\nimport type * as Query from './Query';\nimport type * as QueryResult from './QueryResult';\nimport * as Type from './Type';\n\n/**\n * Runtime schema for a Feed object.\n *\n * @example\n * ```ts\n * const feed = Obj.make(Feed.Feed, { name: 'notifications', kind: 'org.dxos.plugin.notifications.v1' });\n * ```\n */\nexport const Feed = Schema.Struct({\n /** User-facing display name. */\n name: Schema.String.pipe(Schema.optional),\n /** Identifier for the feed's kind (e.g., plugin id). */\n kind: Schema.String.pipe(internal.FormInputAnnotation.set(false), Schema.optional),\n\n /**\n * Feed namespace.\n * Controls how feed data is stored and replicated.\n * - `data`: Data feed (default).\n * - `trace`: Trace feed.\n */\n namespace: Schema.optional(Schema.Literal('data', 'trace')),\n}).pipe(\n Type.object({\n typename: 'org.dxos.type.feed',\n version: '0.1.0',\n }),\n internal.SystemTypeAnnotation.set(true),\n Annotation.IconAnnotation.set({\n icon: 'ph--rows--regular',\n hue: 'yellow',\n }),\n);\n\n/**\n * TypeScript instance type for a Feed object.\n */\nexport interface Feed extends Schema.Schema.Type<typeof Feed> {}\n\n//\n// Types\n//\n\n/**\n * Opaque cursor for iterating over feed items.\n */\n// TODO(dmaretskyi): T needs to be referenced in the type structure for typescript to respect it during inference and type-checking.\nexport interface Cursor<T = Obj.Snapshot> {\n readonly _tag: 'Cursor';\n}\n\n/**\n * Retention options for a feed.\n */\nexport interface RetentionOptions {\n /** Retain items after this cursor position. */\n // TODO(wittjosiah): Use FeedCursor from @dxos/feed?\n cursor?: string;\n}\n\n/**\n * Sync options for a feed.\n */\nexport interface SyncOptions {\n /** Push local changes to the server. Defaults to true. */\n shouldPush?: boolean;\n /** Pull remote changes from the server. Defaults to true. */\n shouldPull?: boolean;\n}\n\n//\n// Factory\n//\n\n/**\n * Creates a new feed object.\n *\n * @example\n * ```ts\n * const feed = Feed.make({ name: 'notifications', kind: 'org.dxos.plugin.notifications.v1' });\n * ```\n */\n// TODO(wittjosiah): How to control the feed namespace (data/trace)? Why do feeds have namespaces?\nexport const make = (props: Obj.MakeProps<typeof Feed> = {}): Feed => Obj.make(Feed, props);\n\n/**\n * Derives the queue DXN from the feed object's DXN.\n * Returns `undefined` when the feed is not stored in a space yet.\n *\n * Used internally by the feed service layer.\n */\nexport const getQueueDxn = (feed: Feed): DXN | undefined => {\n const self = Obj.getDXN(feed).asEchoDXN();\n if (!self || !self.spaceId) {\n return undefined;\n }\n return new DXN(DXN.kind.QUEUE, [feed.namespace ?? 'data', self.spaceId, self.echoId]);\n};\n\n//\n// Service\n//\n\n/**\n * Effect service for feed operations.\n * Provides the bridge to the underlying storage implementation.\n * Must be provided by the application layer (e.g., echo-db).\n */\nexport class FeedService extends Context.Tag('@dxos/echo/Feed/FeedService')<\n FeedService,\n {\n /**\n * Appends items to a feed.\n */\n append(feed: Feed, items: Entity.Unknown[]): Promise<void>;\n\n /**\n * Removes items from a feed by ID.\n */\n // TODO(dmaretskyi): Change type to ObjectId.\n remove(feed: Feed, ids: string[]): Promise<void>;\n\n /**\n * Queries items in a feed.\n */\n query: {\n <Q extends Query.Any>(feed: Feed, query: Q): QueryResult.QueryResult<Query.Type<Q>>;\n <F extends Filter.Any>(feed: Feed, filter: F): QueryResult.QueryResult<Filter.Type<F>>;\n };\n\n /**\n * Syncs the feed with the server.\n */\n sync(feed: Feed, options?: SyncOptions): Promise<void>;\n }\n>() {}\n\n/**\n * @deprecated Use `FeedService` instead.\n */\nexport type Service = FeedService;\n\n/**\n * @deprecated Use `FeedService` instead.\n */\nexport const Service = FeedService;\n\n/**\n * Layer that provides a Feed service that throws when accessed.\n * Useful as a default layer when no feed service is available.\n */\nexport const notAvailable: Layer.Layer<FeedService> = Layer.succeed(FeedService, {\n append: () => {\n throw new Error('Feed.FeedService not available');\n },\n remove: () => {\n throw new Error('Feed.FeedService not available');\n },\n query: () => {\n throw new Error('Feed.FeedService not available');\n },\n sync: () => {\n throw new Error('Feed.FeedService not available');\n },\n} as Context.Tag.Service<FeedService>);\n\n//\n// Context (per-call) service\n//\n\n/**\n * Effect service exposing a single `Feed.Feed` as the \"current\" feed for a call site.\n *\n * @deprecated Prefer threading a `Feed.Feed` explicitly through function signatures\n * over hiding it behind a context service.\n */\nexport class ContextFeedService extends Context.Tag('@dxos/echo/Feed/ContextFeedService')<\n ContextFeedService,\n {\n readonly feed: Feed;\n }\n>() {\n static layer = (feed: Feed): Layer.Layer<ContextFeedService> => Layer.succeed(ContextFeedService, { feed });\n}\n\n//\n// Operations\n//\n\n/**\n * Appends items to a feed.\n *\n * @example\n * ```ts\n * yield* Feed.append(feed, [Obj.make(Notification, { title: 'Hello' })]);\n * ```\n */\nexport const append = (feed: Feed, items: Entity.Unknown[]): Effect.Effect<void, never, FeedService> =>\n Effect.gen(function* () {\n const service = yield* FeedService;\n yield* Effect.promise(() => service.append(feed, items));\n });\n\n/**\n * Removes items from a feed.\n *\n * @example\n * ```ts\n * yield* Feed.remove(feed, [item]);\n * ```\n */\n// TODO(dmaretskyi): Should we allow snapshots here? - what does it mean to remove a snapshot?\nexport const remove = (feed: Feed, items: (Entity.Unknown | Obj.Snapshot)[]): Effect.Effect<void, never, FeedService> =>\n Effect.gen(function* () {\n const service = yield* FeedService;\n const ids = items.map((item) => item.id);\n yield* Effect.promise(() => service.remove(feed, ids));\n });\n\n/**\n * Creates a reactive query over items in a feed.\n *\n * @example\n * ```ts\n * const result = yield* Feed.query(feed, Filter.type(Person));\n * ```\n */\n// TODO(dmaretskyi): Suport chained queries:\n// const result = yield* feed.pipe(Feed.query(Filter.type(Person))); result.subscribe(...)\n// const objects = yield* feed.pipe(Feed.query(Filter.type(Person))).run;\n// const object = yield* feed.pipe(Feed.query(Filter.type(Person))).first;\n// ... unify for Database and schema queries.\nexport const query: {\n <Q extends Query.Any>(\n feed: Feed,\n query: Q,\n ): Effect.Effect<QueryResult.QueryResult<Query.Type<Q>>, never, FeedService>;\n <F extends Filter.Any>(\n feed: Feed,\n filter: F,\n ): Effect.Effect<QueryResult.QueryResult<Filter.Type<F>>, never, FeedService>;\n} = (feed: Feed, queryOrFilter: Query.Any | Filter.Any) =>\n FeedService.pipe(Effect.map((service) => service.query(feed, queryOrFilter as any) as QueryResult.QueryResult<any>));\n\n/**\n * Executes a feed query once and returns the results.\n *\n * @example\n * ```ts\n * const items = yield* Feed.runQuery(feed, Filter.type(Person));\n * ```\n */\nexport const runQuery: {\n <Q extends Query.Any>(feed: Feed, query: Q): Effect.Effect<Query.Type<Q>[], never, FeedService>;\n <F extends Filter.Any>(feed: Feed, filter: F): Effect.Effect<Filter.Type<F>[], never, FeedService>;\n} = (feed: Feed, queryOrFilter: Query.Any | Filter.Any) =>\n query(feed, queryOrFilter as any).pipe(Effect.flatMap((queryResult) => Effect.promise(() => queryResult.run())));\n\n/**\n * Syncs the feed with the server.\n *\n * @example\n * ```ts\n * yield* Feed.sync(feed);\n * yield* Feed.sync(feed, { shouldPush: false });\n * ```\n */\nexport const sync = (feed: Feed, options?: SyncOptions): Effect.Effect<void, never, FeedService> =>\n Effect.gen(function* () {\n const service = yield* FeedService;\n yield* Effect.promise(() => service.sync(feed, options));\n });\n\n/**\n * Creates a cursor for iterating over feed items.\n * Currently stubbed — cursor operations are not yet implemented.\n *\n * @example\n * ```ts\n * const cursor = yield* Feed.cursor<Person>(feed);\n * const item = yield* Feed.next(cursor);\n * ```\n */\n// TODO(wittjosiah): Implement cursor operations. Use Effect streams?\nexport const cursor = <T = Obj.Snapshot>(_feed: Feed): Effect.Effect<Cursor<T>, never, FeedService> =>\n Effect.succeed({ _tag: 'Cursor' } as Cursor<T>);\n\n/**\n * Returns the next item from a feed cursor.\n * Currently stubbed — cursor operations are not yet implemented.\n */\nexport const next = <T = Obj.Snapshot>(_cursor: Cursor<T>): Effect.Effect<T, never, FeedService> =>\n Effect.die('Feed.next is not yet implemented');\n\n/**\n * Returns the next item from a feed cursor as an Option.\n * Currently stubbed — cursor operations are not yet implemented.\n */\nexport const nextOption = <T = Obj.Snapshot>(_cursor: Cursor<T>): Effect.Effect<Option.Option<T>, never, FeedService> =>\n Effect.die('Feed.nextOption is not yet implemented');\n\n/**\n * Sets the local retention policy for a feed.\n * Currently stubbed — feeds do not yet support retention.\n *\n * @example\n * ```ts\n * yield* Feed.setRetention(feed, { count: 1000 });\n * ```\n */\n// TODO(dmaretskyi): Implement when feed retention is supported.\nexport const setRetention = (_feed: Feed, _options: RetentionOptions): Effect.Effect<void, never, FeedService> =>\n Effect.void;\n"],
5
+ "mappings": ";;;;;;;;;;;;;;;;;AAAA;;;;;;;;;cAAAA;EAAA;;;;;;;;;AAMA,YAAYC,aAAa;AACzB,YAAYC,YAAY;AACxB,YAAYC,WAAW;AAEvB,YAAYC,YAAY;AAExB,SAASC,WAAW;AAmBb,IAAMC,OAAcC,cAAO;;EAEhCC,MAAaC,cAAOC,KAAYC,eAAQ;;EAExCC,MAAaH,cAAOC,KAAcG,oBAAoBC,IAAI,KAAA,GAAeH,eAAQ;;;;;;;EAQjFI,WAAkBJ,gBAAgBK,eAAQ,QAAQ,OAAA,CAAA;AACpD,CAAA,EAAGN,KACIO,OAAO;EACVC,UAAU;EACVC,SAAS;AACX,CAAA,GACSC,qBAAqBN,IAAI,IAAA,GACvBO,eAAeP,IAAI;EAC5BQ,MAAM;EACNC,KAAK;AACP,CAAA,CAAA;AAoDK,IAAMC,QAAO,CAACC,QAAoC,CAAC,MAAgBD,KAAKlB,MAAMmB,KAAAA;AAQ9E,IAAMC,cAAc,CAACC,SAAAA;AAC1B,QAAMC,OAAWC,OAAOF,IAAAA,EAAMG,UAAS;AACvC,MAAI,CAACF,QAAQ,CAACA,KAAKG,SAAS;AAC1B,WAAOC;EACT;AACA,SAAO,IAAIC,IAAIA,IAAIrB,KAAKsB,OAAO;IAACP,KAAKZ,aAAa;IAAQa,KAAKG;IAASH,KAAKO;GAAO;AACtF;AAWO,IAAMC,cAAN,cAAkCC,YAAI,6BAAA,EAAA,EAAA;AA2BxC;AAUE,IAAMC,UAAUF;AAMhB,IAAMG,eAA+CC,cAAQJ,aAAa;EAC/EK,QAAQ,MAAA;AACN,UAAM,IAAIC,MAAM,gCAAA;EAClB;EACAC,QAAQ,MAAA;AACN,UAAM,IAAID,MAAM,gCAAA;EAClB;EACAE,OAAO,MAAA;AACL,UAAM,IAAIF,MAAM,gCAAA;EAClB;EACAG,MAAM,MAAA;AACJ,UAAM,IAAIH,MAAM,gCAAA;EAClB;AACF,CAAA;AAYO,IAAMI,qBAAN,MAAMA,4BAAmCT,YAAI,oCAAA,EAAA,EAAA;EAMlD,OAAOU,QAAQ,CAACpB,SAAsDa,cAAQM,qBAAoB;IAAEnB;EAAK,CAAA;AAC3G;AAcO,IAAMc,SAAS,CAACd,MAAYqB,UAC1BC,WAAI,aAAA;AACT,QAAMC,UAAU,OAAOd;AACvB,SAAce,eAAQ,MAAMD,QAAQT,OAAOd,MAAMqB,KAAAA,CAAAA;AACnD,CAAA;AAWK,IAAML,SAAS,CAAChB,MAAYqB,UAC1BC,WAAI,aAAA;AACT,QAAMC,UAAU,OAAOd;AACvB,QAAMgB,MAAMJ,MAAMK,IAAI,CAACC,SAASA,KAAKC,EAAE;AACvC,SAAcJ,eAAQ,MAAMD,QAAQP,OAAOhB,MAAMyB,GAAAA,CAAAA;AACnD,CAAA;AAeK,IAAMR,QAST,CAACjB,MAAY6B,kBACfpB,YAAY1B,KAAY2C,WAAI,CAACH,YAAYA,QAAQN,MAAMjB,MAAM6B,aAAAA,CAAAA,CAAAA;AAUxD,IAAMC,WAGT,CAAC9B,MAAY6B,kBACfZ,MAAMjB,MAAM6B,aAAAA,EAAsB9C,KAAYgD,eAAQ,CAACC,gBAAuBR,eAAQ,MAAMQ,YAAYC,IAAG,CAAA,CAAA,CAAA;AAWtG,IAAMf,OAAO,CAAClB,MAAYkC,YACxBZ,WAAI,aAAA;AACT,QAAMC,UAAU,OAAOd;AACvB,SAAce,eAAQ,MAAMD,QAAQL,KAAKlB,MAAMkC,OAAAA,CAAAA;AACjD,CAAA;AAaK,IAAMC,SAAS,CAAmBC,UAChCvB,eAAQ;EAAEwB,MAAM;AAAS,CAAA;AAM3B,IAAMC,OAAO,CAAmBC,YAC9BC,WAAI,kCAAA;AAMN,IAAMC,aAAa,CAAmBF,YACpCC,WAAI,wCAAA;AAYN,IAAME,eAAe,CAACN,OAAaO,aACjCC;",
6
+ "names": ["make", "Context", "Effect", "Layer", "Schema", "DXN", "Feed", "Struct", "name", "String", "pipe", "optional", "kind", "FormInputAnnotation", "set", "namespace", "Literal", "object", "typename", "version", "SystemTypeAnnotation", "IconAnnotation", "icon", "hue", "make", "props", "getQueueDxn", "feed", "self", "getDXN", "asEchoDXN", "spaceId", "undefined", "DXN", "QUEUE", "echoId", "FeedService", "Tag", "Service", "notAvailable", "succeed", "append", "Error", "remove", "query", "sync", "ContextFeedService", "layer", "items", "gen", "service", "promise", "ids", "map", "item", "id", "queryOrFilter", "runQuery", "flatMap", "queryResult", "run", "options", "cursor", "_feed", "_tag", "next", "_cursor", "die", "nextOption", "setRetention", "_options", "void"]
7
+ }
@@ -1,7 +1,7 @@
1
1
  import {
2
2
  EntityKind,
3
3
  createAnnotationHelper
4
- } from "./chunk-TBKX6JQO.mjs";
4
+ } from "./chunk-N4B7FHQT.mjs";
5
5
 
6
6
  // src/internal/common/types/typename.ts
7
7
  var ATTR_TYPE = "@type";
@@ -58,7 +58,7 @@ var getTypeDXNFromSpecifier = (input) => {
58
58
  return DXN.fromTypename(input);
59
59
  }
60
60
  };
61
- var TypenameSchema = Schema.String.pipe(Schema.pattern(/^[a-zA-Z][a-zA-Z0-9]*(\.[a-zA-Z][a-zA-Z0-9-]*){2,}$/)).annotations({
61
+ var TypenameSchema = Schema.String.pipe(Schema.pattern(/^[a-zA-Z]([a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(\.[a-zA-Z0-9]([a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)+(\.[a-zA-Z]([a-zA-Z0-9]{0,62})?)$/)).annotations({
62
62
  description: "Fully qualified globally unique typename in reverse-DNS form.",
63
63
  example: "org.dxos.type.message"
64
64
  });
@@ -101,15 +101,7 @@ var getTypename = (obj) => {
101
101
  }
102
102
  };
103
103
  var setTypename = (obj, typename) => {
104
- invariant(typename instanceof DXN, "Invalid type.", {
105
- F: __dxlog_file,
106
- L: 199,
107
- S: void 0,
108
- A: [
109
- "typename instanceof DXN",
110
- "'Invalid type.'"
111
- ]
112
- });
104
+ invariant(typename instanceof DXN, "Invalid type.", { "~LogMeta": "~LogMeta", F: __dxlog_file, L: 136, S: void 0, A: ["typename instanceof DXN", "'Invalid type.'"] });
113
105
  Object.defineProperty(obj, TypeId, {
114
106
  value: typename,
115
107
  writable: false,
@@ -125,15 +117,7 @@ var getTypeDXN = (obj) => {
125
117
  if (!type) {
126
118
  return void 0;
127
119
  }
128
- invariant(type instanceof DXN, "Invalid object.", {
129
- F: __dxlog_file,
130
- L: 226,
131
- S: void 0,
132
- A: [
133
- "type instanceof DXN",
134
- "'Invalid object.'"
135
- ]
136
- });
120
+ invariant(type instanceof DXN, "Invalid object.", { "~LogMeta": "~LogMeta", F: __dxlog_file, L: 159, S: void 0, A: ["type instanceof DXN", "'Invalid object.'"] });
137
121
  return type;
138
122
  };
139
123
  var isInstanceOf = (schema, object) => {
@@ -241,7 +225,7 @@ var GeneratorAnnotationId = /* @__PURE__ */ Symbol.for("@dxos/schema/annotation/
241
225
  var GeneratorAnnotation = createAnnotationHelper(GeneratorAnnotationId);
242
226
  var makeUserAnnotation = (props) => {
243
227
  assertArgument(/^[a-z][a-z0-9]*(\.[a-z][a-z0-9-]*){2,}$/.test(props.id), "id", "Annotation id must be in the FQN format (org.dxos.annotation.example).");
244
- const getFromAst = (ast) => SchemaAST.getAnnotation(PropertyMetaAnnotationId)(ast).pipe(Option.map((meta) => meta[props.id]), Option.map(Schema.decodeUnknownSync(props.schema)));
228
+ const getFromAst = (ast) => SchemaAST.getAnnotation(PropertyMetaAnnotationId)(ast).pipe(Option.flatMap((meta) => Option.fromNullable(meta[props.id])), Option.map(Schema.decodeUnknownSync(props.schema)));
245
229
  return {
246
230
  get: (schema) => getFromAst(schema.ast),
247
231
  getFromAst: (ast) => getFromAst(ast),
@@ -278,6 +262,10 @@ var IconAnnotation = makeUserAnnotation({
278
262
  id: "org.dxos.annotation.icon",
279
263
  schema: IconAnnotationSchema
280
264
  });
265
+ var IconFromRefAnnotation = makeUserAnnotation({
266
+ id: "org.dxos.annotation.icon.from-ref",
267
+ schema: Schema.String
268
+ });
281
269
  var getLabel = (entity) => {
282
270
  const schema = getSchema(entity);
283
271
  if (schema != null) {
@@ -353,9 +341,10 @@ export {
353
341
  GeneratorAnnotation,
354
342
  makeUserAnnotation,
355
343
  IconAnnotation,
344
+ IconFromRefAnnotation,
356
345
  getLabel,
357
346
  setLabel,
358
347
  getDescription,
359
348
  setDescription
360
349
  };
361
- //# sourceMappingURL=chunk-6URFBQJH.mjs.map
350
+ //# sourceMappingURL=chunk-TNBK56IN.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/internal/common/types/typename.ts", "../../../src/internal/Annotation/annotations.ts"],
4
+ "sourcesContent": ["//\n// Copyright 2024 DXOS.org\n//\n\nimport type * as Schema from 'effect/Schema';\n\n/**\n * Property name for typename when object is serialized to JSON.\n */\nexport const ATTR_TYPE = '@type';\n\n/**\n * DXN to the object type.\n */\nexport const TypeId = Symbol.for('@dxos/echo/Type');\n\n/**\n * Reference to the object schema.\n */\nexport const SchemaId = Symbol.for('@dxos/echo/Schema');\n\n/**\n * Property name for parent when object is serialized to JSON.\n */\nexport const ATTR_PARENT = '@parent';\n\n/**\n * Reference to the object parent.\n */\nexport const ParentId = Symbol.for('@dxos/echo/Parent');\n\n/**\n * Returns the schema for the given object if one is defined.\n *\n * @internal (Use Obj.getSchema)\n */\n// TODO(burdon): Narrow type.\n// TODO(dmaretskyi): For echo objects, this always returns the root schema.\nexport const getSchema = (obj: unknown | undefined): Schema.Schema.AnyNoContext | undefined => {\n if (obj) {\n return (obj as any)[SchemaId];\n }\n};\n\n/**\n * @internal\n */\nexport const setSchema = (obj: any, schema: Schema.Schema.AnyNoContext): void => {\n Object.defineProperty(obj, SchemaId, {\n value: schema,\n writable: false,\n enumerable: false,\n configurable: false,\n });\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\nimport * as Function from 'effect/Function';\nimport * as Option from 'effect/Option';\nimport * as Schema from 'effect/Schema';\nimport * as SchemaAST from 'effect/SchemaAST';\n\nimport { raise } from '@dxos/debug';\nimport { type JsonPath, getField } from '@dxos/effect';\nimport { assertArgument, invariant } from '@dxos/invariant';\nimport { DXN } from '@dxos/keys';\nimport { type Primitive } from '@dxos/util';\n\nimport { type Mutable } from '../common/proxy';\nimport { type AnyProperties, EntityKind, TypeId, getSchema } from '../common/types';\nimport { type AnnotationHelper, createAnnotationHelper } from './util';\n\n/**\n * @internal\n */\nexport const FIELD_PATH_ANNOTATION = 'path';\n\n/**\n * Sets the path for the field.\n * @param path Data source path in the json path format. This is the field path in the source object.\n */\n// TODO(burdon): Field, vs. path vs. property.\nexport const FieldPath = (path: string) => PropertyMeta(FIELD_PATH_ANNOTATION, path);\n\n//\n// Type\n//\n\n/**\n * ECHO identifier (for a stored schema).\n * Must be a `dxn:echo:` URI.\n */\nexport const TypeIdentifierAnnotationId = Symbol.for('@dxos/schema/annotation/TypeIdentifier');\n\nexport const getTypeIdentifierAnnotation = (schema: Schema.Schema.All) =>\n Function.flow(\n SchemaAST.getAnnotation<string>(TypeIdentifierAnnotationId),\n Option.getOrElse(() => undefined),\n )(schema.ast);\n\n/**\n * @returns DXN of the schema.\n *\n * For non-stored schema returns `dxn:type:`.\n * For stored schema returns `dxn:echo:`.\n */\nexport const getSchemaDXN = (schema: Schema.Schema.All): DXN | undefined => {\n assertArgument(Schema.isSchema(schema), 'schema', 'invalid schema');\n const id = getTypeIdentifierAnnotation(schema);\n if (id) {\n return DXN.parse(id);\n }\n\n // TODO(dmaretskyi): Add support for dynamic schema.\n const objectAnnotation = getTypeAnnotation(schema);\n if (!objectAnnotation) {\n return undefined;\n }\n\n return DXN.fromTypenameAndVersion(objectAnnotation.typename, objectAnnotation.version);\n};\n\n/**\n * @param input schema or a typename string.\n * @return type DXN.\n */\nexport const getTypeDXNFromSpecifier = (input: Schema.Schema.All | string): DXN => {\n if (Schema.isSchema(input)) {\n return getSchemaDXN(input) ?? raise(new TypeError('Schema has no DXN'));\n } else {\n assertArgument(typeof input === 'string', 'input');\n assertArgument(!input.startsWith('dxn:'), 'input');\n return DXN.fromTypename(input);\n }\n};\n\n//\n// TypeAnnotation\n//\n\n/**\n * Fully qualified globally unique typename.\n * Example: `org.dxos.type.message`\n */\n// TODO(wittjosiah): Factor out to DXN spec.\nexport const TypenameSchema = Schema.String.pipe(\n Schema.pattern(\n /^[a-zA-Z]([a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(\\.[a-zA-Z0-9]([a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)+(\\.[a-zA-Z]([a-zA-Z0-9]{0,62})?)$/,\n ),\n).annotations({\n description: 'Fully qualified globally unique typename in reverse-DNS form.',\n example: 'org.dxos.type.message',\n});\n\n/**\n * Semantic version format: `major.minor.patch`\n * Example: `1.0.0`\n */\nexport const VersionSchema = Schema.String.pipe(Schema.pattern(/^\\d+.\\d+.\\d+$/)).annotations({\n description: 'Semantic version format: `major.minor.patch`',\n example: '1.0.0',\n});\n\nexport const TypeMeta = Schema.Struct({\n typename: TypenameSchema,\n version: VersionSchema,\n});\n\nexport interface TypeMeta extends Schema.Schema.Type<typeof TypeMeta> {}\n\n/**\n * Entity type.\n */\nexport const TypeAnnotationId = Symbol.for('@dxos/schema/annotation/Type');\n\n/**\n * Payload stored under {@link TypeAnnotationId}.\n */\nexport const TypeAnnotation = Schema.extend(\n TypeMeta,\n Schema.Struct({\n kind: Schema.Enums(EntityKind),\n\n /**\n * If this is a relation, the schema of the source object.\n * Must be present if entity kind is {@link EntityKind.Relation}.\n */\n sourceSchema: Schema.optional(DXN.Schema),\n\n /**\n * If this is a relation, the schema of the target object.\n * Must be present if entity kind is {@link EntityKind.Relation}.\n */\n targetSchema: Schema.optional(DXN.Schema),\n }),\n);\n\nexport interface TypeAnnotation extends Schema.Schema.Type<typeof TypeAnnotation> {}\n\n/**\n * @returns {@link TypeAnnotation} from a schema.\n * Schema must have been created with {@link TypedObject} or {@link TypedLink} or manually assigned an appropriate annotation.\n */\nexport const getTypeAnnotation = (schema: Schema.Schema.All): TypeAnnotation | undefined => {\n assertArgument(schema != null && schema.ast != null, 'schema', 'invalid schema');\n return Function.flow(\n SchemaAST.getAnnotation<TypeAnnotation>(TypeAnnotationId),\n Option.getOrElse(() => undefined),\n )(schema.ast);\n};\n\n/**\n * @returns {@link EntityKind} from a schema.\n */\nexport const getEntityKind = (schema: Schema.Schema.All): EntityKind | undefined => getTypeAnnotation(schema)?.kind;\n\n/**\n * @internal\n * @returns Schema typename (without dxn: prefix or version number).\n */\nexport const getSchemaTypename = (schema: Schema.Schema.All): string | undefined => getTypeAnnotation(schema)?.typename;\n\n/**\n * @internal\n * @returns Schema version in semver format.\n */\nexport const getSchemaVersion = (schema: Schema.Schema.All): string | undefined => getTypeAnnotation(schema)?.version;\n\n/**\n * Gets the typename of the object without the version.\n * Returns only the name portion, not the DXN.\n * @example \"org.example.type.contact\"\n *\n * @internal (use Obj.getTypename)\n */\nexport const getTypename = (obj: AnyProperties): string | undefined => {\n const schema = getSchema(obj);\n if (schema != null) {\n // Try to extract typename from DXN.\n return getSchemaTypename(schema);\n } else {\n const type = getTypeDXN(obj);\n return type?.asTypeDXN()?.type;\n }\n};\n\n/**\n * @internal (use Type.setTypename)\n */\n// TODO(dmaretskyi): Rename setTypeDXN.\nexport const setTypename = (obj: any, typename: DXN): void => {\n invariant(typename instanceof DXN, 'Invalid type.');\n Object.defineProperty(obj, TypeId, {\n value: typename,\n writable: false,\n enumerable: false,\n configurable: false,\n });\n};\n\n/**\n * @returns Object type as {@link DXN}.\n * @returns undefined if the object doesn't have a type.\n * @example `dxn:com.example.type.person:1.0.0`\n *\n * @internal (use Obj.getTypeDXN)\n */\n// TODO(burdon): Narrow type.\nexport const getTypeDXN = (obj: AnyProperties): DXN | undefined => {\n if (!obj) {\n return undefined;\n }\n\n const type = (obj as any)[TypeId];\n if (!type) {\n return undefined;\n }\n\n invariant(type instanceof DXN, 'Invalid object.');\n return type;\n};\n\n/**\n * Checks if the object is an instance of the schema.\n * Only typename is compared, the schema version is ignored.\n *\n * The following cases are considered to mean that the object is an instance of the schema:\n * - Object was created with this exact schema.\n * - Object was created with a different version of this schema.\n * - Object was created with a different schema (maybe dynamic) that has the same typename.\n */\n// TODO(burdon): Can we use `Schema.is`?\nexport const isInstanceOf = <Schema extends Schema.Schema.AnyNoContext>(\n schema: Schema,\n object: any,\n): object is Schema.Schema.Type<Schema> => {\n if (object == null) {\n return false;\n }\n\n const schemaDXN = getSchemaDXN(schema);\n if (!schemaDXN) {\n throw new Error('Schema must have an object annotation.');\n }\n\n const type = getTypeDXN(object);\n if (type && DXN.equals(type, schemaDXN)) {\n return true;\n }\n\n const typename = getTypename(object);\n if (!typename) {\n return false;\n }\n\n const typeDXN = schemaDXN.asTypeDXN();\n if (!typeDXN) {\n return false;\n }\n\n return typeDXN.type === typename;\n};\n\n//\n// PropertyMeta\n//\n\n/**\n * PropertyMeta (metadata for dynamic schema properties).\n * For user-defined annotations.\n */\nexport const PropertyMetaAnnotationId = Symbol.for('@dxos/schema/annotation/PropertyMeta');\n\nexport type PropertyMetaValue = Primitive | Record<string, Primitive> | Primitive[];\n\nexport type PropertyMetaAnnotation = {\n [name: string]: PropertyMetaValue;\n};\n\n// TODO(wittjosiah): Align with other annotations.\n// TODO(wittjosiah): Why is this separate from FormatAnnotation?\nexport const PropertyMeta = (name: string, value: PropertyMetaValue) => {\n return <A, I, R>(self: Schema.Schema<A, I, R>): Schema.Schema<A, I, R> => {\n const existingMeta = self.ast.annotations[PropertyMetaAnnotationId] as PropertyMetaAnnotation;\n return self.annotations({\n [PropertyMetaAnnotationId]: {\n ...existingMeta,\n [name]: value,\n },\n });\n };\n};\n\nexport const getPropertyMetaAnnotation = <T>(prop: SchemaAST.PropertySignature, name: string) =>\n Function.pipe(\n SchemaAST.getAnnotation<PropertyMetaAnnotation>(PropertyMetaAnnotationId)(prop.type),\n Option.map((meta) => meta[name] as T),\n Option.getOrElse(() => undefined),\n );\n\n//\n// Reference\n//\n\n/**\n * Schema reference.\n */\nexport const ReferenceAnnotationId = Symbol.for('@dxos/schema/annotation/Reference');\nexport type ReferenceAnnotationValue = TypeAnnotation;\nexport const ReferenceAnnotation = createAnnotationHelper<ReferenceAnnotationValue>(ReferenceAnnotationId);\n\n/**\n * SchemaMeta.\n */\nexport const SchemaMetaSymbol = Symbol.for('@dxos/schema/SchemaMeta');\nexport type SchemaMeta = TypeMeta & { id: string };\n\n/**\n * Identifies a schema as a schema for a hidden system type.\n */\nexport const SystemTypeAnnotationId = Symbol.for('@dxos/schema/annotation/SystemType');\nexport const SystemTypeAnnotation = createAnnotationHelper<boolean>(SystemTypeAnnotationId);\n\n/**\n * Identifies label property or JSON path expression.\n * Either a string or an array of strings representing field accessors each matched in priority order.\n */\nexport const LabelAnnotationId = Symbol.for('@dxos/schema/annotation/Label');\nexport const LabelAnnotation = createAnnotationHelper<string[]>(LabelAnnotationId);\n\n/**\n * Returns the label for a given object based on {@link LabelAnnotationId}.\n * Lower-level version that requires explicit schema parameter.\n * Skips empty strings and whitespace-only strings, continuing to the next field.\n */\n// TODO(burdon): Convert to JsonPath?\nexport const getLabelWithSchema = <S extends Schema.Schema.Any>(\n schema: S,\n object: Schema.Schema.Type<S>,\n): string | undefined => {\n const annotation = LabelAnnotation.get(schema).pipe(Option.getOrElse(() => ['name']));\n for (const accessor of annotation) {\n assertArgument(\n typeof accessor === 'string',\n 'accessor',\n 'Label annotation must be a string or an array of strings',\n );\n const value = getField(object, accessor as JsonPath);\n switch (typeof value) {\n case 'string': {\n const trimmed = value.trim();\n if (trimmed.length > 0) {\n return value;\n }\n continue;\n }\n case 'number':\n case 'boolean':\n case 'bigint':\n case 'symbol':\n return value.toString();\n case 'undefined':\n case 'object':\n case 'function':\n continue;\n }\n }\n\n return undefined;\n};\n\n/**\n * Sets the label for a given object based on {@link LabelAnnotationId}.\n * Lower-level version that requires explicit schema parameter.\n */\nexport const setLabelWithSchema = <S extends Schema.Schema.Any>(\n schema: S,\n object: Schema.Schema.Type<S>,\n label: string,\n) => {\n const annotation = LabelAnnotation.get(schema).pipe(\n Option.map((field) => field[0]),\n Option.getOrElse(() => 'name'),\n );\n object[annotation] = label;\n};\n\n/**\n * Identifies description property or JSON path expression.\n * A string representing field accessor.\n */\nexport const DescriptionAnnotationId = Symbol.for('@dxos/schema/annotation/Description');\nexport const DescriptionAnnotation = createAnnotationHelper<string>(DescriptionAnnotationId);\n\n/**\n * Returns the description for a given object based on {@link DescriptionAnnotationId}.\n * Lower-level version that requires explicit schema parameter.\n */\n// TODO(burdon): Convert to JsonPath?\nexport const getDescriptionWithSchema = <S extends Schema.Schema.Any>(\n schema: S,\n object: Schema.Schema.Type<S>,\n): string | undefined => {\n const accessor = DescriptionAnnotation.get(schema).pipe(Option.getOrElse(() => 'description'));\n assertArgument(typeof accessor === 'string', 'accessor', 'Description annotation must be a string');\n const value = getField(object, accessor as JsonPath);\n switch (typeof value) {\n case 'string':\n case 'number':\n case 'boolean':\n case 'bigint':\n case 'symbol':\n return value.toString();\n case 'undefined':\n case 'object':\n case 'function':\n default:\n return undefined;\n }\n};\n\n/**\n * Sets the description for a given object based on {@link DescriptionAnnotationId}.\n * Lower-level version that requires explicit schema parameter.\n */\nexport const setDescriptionWithSchema = <S extends Schema.Schema.Any>(\n schema: S,\n object: Schema.Schema.Type<S>,\n description: string,\n) => {\n const accessor = DescriptionAnnotation.get(schema).pipe(Option.getOrElse(() => 'description'));\n object[accessor] = description;\n};\n\n/**\n * Identifies if a property should be included in a form or not.\n * By default, all properties are included in forms, so this is opt-out.\n */\nexport const FormInputAnnotationId = Symbol.for('@dxos/schema/annotation/FormInput');\nexport const FormInputAnnotation = createAnnotationHelper<boolean>(FormInputAnnotationId);\n\n/**\n * Default field to be used on referenced schema to lookup the value.\n */\nexport const FieldLookupAnnotationId = Symbol.for('@dxos/schema/annotation/FieldLookup');\n\n/**\n * Generate test data.\n */\nexport const GeneratorAnnotationId = Symbol.for('@dxos/schema/annotation/Generator');\n\nexport type GeneratorAnnotationValue =\n | string\n | {\n generator: string;\n args?: any[];\n probability?: number;\n };\n\nexport const GeneratorAnnotation = createAnnotationHelper<GeneratorAnnotationValue>(GeneratorAnnotationId);\n\ninterface MakeAnnoationsProps<T> {\n id: string;\n schema: Schema.Schema<T, any, never>;\n}\n\n// TODO(wittjosiah): Comment.\nexport const makeUserAnnotation = <T>(props: MakeAnnoationsProps<T>): AnnotationHelper<T> => {\n assertArgument(\n /^[a-z][a-z0-9]*(\\.[a-z][a-z0-9-]*){2,}$/.test(props.id),\n 'id',\n 'Annotation id must be in the FQN format (org.dxos.annotation.example).',\n );\n\n const getFromAst = (ast: SchemaAST.AST) =>\n SchemaAST.getAnnotation<PropertyMetaAnnotation>(PropertyMetaAnnotationId)(ast).pipe(\n Option.flatMap((meta) => Option.fromNullable(meta[props.id])),\n Option.map(Schema.decodeUnknownSync(props.schema)),\n );\n\n return {\n get: (schema) => getFromAst(schema.ast),\n getFromAst: (ast) => getFromAst(ast),\n set: (value) =>\n PropertyMeta(props.id, Schema.encodeSync(props.schema)(value)) as <S extends Schema.Schema.Any>(schema: S) => S,\n };\n};\n\nconst IconAnnotationSchema = Schema.Struct({\n /**\n * Phosphor icon name (e.g., 'ph--user--regular', 'ph--cube--regular', 'ph--link--regular ', etc.)\n */\n icon: Schema.String.pipe(Schema.pattern(/^ph--[a-z-]+--[a-z]+$/)),\n\n /**\n * Color name.\n *\n * List of colors:\n * - 'red'\n * - 'orange'\n * - 'amber'\n * - 'yellow'\n * - 'lime'\n * - 'green'\n * - 'emerald'\n * - 'teal'\n * - 'cyan'\n * - 'violet'\n * - 'purple'\n * - 'fuchsia'\n * - 'pink'\n * - 'rose'\n */\n\n hue: Schema.optional(Schema.String),\n});\n\nexport interface IconAnnotation extends Schema.Schema.Type<typeof IconAnnotationSchema> {}\n\n/**\n * Icon to render in the UI.\n */\nexport const IconAnnotation = makeUserAnnotation<IconAnnotation>({\n id: 'org.dxos.annotation.icon',\n schema: IconAnnotationSchema,\n});\n\n/**\n * Indicates that this entity's icon should be resolved from a property whose value is a `Ref`\n * to another entity. Consumers (e.g. graph node builders) resolve the ref target and use that\n * target's schema `IconAnnotation` in place of the static one declared on this schema.\n *\n * Useful for wrapper schemas that delegate their visual identity to a referenced sub-entity\n * (e.g. a generic `Game` whose icon should come from its `variant` ref's typed state).\n */\nexport const IconFromRefAnnotation = makeUserAnnotation<string>({\n id: 'org.dxos.annotation.icon.from-ref',\n schema: Schema.String,\n});\n\n/**\n * Get the label of an entity.\n * Accepts both reactive entities and snapshots.\n */\nexport const getLabel = (entity: AnyProperties): string | undefined => {\n const schema = getSchema(entity);\n if (schema != null) {\n return getLabelWithSchema(schema, entity);\n }\n};\n\n/**\n * Set the label of an entity.\n * Must be called within an Obj.update or Relation.update callback.\n */\nexport const setLabel = (entity: Mutable<AnyProperties>, label: string) => {\n const schema = getSchema(entity);\n if (schema != null) {\n setLabelWithSchema(schema, entity, label);\n }\n};\n\n/**\n * Get the description of an entity.\n * Accepts both reactive entities and snapshots.\n */\nexport const getDescription = (entity: AnyProperties): string | undefined => {\n const schema = getSchema(entity);\n if (schema != null) {\n return getDescriptionWithSchema(schema, entity);\n }\n};\n\n/**\n * Set the description of an entity.\n * Must be called within an Obj.update or Relation.update callback.\n */\nexport const setDescription = (entity: Mutable<AnyProperties>, description: string) => {\n const schema = getSchema(entity);\n if (schema != null) {\n setDescriptionWithSchema(schema, entity, description);\n }\n};\n"],
5
+ "mappings": "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",
6
+ "names": ["ATTR_TYPE", "TypeId", "Symbol", "for", "SchemaId", "ATTR_PARENT", "ParentId", "getSchema", "obj", "setSchema", "schema", "Object", "defineProperty", "value", "writable", "enumerable", "configurable", "Function", "Option", "Schema", "SchemaAST", "raise", "getField", "assertArgument", "invariant", "DXN", "id", "getTypeIdentifierAnnotation", "DXN", "undefined", "fromTypenameAndVersion", "getSchemaDXN", "raise", "TypeError", "assertArgument", "input", "fromTypename", "example", "TypeMeta", "version", "VersionSchema", "Function", "getAnnotation", "schema", "getSchemaTypename", "type", "obj", "Object", "defineProperty", "TypeId", "value", "typename", "writable", "enumerable", "configurable", "invariant", "schemaDXN", "Error", "getTypeDXN", "object", "typeDXN", "existingMeta", "self", "ast", "annotations", "PropertyMetaAnnotationId", "getField", "annotation", "label", "accessor", "description", "makeUserAnnotation", "props", "getFromAst", "SchemaAST", "get", "set", "PropertyMeta", "IconAnnotationSchema", "Schema", "getLabelWithSchema", "setLabelWithSchema", "entity", "getDescriptionWithSchema", "setDescriptionWithSchema"]
7
+ }
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  createAnnotationHelper
3
- } from "./chunk-TBKX6JQO.mjs";
3
+ } from "./chunk-N4B7FHQT.mjs";
4
4
 
5
5
  // src/internal/Format/types.ts
6
6
  import * as Function from "effect/Function";
@@ -399,4 +399,4 @@ export {
399
399
  Format,
400
400
  SelectOption
401
401
  };
402
- //# sourceMappingURL=chunk-DQYLD2RB.mjs.map
402
+ //# sourceMappingURL=chunk-TRPZU2HV.mjs.map
@@ -39,4 +39,4 @@ export {
39
39
  rank,
40
40
  Order_exports
41
41
  };
42
- //# sourceMappingURL=chunk-UI6MWK5W.mjs.map
42
+ //# sourceMappingURL=chunk-TTCSATUD.mjs.map
@@ -4,4 +4,4 @@ var QueryResult_exports = {};
4
4
  export {
5
5
  QueryResult_exports
6
6
  };
7
- //# sourceMappingURL=chunk-OMUPQMLR.mjs.map
7
+ //# sourceMappingURL=chunk-V72DY6LU.mjs.map
@@ -48,4 +48,4 @@ export {
48
48
  GetReactiveError,
49
49
  Err_exports
50
50
  };
51
- //# sourceMappingURL=chunk-UBEZSGXY.mjs.map
51
+ //# sourceMappingURL=chunk-ZISMEVKD.mjs.map
@@ -2,6 +2,6 @@
2
2
  "version": 3,
3
3
  "sources": ["../../../src/Err.ts"],
4
4
  "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\n// @import-as-namespace\n\nimport { BaseError, type BaseErrorOptions } from '@dxos/errors';\nimport { type DXN } from '@dxos/keys';\n\nexport class SchemaNotFoundError extends BaseError.extend('SchemaNotFoundError', 'Schema not found') {\n constructor(schema: string, options?: BaseErrorOptions) {\n super({ context: { schema }, ...options });\n }\n}\n\nexport class ObjectNotFoundError extends BaseError.extend('ObjectNotFoundError', 'Object not found') {\n constructor(dxn: DXN, options?: BaseErrorOptions) {\n super({ context: { dxn }, ...options });\n }\n}\n\n/**\n * Reason why getting a reactive object from a snapshot failed.\n * - `no-database`: The snapshot is not associated with a database.\n * - `object-not-found`: The object was removed or does not exist in the database.\n */\nexport type GetReactiveErrorReason = 'no-database' | 'object-not-found';\n\n/**\n * Error thrown when a reactive object cannot be resolved from a snapshot.\n * Extends `BaseError` with a `reason` and optional `snapshotId` in its context.\n */\nexport class GetReactiveError extends BaseError.extend(\n 'GetReactiveError',\n 'Failed to get reactive object from snapshot',\n) {\n constructor(options: { reason: GetReactiveErrorReason; snapshotId?: string } & BaseErrorOptions) {\n super({ context: { reason: options.reason, snapshotId: options.snapshotId }, ...options });\n }\n}\n"],
5
- "mappings": ";;;;;AAAA;;;;;;AAMA,SAASA,iBAAwC;AAG1C,IAAMC,sBAAN,cAAkCC,UAAUC,OAAO,uBAAuB,kBAAA,EAAA;EAC/E,YAAYC,QAAgBC,SAA4B;AACtD,UAAM;MAAEC,SAAS;QAAEF;MAAO;MAAG,GAAGC;IAAQ,CAAA;EAC1C;AACF;AAEO,IAAME,sBAAN,cAAkCL,UAAUC,OAAO,uBAAuB,kBAAA,EAAA;EAC/E,YAAYK,KAAUH,SAA4B;AAChD,UAAM;MAAEC,SAAS;QAAEE;MAAI;MAAG,GAAGH;IAAQ,CAAA;EACvC;AACF;AAaO,IAAMI,mBAAN,cAA+BP,UAAUC,OAC9C,oBACA,6CAAA,EAAA;EAEA,YAAYE,SAAqF;AAC/F,UAAM;MAAEC,SAAS;QAAEI,QAAQL,QAAQK;QAAQC,YAAYN,QAAQM;MAAW;MAAG,GAAGN;IAAQ,CAAA;EAC1F;AACF;",
6
- "names": ["BaseError", "SchemaNotFoundError", "BaseError", "extend", "schema", "options", "context", "ObjectNotFoundError", "dxn", "GetReactiveError", "reason", "snapshotId"]
5
+ "mappings": ";;;;;AAAA;;;;;;AAMA,SAASA,iBAAwC;AAG1C,IAAMC,sBAAN,cAAkCD,UAAUE,OAAO,uBAAuB,kBAAA,EAAA;EAC/E,YAAYC,QAAgBC,SAA4B;AACtD,UAAM;MAAEC,SAAS;QAAEF;MAAO;MAAG,GAAGC;IAAQ,CAAA;EAC1C;AACF;AAEO,IAAME,sBAAN,cAAkCN,UAAUE,OAAO,uBAAuB,kBAAA,EAAA;EAC/E,YAAYK,KAAUH,SAA4B;AAChD,UAAM;MAAEC,SAAS;QAAEE;MAAI;MAAG,GAAGH;IAAQ,CAAA;EACvC;AACF;AAaO,IAAMI,mBAAN,cAA+BR,UAAUE,OAC9C,oBACA,6CAAA,EAAA;EAEA,YAAYE,SAAqF;AAC/F,UAAM;MAAEC,SAAS;QAAEI,QAAQL,QAAQK;QAAQC,YAAYN,QAAQM;MAAW;MAAG,GAAGN;IAAQ,CAAA;EAC1F;AACF;",
6
+ "names": ["BaseError", "SchemaNotFoundError", "extend", "schema", "options", "context", "ObjectNotFoundError", "dxn", "GetReactiveError", "reason", "snapshotId"]
7
7
  }
@@ -3,73 +3,77 @@ import {
3
3
  DXN,
4
4
  Dataset_exports,
5
5
  Hypergraph_exports,
6
+ Json_exports,
6
7
  QueryAST,
7
8
  View_exports
8
- } from "./chunk-7QQMUDE6.mjs";
9
+ } from "./chunk-GMS5PKGQ.mjs";
9
10
  import {
10
11
  SchemaRegistry_exports
11
- } from "./chunk-BNCCGLJN.mjs";
12
+ } from "./chunk-BICZKPQG.mjs";
12
13
  import {
13
14
  Tag_exports
14
- } from "./chunk-XZM7FERR.mjs";
15
+ } from "./chunk-QBIKZ3TY.mjs";
15
16
  import {
16
17
  Order_exports
17
- } from "./chunk-UI6MWK5W.mjs";
18
+ } from "./chunk-TTCSATUD.mjs";
18
19
  import {
19
20
  Key_exports
20
- } from "./chunk-ANHVGJI4.mjs";
21
+ } from "./chunk-7RVZT53K.mjs";
22
+ import {
23
+ Migration_exports
24
+ } from "./chunk-FIWO2FZK.mjs";
21
25
  import {
22
26
  Extension_exports
23
- } from "./chunk-YS6Q3XAD.mjs";
27
+ } from "./chunk-GWFFC34K.mjs";
24
28
  import {
25
29
  Format_exports
26
- } from "./chunk-GZQTCRJB.mjs";
30
+ } from "./chunk-44HT3MEC.mjs";
27
31
  import {
28
32
  Relation_exports
29
- } from "./chunk-66GBFH43.mjs";
33
+ } from "./chunk-A6IYRT5A.mjs";
30
34
  import {
31
35
  JsonSchema_exports
32
- } from "./chunk-E5PBQJWV.mjs";
36
+ } from "./chunk-QRZ2I3ZM.mjs";
33
37
  import {
34
38
  QueryResult_exports
35
- } from "./chunk-OMUPQMLR.mjs";
39
+ } from "./chunk-V72DY6LU.mjs";
36
40
  import {
37
41
  Query_exports
38
- } from "./chunk-MYMU4TWK.mjs";
42
+ } from "./chunk-7VWWUTRQ.mjs";
39
43
  import {
40
44
  Feed_exports
41
- } from "./chunk-VCAP4OOT.mjs";
45
+ } from "./chunk-SKDTKHDC.mjs";
42
46
  import {
43
47
  Type_exports
44
- } from "./chunk-MZXWVR3T.mjs";
48
+ } from "./chunk-PSZBLH53.mjs";
45
49
  import {
46
50
  Filter_exports
47
- } from "./chunk-XZJUNTML.mjs";
51
+ } from "./chunk-APJKDGFL.mjs";
48
52
  import {
49
53
  Obj_exports
50
- } from "./chunk-KPY6FC5I.mjs";
54
+ } from "./chunk-BVOWYVTD.mjs";
51
55
  import {
52
56
  Ref_exports
53
- } from "./chunk-46QNGNTY.mjs";
57
+ } from "./chunk-N7VOEPSV.mjs";
54
58
  import {
55
59
  Entity_exports
56
- } from "./chunk-2U2BZDLU.mjs";
57
- import "./chunk-WMFVS4KR.mjs";
58
- import "./chunk-R72KFH2X.mjs";
59
- import "./chunk-FNEFSO2C.mjs";
60
- import "./chunk-DQYLD2RB.mjs";
61
- import "./chunk-QWAOTFCY.mjs";
60
+ } from "./chunk-SCPFDS2E.mjs";
61
+ import "./chunk-G54OX4IX.mjs";
62
+ import "./chunk-APHSOTIX.mjs";
63
+ import "./chunk-MLS7U7AT.mjs";
64
+ import "./chunk-TRPZU2HV.mjs";
65
+ import "./chunk-BMB7IHGB.mjs";
62
66
  import {
63
67
  Annotation_exports
64
- } from "./chunk-ZIXGDU6F.mjs";
68
+ } from "./chunk-5SL5LDLD.mjs";
65
69
  import {
66
70
  Database_exports
67
- } from "./chunk-EBVB5NOH.mjs";
68
- import "./chunk-6URFBQJH.mjs";
69
- import "./chunk-TBKX6JQO.mjs";
71
+ } from "./chunk-I2DARWPX.mjs";
72
+ import "./chunk-TNBK56IN.mjs";
73
+ import "./chunk-N4B7FHQT.mjs";
70
74
  import {
71
75
  Err_exports
72
- } from "./chunk-UBEZSGXY.mjs";
76
+ } from "./chunk-ZISMEVKD.mjs";
73
77
  import "./chunk-J5LGTIGS.mjs";
74
78
  export {
75
79
  Annotation_exports as Annotation,
@@ -84,8 +88,10 @@ export {
84
88
  Filter_exports as Filter,
85
89
  Format_exports as Format,
86
90
  Hypergraph_exports as Hypergraph,
91
+ Json_exports as Json,
87
92
  JsonSchema_exports as JsonSchema,
88
93
  Key_exports as Key,
94
+ Migration_exports as Migration,
89
95
  Obj_exports as Obj,
90
96
  Order_exports as Order,
91
97
  Query_exports as Query,
@@ -106,10 +106,10 @@ import {
106
106
  updateFieldsInSchema,
107
107
  version,
108
108
  versionValid
109
- } from "../chunk-WMFVS4KR.mjs";
109
+ } from "../chunk-G54OX4IX.mjs";
110
110
  import {
111
111
  RefArray
112
- } from "../chunk-R72KFH2X.mjs";
112
+ } from "../chunk-APHSOTIX.mjs";
113
113
  import {
114
114
  CustomAnnotations,
115
115
  DecodedAnnotations,
@@ -126,7 +126,7 @@ import {
126
126
  toEffectSchema,
127
127
  toJsonSchema,
128
128
  toPropType
129
- } from "../chunk-FNEFSO2C.mjs";
129
+ } from "../chunk-MLS7U7AT.mjs";
130
130
  import {
131
131
  Currency,
132
132
  CurrencyAnnotationId,
@@ -157,7 +157,7 @@ import {
157
157
  getOptionsAnnotation,
158
158
  getTypeEnum,
159
159
  typeToFormat
160
- } from "../chunk-DQYLD2RB.mjs";
160
+ } from "../chunk-TRPZU2HV.mjs";
161
161
  import {
162
162
  JSON_SCHEMA_ECHO_REF_ID,
163
163
  Ref,
@@ -171,8 +171,8 @@ import {
171
171
  getSchemaReference,
172
172
  refFromEncodedReference,
173
173
  setRefResolver
174
- } from "../chunk-QWAOTFCY.mjs";
175
- import "../chunk-EBVB5NOH.mjs";
174
+ } from "../chunk-BMB7IHGB.mjs";
175
+ import "../chunk-I2DARWPX.mjs";
176
176
  import {
177
177
  ATTR_PARENT,
178
178
  ATTR_TYPE,
@@ -186,6 +186,7 @@ import {
186
186
  GeneratorAnnotation,
187
187
  GeneratorAnnotationId,
188
188
  IconAnnotation,
189
+ IconFromRefAnnotation,
189
190
  LabelAnnotation,
190
191
  LabelAnnotationId,
191
192
  ParentId,
@@ -227,7 +228,7 @@ import {
227
228
  setLabelWithSchema,
228
229
  setSchema,
229
230
  setTypename
230
- } from "../chunk-6URFBQJH.mjs";
231
+ } from "../chunk-TNBK56IN.mjs";
231
232
  import {
232
233
  ANY_OBJECT_TYPENAME,
233
234
  ANY_OBJECT_VERSION,
@@ -239,8 +240,8 @@ import {
239
240
  createAnnotationHelper,
240
241
  makeTypeJsonSchemaAnnotation,
241
242
  unwrapOptional
242
- } from "../chunk-TBKX6JQO.mjs";
243
- import "../chunk-UBEZSGXY.mjs";
243
+ } from "../chunk-N4B7FHQT.mjs";
244
+ import "../chunk-ZISMEVKD.mjs";
244
245
  import "../chunk-J5LGTIGS.mjs";
245
246
  export {
246
247
  ANY_OBJECT_TYPENAME,
@@ -286,6 +287,7 @@ export {
286
287
  GeoPoint,
287
288
  Hostname,
288
289
  IconAnnotation,
290
+ IconFromRefAnnotation,
289
291
  ImmutableSchema,
290
292
  JSON,
291
293
  JSON_SCHEMA_ECHO_REF_ID,