@dxos/echo 0.8.4-main.422d1c7879 → 0.8.4-main.4f23b4e393

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 (217) hide show
  1. package/README.md +2 -2
  2. package/dist/lib/neutral/Annotation.mjs +5 -3
  3. package/dist/lib/neutral/Database.mjs +4 -4
  4. package/dist/lib/neutral/Entity.mjs +14 -14
  5. package/dist/lib/neutral/Err.mjs +1 -1
  6. package/dist/lib/neutral/Extension.mjs +1 -1
  7. package/dist/lib/neutral/Feed.mjs +19 -17
  8. package/dist/lib/neutral/Filter.mjs +11 -11
  9. package/dist/lib/neutral/Format.mjs +3 -3
  10. package/dist/lib/neutral/JsonSchema.mjs +8 -8
  11. package/dist/lib/neutral/Key.mjs +1 -1
  12. package/dist/lib/neutral/Migration.mjs +10 -10
  13. package/dist/lib/neutral/Obj.mjs +14 -14
  14. package/dist/lib/neutral/Order.mjs +1 -1
  15. package/dist/lib/neutral/Query.mjs +17 -17
  16. package/dist/lib/neutral/QueryResult.mjs +1 -1
  17. package/dist/lib/neutral/Ref.mjs +9 -7
  18. package/dist/lib/neutral/Relation.mjs +15 -15
  19. package/dist/lib/neutral/SchemaRegistry.mjs +1 -1
  20. package/dist/lib/neutral/Tag.mjs +14 -14
  21. package/dist/lib/neutral/Type.mjs +10 -10
  22. package/dist/lib/neutral/{chunk-GZQTCRJB.mjs → chunk-44HT3MEC.mjs} +2 -2
  23. package/dist/lib/neutral/{chunk-4P3IXBLT.mjs → chunk-5SL5LDLD.mjs} +4 -2
  24. package/dist/lib/neutral/chunk-5SL5LDLD.mjs.map +7 -0
  25. package/dist/lib/neutral/{chunk-ANHVGJI4.mjs → chunk-7RVZT53K.mjs} +1 -1
  26. package/dist/lib/neutral/{chunk-A2WIDONZ.mjs → chunk-AHWSAJHU.mjs} +6 -22
  27. package/dist/lib/neutral/{chunk-A2WIDONZ.mjs.map → chunk-AHWSAJHU.mjs.map} +2 -2
  28. package/dist/lib/neutral/{chunk-XEU2Q5CI.mjs → chunk-APHSOTIX.mjs} +2 -2
  29. package/dist/lib/neutral/{chunk-BNCCGLJN.mjs → chunk-BICZKPQG.mjs} +1 -1
  30. package/dist/lib/neutral/{chunk-JPWH3QJD.mjs → chunk-BMB7IHGB.mjs} +10 -66
  31. package/dist/lib/neutral/{chunk-JPWH3QJD.mjs.map → chunk-BMB7IHGB.mjs.map} +2 -2
  32. package/dist/lib/neutral/{chunk-EJJFH3XB.mjs → chunk-C6LDQTNO.mjs} +10 -10
  33. package/dist/lib/neutral/chunk-C6LDQTNO.mjs.map +7 -0
  34. package/dist/lib/neutral/{chunk-GMYNDEMT.mjs → chunk-GKBXQFQK.mjs} +11 -27
  35. package/dist/lib/neutral/{chunk-GMYNDEMT.mjs.map → chunk-GKBXQFQK.mjs.map} +3 -3
  36. package/dist/lib/neutral/{chunk-YS6Q3XAD.mjs → chunk-GWFFC34K.mjs} +1 -1
  37. package/dist/lib/neutral/{chunk-YS6Q3XAD.mjs.map → chunk-GWFFC34K.mjs.map} +1 -1
  38. package/dist/lib/neutral/{chunk-PHU22NLC.mjs → chunk-I2DARWPX.mjs} +4 -12
  39. package/dist/lib/neutral/chunk-I2DARWPX.mjs.map +7 -0
  40. package/dist/lib/neutral/{chunk-RP37BQF7.mjs → chunk-KBZ4RAXR.mjs} +20 -16
  41. package/dist/lib/neutral/chunk-KBZ4RAXR.mjs.map +7 -0
  42. package/dist/lib/neutral/{chunk-QW7YUKSA.mjs → chunk-MLS7U7AT.mjs} +12 -65
  43. package/dist/lib/neutral/{chunk-QW7YUKSA.mjs.map → chunk-MLS7U7AT.mjs.map} +2 -2
  44. package/dist/lib/neutral/{chunk-TBKX6JQO.mjs → chunk-N4B7FHQT.mjs} +1 -1
  45. package/dist/lib/neutral/{chunk-H5F7C2UO.mjs → chunk-N7VOEPSV.mjs} +6 -3
  46. package/dist/lib/neutral/{chunk-H5F7C2UO.mjs.map → chunk-N7VOEPSV.mjs.map} +3 -3
  47. package/dist/lib/neutral/{chunk-ZUGFUCUK.mjs → chunk-NWXJZVWD.mjs} +8 -8
  48. package/dist/lib/neutral/{chunk-ZUGFUCUK.mjs.map → chunk-NWXJZVWD.mjs.map} +3 -3
  49. package/dist/lib/neutral/{chunk-JIN4EVUK.mjs → chunk-OMJN6VCR.mjs} +4 -4
  50. package/dist/lib/neutral/{chunk-EULNZHTP.mjs → chunk-PHOHAIEE.mjs} +4 -4
  51. package/dist/lib/neutral/{chunk-7I3YIAT2.mjs → chunk-QRZ2I3ZM.mjs} +2 -2
  52. package/dist/lib/neutral/{chunk-6ASBHRDG.mjs → chunk-SRX3EZY3.mjs} +38 -17
  53. package/dist/lib/neutral/chunk-SRX3EZY3.mjs.map +7 -0
  54. package/dist/lib/neutral/{chunk-WAK4DMFV.mjs → chunk-SUZMWP3Y.mjs} +2 -2
  55. package/dist/lib/neutral/{chunk-2KHZ36F5.mjs → chunk-TNBK56IN.mjs} +10 -21
  56. package/dist/lib/neutral/{chunk-2KHZ36F5.mjs.map → chunk-TNBK56IN.mjs.map} +3 -3
  57. package/dist/lib/neutral/{chunk-DQYLD2RB.mjs → chunk-TRPZU2HV.mjs} +2 -2
  58. package/dist/lib/neutral/{chunk-UI6MWK5W.mjs → chunk-TTCSATUD.mjs} +1 -1
  59. package/dist/lib/neutral/{chunk-OMUPQMLR.mjs → chunk-V72DY6LU.mjs} +1 -1
  60. package/dist/lib/neutral/{chunk-O26EPPBW.mjs → chunk-W7U2XGZ3.mjs} +11 -19
  61. package/dist/lib/neutral/{chunk-O26EPPBW.mjs.map → chunk-W7U2XGZ3.mjs.map} +3 -3
  62. package/dist/lib/neutral/{chunk-UBEZSGXY.mjs → chunk-ZISMEVKD.mjs} +1 -1
  63. package/dist/lib/neutral/{chunk-UBEZSGXY.mjs.map → chunk-ZISMEVKD.mjs.map} +2 -2
  64. package/dist/lib/neutral/{chunk-BQN7EDPH.mjs → chunk-ZVQ26DCR.mjs} +76 -478
  65. package/dist/lib/neutral/{chunk-BQN7EDPH.mjs.map → chunk-ZVQ26DCR.mjs.map} +3 -3
  66. package/dist/lib/neutral/index.mjs +28 -28
  67. package/dist/lib/neutral/internal/index.mjs +11 -9
  68. package/dist/lib/neutral/meta.json +1 -1
  69. package/dist/lib/neutral/testing/index.mjs +183 -129
  70. package/dist/lib/neutral/testing/index.mjs.map +3 -3
  71. package/dist/types/src/Annotation.d.ts +1 -1
  72. package/dist/types/src/Annotation.d.ts.map +1 -1
  73. package/dist/types/src/Collection.d.ts.map +1 -1
  74. package/dist/types/src/Database.d.ts +1 -1
  75. package/dist/types/src/Database.d.ts.map +1 -1
  76. package/dist/types/src/Dataset.d.ts +1 -1
  77. package/dist/types/src/Entity.d.ts +9 -9
  78. package/dist/types/src/Entity.d.ts.map +1 -1
  79. package/dist/types/src/Err.d.ts +18 -18
  80. package/dist/types/src/Err.d.ts.map +1 -1
  81. package/dist/types/src/Extension.d.ts +4 -4
  82. package/dist/types/src/Extension.d.ts.map +1 -1
  83. package/dist/types/src/Feed.d.ts +37 -13
  84. package/dist/types/src/Feed.d.ts.map +1 -1
  85. package/dist/types/src/Filter.d.ts.map +1 -1
  86. package/dist/types/src/Hypergraph.d.ts +3 -3
  87. package/dist/types/src/Hypergraph.d.ts.map +1 -1
  88. package/dist/types/src/Json.d.ts.map +1 -1
  89. package/dist/types/src/JsonSchema.d.ts +1 -1
  90. package/dist/types/src/Migration.d.ts.map +1 -1
  91. package/dist/types/src/Obj.d.ts +19 -19
  92. package/dist/types/src/Obj.d.ts.map +1 -1
  93. package/dist/types/src/Order.d.ts.map +1 -1
  94. package/dist/types/src/Query.d.ts +5 -1
  95. package/dist/types/src/Query.d.ts.map +1 -1
  96. package/dist/types/src/Ref.d.ts +1 -0
  97. package/dist/types/src/Ref.d.ts.map +1 -1
  98. package/dist/types/src/Relation.d.ts +15 -15
  99. package/dist/types/src/Relation.d.ts.map +1 -1
  100. package/dist/types/src/Tag.d.ts +2 -2
  101. package/dist/types/src/Tag.d.ts.map +1 -1
  102. package/dist/types/src/Type.d.ts.map +1 -1
  103. package/dist/types/src/View.d.ts +1 -1
  104. package/dist/types/src/View.d.ts.map +1 -1
  105. package/dist/types/src/exemplars.test.d.ts +2 -0
  106. package/dist/types/src/exemplars.test.d.ts.map +1 -0
  107. package/dist/types/src/internal/Annotation/annotations.d.ts +11 -2
  108. package/dist/types/src/internal/Annotation/annotations.d.ts.map +1 -1
  109. package/dist/types/src/internal/Annotation/sorting.d.ts.map +1 -1
  110. package/dist/types/src/internal/Annotation/util.d.ts +1 -1
  111. package/dist/types/src/internal/Annotation/util.d.ts.map +1 -1
  112. package/dist/types/src/internal/Entity/api.d.ts.map +1 -1
  113. package/dist/types/src/internal/Entity/relation.d.ts.map +1 -1
  114. package/dist/types/src/internal/Entity/version.d.ts.map +1 -1
  115. package/dist/types/src/internal/Format/date.d.ts.map +1 -1
  116. package/dist/types/src/internal/Format/format.d.ts.map +1 -1
  117. package/dist/types/src/internal/Format/number.d.ts.map +1 -1
  118. package/dist/types/src/internal/Format/object.d.ts.map +1 -1
  119. package/dist/types/src/internal/Format/types.d.ts.map +1 -1
  120. package/dist/types/src/internal/JsonSchema/json-schema-normalize.d.ts.map +1 -1
  121. package/dist/types/src/internal/JsonSchema/json-schema-type.d.ts +28 -28
  122. package/dist/types/src/internal/JsonSchema/json-schema-type.d.ts.map +1 -1
  123. package/dist/types/src/internal/JsonSchema/json-schema.d.ts +1 -1
  124. package/dist/types/src/internal/JsonSchema/json-schema.d.ts.map +1 -1
  125. package/dist/types/src/internal/Obj/clone.d.ts.map +1 -1
  126. package/dist/types/src/internal/Obj/common.d.ts.map +1 -1
  127. package/dist/types/src/internal/Obj/create-object.d.ts.map +1 -1
  128. package/dist/types/src/internal/Obj/deleted.d.ts.map +1 -1
  129. package/dist/types/src/internal/Obj/ids.d.ts +1 -1
  130. package/dist/types/src/internal/Obj/ids.d.ts.map +1 -1
  131. package/dist/types/src/internal/Obj/json-serializer.d.ts.map +1 -1
  132. package/dist/types/src/internal/Obj/set-value.d.ts +1 -1
  133. package/dist/types/src/internal/Obj/set-value.d.ts.map +1 -1
  134. package/dist/types/src/internal/Obj/snapshot.d.ts.map +1 -1
  135. package/dist/types/src/internal/Query.d.ts.map +1 -1
  136. package/dist/types/src/internal/Ref/ref.d.ts.map +1 -1
  137. package/dist/types/src/internal/Type/compose.d.ts.map +1 -1
  138. package/dist/types/src/internal/Type/echo-schema.d.ts +1 -1
  139. package/dist/types/src/internal/Type/echo-schema.d.ts.map +1 -1
  140. package/dist/types/src/internal/Type/manipulation.d.ts.map +1 -1
  141. package/dist/types/src/internal/common/api/meta.d.ts +3 -3
  142. package/dist/types/src/internal/common/api/meta.d.ts.map +1 -1
  143. package/dist/types/src/internal/common/proxy/change-context.d.ts +1 -1
  144. package/dist/types/src/internal/common/proxy/change-context.d.ts.map +1 -1
  145. package/dist/types/src/internal/common/proxy/define-hidden-property.d.ts.map +1 -1
  146. package/dist/types/src/internal/common/proxy/errors.d.ts +1 -1
  147. package/dist/types/src/internal/common/proxy/errors.d.ts.map +1 -1
  148. package/dist/types/src/internal/common/proxy/event-batch.d.ts.map +1 -1
  149. package/dist/types/src/internal/common/proxy/json-serializer.d.ts.map +1 -1
  150. package/dist/types/src/internal/common/proxy/ownership.d.ts.map +1 -1
  151. package/dist/types/src/internal/common/proxy/proxy-utils.d.ts.map +1 -1
  152. package/dist/types/src/internal/common/proxy/reactive-array.d.ts +1 -1
  153. package/dist/types/src/internal/common/proxy/reactive.d.ts +1 -1
  154. package/dist/types/src/internal/common/proxy/reactive.d.ts.map +1 -1
  155. package/dist/types/src/internal/common/proxy/schema-validator.d.ts.map +1 -1
  156. package/dist/types/src/internal/common/proxy/typed-handler.d.ts.map +1 -1
  157. package/dist/types/src/internal/common/types/base.d.ts.map +1 -1
  158. package/dist/types/src/internal/common/types/entity.d.ts +3 -3
  159. package/dist/types/src/internal/common/types/meta.d.ts.map +1 -1
  160. package/dist/types/src/internal/common/types/version.d.ts +1 -1
  161. package/dist/types/src/testing/test-data.d.ts +8 -8
  162. package/dist/types/src/testing/test-data.d.ts.map +1 -1
  163. package/dist/types/src/testing/test-schema.d.ts +53 -53
  164. package/dist/types/src/testing/test-schema.d.ts.map +1 -1
  165. package/dist/types/src/testing/util.d.ts.map +1 -1
  166. package/dist/types/tsconfig.tsbuildinfo +1 -1
  167. package/package.json +13 -13
  168. package/src/Annotation.ts +1 -0
  169. package/src/Collection.ts +1 -1
  170. package/src/Database.ts +1 -1
  171. package/src/Entity.ts +9 -9
  172. package/src/Extension.ts +3 -3
  173. package/src/Feed.ts +55 -24
  174. package/src/Hypergraph.ts +3 -3
  175. package/src/Obj.test.ts +12 -12
  176. package/src/Obj.ts +19 -19
  177. package/src/Query.test.ts +32 -16
  178. package/src/Query.ts +32 -7
  179. package/src/Ref.ts +2 -0
  180. package/src/Relation.ts +15 -15
  181. package/src/exemplars.test.ts +21 -0
  182. package/src/internal/Annotation/annotations.ts +16 -3
  183. package/src/internal/Obj/ids.ts +1 -1
  184. package/src/internal/Obj/json-serializer.test.ts +1 -1
  185. package/src/internal/Obj/json-serializer.ts +9 -9
  186. package/src/internal/Obj/set-value.test.ts +15 -15
  187. package/src/internal/Obj/set-value.ts +1 -1
  188. package/src/internal/Query.ts +7 -4
  189. package/src/internal/Type/echo-schema.ts +1 -1
  190. package/src/internal/common/README.md +1 -1
  191. package/src/internal/common/api/meta.ts +3 -3
  192. package/src/internal/common/proxy/change-context.ts +1 -1
  193. package/src/internal/common/proxy/change.test.ts +59 -59
  194. package/src/internal/common/proxy/errors.ts +2 -2
  195. package/src/internal/common/proxy/reactive-array.ts +1 -1
  196. package/src/internal/common/proxy/reactive.test.ts +3 -3
  197. package/src/internal/common/proxy/reactive.ts +1 -1
  198. package/src/internal/common/proxy/typed-handler.ts +7 -7
  199. package/src/internal/common/proxy/typed-object.test.ts +1 -1
  200. package/src/testing/test-data.ts +157 -97
  201. package/dist/lib/neutral/chunk-4P3IXBLT.mjs.map +0 -7
  202. package/dist/lib/neutral/chunk-6ASBHRDG.mjs.map +0 -7
  203. package/dist/lib/neutral/chunk-EJJFH3XB.mjs.map +0 -7
  204. package/dist/lib/neutral/chunk-PHU22NLC.mjs.map +0 -7
  205. package/dist/lib/neutral/chunk-RP37BQF7.mjs.map +0 -7
  206. /package/dist/lib/neutral/{chunk-GZQTCRJB.mjs.map → chunk-44HT3MEC.mjs.map} +0 -0
  207. /package/dist/lib/neutral/{chunk-ANHVGJI4.mjs.map → chunk-7RVZT53K.mjs.map} +0 -0
  208. /package/dist/lib/neutral/{chunk-XEU2Q5CI.mjs.map → chunk-APHSOTIX.mjs.map} +0 -0
  209. /package/dist/lib/neutral/{chunk-BNCCGLJN.mjs.map → chunk-BICZKPQG.mjs.map} +0 -0
  210. /package/dist/lib/neutral/{chunk-TBKX6JQO.mjs.map → chunk-N4B7FHQT.mjs.map} +0 -0
  211. /package/dist/lib/neutral/{chunk-JIN4EVUK.mjs.map → chunk-OMJN6VCR.mjs.map} +0 -0
  212. /package/dist/lib/neutral/{chunk-EULNZHTP.mjs.map → chunk-PHOHAIEE.mjs.map} +0 -0
  213. /package/dist/lib/neutral/{chunk-7I3YIAT2.mjs.map → chunk-QRZ2I3ZM.mjs.map} +0 -0
  214. /package/dist/lib/neutral/{chunk-WAK4DMFV.mjs.map → chunk-SUZMWP3Y.mjs.map} +0 -0
  215. /package/dist/lib/neutral/{chunk-DQYLD2RB.mjs.map → chunk-TRPZU2HV.mjs.map} +0 -0
  216. /package/dist/lib/neutral/{chunk-UI6MWK5W.mjs.map → chunk-TTCSATUD.mjs.map} +0 -0
  217. /package/dist/lib/neutral/{chunk-OMUPQMLR.mjs.map → chunk-V72DY6LU.mjs.map} +0 -0
@@ -4,17 +4,17 @@ import {
4
4
  EchoSchema,
5
5
  PersistentSchema,
6
6
  isMutable
7
- } from "./chunk-BQN7EDPH.mjs";
7
+ } from "./chunk-ZVQ26DCR.mjs";
8
8
  import {
9
9
  getSchemaDXN,
10
10
  getSchemaTypename,
11
11
  getSchemaVersion,
12
12
  getTypeAnnotation
13
- } from "./chunk-2KHZ36F5.mjs";
13
+ } from "./chunk-TNBK56IN.mjs";
14
14
  import {
15
15
  EntityKind,
16
16
  SchemaKindId
17
- } from "./chunk-TBKX6JQO.mjs";
17
+ } from "./chunk-N4B7FHQT.mjs";
18
18
  import {
19
19
  __export
20
20
  } from "./chunk-J5LGTIGS.mjs";
@@ -51,28 +51,12 @@ var getDXN = (schema) => {
51
51
  };
52
52
  var getTypename = (schema) => {
53
53
  const typename = getSchemaTypename(schema);
54
- invariant(typeof typename === "string" && !typename.startsWith("dxn:"), "Invalid typename", {
55
- F: __dxlog_file,
56
- L: 230,
57
- S: void 0,
58
- A: [
59
- "typeof typename === 'string' && !typename.startsWith('dxn:')",
60
- "'Invalid typename'"
61
- ]
62
- });
54
+ invariant(typeof typename === "string" && !typename.startsWith("dxn:"), "Invalid typename", { "~LogMeta": "~LogMeta", F: __dxlog_file, L: 70, S: void 0, A: ["typeof typename === 'string' && !typename.startsWith('dxn:')", "'Invalid typename'"] });
63
55
  return typename;
64
56
  };
65
57
  var getVersion = (schema) => {
66
58
  const version = getSchemaVersion(schema);
67
- invariant(typeof version === "string" && version.match(/^\d+\.\d+\.\d+$/), "Invalid version", {
68
- F: __dxlog_file,
69
- L: 240,
70
- S: void 0,
71
- A: [
72
- "typeof version === 'string' && version.match(/^\\d+\\.\\d+\\.\\d+$/)",
73
- "'Invalid version'"
74
- ]
75
- });
59
+ invariant(typeof version === "string" && version.match(/^\d+\.\d+\.\d+$/), "Invalid version", { "~LogMeta": "~LogMeta", F: __dxlog_file, L: 78, S: void 0, A: ["typeof version === 'string' && version.match(/^\\d+\\.\\d+\\.\\d+$/)", "'Invalid version'"] });
76
60
  return version;
77
61
  };
78
62
  var isMutable2 = isMutable;
@@ -94,4 +78,4 @@ export {
94
78
  getMeta,
95
79
  Type_exports
96
80
  };
97
- //# sourceMappingURL=chunk-A2WIDONZ.mjs.map
81
+ //# sourceMappingURL=chunk-AHWSAJHU.mjs.map
@@ -2,6 +2,6 @@
2
2
  "version": 3,
3
3
  "sources": ["../../../src/Type.ts"],
4
4
  "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\n// @import-as-namespace\n\nimport type * as Schema from 'effect/Schema';\n\nimport { type EncodedReference } from '@dxos/echo-protocol';\nimport { invariant } from '@dxos/invariant';\nimport { type DXN } from '@dxos/keys';\nimport { type ToMutable } from '@dxos/util';\n\nimport type * as Entity from './Entity';\nimport * as internal from './internal';\nimport * as typeInternal from './internal/Type';\nimport type * as ObjModule from './Obj';\nimport type * as RelationModule from './Relation';\n\n/**\n * Dynamic type that can be constructed, mutated, and persisted in the ECHO database.\n */\nexport const RuntimeType = typeInternal.EchoSchema;\n\n/**\n * Dynamic type that can be constructed, mutated, and persisted in the ECHO database.\n */\nexport type RuntimeType = typeInternal.EchoSchema;\n\n//\n// Internal types (not exported)\n//\n\n/**\n * Type that marks a schema as an ECHO schema.\n * The value indicates the entity kind (Object or Relation).\n */\ntype EchoSchemaKind<K extends internal.EntityKind = internal.EntityKind> = {\n readonly [internal.SchemaKindId]: K;\n};\n\n//\n// Obj - Runtime schema for any ECHO object\n//\n\n/**\n * TypeScript type for an ECHO object schema.\n * `T` is the instance type produced by the schema.\n * `Fields` is the optional struct fields type for introspection.\n *\n * @example\n * ```ts\n * const PersonSchema: Type.Obj<Person> = Schema.Struct({\n * name: Schema.String,\n * }).pipe(Type.object({ typename: 'Person', version: '0.1.0' }));\n *\n * // Access fields for introspection:\n * Object.keys(PersonSchema.fields); // ['name']\n * ```\n */\nexport interface Obj<T, Fields extends Schema.Struct.Fields = Schema.Struct.Fields>\n extends\n internal.TypeMeta,\n EchoSchemaKind<internal.EntityKind.Object>,\n Schema.AnnotableClass<\n Obj<T, Fields>,\n Entity.OfKind<typeof Entity.Kind.Object> & T,\n Schema.Simplify<ObjModule.BaseObjJson & ToMutable<T>>,\n never\n > {\n /**\n * The fields defined in the original struct schema.\n * Allows accessing field definitions for introspection.\n */\n readonly fields: Fields;\n}\n\n/**\n * Structural base type for any ECHO object schema.\n * Accepts both static schemas (created with Type.object()) and EchoSchema.\n * NOTE: Does not include the brand symbol to avoid TS4053 declaration portability issues.\n * Use Type.isObjectSchema() for runtime type guards.\n */\ntype ObjectSchemaBase = Schema.Schema.AnyNoContext & {\n readonly typename: string;\n readonly version: string;\n};\n\n/**\n * Type that represents any ECHO object schema.\n * Accepts both static schemas (Type.object()) and mutable schemas (EchoSchema).\n */\nexport type AnyObj = ObjectSchemaBase;\n\n/**\n * Factory function to create an ECHO object schema.\n * Adds object metadata annotations to an Effect schema.\n *\n * @example\n * ```ts\n * const Person = Schema.Struct({\n * name: Schema.String,\n * }).pipe(Type.object({ typename: 'com.example.type.person', version: '0.1.0' }));\n * ```\n */\nexport const object: {\n (opts: internal.TypeMeta): <Self extends Schema.Schema.Any>(self: Self) => Obj<Schema.Schema.Type<Self>>;\n} = internal.EchoObjectSchema as any;\n\n//\n// PersistentType (Schema stored in database)\n//\n\nexport const PersistentType: Obj<typeInternal.PersistentSchema> = typeInternal.PersistentSchema as any;\n\nexport interface PersistentType extends Schema.Schema.Type<typeof PersistentType> {}\n\n/**\n * TypeScript type for an ECHO relation schema.\n * `T` is the instance type produced by the schema (excluding source/target).\n * `Source` and `Target` are the endpoint types.\n * `Fields` is the optional struct fields type for introspection.\n */\nexport interface Relation<T, Source, Target, Fields extends Schema.Struct.Fields = Schema.Struct.Fields>\n extends\n internal.TypeMeta,\n EchoSchemaKind<internal.EntityKind.Relation>,\n Schema.AnnotableClass<\n Relation<T, Source, Target, Fields>,\n Entity.OfKind<typeof Entity.Kind.Relation> & RelationModule.Endpoints<Source, Target> & T,\n Schema.Simplify<RelationModule.BaseRelationJson & ToMutable<T>>,\n never\n > {\n /**\n * The fields defined in the original struct schema.\n * Allows accessing field definitions for introspection.\n */\n readonly fields: Fields;\n}\n\n/**\n * Structural base type for any ECHO relation schema.\n * Accepts static schemas (created with Type.relation()).\n * NOTE: Does not include the brand symbol to avoid TS4053 declaration portability issues.\n * Use Type.isRelationSchema() for runtime type guards.\n */\ntype RelationSchemaBase = Schema.Schema.AnyNoContext & {\n readonly typename: string;\n readonly version: string;\n};\n\n/**\n * Type that represents any ECHO relation schema.\n * Accepts static schemas (Type.relation()).\n */\nexport type AnyRelation = RelationSchemaBase;\n\n/**\n * Factory function to create an ECHO relation schema.\n * Adds relation metadata annotations to an Effect schema.\n *\n * @example\n * ```ts\n * const WorksFor = Schema.Struct({\n * role: Schema.String,\n * }).pipe(Type.relation({\n * typename: 'com.example.type.works-for',\n * version: '0.1.0',\n * source: Person,\n * target: Company,\n * }));\n * ```\n */\nexport const relation: {\n <SourceSchema extends Schema.Schema.AnyNoContext, TargetSchema extends Schema.Schema.AnyNoContext>(\n opts: internal.EchoRelationSchemaOptions<SourceSchema, TargetSchema>,\n ): <Self extends Schema.Schema.Any>(\n self: Self,\n ) => Relation<Schema.Schema.Type<Self>, Schema.Schema.Type<SourceSchema>, Schema.Schema.Type<TargetSchema>>;\n} = internal.EchoRelationSchema as any;\n\n/**\n * Type alias for any ECHO entity schema (object or relation).\n * Use this in type annotations for schema parameters.\n */\nexport type AnyEntity = AnyObj | AnyRelation;\n\n/**\n * Type guard to check if a schema is an object schema.\n * NOTE: This checks SCHEMAS, not instances. Use Obj.isObject for instances.\n */\nexport const isObjectSchema = (schema: AnyEntity): schema is AnyObj => {\n return (schema as any)[internal.SchemaKindId] === internal.EntityKind.Object;\n};\n\n/**\n * Type guard to check if a schema is a relation schema.\n * NOTE: This checks SCHEMAS, not instances. Use Relation.isRelation for instances.\n */\nexport const isRelationSchema = (schema: AnyEntity): schema is AnyRelation => {\n return (schema as any)[internal.SchemaKindId] === internal.EntityKind.Relation;\n};\n\n/**\n * Type that represents any Ref schema (with unknown target type).\n * This is a schema type, not an instance type.\n */\nexport type AnyRef = Schema.Schema<internal.Ref<any>, EncodedReference>;\n\n//\n// Schema utility functions\n//\n\n/**\n * Gets the full DXN of the schema.\n * Will include the version if it's a `type` DXN.\n * @example \"dxn:com.example.type.person:0.1.0\"\n * @example \"dxn:echo:SSSSSSSSSS:XXXXXXXXXXXXX\"\n */\nexport const getDXN = (schema: AnyEntity): DXN | undefined => {\n return internal.getSchemaDXN(schema);\n};\n\n/**\n * @param schema - Schema to get the typename from.\n * @returns The typename of the schema. Example: `com.example.type.person`.\n */\nexport const getTypename = (schema: AnyEntity): string => {\n const typename = internal.getSchemaTypename(schema);\n invariant(typeof typename === 'string' && !typename.startsWith('dxn:'), 'Invalid typename');\n return typename;\n};\n\n/**\n * Gets the version of the schema.\n * @example 0.1.0\n */\nexport const getVersion = (schema: AnyEntity): string => {\n const version = internal.getSchemaVersion(schema);\n invariant(typeof version === 'string' && version.match(/^\\d+\\.\\d+\\.\\d+$/), 'Invalid version');\n return version;\n};\n\n/**\n * @returns True if the schema is mutable.\n */\nexport const isMutable = typeInternal.isMutable;\n\n/**\n * ECHO type metadata.\n */\nexport type Meta = internal.TypeAnnotation;\n\n/**\n * Gets the meta data of the schema.\n */\nexport const getMeta = (schema: AnyEntity): Meta | undefined => {\n return internal.getTypeAnnotation(schema);\n};\n"],
5
- "mappings": ";;;;;;;;;;;;;;;;;;;;;;AAAA;;;;;;;;mBAAAA;EAAA;;;;;AASA,SAASC,iBAAiB;;AAanB,IAAMC,cAA2BC;AAmFjC,IAAMC,SAEAC;AAMN,IAAMC,iBAAkEC;AA4DxE,IAAMC,WAMAC;AAYN,IAAMC,iBAAiB,CAACC,WAAAA;AAC7B,SAAQA,OAAwBC,YAAY,MAAeC,WAAWC;AACxE;AAMO,IAAMC,mBAAmB,CAACJ,WAAAA;AAC/B,SAAQA,OAAwBC,YAAY,MAAeC,WAAWG;AACxE;AAkBO,IAAMC,SAAS,CAACN,WAAAA;AACrB,SAAgBO,aAAaP,MAAAA;AAC/B;AAMO,IAAMQ,cAAc,CAACR,WAAAA;AAC1B,QAAMS,WAAoBC,kBAAkBV,MAAAA;AAC5CW,YAAU,OAAOF,aAAa,YAAY,CAACA,SAASG,WAAW,MAAA,GAAS,oBAAA;;;;;;;;;AACxE,SAAOH;AACT;AAMO,IAAMI,aAAa,CAACb,WAAAA;AACzB,QAAMc,UAAmBC,iBAAiBf,MAAAA;AAC1CW,YAAU,OAAOG,YAAY,YAAYA,QAAQE,MAAM,iBAAA,GAAoB,mBAAA;;;;;;;;;AAC3E,SAAOF;AACT;AAKO,IAAMG,aAAyBA;AAU/B,IAAMC,UAAU,CAAClB,WAAAA;AACtB,SAAgBmB,kBAAkBnB,MAAAA;AACpC;",
6
- "names": ["isMutable", "invariant", "RuntimeType", "EchoSchema", "object", "EchoObjectSchema", "PersistentType", "PersistentSchema", "relation", "EchoRelationSchema", "isObjectSchema", "schema", "SchemaKindId", "EntityKind", "Object", "isRelationSchema", "Relation", "getDXN", "getSchemaDXN", "getTypename", "typename", "getSchemaTypename", "invariant", "startsWith", "getVersion", "version", "getSchemaVersion", "match", "isMutable", "getMeta", "getTypeAnnotation"]
5
+ "mappings": ";;;;;;;;;;;;;;;;;;;;;;AAAA;;;;;;;;mBAAAA;EAAA;;;;;AASA,SAASC,iBAAiB;AAU1B,IAAA,eAAA;;AA2FA,IAAA,SAAA;;;AAmFE,IAAA,iBAAA,CAAA,WAAA;AAEF,SAAA,OAAA,YAAA,MAAA,WAAA;;AAME,IAAA,mBAAA,CAAA,WAAA;AAQA,SAAA,OAAA,YAAA,MAAA,WAAA;AACF;AAWE,IAAA,SAAA,CAAA,WAAA;AAEF,SAAA,aAAA,MAAA;;AAMEC,IAAU,cAAOC,CAAAA,WAAa;AAC9B,QAAA,WAAOA,kBAAAA,MAAAA;AACP,YAAA,OAAA,aAAA,YAAA,CAAA,SAAA,WAAA,MAAA,GAAA,oBAAA,EAAA,YAAA,YAAA,GAAA,cAAA,GAAA,IAAA,GAAA,QAAA,GAAA,CAAA,gEAAA,oBAAA,EAAA,CAAA;AAEF,SAAA;;AAMED,IAAU,aAAOE,CAAAA,WAAY;AAC7B,QAAA,UAAOA,iBAAAA,MAAAA;AACP,YAAA,OAAA,YAAA,YAAA,QAAA,MAAA,iBAAA,GAAA,mBAAA,EAAA,YAAA,YAAA,GAAA,cAAA,GAAA,IAAA,GAAA,QAAA,GAAA,CAAA,wEAAA,mBAAA,EAAA,CAAA;AAEF,SAAA;;;AAeE,IAAA,UAAA,CAAA,WAAA;;;",
6
+ "names": ["isMutable", "invariant", "invariant", "typename", "version"]
7
7
  }
@@ -1,6 +1,6 @@
1
1
  import {
2
2
  Ref
3
- } from "./chunk-JPWH3QJD.mjs";
3
+ } from "./chunk-BMB7IHGB.mjs";
4
4
 
5
5
  // src/internal/Ref/ref-array.ts
6
6
  import { isNonNullable } from "@dxos/util";
@@ -31,4 +31,4 @@ var RefArray = Object.freeze({
31
31
  export {
32
32
  RefArray
33
33
  };
34
- //# sourceMappingURL=chunk-XEU2Q5CI.mjs.map
34
+ //# sourceMappingURL=chunk-APHSOTIX.mjs.map
@@ -4,4 +4,4 @@ var SchemaRegistry_exports = {};
4
4
  export {
5
5
  SchemaRegistry_exports
6
6
  };
7
- //# sourceMappingURL=chunk-BNCCGLJN.mjs.map
7
+ //# sourceMappingURL=chunk-BICZKPQG.mjs.map
@@ -1,12 +1,12 @@
1
1
  import {
2
2
  Service
3
- } from "./chunk-PHU22NLC.mjs";
3
+ } from "./chunk-I2DARWPX.mjs";
4
4
  import {
5
5
  ReferenceAnnotationId,
6
6
  getSchemaDXN,
7
7
  getTypeAnnotation,
8
8
  getTypeIdentifierAnnotation
9
- } from "./chunk-2KHZ36F5.mjs";
9
+ } from "./chunk-TNBK56IN.mjs";
10
10
 
11
11
  // src/internal/Ref/ref.ts
12
12
  import * as Effect from "effect/Effect";
@@ -75,15 +75,7 @@ Ref.make = (obj) => {
75
75
  throw new TypeError("Expected: ECHO object.");
76
76
  }
77
77
  const id = obj.id;
78
- invariant(ObjectId.isValid(id), "Invalid object ID", {
79
- F: __dxlog_file,
80
- L: 235,
81
- S: void 0,
82
- A: [
83
- "ObjectId.isValid(id)",
84
- "'Invalid object ID'"
85
- ]
86
- });
78
+ invariant(ObjectId.isValid(id), "Invalid object ID", { "~LogMeta": "~LogMeta", F: __dxlog_file, L: 76, S: void 0, A: ["ObjectId.isValid(id)", "'Invalid object ID'"] });
87
79
  const dxn = DXN.fromLocalObjectId(id);
88
80
  return new RefImpl(dxn, obj);
89
81
  };
@@ -185,15 +177,7 @@ var RefImpl = class _RefImpl {
185
177
  if (this.#target) {
186
178
  return this.#target;
187
179
  }
188
- invariant(this.#resolver, "Resolver is not set", {
189
- F: __dxlog_file,
190
- L: 403,
191
- S: this,
192
- A: [
193
- "this.#resolver",
194
- "'Resolver is not set'"
195
- ]
196
- });
180
+ invariant(this.#resolver, "Resolver is not set", { "~LogMeta": "~LogMeta", F: __dxlog_file, L: 181, S: this, A: ["this.#resolver", "'Resolver is not set'"] });
197
181
  return this.#resolver.resolveSync(this.#dxn, true, this.#resolverCallback);
198
182
  }
199
183
  /**
@@ -203,15 +187,7 @@ var RefImpl = class _RefImpl {
203
187
  if (this.#target) {
204
188
  return this.#target;
205
189
  }
206
- invariant(this.#resolver, "Resolver is not set", {
207
- F: __dxlog_file,
208
- L: 414,
209
- S: this,
210
- A: [
211
- "this.#resolver",
212
- "'Resolver is not set'"
213
- ]
214
- });
190
+ invariant(this.#resolver, "Resolver is not set", { "~LogMeta": "~LogMeta", F: __dxlog_file, L: 190, S: this, A: ["this.#resolver", "'Resolver is not set'"] });
215
191
  const obj = await this.#resolver.resolve(this.#dxn);
216
192
  if (obj == null) {
217
193
  throw new Error("Object not found");
@@ -225,15 +201,7 @@ var RefImpl = class _RefImpl {
225
201
  if (this.#target) {
226
202
  return this.#target;
227
203
  }
228
- invariant(this.#resolver, "Resolver is not set", {
229
- F: __dxlog_file,
230
- L: 429,
231
- S: this,
232
- A: [
233
- "this.#resolver",
234
- "'Resolver is not set'"
235
- ]
236
- });
204
+ invariant(this.#resolver, "Resolver is not set", { "~LogMeta": "~LogMeta", F: __dxlog_file, L: 203, S: this, A: ["this.#resolver", "'Resolver is not set'"] });
237
205
  return await this.#resolver.resolve(this.#dxn);
238
206
  }
239
207
  /**
@@ -311,27 +279,11 @@ var RefImpl = class _RefImpl {
311
279
  }
312
280
  };
313
281
  var setRefResolver = (ref, resolver) => {
314
- invariant(ref instanceof RefImpl, "Ref is not an instance of RefImpl", {
315
- F: __dxlog_file,
316
- L: 523,
317
- S: void 0,
318
- A: [
319
- "ref instanceof RefImpl",
320
- "'Ref is not an instance of RefImpl'"
321
- ]
322
- });
282
+ invariant(ref instanceof RefImpl, "Ref is not an instance of RefImpl", { "~LogMeta": "~LogMeta", F: __dxlog_file, L: 277, S: void 0, A: ["ref instanceof RefImpl", "'Ref is not an instance of RefImpl'"] });
323
283
  ref._setResolver(resolver);
324
284
  };
325
285
  var getRefSavedTarget = (ref) => {
326
- invariant(ref instanceof RefImpl, "Ref is not an instance of RefImpl", {
327
- F: __dxlog_file,
328
- L: 531,
329
- S: void 0,
330
- A: [
331
- "ref instanceof RefImpl",
332
- "'Ref is not an instance of RefImpl'"
333
- ]
334
- });
286
+ invariant(ref instanceof RefImpl, "Ref is not an instance of RefImpl", { "~LogMeta": "~LogMeta", F: __dxlog_file, L: 283, S: void 0, A: ["ref instanceof RefImpl", "'Ref is not an instance of RefImpl'"] });
335
287
  return ref._getSavedTarget();
336
288
  };
337
289
  var refVariance = {
@@ -354,15 +306,7 @@ var StaticRefResolver = class {
354
306
  }
355
307
  addSchema(schema) {
356
308
  const dxn = getSchemaDXN(schema);
357
- invariant(dxn, "Schema has no DXN", {
358
- F: __dxlog_file,
359
- L: 563,
360
- S: this,
361
- A: [
362
- "dxn",
363
- "'Schema has no DXN'"
364
- ]
365
- });
309
+ invariant(dxn, "Schema has no DXN", { "~LogMeta": "~LogMeta", F: __dxlog_file, L: 308, S: this, A: ["dxn", "'Schema has no DXN'"] });
366
310
  this.schemas.set(dxn.toString(), schema);
367
311
  return this;
368
312
  }
@@ -399,4 +343,4 @@ export {
399
343
  refFromEncodedReference,
400
344
  StaticRefResolver
401
345
  };
402
- //# sourceMappingURL=chunk-JPWH3QJD.mjs.map
346
+ //# sourceMappingURL=chunk-BMB7IHGB.mjs.map
@@ -2,6 +2,6 @@
2
2
  "version": 3,
3
3
  "sources": ["../../../src/internal/Ref/ref.ts"],
4
4
  "sourcesContent": ["//\n// Copyright 2024 DXOS.org\n//\n\nimport * as Effect from 'effect/Effect';\nimport * as Equal from 'effect/Equal';\nimport * as Hash from 'effect/Hash';\nimport * as Option from 'effect/Option';\nimport * as ParseResult from 'effect/ParseResult';\nimport * as Pipeable from 'effect/Pipeable';\nimport * as Schema from 'effect/Schema';\nimport * as SchemaAST from 'effect/SchemaAST';\nimport type * as Types from 'effect/Types';\n\nimport { Event } from '@dxos/async';\nimport { type CustomInspectFunction, inspectCustom } from '@dxos/debug';\nimport { EncodedReference } from '@dxos/echo-protocol';\nimport { assertArgument, invariant } from '@dxos/invariant';\nimport { DXN, ObjectId } from '@dxos/keys';\n\nimport * as Database from '../../Database';\nimport { ReferenceAnnotationId, getSchemaDXN, getTypeAnnotation, getTypeIdentifierAnnotation } from '../Annotation';\nimport type { AnyEntity, AnyProperties } from '../common/types';\nimport { type JsonSchemaType } from '../JsonSchema';\n\n/**\n * The `$id` and `$ref` fields for an ECHO reference schema.\n */\nexport const JSON_SCHEMA_ECHO_REF_ID = '/schemas/echo/ref';\n\nexport const getSchemaReference = (property: JsonSchemaType): { typename: string } | undefined => {\n const { $id, reference: { schema: { $ref } = {} } = {} } = property;\n if ($id === JSON_SCHEMA_ECHO_REF_ID && $ref) {\n return { typename: DXN.parse($ref).typename };\n }\n};\n\nexport const createSchemaReference = (typename: string): Types.DeepMutable<JsonSchemaType> => {\n return {\n $id: JSON_SCHEMA_ECHO_REF_ID,\n reference: {\n schema: {\n $ref: DXN.fromTypename(typename).toString(),\n },\n },\n };\n};\n\n/**\n * Runtime type-info for a reference extracted from effect AST.\n */\nexport type RefereneAST = {\n /**\n * Typename of linked schema.\n */\n typename: string;\n\n /**\n * Version of linked schema.\n */\n version: string;\n};\n\nexport const getReferenceAst = (ast: SchemaAST.AST): RefereneAST | undefined => {\n if (ast._tag !== 'Declaration' || !ast.annotations[ReferenceAnnotationId]) {\n return undefined;\n }\n return {\n typename: (ast.annotations[ReferenceAnnotationId] as any).typename,\n version: (ast.annotations[ReferenceAnnotationId] as any).version,\n };\n};\n\nexport const RefTypeId: unique symbol = Symbol('@dxos/echo/internal/Ref');\n\n/**\n * Reference Schema.\n */\nexport interface RefSchema<T extends AnyEntity> extends Schema.SchemaClass<Ref<T>, EncodedReference> {}\n\n/**\n * Type of the `Ref` function and extra methods attached to it.\n */\nexport interface RefFn {\n <S extends Schema.Schema.Any>(schema: S): RefSchema<Schema.Schema.Type<S>>;\n\n /**\n * @returns True if the object is a reference.\n */\n isRef: (obj: unknown) => obj is Ref<any>;\n\n /**\n * @returns True if the reference points to the given object id.\n */\n hasObjectId: (id: ObjectId) => (ref: Ref<any>) => boolean;\n\n /**\n * @returns True if the schema is a reference schema.\n */\n isRefSchema: (schema: Schema.Schema<any, any>) => schema is RefSchema<any>;\n\n /**\n * @returns True if the schema AST is a reference schema.\n */\n isRefSchemaAST: (ast: SchemaAST.AST) => boolean;\n\n /**\n * Constructs a reference that points to the given object.\n */\n // TODO(burdon): Narrow to Obj.Unknown?\n make: <T extends AnyEntity>(object: T) => Ref<T>;\n\n /**\n * Constructs a reference that points to the object specified by the provided DXN.\n */\n fromDXN: (dxn: DXN) => Ref<any>;\n}\n\n/**\n * Schema builder for references.\n */\nexport const Ref: RefFn = <S extends Schema.Schema.Any>(schema: S): RefSchema<Schema.Schema.Type<S>> => {\n assertArgument(Schema.isSchema(schema), 'schema', 'Must call with an instance of effect-schema');\n const annotation = getTypeAnnotation(schema);\n if (annotation == null) {\n throw new Error('Reference target must be an ECHO schema.');\n }\n\n return createEchoReferenceSchema(getTypeIdentifierAnnotation(schema), annotation.typename, annotation.version);\n};\n\n/**\n * Represents materialized reference to a target.\n * This is the data type for the fields marked as ref.\n */\nexport interface Ref<T> extends Pipeable.Pipeable {\n /**\n * Target object DXN.\n */\n get dxn(): DXN;\n\n /**\n * Returns true if the reference has a target available (inlined or resolver set).\n */\n get isAvailable(): boolean;\n\n /**\n * @returns The reference target.\n * May return `undefined` if the object is not loaded in the working set.\n * Accessing this property, even if it returns `undefined` will trigger the object to be loaded to the working set.\n */\n get target(): T | undefined;\n\n /**\n * @returns Promise that will resolves with the target object.\n * Will load the object from disk if it is not present in the working set.\n * @throws If the object is not available locally.\n */\n load(): Promise<T>;\n\n /**\n * @returns Promise that will resolves with the target object or undefined if the object is not loaded locally.\n */\n\n tryLoad(): Promise<T | undefined>;\n\n /**\n * Subscribe to the ref's resolution event.\n * The callback fires when the target object becomes available in the working set\n * (e.g. when its document is loaded after sibling-client mutation).\n * Note: the resolver only schedules a notification when the target is requested\n * via {@link target} while it is not yet loaded.\n * @returns Function that unsubscribes the callback.\n */\n onResolved(callback: () => void): () => void;\n\n /**\n * Do not inline the target object in the reference.\n * Makes .target unavailable unless the reference is connected to a database context.\n *\n * When serialized with toJSON, the difference is between:\n * `{ \"/\": \"dxn:...\" }`\n * and\n * `{ \"/\": \"dxn:...\", \"target\": { ... } }`\n *\n * Clones the reference object.\n */\n noInline(): Ref<T>;\n\n /**\n * Serializes the reference to a JSON object.\n * The serialization format is compatible with the IPLD-style encoded references.\n * When a reference has a saved target (i.e. the target or object holding the reference is not in the database),\n * the target is included in the serialized object.\n *\n * Examples:\n * `{ \"/\": \"dxn:...\" }`\n * `{ \"/\": \"dxn:...\", \"target\": { ... } }`\n */\n encode(): EncodedReference;\n\n [RefTypeId]: {\n _T: T;\n };\n}\n\nexport declare namespace Ref {\n /**\n * Target of the reference.\n */\n export type Target<R> = R extends Ref<infer U> ? U : never;\n}\n\nRef.isRef = (obj: any): obj is Ref<any> => {\n return obj && typeof obj === 'object' && RefTypeId in obj;\n};\n\nRef.hasObjectId = (id: ObjectId) => (ref: Ref<any>) => ref.dxn.isLocalObjectId() && ref.dxn.parts[1] === id;\n\nRef.isRefSchema = (schema: Schema.Schema<any, any>): schema is RefSchema<any> => {\n return Ref.isRefSchemaAST(schema.ast);\n};\n\nRef.isRefSchemaAST = (ast: SchemaAST.AST): boolean => {\n return SchemaAST.getAnnotation(ast, ReferenceAnnotationId).pipe(Option.isSome);\n};\n\nRef.make = <T extends AnyProperties>(obj: T): Ref<T> => {\n if (typeof obj !== 'object' || obj === null) {\n throw new TypeError('Expected: ECHO object.');\n }\n\n // TODO(dmaretskyi): Extract to `getObjectDXN` function.\n const id = obj.id;\n invariant(ObjectId.isValid(id), 'Invalid object ID');\n const dxn = DXN.fromLocalObjectId(id);\n return new RefImpl(dxn, obj);\n};\n\nRef.fromDXN = (dxn: DXN): Ref<any> => {\n assertArgument(dxn instanceof DXN, 'dxn', 'Expected DXN');\n return new RefImpl(dxn);\n};\n\n/**\n * `reference` field on the schema object.\n */\nexport type JsonSchemaReferenceInfo = {\n schema: { $ref: string };\n schemaVersion?: string;\n};\n\n/**\n * @internal\n */\n// TODO(burdon): Move to json schema and make private?\nexport const createEchoReferenceSchema = (\n echoId: string | undefined,\n typename: string | undefined,\n version: string | undefined,\n): Schema.SchemaClass<Ref<any>, EncodedReference> => {\n if (!echoId && !typename) {\n throw new TypeError('Either echoId or typename must be provided.');\n }\n\n const referenceInfo: JsonSchemaReferenceInfo = {\n schema: {\n // TODO(dmaretskyi): Include version?\n $ref: echoId ?? DXN.fromTypename(typename!).toString(),\n },\n schemaVersion: version,\n };\n\n // TODO(dmaretskyi): Add name and description.\n const refSchema = Schema.declare<Ref<any>, EncodedReference, []>(\n [],\n {\n encode: () => {\n return (value) =>\n Effect.gen(function* () {\n if (Ref.isRef(value)) {\n return EncodedReference.fromDXN((value as Ref<any>).dxn);\n } else if (EncodedReference.isEncodedReference(value)) {\n return value;\n }\n throw new Error('Invalid reference');\n });\n },\n decode: () => {\n return (value) =>\n Effect.gen(function* () {\n const dbService = yield* Effect.serviceOption(Database.Service);\n\n // TODO(dmaretskyi): This branch seems to be taken by Schema.is\n if (Ref.isRef(value)) {\n if (Option.isSome(dbService)) {\n return dbService.value.db.makeRef(value.dxn);\n } else {\n return value;\n }\n }\n\n if (!EncodedReference.isEncodedReference(value)) {\n return yield* Effect.fail(new ParseResult.Unexpected(value, 'reference'));\n }\n if (Option.isSome(dbService)) {\n return dbService.value.db.makeRef(EncodedReference.toDXN(value));\n } else {\n return Ref.fromDXN(EncodedReference.toDXN(value));\n }\n });\n },\n },\n {\n jsonSchema: {\n // TODO(dmaretskyi): We should remove `$id` and keep `$ref` with a fully qualified name.\n $id: JSON_SCHEMA_ECHO_REF_ID,\n $ref: JSON_SCHEMA_ECHO_REF_ID,\n reference: referenceInfo,\n },\n [ReferenceAnnotationId]: {\n typename: typename ?? '',\n version,\n },\n },\n );\n\n return refSchema;\n};\n\nconst getSchemaExpectedName = (ast: SchemaAST.Annotated): string | undefined => {\n return SchemaAST.getIdentifierAnnotation(ast).pipe(\n Option.orElse(() => SchemaAST.getTitleAnnotation(ast)),\n Option.orElse(() => SchemaAST.getDescriptionAnnotation(ast)),\n Option.getOrElse(() => undefined),\n );\n};\n\nexport interface RefResolver {\n /**\n * Resolve ref synchronously from the objects in the working set.\n *\n * @param dxn\n * @param load If true the resolver should attempt to load the object from disk.\n * @param onLoad Callback to call when the object is loaded.\n */\n resolveSync(dxn: DXN, load: boolean, onLoad?: () => void): AnyProperties | undefined;\n\n /**\n * Resolver ref asynchronously.\n */\n resolve(dxn: DXN): Promise<AnyProperties | undefined>;\n\n // TODO(dmaretskyi): Combine with `resolve`.\n resolveSchema(dxn: DXN): Promise<Schema.Schema.AnyNoContext | undefined>;\n}\n\nexport class RefImpl<T> implements Ref<T> {\n #dxn: DXN;\n #resolver?: RefResolver = undefined;\n #resolved = new Event<void>();\n\n /**\n * Target is set when the reference is created from a specific object.\n * In this case, the target might not be in the database.\n */\n #target: T | undefined = undefined;\n\n /**\n * Callback to issue a reactive notification when object is resolved.\n */\n #resolverCallback = () => {\n this.#resolved.emit();\n };\n\n constructor(dxn: DXN, target?: T) {\n this.#dxn = dxn;\n this.#target = target;\n }\n\n /**\n * @inheritdoc\n */\n get dxn(): DXN {\n return this.#dxn;\n }\n\n /**\n * @inheritdoc\n */\n get isAvailable(): boolean {\n return this.#target !== undefined || this.#resolver !== undefined;\n }\n\n /**\n * @inheritdoc\n */\n get target(): T | undefined {\n if (this.#target) {\n return this.#target;\n }\n\n invariant(this.#resolver, 'Resolver is not set');\n return this.#resolver.resolveSync(this.#dxn, true, this.#resolverCallback) as T | undefined;\n }\n\n /**\n * @inheritdoc\n */\n async load(): Promise<T> {\n if (this.#target) {\n return this.#target;\n }\n invariant(this.#resolver, 'Resolver is not set');\n const obj = await this.#resolver.resolve(this.#dxn);\n if (obj == null) {\n throw new Error('Object not found');\n }\n return obj as T;\n }\n\n /**\n * @inheritdoc\n */\n async tryLoad(): Promise<T | undefined> {\n if (this.#target) {\n return this.#target;\n }\n invariant(this.#resolver, 'Resolver is not set');\n return (await this.#resolver.resolve(this.#dxn)) as T | undefined;\n }\n\n /**\n * @inheritdoc\n */\n onResolved(callback: () => void): () => void {\n return this.#resolved.on(callback);\n }\n\n /**\n * Do not inline the target object in the reference.\n * Makes .target unavailable unless the reference is connected to a database context.\n * Clones the reference object.\n */\n noInline(): RefImpl<T> {\n const ref = new RefImpl<T>(this.#dxn, undefined);\n ref.#resolver = this.#resolver;\n return ref;\n }\n\n encode(): EncodedReference {\n return {\n '/': this.#dxn.toString(),\n ...(this.#target ? { target: this.#target } : {}),\n };\n }\n\n /**\n * Serializes the reference to a JSON object.\n * The serialization format is compatible with the IPLD-style encoded references.\n * When a reference has a saved target (i.e. the target or object holding the reference is not in the database),\n * the target is included in the serialized object.\n */\n toJSON(): EncodedReference {\n return this.encode();\n }\n\n toString(): string {\n if (this.#target) {\n return `Ref(${this.#target.toString()})`;\n }\n\n return `Ref(${this.#dxn.toString()})`;\n }\n\n [inspectCustom]: CustomInspectFunction = (depth, options, inspect) => {\n return this.toString();\n };\n\n [RefTypeId] = refVariance;\n\n /**\n * Effect Hash trait. Required for MutableHashMap-based caches (e.g., Atom.family)\n * to deduplicate Ref instances that point to the same object.\n * ECHO proxies return new RefImpl instances on every property access,\n * so without this, each access would create a separate cache entry.\n */\n [Hash.symbol](): number {\n return Hash.hash(this.#dxn.toString());\n }\n\n /** Effect Equal trait. See {@link Hash.symbol} for rationale. */\n [Equal.symbol](that: Equal.Equal): boolean {\n return that instanceof RefImpl && this.#dxn.toString() === that.dxn.toString();\n }\n\n /**\n * Internal method to set the resolver.\n *\n * @internal\n */\n _setResolver(resolver: RefResolver): void {\n this.#resolver = resolver;\n }\n\n /**\n * @internal\n */\n _getSavedTarget(): T | undefined {\n return this.#target;\n }\n\n pipe() {\n // eslint-disable-next-line prefer-rest-params\n return Pipeable.pipeArguments(this, arguments);\n }\n}\n\n/**\n * Internal API for setting the reference resolver.\n */\nexport const setRefResolver = (ref: Ref<any>, resolver: RefResolver) => {\n invariant(ref instanceof RefImpl, 'Ref is not an instance of RefImpl');\n ref._setResolver(resolver);\n};\n\n/**\n * Internal API for getting the saved target on a reference.\n */\nexport const getRefSavedTarget = (ref: Ref<any>): AnyProperties | undefined => {\n invariant(ref instanceof RefImpl, 'Ref is not an instance of RefImpl');\n return ref._getSavedTarget();\n};\n\n// Used to validate reference target type.\nconst refVariance: Ref<any>[typeof RefTypeId] = {\n _T: null as any,\n};\n\nexport const refFromEncodedReference = (encodedReference: EncodedReference, resolver?: RefResolver): Ref<any> => {\n const dxn = DXN.parse(encodedReference['/']);\n const ref = new RefImpl(dxn);\n\n // TODO(dmaretskyi): Handle inline target in the encoded reference.\n\n if (resolver) {\n setRefResolver(ref, resolver);\n }\n return ref;\n};\n\nexport class StaticRefResolver implements RefResolver {\n public objects = new Map<ObjectId, AnyProperties>();\n public schemas = new Map<DXN.String, Schema.Schema.AnyNoContext>();\n\n addObject(obj: AnyProperties): this {\n this.objects.set(obj.id, obj);\n return this;\n }\n\n addSchema(schema: Schema.Schema.AnyNoContext): this {\n const dxn = getSchemaDXN(schema);\n invariant(dxn, 'Schema has no DXN');\n this.schemas.set(dxn.toString(), schema);\n return this;\n }\n\n resolveSync(dxn: DXN, _load: boolean, _onLoad?: () => void): AnyProperties | undefined {\n const id = dxn?.asEchoDXN()?.echoId;\n if (id == null) {\n return undefined;\n }\n\n return this.objects.get(id);\n }\n\n async resolve(dxn: DXN): Promise<AnyProperties | undefined> {\n const id = dxn?.asEchoDXN()?.echoId;\n if (id == null) {\n return undefined;\n }\n\n return this.objects.get(id);\n }\n\n async resolveSchema(dxn: DXN): Promise<Schema.Schema.AnyNoContext | undefined> {\n return this.schemas.get(dxn.toString());\n }\n}\n"],
5
- "mappings": "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",
6
- "names": ["Effect", "Equal", "Hash", "Option", "ParseResult", "Pipeable", "Schema", "SchemaAST", "Event", "inspectCustom", "EncodedReference", "assertArgument", "invariant", "DXN", "ObjectId", "JSON_SCHEMA_ECHO_REF_ID", "getSchemaReference", "property", "$id", "reference", "schema", "$ref", "typename", "DXN", "parse", "createSchemaReference", "fromTypename", "toString", "getReferenceAst", "ast", "_tag", "annotations", "ReferenceAnnotationId", "undefined", "version", "RefTypeId", "Symbol", "Ref", "assertArgument", "isSchema", "annotation", "getTypeAnnotation", "Error", "createEchoReferenceSchema", "getTypeIdentifierAnnotation", "isRef", "obj", "hasObjectId", "id", "ref", "dxn", "isLocalObjectId", "parts", "isRefSchema", "isRefSchemaAST", "getAnnotation", "pipe", "isSome", "make", "TypeError", "invariant", "ObjectId", "isValid", "fromLocalObjectId", "RefImpl", "fromDXN", "echoId", "referenceInfo", "schemaVersion", "refSchema", "declare", "encode", "value", "gen", "EncodedReference", "isEncodedReference", "decode", "dbService", "serviceOption", "Service", "db", "makeRef", "fail", "Unexpected", "toDXN", "jsonSchema", "RefImpl", "undefined", "Event", "emit", "dxn", "target", "isAvailable", "invariant", "resolveSync", "load", "obj", "resolve", "Error", "tryLoad", "onResolved", "callback", "on", "noInline", "ref", "encode", "toString", "toJSON", "inspectCustom", "depth", "options", "inspect", "RefTypeId", "refVariance", "symbol", "hash", "that", "_setResolver", "resolver", "_getSavedTarget", "pipe", "pipeArguments", "arguments", "setRefResolver", "getRefSavedTarget", "_T", "refFromEncodedReference", "encodedReference", "DXN", "parse", "StaticRefResolver", "objects", "Map", "schemas", "addObject", "set", "id", "addSchema", "schema", "getSchemaDXN", "_load", "_onLoad", "asEchoDXN", "echoId", "get", "resolveSchema"]
5
+ "mappings": "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",
6
+ "names": ["Effect", "Equal", "Hash", "Option", "ParseResult", "Pipeable", "Schema", "SchemaAST", "Event", "inspectCustom", "EncodedReference", "assertArgument", "invariant", "DXN", "ObjectId", "reference", "$ref", "$id", "JSON_SCHEMA_ECHO_REF_ID", "typename", "schema", "undefined", "version", "annotation", "getTypeAnnotation", "Error", "createEchoReferenceSchema", "isRef", "obj", "hasObjectId", "ref", "isLocalObjectId", "Ref", "isRefSchemaAST", "ast", "make", "TypeError", "dxn", "DXN", "fromDXN", "RefImpl", "referenceInfo", "schemaVersion", "Effect", "gen", "EncodedReference", "value", "dbService", "Option", "isSome", "jsonSchema", "ReferenceAnnotationId", "getSchemaExpectedName", "undefined", "target", "invariant", "obj", "Error", "ref", "encode", "toString", "inspectCustom", "depth", "options", "inspect", "RefTypeId", "refVariance", "pipe", "_setResolver", "resolver", "_getSavedTarget", "dxn", "schemas", "addObject", "objects", "set", "addSchema", "schema", "resolveSync", "id", "resolve", "resolveSchema"]
7
7
  }
@@ -1,31 +1,31 @@
1
1
  import {
2
2
  select
3
- } from "./chunk-6ASBHRDG.mjs";
3
+ } from "./chunk-SRX3EZY3.mjs";
4
4
  import {
5
5
  Feed
6
- } from "./chunk-RP37BQF7.mjs";
6
+ } from "./chunk-KBZ4RAXR.mjs";
7
7
  import {
8
8
  object
9
- } from "./chunk-A2WIDONZ.mjs";
9
+ } from "./chunk-AHWSAJHU.mjs";
10
10
  import {
11
11
  nothing
12
- } from "./chunk-EULNZHTP.mjs";
12
+ } from "./chunk-PHOHAIEE.mjs";
13
13
  import {
14
14
  Unknown,
15
15
  instanceOf,
16
16
  make
17
- } from "./chunk-O26EPPBW.mjs";
17
+ } from "./chunk-W7U2XGZ3.mjs";
18
18
  import {
19
19
  Ref
20
- } from "./chunk-H5F7C2UO.mjs";
20
+ } from "./chunk-N7VOEPSV.mjs";
21
21
  import {
22
22
  JsonSchemaType
23
- } from "./chunk-QW7YUKSA.mjs";
23
+ } from "./chunk-MLS7U7AT.mjs";
24
24
  import {
25
25
  FormInputAnnotation,
26
26
  IconAnnotation,
27
27
  SystemTypeAnnotation
28
- } from "./chunk-2KHZ36F5.mjs";
28
+ } from "./chunk-TNBK56IN.mjs";
29
29
  import {
30
30
  __export
31
31
  } from "./chunk-J5LGTIGS.mjs";
@@ -99,7 +99,7 @@ var Collection = Schema.Struct({
99
99
  version: "0.1.0"
100
100
  }), IconAnnotation.set({
101
101
  icon: "ph--folder--regular",
102
- hue: "neutral"
102
+ hue: "amber"
103
103
  }));
104
104
  var make2 = (props = {}) => make(Collection, {
105
105
  objects: [],
@@ -203,4 +203,4 @@ export {
203
203
  QueryAST2 as QueryAST,
204
204
  DXN2 as DXN
205
205
  };
206
- //# sourceMappingURL=chunk-EJJFH3XB.mjs.map
206
+ //# sourceMappingURL=chunk-C6LDQTNO.mjs.map
@@ -0,0 +1,7 @@
1
+ {
2
+ "version": 3,
3
+ "sources": ["../../../src/index.ts", "../../../src/Hypergraph.ts", "../../../src/Json.ts", "../../../src/Collection.ts", "../../../src/View.ts", "../../../src/Dataset.ts"],
4
+ "sourcesContent": ["//\n// Copyright 2025 DXOS.org\n//\n\nexport { QueryAST } from '@dxos/echo-protocol';\n// TODO(wittjosiah): Refactor DXN to not use statics similar to Query.\nexport { DXN } from '@dxos/keys';\n\nexport * as Annotation from './Annotation';\nexport * as Database from './Database';\nexport * as Entity from './Entity';\n// TODO(burdon): Rename to Error (less problematic than Obj/Object).\nexport * as Err from './Err';\nexport * as Feed from './Feed';\nexport * as Filter from './Filter';\nexport * as Format from './Format';\nexport * as Hypergraph from './Hypergraph';\nexport * as Json from './Json';\nexport * as JsonSchema from './JsonSchema';\nexport * as Key from './Key';\nexport * as Migration from './Migration';\nexport * as Obj from './Obj';\nexport * as Order from './Order';\nexport * as Query from './Query';\nexport * as QueryResult from './QueryResult';\nexport * as Ref from './Ref';\nexport * as Relation from './Relation';\nexport * as SchemaRegistry from './SchemaRegistry';\nexport * as Tag from './Tag';\nexport * as Type from './Type';\nexport * as Collection from './Collection';\nexport * as View from './View';\nexport * as Dataset from './Dataset';\nexport * as Extension from './Extension';\n", "//\n// Copyright 2025 DXOS.org\n//\n\nimport { type DXN } from '@dxos/keys';\n\nimport type * as Database from './Database';\nimport type * as Entity from './Entity';\nimport type * as internal from './internal';\nimport type * as Key from './Key';\nimport type * as Ref from './Ref';\nimport type * as SchemaRegistry from './SchemaRegistry';\n\n/**\n * Resolution context.\n * Affects how non-absolute DXNs are resolved.\n */\nexport interface RefResolutionContext {\n /**\n * Space that the resolution is happening from.\n */\n space?: Key.SpaceId;\n\n /**\n * Feed that the resolution is happening from (as the underlying queue DXN).\n * This feed will be searched first, and then the space it belongs to.\n */\n feed?: DXN;\n}\n\nexport interface RefResolverOptions {\n /**\n * Resolution context.\n * Affects how non-absolute DXNs are resolved.\n */\n context?: RefResolutionContext;\n\n /**\n * Middleware to change the resolved object before returning it.\n * @deprecated On track to be removed.\n */\n middleware?: (obj: internal.AnyProperties) => internal.AnyProperties;\n}\n\n/**\n * Manages cross-space database interactions.\n */\nexport interface Hypergraph extends Database.Queryable {\n get schemaRegistry(): SchemaRegistry.SchemaRegistry;\n\n /**\n * Query objects.\n */\n query: Database.QueryFn;\n\n /**\n * Creates a reference to an existing object in the database.\n *\n * NOTE: The reference may be dangling if the object is not present in the database.\n * NOTE: Difference from `Ref.fromDXN`\n * `Ref.fromDXN(dxn)` returns an unhydrated reference. The `.load` and `.target` APIs will not work.\n * `db.makeRef(dxn)` is preferable in cases with access to the database.\n */\n makeRef<T extends Entity.Unknown = Entity.Unknown>(dxn: DXN): Ref.Ref<T>;\n\n /**\n * @param hostDb Host database for reference resolution.\n * @param middleware Called with the loaded object. The caller may change the object.\n * @returns Result of `onLoad`.\n */\n // TODO(dmaretskyi): Restructure API: Remove middleware.\n createRefResolver(options: RefResolverOptions): Ref.Resolver;\n\n /**\n * Get a database by space ID.\n * @returns The database for the given space ID, or undefined if not found.\n */\n getDatabase(spaceId: Key.SpaceId): Database.Database | undefined;\n}\n", "//\n// Copyright 2026 DXOS.org\n//\n\nimport { DXN } from '@dxos/keys';\n\nimport * as Database from './Database';\nimport * as Obj from './Obj';\n\n/**\n * `JSON.stringify` replacer signature.\n *\n * Defined here (rather than re-imported from a UI package) so other ECHO-aware utilities can\n * share a stable signature without creating a dependency edge into the UI tree.\n */\nexport type JsonReplacer = (key: string, value: any) => any;\n\nexport type CreateRefReplacerOptions = {\n db: Database.Database;\n /** How many ref hops to follow. `0` leaves all refs as-is. Default: `1`. */\n depth?: number;\n};\n\nconst isEncodedRef = (value: unknown): value is { '/': string } =>\n typeof value === 'object' &&\n value !== null &&\n Object.keys(value as object).length === 1 &&\n typeof (value as { '/': unknown })['/'] === 'string';\n\nconst toJson = (obj: Obj.Any): unknown => (typeof (obj as any).toJSON === 'function' ? (obj as any).toJSON() : obj);\n\n/**\n * Returns a {@link JsonReplacer} that inlines ECHO ref objects (`{ \"/\": \"dxn:echo:...\" }`) up to\n * `depth` ref hops. Beyond that depth refs are left in their encoded form.\n *\n * Implemented as a per-call `JSON.stringify` replacer (not a one-shot tree walk at root) so it\n * composes with wrappers like `safeStringify` that intercept the root call. JSON.stringify\n * already drives the recursion; we only need to (a) detect a ref at the current callback,\n * (b) resolve and return the target if hop budget remains, and (c) tag the returned object\n * with its hop count so children know how far in they are.\n *\n * The hop count is tracked per-object via a `WeakMap`: a ref-resolved target's children inherit\n * `parentHops + 1`; a regular intermediate object's children inherit `parentHops`. This makes the\n * budget count *ref hops*, not tree depth — a ref deep in a tree still resolves once when\n * `depth >= 1`.\n *\n * Note: ECHO objects' `toJSON` runs before the replacer is invoked, so by the time we see a\n * value refs are already encoded as `{ \"/\": \"dxn:...\" }`.\n */\nexport const createRefReplacer = ({ db, depth = 1 }: CreateRefReplacerOptions): JsonReplacer => {\n // Per-object hop count. Set when we return an object (via ref resolution or pass-through) so\n // the child callbacks (which carry that object as `this`) can read it.\n const hops = new WeakMap<object, number>();\n\n return function (this: any, key: string, value: any) {\n // Hop count for this call: hops at the parent, or 0 for the root.\n const parentHops = this && typeof this === 'object' ? (hops.get(this) ?? 0) : 0;\n if (isEncodedRef(value)) {\n if (parentHops >= depth) {\n return value;\n }\n\n // The `{ '/': string }` shape is shared with non-DXN IPLD-style refs (e.g. CIDs);\n // an unparseable string would otherwise crash the whole `JSON.stringify`.\n // Treat any parse miss as \"leave as-is\" rather than propagating.\n const dxnString = value['/'];\n if (!dxnString.startsWith('dxn:')) {\n return value;\n }\n\n let echoId: string | undefined;\n try {\n echoId = DXN.parse(dxnString).asEchoDXN()?.echoId;\n } catch {\n return value;\n }\n\n if (!echoId) {\n return value;\n }\n const target = db.getObjectById(echoId);\n if (!target) {\n return value;\n }\n\n const encoded = toJson(target);\n if (encoded != null && typeof encoded === 'object') {\n // Children of the resolved target are one hop deeper.\n hops.set(encoded as object, parentHops + 1);\n }\n return encoded;\n }\n\n // Pass-through object: children inherit the parent's hop count (this branch doesn't burn\n // budget).\n if (value != null && typeof value === 'object') {\n hops.set(value, parentHops);\n }\n\n return value;\n };\n};\n", "//\n// Copyright 2024 DXOS.org\n//\n\n// @import-as-namespace\n\nimport * as Schema from 'effect/Schema';\n\nimport * as Annotation from './Annotation';\nimport * as internal from './internal';\nimport * as Obj from './Obj';\nimport * as Ref from './Ref';\nimport * as Type from './Type';\n\n/**\n * A an ordered set of objects.\n */\nexport const Collection = Schema.Struct({\n name: Schema.String.pipe(Schema.optional),\n objects: Schema.Array(Ref.Ref(Obj.Unknown)).pipe(internal.FormInputAnnotation.set(false)),\n}).pipe(\n Type.object({\n typename: 'org.dxos.type.collection',\n version: '0.1.0',\n }),\n Annotation.IconAnnotation.set({\n icon: 'ph--folder--regular',\n hue: 'amber',\n }),\n);\n\nexport interface Collection extends Schema.Schema.Type<typeof Collection> {}\n\nexport const make = (props: Partial<Obj.MakeProps<typeof Collection>> = {}): Collection =>\n Obj.make(Collection, { objects: [], ...props });\n\nexport const isCollection: (value: unknown) => value is Collection = Obj.instanceOf(Collection);\n", "//\n// Copyright 2025 DXOS.org\n//\n\n// @import-as-namespace\n\nimport * as Schema from 'effect/Schema';\n\nimport { QueryAST } from '@dxos/echo-protocol';\nimport { JsonPath } from '@dxos/effect';\nimport { PublicKey } from '@dxos/keys';\n\nimport * as Annotation from './Annotation';\nimport * as Filter from './Filter';\nimport * as internal from './internal';\nimport * as Obj from './Obj';\nimport * as Query from './Query';\nimport * as Type from './Type';\n\n/**\n * Stored field metadata (e.g., for UX).\n */\nexport const FieldSchema = Schema.Struct({\n id: Schema.String,\n path: JsonPath,\n visible: Schema.optional(Schema.Boolean),\n\n // TODO(wittjosiah): Presentation-specific?\n referencePath: Schema.optional(JsonPath),\n});\n\nexport type FieldType = Schema.Schema.Type<typeof FieldSchema>;\n\nexport const KeyValueProps = Schema.Record({ key: Schema.String, value: Schema.Any });\n\nexport const createFieldId = () => PublicKey.random().truncate();\n\nexport const Projection = Schema.Struct({\n /**\n * Optional schema override used to customize the underlying schema.\n */\n schema: internal.JsonSchemaType.pipe(Schema.optional),\n\n /**\n * UX metadata associated with displayed fields (in table, form, etc.)\n */\n // TODO(wittjosiah): Should this just be an array of JsonPath?\n fields: Schema.Array(FieldSchema),\n\n /**\n * The id for the field used to pivot the view.\n * E.g., the field to use for kanban columns or the field to use for map coordinates.\n */\n pivotFieldId: Schema.String.pipe(Schema.optional),\n});\n\nexport type Projection = Schema.Schema.Type<typeof Projection>;\n\n/**\n * Views are generated or user-defined projections of a schema's properties.\n * They are used to configure the visual representation of the data.\n */\nconst ViewSchema = Schema.Struct({\n /**\n * Query used to retrieve data.\n * Can be a user-provided query grammar string or a query AST.\n */\n query: Schema.Struct({\n raw: Schema.optional(Schema.String),\n ast: QueryAST.Query,\n }),\n\n /**\n * Projection of the data returned from the query.\n */\n projection: Projection,\n}).pipe(\n Type.object({\n typename: 'org.dxos.type.view',\n version: '0.1.0',\n }),\n internal.SystemTypeAnnotation.set(true),\n Annotation.IconAnnotation.set({\n icon: 'ph--funnel--regular',\n hue: 'green',\n }),\n);\n\nexport interface View extends Schema.Schema.Type<typeof ViewSchema> {}\n\n/**\n * View instance type.\n */\n// NOTE: This interface is explicitly defined rather than derived from the schema to avoid\n// TypeScript \"cannot be named\" portability errors. The schema contains QueryAST.Query which\n// references internal @dxos/echo-protocol module paths. Without this explicit interface,\n// any schema using Ref.Ref(View) would inherit the non-portable type and fail to compile.\n// TODO(wittjosiah): Find a better solution that doesn't require manually keeping the interface in sync.\nexport const View: Type.Obj<View> = ViewSchema as any;\n\nexport const make = (props: Partial<Obj.MakeProps<typeof View>>): View => {\n return Obj.make(View, {\n query: { ast: Query.select(Filter.nothing()).ast },\n projection: { fields: [] },\n ...props,\n });\n};\n", "//\n// Copyright 2026 DXOS.org\n//\n\n// @import-as-namespace\n\nimport { pipe } from 'effect/Function';\nimport * as Predicate from 'effect/Predicate';\nimport * as Schema from 'effect/Schema';\n\nimport * as Collection from './Collection';\nimport * as Feed from './Feed';\nimport * as Obj from './Obj';\nimport * as View from './View';\n\n/**\n * Abstart set of objects, represented by a view, feed, or collection.\n */\nexport const Dataset = Schema.Union(Feed.Feed, Collection.Collection, View.View);\nexport type Dataset = Feed.Feed | Collection.Collection | View.View;\n\nexport const isDataset: (value: unknown) => value is Dataset = pipe(\n Obj.instanceOf(Feed.Feed),\n Predicate.or(Obj.instanceOf(Collection.Collection)),\n Predicate.or(Obj.instanceOf(View.View)),\n);\n"],
5
+ "mappings": "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",
6
+ "names": ["QueryAST", "DXN", "DXN", "isEncodedRef", "value", "Object", "keys", "length", "toJson", "obj", "toJSON", "createRefReplacer", "db", "depth", "hops", "WeakMap", "key", "parentHops", "get", "dxnString", "startsWith", "echoId", "parse", "asEchoDXN", "target", "getObjectById", "encoded", "set", "make", "Schema", "Collection", "Struct", "name", "String", "pipe", "optional", "objects", "Array", "Ref", "Unknown", "FormInputAnnotation", "set", "object", "typename", "version", "IconAnnotation", "icon", "hue", "make", "props", "isCollection", "instanceOf", "make", "Schema", "QueryAST", "JsonPath", "PublicKey", "FieldSchema", "Struct", "id", "String", "path", "JsonPath", "visible", "optional", "Boolean", "referencePath", "KeyValueProps", "Record", "key", "value", "Any", "createFieldId", "PublicKey", "random", "truncate", "Projection", "schema", "JsonSchemaType", "pipe", "fields", "Array", "pivotFieldId", "ViewSchema", "query", "raw", "ast", "QueryAST", "Query", "projection", "object", "typename", "version", "SystemTypeAnnotation", "set", "IconAnnotation", "icon", "hue", "View", "make", "props", "select", "nothing", "pipe", "Predicate", "Schema", "Dataset", "Union", "Feed", "Collection", "View", "isDataset", "pipe", "instanceOf", "or"]
7
+ }
@@ -1,10 +1,10 @@
1
1
  import {
2
2
  Unknown
3
- } from "./chunk-O26EPPBW.mjs";
3
+ } from "./chunk-W7U2XGZ3.mjs";
4
4
  import {
5
5
  KindId,
6
6
  SnapshotKindId
7
- } from "./chunk-ZUGFUCUK.mjs";
7
+ } from "./chunk-NWXJZVWD.mjs";
8
8
  import {
9
9
  ATTR_RELATION_SOURCE,
10
10
  ATTR_RELATION_TARGET,
@@ -36,7 +36,7 @@ import {
36
36
  sortByTypename,
37
37
  subscribe,
38
38
  version
39
- } from "./chunk-BQN7EDPH.mjs";
39
+ } from "./chunk-ZVQ26DCR.mjs";
40
40
  import {
41
41
  ParentId,
42
42
  getDescription,
@@ -47,11 +47,11 @@ import {
47
47
  getTypename,
48
48
  setDescription,
49
49
  setLabel
50
- } from "./chunk-2KHZ36F5.mjs";
50
+ } from "./chunk-TNBK56IN.mjs";
51
51
  import {
52
52
  EntityKind,
53
53
  SchemaKindId
54
- } from "./chunk-TBKX6JQO.mjs";
54
+ } from "./chunk-N4B7FHQT.mjs";
55
55
  import {
56
56
  __export
57
57
  } from "./chunk-J5LGTIGS.mjs";
@@ -65,7 +65,6 @@ __export(Relation_exports, {
65
65
  Unknown: () => Unknown3,
66
66
  VersionTypeId: () => VersionTypeId2,
67
67
  addTag: () => addTag2,
68
- change: () => change2,
69
68
  deleteKeys: () => deleteKeys2,
70
69
  getDXN: () => getDXN2,
71
70
  getDatabase: () => getDatabase2,
@@ -96,6 +95,7 @@ __export(Relation_exports, {
96
95
  sortByTypename: () => sortByTypename2,
97
96
  subscribe: () => subscribe2,
98
97
  toJSON: () => toJSON,
98
+ update: () => update,
99
99
  version: () => version2
100
100
  });
101
101
  import * as Schema from "effect/Schema";
@@ -161,30 +161,14 @@ var getSourceDXN = (value) => {
161
161
  assertArgument(isRelation(value), "Expected a relation");
162
162
  assumeType(value);
163
163
  const dxn = value[RelationSourceDXNId];
164
- invariant(dxn instanceof DXN, void 0, {
165
- F: __dxlog_file,
166
- L: 214,
167
- S: void 0,
168
- A: [
169
- "dxn instanceof DXN",
170
- ""
171
- ]
172
- });
164
+ invariant(dxn instanceof DXN, void 0, { "~LogMeta": "~LogMeta", F: __dxlog_file, L: 100, S: void 0, A: ["dxn instanceof DXN", ""] });
173
165
  return dxn;
174
166
  };
175
167
  var getTargetDXN = (value) => {
176
168
  assertArgument(isRelation(value), "Expected a relation");
177
169
  assumeType(value);
178
170
  const dxn = value[RelationTargetDXNId];
179
- invariant(dxn instanceof DXN, void 0, {
180
- F: __dxlog_file,
181
- L: 227,
182
- S: void 0,
183
- A: [
184
- "dxn instanceof DXN",
185
- ""
186
- ]
187
- });
171
+ invariant(dxn instanceof DXN, void 0, { "~LogMeta": "~LogMeta", F: __dxlog_file, L: 111, S: void 0, A: ["dxn instanceof DXN", ""] });
188
172
  return dxn;
189
173
  };
190
174
  var getSource = (relation) => {
@@ -205,7 +189,7 @@ var getTarget = (relation) => {
205
189
  }
206
190
  return obj;
207
191
  };
208
- var change2 = (relation, callback) => {
192
+ var update = (relation, callback) => {
209
193
  change(relation, callback);
210
194
  };
211
195
  var getSnapshot2 = getSnapshot;
@@ -253,7 +237,7 @@ export {
253
237
  getTargetDXN,
254
238
  getSource,
255
239
  getTarget,
256
- change2 as change,
240
+ update,
257
241
  getSnapshot2 as getSnapshot,
258
242
  subscribe2 as subscribe,
259
243
  getValue2 as getValue,
@@ -283,4 +267,4 @@ export {
283
267
  version2 as version,
284
268
  Relation_exports
285
269
  };
286
- //# sourceMappingURL=chunk-GMYNDEMT.mjs.map
270
+ //# sourceMappingURL=chunk-GKBXQFQK.mjs.map