@dxos/echo 0.10.0 → 0.11.1

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 (274) hide show
  1. package/dist/lib/Annotation.mjs +3 -0
  2. package/dist/lib/Blob.mjs +160 -0
  3. package/dist/lib/Blob.mjs.map +1 -0
  4. package/dist/lib/Database.mjs +2 -0
  5. package/dist/lib/Entity.mjs +231 -0
  6. package/dist/lib/Entity.mjs.map +1 -0
  7. package/dist/lib/Err.mjs +105 -0
  8. package/dist/lib/Err.mjs.map +1 -0
  9. package/dist/lib/Feed.mjs +338 -0
  10. package/dist/lib/Feed.mjs.map +1 -0
  11. package/dist/lib/Filter.mjs +380 -0
  12. package/dist/lib/Filter.mjs.map +1 -0
  13. package/dist/lib/Format.mjs +47 -0
  14. package/dist/lib/Format.mjs.map +1 -0
  15. package/dist/lib/JsonSchema.mjs +21 -0
  16. package/dist/lib/JsonSchema.mjs.map +1 -0
  17. package/dist/lib/Key.mjs +15 -0
  18. package/dist/lib/Key.mjs.map +1 -0
  19. package/dist/lib/Migration.mjs +38 -0
  20. package/dist/lib/Migration.mjs.map +1 -0
  21. package/dist/lib/Obj.mjs +660 -0
  22. package/dist/lib/Obj.mjs.map +1 -0
  23. package/dist/lib/Order.mjs +65 -0
  24. package/dist/lib/Order.mjs.map +1 -0
  25. package/dist/lib/Query.mjs +336 -0
  26. package/dist/lib/Query.mjs.map +1 -0
  27. package/dist/lib/QueryResult.mjs +7 -0
  28. package/dist/lib/QueryResult.mjs.map +1 -0
  29. package/dist/lib/Ref.mjs +44 -0
  30. package/dist/lib/Ref.mjs.map +1 -0
  31. package/dist/lib/Registry.mjs +35 -0
  32. package/dist/lib/Registry.mjs.map +1 -0
  33. package/dist/lib/Relation.mjs +397 -0
  34. package/dist/lib/Relation.mjs.map +1 -0
  35. package/dist/lib/Scope.mjs +51 -0
  36. package/dist/lib/Scope.mjs.map +1 -0
  37. package/dist/lib/Tag.mjs +70 -0
  38. package/dist/lib/Tag.mjs.map +1 -0
  39. package/dist/lib/Text.mjs +82 -0
  40. package/dist/lib/Text.mjs.map +1 -0
  41. package/dist/lib/Type.mjs +371 -0
  42. package/dist/lib/Type.mjs.map +1 -0
  43. package/dist/lib/chunk-Annotation.mjs +221 -0
  44. package/dist/lib/chunk-Annotation.mjs.map +1 -0
  45. package/dist/lib/chunk-Database.mjs +918 -0
  46. package/dist/lib/chunk-Database.mjs.map +1 -0
  47. package/dist/lib/chunk-atom-snapshot.mjs +249 -0
  48. package/dist/lib/chunk-atom-snapshot.mjs.map +1 -0
  49. package/dist/lib/chunk-internal.mjs +2775 -0
  50. package/dist/lib/chunk-internal.mjs.map +1 -0
  51. package/dist/lib/chunk-json-schema.mjs +660 -0
  52. package/dist/lib/chunk-json-schema.mjs.map +1 -0
  53. package/dist/lib/chunk-number.mjs +164 -0
  54. package/dist/lib/chunk-number.mjs.map +1 -0
  55. package/dist/lib/chunk-ref-array.mjs +31 -0
  56. package/dist/lib/chunk-ref-array.mjs.map +1 -0
  57. package/dist/lib/chunk-ref.mjs +590 -0
  58. package/dist/lib/chunk-ref.mjs.map +1 -0
  59. package/dist/lib/chunk-rolldown-runtime.mjs +13 -0
  60. package/dist/lib/chunk-select.mjs +186 -0
  61. package/dist/lib/chunk-select.mjs.map +1 -0
  62. package/dist/lib/chunk-src.mjs +234 -0
  63. package/dist/lib/chunk-src.mjs.map +1 -0
  64. package/dist/lib/chunk-util.mjs +140 -0
  65. package/dist/lib/chunk-util.mjs.map +1 -0
  66. package/dist/lib/index.mjs +24 -0
  67. package/dist/lib/internal.mjs +10 -0
  68. package/dist/lib/testing.mjs +346 -0
  69. package/dist/lib/testing.mjs.map +1 -0
  70. package/dist/types/src/Aggregate.d.ts +86 -0
  71. package/dist/types/src/Aggregate.d.ts.map +1 -0
  72. package/dist/types/src/Blob.d.ts +153 -0
  73. package/dist/types/src/Blob.d.ts.map +1 -0
  74. package/dist/types/src/Blob.test.d.ts +2 -0
  75. package/dist/types/src/Blob.test.d.ts.map +1 -0
  76. package/dist/types/src/Database.d.ts +153 -4
  77. package/dist/types/src/Database.d.ts.map +1 -1
  78. package/dist/types/src/Err.d.ts +116 -0
  79. package/dist/types/src/Err.d.ts.map +1 -1
  80. package/dist/types/src/Feed.d.ts +116 -28
  81. package/dist/types/src/Feed.d.ts.map +1 -1
  82. package/dist/types/src/Feed.test.d.ts +2 -0
  83. package/dist/types/src/Feed.test.d.ts.map +1 -0
  84. package/dist/types/src/Filter.d.ts +14 -6
  85. package/dist/types/src/Filter.d.ts.map +1 -1
  86. package/dist/types/src/Hypergraph.d.ts +18 -0
  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/Obj.d.ts +14 -1
  90. package/dist/types/src/Obj.d.ts.map +1 -1
  91. package/dist/types/src/Order.d.ts +9 -3
  92. package/dist/types/src/Order.d.ts.map +1 -1
  93. package/dist/types/src/Query.d.ts +107 -26
  94. package/dist/types/src/Query.d.ts.map +1 -1
  95. package/dist/types/src/Relation.d.ts +6 -0
  96. package/dist/types/src/Relation.d.ts.map +1 -1
  97. package/dist/types/src/Type.d.ts.map +1 -1
  98. package/dist/types/src/View.d.ts +1 -1
  99. package/dist/types/src/index.d.ts +2 -0
  100. package/dist/types/src/index.d.ts.map +1 -1
  101. package/dist/types/src/internal/Entity/api.d.ts +6 -0
  102. package/dist/types/src/internal/Entity/api.d.ts.map +1 -1
  103. package/dist/types/src/internal/Entity/model.d.ts +3 -2
  104. package/dist/types/src/internal/Entity/model.d.ts.map +1 -1
  105. package/dist/types/src/internal/Filter/match.d.ts.map +1 -1
  106. package/dist/types/src/internal/JsonSchema/json-schema-type.d.ts +34 -8
  107. package/dist/types/src/internal/JsonSchema/json-schema-type.d.ts.map +1 -1
  108. package/dist/types/src/internal/JsonSchema/json-schema.d.ts.map +1 -1
  109. package/dist/types/src/internal/Obj/atoms.d.ts.map +1 -1
  110. package/dist/types/src/internal/Obj/json-serializer.d.ts.map +1 -1
  111. package/dist/types/src/internal/Query/pretty.d.ts.map +1 -1
  112. package/dist/types/src/internal/Query/query-result-effect.d.ts.map +1 -1
  113. package/dist/types/src/internal/common/proxy/make-object.d.ts +13 -0
  114. package/dist/types/src/internal/common/proxy/make-object.d.ts.map +1 -1
  115. package/dist/types/src/internal/common/proxy/reactive.d.ts.map +1 -1
  116. package/dist/types/src/internal/common/proxy/symbols.d.ts.map +1 -1
  117. package/dist/types/src/internal/common/proxy/typed-handler.d.ts +12 -0
  118. package/dist/types/src/internal/common/proxy/typed-handler.d.ts.map +1 -1
  119. package/dist/types/src/internal/common/types/index.d.ts +1 -0
  120. package/dist/types/src/internal/common/types/index.d.ts.map +1 -1
  121. package/dist/types/src/internal/common/types/model-symbols.d.ts +5 -0
  122. package/dist/types/src/internal/common/types/model-symbols.d.ts.map +1 -1
  123. package/dist/types/src/internal/common/types/projection.d.ts +32 -0
  124. package/dist/types/src/internal/common/types/projection.d.ts.map +1 -0
  125. package/dist/types/tsconfig.tsbuildinfo +1 -1
  126. package/package.json +40 -35
  127. package/src/Aggregate.ts +105 -0
  128. package/src/Blob.test.ts +45 -0
  129. package/src/Blob.ts +205 -0
  130. package/src/Database.ts +207 -17
  131. package/src/Err.ts +36 -0
  132. package/src/Feed.test.ts +188 -0
  133. package/src/Feed.ts +238 -62
  134. package/src/Filter.ts +28 -10
  135. package/src/Hypergraph.ts +18 -0
  136. package/src/Json.ts +1 -0
  137. package/src/Obj.test.ts +2 -2
  138. package/src/Obj.ts +21 -1
  139. package/src/Order.ts +16 -9
  140. package/src/Query.test.ts +319 -2
  141. package/src/Query.ts +165 -51
  142. package/src/Relation.ts +14 -0
  143. package/src/Type.ts +5 -6
  144. package/src/index.ts +2 -0
  145. package/src/internal/Entity/api.ts +11 -1
  146. package/src/internal/Entity/model.ts +3 -0
  147. package/src/internal/Filter/match.ts +30 -1
  148. package/src/internal/JsonSchema/json-schema-type.ts +14 -2
  149. package/src/internal/JsonSchema/json-schema.test.ts +28 -1
  150. package/src/internal/JsonSchema/json-schema.ts +33 -6
  151. package/src/internal/Obj/atoms.ts +4 -2
  152. package/src/internal/Obj/json-serializer.test.ts +162 -2
  153. package/src/internal/Obj/json-serializer.ts +6 -0
  154. package/src/internal/Query/pretty.ts +19 -1
  155. package/src/internal/Query/query-result-effect.ts +2 -4
  156. package/src/internal/Ref/atoms.ts +1 -1
  157. package/src/internal/common/proxy/change-context.ts +1 -1
  158. package/src/internal/common/proxy/make-object.ts +42 -3
  159. package/src/internal/common/proxy/reactive.ts +5 -0
  160. package/src/internal/common/proxy/symbols.ts +1 -0
  161. package/src/internal/common/proxy/typed-handler.ts +71 -29
  162. package/src/internal/common/types/index.ts +1 -0
  163. package/src/internal/common/types/model-symbols.ts +6 -0
  164. package/src/internal/common/types/projection.ts +45 -0
  165. package/src/testing/test-data.ts +14 -14
  166. package/dist/lib/neutral/Annotation.mjs +0 -90
  167. package/dist/lib/neutral/Annotation.mjs.map +0 -7
  168. package/dist/lib/neutral/Database.mjs +0 -42
  169. package/dist/lib/neutral/Database.mjs.map +0 -7
  170. package/dist/lib/neutral/Entity.mjs +0 -76
  171. package/dist/lib/neutral/Entity.mjs.map +0 -7
  172. package/dist/lib/neutral/Err.mjs +0 -16
  173. package/dist/lib/neutral/Err.mjs.map +0 -7
  174. package/dist/lib/neutral/Feed.mjs +0 -50
  175. package/dist/lib/neutral/Feed.mjs.map +0 -7
  176. package/dist/lib/neutral/Filter.mjs +0 -72
  177. package/dist/lib/neutral/Filter.mjs.map +0 -7
  178. package/dist/lib/neutral/Format.mjs +0 -82
  179. package/dist/lib/neutral/Format.mjs.map +0 -7
  180. package/dist/lib/neutral/JsonSchema.mjs +0 -18
  181. package/dist/lib/neutral/JsonSchema.mjs.map +0 -7
  182. package/dist/lib/neutral/Key.mjs +0 -16
  183. package/dist/lib/neutral/Key.mjs.map +0 -7
  184. package/dist/lib/neutral/Migration.mjs +0 -18
  185. package/dist/lib/neutral/Migration.mjs.map +0 -7
  186. package/dist/lib/neutral/Obj.mjs +0 -128
  187. package/dist/lib/neutral/Obj.mjs.map +0 -7
  188. package/dist/lib/neutral/Order.mjs +0 -16
  189. package/dist/lib/neutral/Order.mjs.map +0 -7
  190. package/dist/lib/neutral/Query.mjs +0 -38
  191. package/dist/lib/neutral/Query.mjs.map +0 -7
  192. package/dist/lib/neutral/QueryResult.mjs +0 -2
  193. package/dist/lib/neutral/QueryResult.mjs.map +0 -7
  194. package/dist/lib/neutral/Ref.mjs +0 -25
  195. package/dist/lib/neutral/Ref.mjs.map +0 -7
  196. package/dist/lib/neutral/Registry.mjs +0 -14
  197. package/dist/lib/neutral/Registry.mjs.map +0 -7
  198. package/dist/lib/neutral/Relation.mjs +0 -97
  199. package/dist/lib/neutral/Relation.mjs.map +0 -7
  200. package/dist/lib/neutral/Scope.mjs +0 -12
  201. package/dist/lib/neutral/Scope.mjs.map +0 -7
  202. package/dist/lib/neutral/Tag.mjs +0 -32
  203. package/dist/lib/neutral/Tag.mjs.map +0 -7
  204. package/dist/lib/neutral/Text.mjs +0 -25
  205. package/dist/lib/neutral/Text.mjs.map +0 -7
  206. package/dist/lib/neutral/Type.mjs +0 -65
  207. package/dist/lib/neutral/Type.mjs.map +0 -7
  208. package/dist/lib/neutral/chunk-2HKGAQM4.mjs +0 -1394
  209. package/dist/lib/neutral/chunk-2HKGAQM4.mjs.map +0 -7
  210. package/dist/lib/neutral/chunk-2ZHECXUR.mjs +0 -95
  211. package/dist/lib/neutral/chunk-2ZHECXUR.mjs.map +0 -7
  212. package/dist/lib/neutral/chunk-3KTE2Y7Q.mjs +0 -336
  213. package/dist/lib/neutral/chunk-3KTE2Y7Q.mjs.map +0 -7
  214. package/dist/lib/neutral/chunk-3TN2VMI4.mjs +0 -714
  215. package/dist/lib/neutral/chunk-3TN2VMI4.mjs.map +0 -7
  216. package/dist/lib/neutral/chunk-42L4HJ3Z.mjs +0 -104
  217. package/dist/lib/neutral/chunk-42L4HJ3Z.mjs.map +0 -7
  218. package/dist/lib/neutral/chunk-4A2NWKRJ.mjs +0 -747
  219. package/dist/lib/neutral/chunk-4A2NWKRJ.mjs.map +0 -7
  220. package/dist/lib/neutral/chunk-7LOUAPYZ.mjs +0 -25
  221. package/dist/lib/neutral/chunk-7LOUAPYZ.mjs.map +0 -7
  222. package/dist/lib/neutral/chunk-ACFAOTKJ.mjs +0 -1531
  223. package/dist/lib/neutral/chunk-ACFAOTKJ.mjs.map +0 -7
  224. package/dist/lib/neutral/chunk-BEFR7LEA.mjs +0 -170
  225. package/dist/lib/neutral/chunk-BEFR7LEA.mjs.map +0 -7
  226. package/dist/lib/neutral/chunk-BXIKXT7Q.mjs +0 -89
  227. package/dist/lib/neutral/chunk-BXIKXT7Q.mjs.map +0 -7
  228. package/dist/lib/neutral/chunk-C57XMMBY.mjs +0 -206
  229. package/dist/lib/neutral/chunk-C57XMMBY.mjs.map +0 -7
  230. package/dist/lib/neutral/chunk-C62JYFAD.mjs +0 -183
  231. package/dist/lib/neutral/chunk-C62JYFAD.mjs.map +0 -7
  232. package/dist/lib/neutral/chunk-FSGX2R62.mjs +0 -48
  233. package/dist/lib/neutral/chunk-FSGX2R62.mjs.map +0 -7
  234. package/dist/lib/neutral/chunk-HBXT3GSB.mjs +0 -459
  235. package/dist/lib/neutral/chunk-HBXT3GSB.mjs.map +0 -7
  236. package/dist/lib/neutral/chunk-IQR45HAD.mjs +0 -31
  237. package/dist/lib/neutral/chunk-IQR45HAD.mjs.map +0 -7
  238. package/dist/lib/neutral/chunk-J5LGTIGS.mjs +0 -10
  239. package/dist/lib/neutral/chunk-J5LGTIGS.mjs.map +0 -7
  240. package/dist/lib/neutral/chunk-KCBW4BR6.mjs +0 -424
  241. package/dist/lib/neutral/chunk-KCBW4BR6.mjs.map +0 -7
  242. package/dist/lib/neutral/chunk-L3E5IXAE.mjs +0 -575
  243. package/dist/lib/neutral/chunk-L3E5IXAE.mjs.map +0 -7
  244. package/dist/lib/neutral/chunk-PRC4FEKJ.mjs +0 -56
  245. package/dist/lib/neutral/chunk-PRC4FEKJ.mjs.map +0 -7
  246. package/dist/lib/neutral/chunk-SCT6FFCR.mjs +0 -351
  247. package/dist/lib/neutral/chunk-SCT6FFCR.mjs.map +0 -7
  248. package/dist/lib/neutral/chunk-TOCVVFK2.mjs +0 -75
  249. package/dist/lib/neutral/chunk-TOCVVFK2.mjs.map +0 -7
  250. package/dist/lib/neutral/chunk-U53LSQQA.mjs +0 -41
  251. package/dist/lib/neutral/chunk-U53LSQQA.mjs.map +0 -7
  252. package/dist/lib/neutral/chunk-UGFFV2FR.mjs +0 -27
  253. package/dist/lib/neutral/chunk-UGFFV2FR.mjs.map +0 -7
  254. package/dist/lib/neutral/chunk-UWLP4RFM.mjs +0 -7
  255. package/dist/lib/neutral/chunk-UWLP4RFM.mjs.map +0 -7
  256. package/dist/lib/neutral/chunk-UZHCQ6NI.mjs +0 -283
  257. package/dist/lib/neutral/chunk-UZHCQ6NI.mjs.map +0 -7
  258. package/dist/lib/neutral/chunk-WISOH2XH.mjs +0 -36
  259. package/dist/lib/neutral/chunk-WISOH2XH.mjs.map +0 -7
  260. package/dist/lib/neutral/chunk-WKIT2YY5.mjs +0 -34
  261. package/dist/lib/neutral/chunk-WKIT2YY5.mjs.map +0 -7
  262. package/dist/lib/neutral/chunk-XB6ISRAO.mjs +0 -271
  263. package/dist/lib/neutral/chunk-XB6ISRAO.mjs.map +0 -7
  264. package/dist/lib/neutral/chunk-XXL42WCB.mjs +0 -84
  265. package/dist/lib/neutral/chunk-XXL42WCB.mjs.map +0 -7
  266. package/dist/lib/neutral/chunk-XXWK4J53.mjs +0 -117
  267. package/dist/lib/neutral/chunk-XXWK4J53.mjs.map +0 -7
  268. package/dist/lib/neutral/index.mjs +0 -115
  269. package/dist/lib/neutral/index.mjs.map +0 -7
  270. package/dist/lib/neutral/internal/index.mjs +0 -581
  271. package/dist/lib/neutral/internal/index.mjs.map +0 -7
  272. package/dist/lib/neutral/meta.json +0 -1
  273. package/dist/lib/neutral/testing/index.mjs +0 -477
  274. package/dist/lib/neutral/testing/index.mjs.map +0 -7
@@ -0,0 +1,660 @@
1
+ import { a as ANY_OBJECT_VERSION, g as getStaticTypeSchema, i as ANY_OBJECT_TYPENAME, n as makeTypeJsonSchemaAnnotation, o as EntityKind, s as EntityKindSchema } from "./chunk-util.mjs";
2
+ import { Q as PropertyMetaAnnotationId, W as GeneratorAnnotationId, X as LabelAnnotationId, it as TypeIdentifierAnnotationId, rt as TypeAnnotationId } from "./chunk-Database.mjs";
3
+ import { o as createEchoReferenceSchema } from "./chunk-ref.mjs";
4
+ import { c as FormatAnnotationId, m as TypeFormat, n as CurrencyAnnotationId, s as FormatAnnotation } from "./chunk-number.mjs";
5
+ import { DXN, EID, EntityId } from "@dxos/keys";
6
+ import * as Function from "effect/Function";
7
+ import * as Option from "effect/Option";
8
+ import * as Schema from "effect/Schema";
9
+ import * as SchemaAST from "effect/SchemaAST";
10
+ import { assertArgument, invariant } from "@dxos/invariant";
11
+ import { SchemaEx } from "@dxos/effect";
12
+ import { clearUndefined, orderKeys, removeProperties } from "@dxos/util";
13
+ import { raise } from "@dxos/debug";
14
+ import * as Array from "effect/Array";
15
+ import * as JSONSchema from "effect/JSONSchema";
16
+ import { log } from "@dxos/log";
17
+ //#region src/internal/JsonSchema/annotations.ts
18
+ /**
19
+ * List of annotations for JSON encoding/decoding.
20
+ * Omits default effect-schema annotations since they are encoded with default serializer.
21
+ */
22
+ var CustomAnnotations = {
23
+ format: FormatAnnotationId,
24
+ currency: CurrencyAnnotationId
25
+ };
26
+ /**
27
+ * List of annotations for JSON decoding only.
28
+ * Includes default effect annotations.
29
+ */
30
+ var DecodedAnnotations = {
31
+ title: SchemaAST.TitleAnnotationId,
32
+ description: SchemaAST.DescriptionAnnotationId
33
+ };
34
+ /**
35
+ * Annotations that go into ECHO namespace in json-schema.
36
+ */
37
+ var EchoAnnotations = {
38
+ meta: PropertyMetaAnnotationId,
39
+ generator: GeneratorAnnotationId,
40
+ labelProp: LabelAnnotationId
41
+ };
42
+ //#endregion
43
+ //#region src/internal/JsonSchema/json-schema-type.ts
44
+ var SimpleTypes = Schema.Literal("array", "boolean", "integer", "null", "number", "object", "string");
45
+ var NonNegativeInteger = Schema.Number.pipe(Schema.greaterThanOrEqualTo(0));
46
+ var StringArray = Schema.Array(Schema.String);
47
+ var JsonSchemaOrBoolean = Schema.Union(Schema.suspend(() => JsonSchemaType), Schema.Boolean);
48
+ /**
49
+ * Go under the `annotations` property.
50
+ */
51
+ var JsonSchemaEchoAnnotations = Schema.Struct({
52
+ /**
53
+ * Label for this schema.
54
+ * Mapped from {@link LabelAnnotationId}.
55
+ */
56
+ labelProp: Schema.optional(Schema.Union(SchemaEx.JsonPath, Schema.Array(SchemaEx.JsonPath))),
57
+ /**
58
+ * Generator function for this schema.
59
+ * Mapped from {@link GeneratorAnnotationId}; mirrors `GeneratorAnnotationValue`, whose object
60
+ * form (`{ generator, args }`) is used by schemas like `Task` — a narrower contract here makes
61
+ * those schemas unserializable (`Operation.serialize` fails on any operation referencing them).
62
+ */
63
+ generator: Schema.optional(Schema.Union(Schema.String, Schema.Tuple(Schema.String, Schema.Number), Schema.Struct({
64
+ generator: Schema.String,
65
+ args: Schema.optional(Schema.Array(Schema.Any)),
66
+ probability: Schema.optional(Schema.Number)
67
+ }))),
68
+ /**
69
+ * {@link PropertyMeta} annotations get serialized here.
70
+ */
71
+ meta: Schema.optional(Schema.Record({
72
+ key: Schema.String,
73
+ value: Schema.Any
74
+ })),
75
+ /**
76
+ * @deprecated
77
+ */
78
+ type: Schema.optional(Schema.Struct({
79
+ typename: Schema.String,
80
+ version: Schema.String,
81
+ schemaId: Schema.optional(Schema.String)
82
+ })),
83
+ /**
84
+ * @deprecated Superseded by `meta`.
85
+ */
86
+ annotations: Schema.optional(Schema.Record({
87
+ key: Schema.String,
88
+ value: Schema.Any
89
+ }))
90
+ });
91
+ /**
92
+ * Describes a schema for the JSON-schema objects stored in ECHO.
93
+ * Contains extensions for ECHO (e.g., references).
94
+ * Ref: https://json-schema.org/draft-07/schema
95
+ */
96
+ var _JsonSchemaType = Schema.Struct({
97
+ /**
98
+ * Identifier for this schema.
99
+ * This schema might be referenced by $ref clause in other schemas.
100
+ */
101
+ $id: Schema.optional(Schema.String),
102
+ /**
103
+ * Schema of this schema.
104
+ * Set to "https://json-schema.org/draft-07/schema".
105
+ */
106
+ $schema: Schema.optional(Schema.String),
107
+ /**
108
+ * Reference to another schema.
109
+ */
110
+ $ref: Schema.optional(Schema.String),
111
+ /**
112
+ * Comments are ignored when interpreting the schema.
113
+ */
114
+ $comment: Schema.optional(Schema.String),
115
+ /**
116
+ * Defines whether this schema is an object schema or a relation schema.
117
+ */
118
+ entityKind: Schema.optional(EntityKindSchema),
119
+ /**
120
+ * Typename of this schema.
121
+ * Only on schema representing an ECHO object.
122
+ *
123
+ * @example 'com.example.type.my-type'
124
+ */
125
+ typename: Schema.optional(Schema.String),
126
+ /**
127
+ * Version of this schema.
128
+ * Custom dialect for ECHO.
129
+ */
130
+ version: Schema.optional(Schema.String),
131
+ /**
132
+ * Target of this relation.
133
+ * Only for relation schemas.
134
+ * The referenced schema must be an object schema.
135
+ */
136
+ relationTarget: Schema.optional(Schema.suspend(() => JsonSchemaType)),
137
+ /**
138
+ * Source of this relation.
139
+ * Only for relation schemas.
140
+ * The referenced schema must be an object schema.
141
+ */
142
+ relationSource: Schema.optional(Schema.suspend(() => JsonSchemaType)),
143
+ /**
144
+ * Title of this schema.
145
+ */
146
+ title: Schema.optional(Schema.String),
147
+ /**
148
+ * Description of this schema.
149
+ */
150
+ description: Schema.optional(Schema.String),
151
+ /**
152
+ * Whether this schema is read-only.
153
+ */
154
+ readOnly: Schema.optional(Schema.Boolean),
155
+ /**
156
+ * Whether this schema is write-only.
157
+ */
158
+ writeOnly: Schema.optional(Schema.Boolean),
159
+ /**
160
+ * Examples of instances of this schema.
161
+ */
162
+ examples: Schema.optional(Schema.Array(Schema.Any)),
163
+ /**
164
+ * Default value for this schema.
165
+ */
166
+ default: Schema.optional(Schema.Any),
167
+ /**
168
+ * This schema only matches values that are equal to this value.
169
+ */
170
+ const: Schema.optional(Schema.Any),
171
+ /**
172
+ * This schema only matches one of the values in this array.
173
+ */
174
+ enum: Schema.optional(Schema.Array(Schema.Any)),
175
+ /**
176
+ * Base type of the schema.
177
+ */
178
+ type: Schema.optional(Schema.Union(SimpleTypes, Schema.Array(SimpleTypes))),
179
+ multipleOf: Schema.optional(Schema.Number.pipe(Schema.greaterThan(0))),
180
+ maximum: Schema.optional(Schema.Number),
181
+ exclusiveMaximum: Schema.optional(Schema.Number),
182
+ minimum: Schema.optional(Schema.Number),
183
+ exclusiveMinimum: Schema.optional(Schema.Number),
184
+ maxLength: Schema.optional(NonNegativeInteger),
185
+ /**
186
+ * Regex pattern for strings.
187
+ */
188
+ pattern: Schema.optional(Schema.String.pipe(FormatAnnotation.set(TypeFormat.Regex))),
189
+ /**
190
+ * Serialized from {@link FormatAnnotationId}.
191
+ */
192
+ format: Schema.optional(Schema.String),
193
+ minLength: Schema.optional(NonNegativeInteger),
194
+ items: Schema.optional(Schema.Union(Schema.suspend(() => JsonSchemaType), Schema.Array(Schema.suspend(() => JsonSchemaType)))),
195
+ additionalItems: Schema.optional(Schema.Union(Schema.suspend(() => JsonSchemaType), Schema.Boolean)),
196
+ maxItems: Schema.optional(NonNegativeInteger),
197
+ minItems: Schema.optional(NonNegativeInteger),
198
+ uniqueItems: Schema.optional(Schema.Boolean),
199
+ contains: Schema.optional(Schema.suspend(() => JsonSchemaType)),
200
+ maxProperties: Schema.optional(NonNegativeInteger),
201
+ minProperties: Schema.optional(NonNegativeInteger),
202
+ required: Schema.optional(StringArray),
203
+ /**
204
+ * Non-standard JSON Schema extension.
205
+ * Defines the order of properties in the object.
206
+ * The unmentioned properties are placed at the end.
207
+ *
208
+ * Related: https://github.com/json-schema/json-schema/issues/119
209
+ */
210
+ propertyOrder: Schema.optional(StringArray),
211
+ additionalProperties: Schema.optional(JsonSchemaOrBoolean),
212
+ properties: Schema.optional(Schema.Record({
213
+ key: Schema.String,
214
+ value: Schema.suspend(() => JsonSchemaType)
215
+ })),
216
+ patternProperties: Schema.optional(Schema.Record({
217
+ key: Schema.String,
218
+ value: Schema.suspend(() => JsonSchemaType)
219
+ })),
220
+ propertyNames: Schema.optional(Schema.suspend(() => JsonSchemaType)),
221
+ definitions: Schema.optional(Schema.Record({
222
+ key: Schema.String,
223
+ value: Schema.suspend(() => JsonSchemaType)
224
+ })),
225
+ dependencies: Schema.optional(Schema.Record({
226
+ key: Schema.String,
227
+ value: Schema.suspend(() => Schema.Union(Schema.String, StringArray, JsonSchemaType)).annotations({
228
+ identifier: "dependency",
229
+ description: "Dependency"
230
+ })
231
+ })),
232
+ contentMediaType: Schema.optional(Schema.String),
233
+ contentEncoding: Schema.optional(Schema.String),
234
+ if: Schema.optional(Schema.suspend(() => JsonSchemaType)),
235
+ then: Schema.optional(Schema.suspend(() => JsonSchemaType)),
236
+ else: Schema.optional(Schema.suspend(() => JsonSchemaType)),
237
+ allOf: Schema.optional(Schema.Array(Schema.suspend(() => JsonSchemaType))),
238
+ anyOf: Schema.optional(Schema.Array(Schema.suspend(() => JsonSchemaType))),
239
+ oneOf: Schema.optional(Schema.Array(Schema.suspend(() => JsonSchemaType))),
240
+ not: Schema.optional(Schema.suspend(() => JsonSchemaType)),
241
+ $defs: Schema.optional(Schema.Record({
242
+ key: Schema.String,
243
+ value: Schema.suspend(() => JsonSchemaType)
244
+ })),
245
+ currency: Schema.optional(Schema.String),
246
+ reference: Schema.optional(Schema.Struct({
247
+ schema: Schema.suspend(() => JsonSchemaType),
248
+ schemaVersion: Schema.optional(Schema.String),
249
+ schemaObject: Schema.optional(Schema.String)
250
+ })),
251
+ /**
252
+ * ECHO-specific annotations.
253
+ */
254
+ annotations: Schema.optional(JsonSchemaEchoAnnotations),
255
+ /**
256
+ * @deprecated Use `annotations` instead.
257
+ */
258
+ echo: Schema.optional(JsonSchemaEchoAnnotations)
259
+ }).annotations({
260
+ identifier: "jsonSchema",
261
+ description: "JSON Schema"
262
+ });
263
+ var JsonSchemaFields = Object.keys(_JsonSchemaType.fields);
264
+ var JsonSchemaType = _JsonSchemaType;
265
+ var getSchemaProperty = (schema, property) => {
266
+ return schema.properties?.[property];
267
+ };
268
+ var setSchemaProperty = (schema, property, value) => {
269
+ schema.properties ??= {};
270
+ schema.properties[property] = value;
271
+ return schema;
272
+ };
273
+ /**
274
+ * @internal
275
+ */
276
+ var ECHO_ANNOTATIONS_NS_DEPRECATED_KEY = "echo";
277
+ /**
278
+ * @internal
279
+ */
280
+ var ECHO_ANNOTATIONS_NS_KEY = "annotations";
281
+ /**
282
+ * @internal
283
+ * @returns ECHO annotations namespace object in its normalized form.
284
+ *
285
+ * `meta` holds PropertyMeta annotations.
286
+ * `annotations` holds other annotations.
287
+ */
288
+ var getNormalizedEchoAnnotations = (obj) => {
289
+ if (obj["annotations"] != null && obj["echo"] != null) return normalizeEchoAnnotations({
290
+ ...obj[ECHO_ANNOTATIONS_NS_DEPRECATED_KEY],
291
+ ...obj[ECHO_ANNOTATIONS_NS_KEY]
292
+ });
293
+ else if (obj["annotations"] != null) return normalizeEchoAnnotations(obj[ECHO_ANNOTATIONS_NS_KEY]);
294
+ else if (obj["echo"] != null) return normalizeEchoAnnotations(obj[ECHO_ANNOTATIONS_NS_DEPRECATED_KEY]);
295
+ else return;
296
+ };
297
+ var normalizeEchoAnnotations = (obj) => {
298
+ if (!obj.annotations) return obj;
299
+ else {
300
+ const res = {
301
+ ...obj,
302
+ meta: {
303
+ ...obj.annotations,
304
+ ...obj.meta ?? {}
305
+ }
306
+ };
307
+ delete res.annotations;
308
+ return res;
309
+ }
310
+ };
311
+ //#endregion
312
+ //#region src/internal/JsonSchema/json-schema.ts
313
+ var __dxlog_file = "/__w/dxos/dxos/packages/core/echo/echo/src/internal/JsonSchema/json-schema.ts";
314
+ var PropType = /* @__PURE__ */ function(PropType) {
315
+ PropType[PropType["NONE"] = 0] = "NONE";
316
+ PropType[PropType["STRING"] = 1] = "STRING";
317
+ PropType[PropType["NUMBER"] = 2] = "NUMBER";
318
+ PropType[PropType["BOOLEAN"] = 3] = "BOOLEAN";
319
+ PropType[PropType["DATE"] = 4] = "DATE";
320
+ PropType[PropType["REF"] = 5] = "REF";
321
+ PropType[PropType["RECORD"] = 6] = "RECORD";
322
+ PropType[PropType["ENUM"] = 7] = "ENUM";
323
+ return PropType;
324
+ }({});
325
+ var toPropType = (type) => {
326
+ switch (type) {
327
+ case 1: return "string";
328
+ case 2: return "number";
329
+ case 3: return "boolean";
330
+ case 4: return "date";
331
+ case 5: return "ref";
332
+ case 6: return "object";
333
+ default: throw new Error(`Invalid type: ${type}`);
334
+ }
335
+ };
336
+ var JSON_SCHEMA_URL = "http://json-schema.org/draft-07/schema#";
337
+ /**
338
+ * Convert effect schema to JSON Schema.
339
+ * NOTE: This handles custom annotations.
340
+ * @param schema
341
+ */
342
+ var toJsonSchema = (schema, options = {}) => {
343
+ const slot = getStaticTypeSchema(schema);
344
+ if (slot != null) schema = slot;
345
+ else if (!Schema.isSchema(schema)) {
346
+ const entityJsonSchema = schema.jsonSchema;
347
+ if (entityJsonSchema != null) return entityJsonSchema;
348
+ }
349
+ assertArgument(Schema.isSchema(schema), "schema");
350
+ let jsonSchema = _toJsonSchemaAST(schema.ast);
351
+ if (options.strict) jsonSchema = removeProperties(jsonSchema, (key, value) => {
352
+ if (key === "$id" && value === "/schemas/any") return true;
353
+ if (key === "$ref" && value === "#/$defs/dependency") return true;
354
+ if (key === "$ref" && value === "#/$defs/jsonSchema") return true;
355
+ return false;
356
+ });
357
+ return jsonSchema;
358
+ };
359
+ var _toJsonSchemaAST = (ast, inProgress = /* @__PURE__ */ new Set()) => {
360
+ const withRefinements = withEchoRefinements(ast, "#", /* @__PURE__ */ new Map(), inProgress);
361
+ return normalizeJsonSchema(JSONSchema.fromAST(withRefinements, { definitions: {} }));
362
+ };
363
+ var withEchoRefinements = (ast, path, suspendCache = /* @__PURE__ */ new Map(), inProgress = /* @__PURE__ */ new Set()) => {
364
+ if (path) suspendCache.set(ast, path);
365
+ let recursiveResult;
366
+ if (SchemaAST.isSuspend(ast)) {
367
+ const suspendedAst = ast.f();
368
+ const cachedPath = suspendCache.get(suspendedAst);
369
+ if (cachedPath) recursiveResult = new SchemaAST.Suspend(() => withEchoRefinements(suspendedAst, path, suspendCache, inProgress), { [SchemaAST.JSONSchemaAnnotationId]: { $ref: cachedPath } });
370
+ else if (inProgress.has(suspendedAst)) recursiveResult = new SchemaAST.Suspend(() => withEchoRefinements(suspendedAst, path, suspendCache, inProgress), { [SchemaAST.JSONSchemaAnnotationId]: {
371
+ $id: "/schemas/any",
372
+ type: [
373
+ "string",
374
+ "number",
375
+ "boolean",
376
+ "object",
377
+ "array",
378
+ "null"
379
+ ]
380
+ } });
381
+ else {
382
+ inProgress.add(suspendedAst);
383
+ const jsonSchema = _toJsonSchemaAST(suspendedAst, inProgress);
384
+ inProgress.delete(suspendedAst);
385
+ recursiveResult = new SchemaAST.Suspend(() => withEchoRefinements(suspendedAst, path, suspendCache, inProgress), { [SchemaAST.JSONSchemaAnnotationId]: jsonSchema });
386
+ }
387
+ } else if (SchemaAST.isTypeLiteral(ast)) {
388
+ recursiveResult = SchemaEx.mapAst(ast, (ast, key) => withEchoRefinements(ast, path && typeof key === "string" ? `${path}/${key}` : void 0, suspendCache, inProgress));
389
+ recursiveResult = addJsonSchemaFields(recursiveResult, { propertyOrder: [...ast.propertySignatures.map((p) => p.name)] });
390
+ } else if (SchemaAST.isUndefinedKeyword(ast)) return ast;
391
+ else recursiveResult = SchemaEx.mapAst(ast, (ast, key) => withEchoRefinements(ast, path && (typeof key === "string" || typeof key === "number") ? `${path}/${key}` : void 0, suspendCache, inProgress));
392
+ const annotationFields = annotations_toJsonSchemaFields(ast.annotations);
393
+ if (Object.keys(annotationFields).length === 0) return recursiveResult;
394
+ else return addJsonSchemaFields(recursiveResult, annotationFields);
395
+ };
396
+ /**
397
+ * Convert JSON schema to effect schema.
398
+ * @param root
399
+ * @param definitions
400
+ */
401
+ var toEffectSchema = (root, _defs) => {
402
+ const defs = root.$defs ? {
403
+ ..._defs,
404
+ ...root.$defs
405
+ } : _defs ?? {};
406
+ if ("type" in root && root.type === "object") return objectToEffectSchema(root, defs);
407
+ let result = Schema.Unknown;
408
+ if ("$ref" in root) switch (root.$ref) {
409
+ case "/schemas/echo/ref":
410
+ result = refToEffectSchema(root);
411
+ break;
412
+ }
413
+ else if ("$id" in root) switch (decodeURIComponent(root.$id)) {
414
+ case "/schemas/any":
415
+ result = anyToEffectSchema(root);
416
+ break;
417
+ case "/schemas/unknown":
418
+ result = Schema.Unknown;
419
+ break;
420
+ case "/schemas/{}":
421
+ case "/schemas/object":
422
+ result = Schema.Struct({});
423
+ break;
424
+ case "/schemas/echo/ref":
425
+ result = refToEffectSchema(root);
426
+ break;
427
+ }
428
+ else if ("enum" in root) result = Schema.Union(...root.enum.map((e) => Schema.Literal(e)));
429
+ else if ("oneOf" in root) result = Schema.Union(...root.oneOf.map((v) => toEffectSchema(v, defs)));
430
+ else if ("anyOf" in root) result = Schema.Union(...root.anyOf.map((v) => toEffectSchema(v, defs)));
431
+ else if ("allOf" in root) if (root.allOf.length === 1) result = toEffectSchema(root.allOf[0], defs);
432
+ else {
433
+ log.warn("allOf with multiple schemas is not supported", void 0, {
434
+ "~LogMeta": "~LogMeta",
435
+ F: __dxlog_file,
436
+ L: 264,
437
+ S: void 0
438
+ });
439
+ result = Schema.Unknown;
440
+ }
441
+ else if ("type" in root) switch (root.type) {
442
+ case "string":
443
+ result = Schema.String;
444
+ if (root.pattern) result = result.pipe(Schema.pattern(new RegExp(root.pattern)));
445
+ break;
446
+ case "number":
447
+ result = Schema.Number;
448
+ break;
449
+ case "integer":
450
+ result = Schema.Number.pipe(Schema.int());
451
+ break;
452
+ case "boolean":
453
+ result = Schema.Boolean;
454
+ break;
455
+ case "array":
456
+ if (Array.isArray(root.items)) {
457
+ const [required, optional] = Function.pipe(root.items, Array.map((v) => toEffectSchema(v, defs)), Array.splitAt(root.minItems ?? root.items.length));
458
+ result = Schema.Tuple(...required, ...optional.map(Schema.optionalElement));
459
+ } else {
460
+ invariant(root.items, void 0, {
461
+ "~LogMeta": "~LogMeta",
462
+ F: __dxlog_file,
463
+ L: 297,
464
+ S: void 0,
465
+ A: ["root.items", ""]
466
+ });
467
+ const items = root.items;
468
+ result = Array.isArray(items) ? Schema.Tuple(...items.map((v) => toEffectSchema(v, defs))) : Schema.Array(toEffectSchema(items, defs));
469
+ }
470
+ break;
471
+ case "null":
472
+ result = Schema.Null;
473
+ break;
474
+ }
475
+ else if ("$ref" in root) {
476
+ const refSegments = root.$ref.split("/");
477
+ const jsonSchema = defs[refSegments[refSegments.length - 1]];
478
+ invariant(jsonSchema, `missing definition for ${root.$ref}`, {
479
+ "~LogMeta": "~LogMeta",
480
+ F: __dxlog_file,
481
+ L: 313,
482
+ S: void 0,
483
+ A: ["jsonSchema", "`missing definition for ${root.$ref}`"]
484
+ });
485
+ result = toEffectSchema(jsonSchema, defs).pipe(Schema.annotations({ identifier: refSegments[refSegments.length - 1] }));
486
+ }
487
+ const annotations = jsonSchemaFieldsToAnnotations(root);
488
+ result = result.annotations(annotations);
489
+ return result;
490
+ };
491
+ var objectToEffectSchema = (root, defs) => {
492
+ invariant("type" in root && root.type === "object", `not an object: ${root}`, {
493
+ "~LogMeta": "~LogMeta",
494
+ F: __dxlog_file,
495
+ L: 328,
496
+ S: void 0,
497
+ A: ["'type' in root && root.type === 'object'", "`not an object: ${root}`"]
498
+ });
499
+ const isEchoObject = root["echo"] != null || "$id" in root && typeof root.$id === "string" && root.$id.startsWith("dxn:");
500
+ let fields = {};
501
+ const propertyList = Object.entries(root.properties ?? {});
502
+ let immutableIdField;
503
+ for (const [key, value] of propertyList) if (isEchoObject && key === "id") immutableIdField = toEffectSchema(value, defs);
504
+ else fields[key] = root.required?.includes(key) ? toEffectSchema(value, defs) : Schema.optional(toEffectSchema(value, defs));
505
+ if (root.propertyOrder) fields = orderKeys(fields, root.propertyOrder);
506
+ let schema;
507
+ if (root.patternProperties) {
508
+ invariant(propertyList.length === 0, "pattern properties mixed with regular properties are not supported", {
509
+ "~LogMeta": "~LogMeta",
510
+ F: __dxlog_file,
511
+ L: 354,
512
+ S: void 0,
513
+ A: ["propertyList.length === 0", "'pattern properties mixed with regular properties are not supported'"]
514
+ });
515
+ invariant(Object.keys(root.patternProperties).length === 1 && Object.keys(root.patternProperties)[0] === "", "only one pattern property is supported", {
516
+ "~LogMeta": "~LogMeta",
517
+ F: __dxlog_file,
518
+ L: 355,
519
+ S: void 0,
520
+ A: ["Object.keys(root.patternProperties).length === 1 && Object.keys(root.patternProperties)[0] === ''", "'only one pattern property is supported'"]
521
+ });
522
+ schema = Schema.Record({
523
+ key: Schema.String,
524
+ value: toEffectSchema(root.patternProperties[""], defs)
525
+ });
526
+ } else if (typeof root.additionalProperties !== "object") schema = Schema.Struct(fields);
527
+ else {
528
+ const indexValue = toEffectSchema(root.additionalProperties, defs);
529
+ if (propertyList.length > 0) schema = Schema.Struct(fields, {
530
+ key: Schema.String,
531
+ value: indexValue
532
+ });
533
+ else schema = Schema.Record({
534
+ key: Schema.String,
535
+ value: indexValue
536
+ });
537
+ }
538
+ if (immutableIdField) schema = Schema.extend(schema, Schema.Struct({ id: immutableIdField }));
539
+ const annotations = jsonSchemaFieldsToAnnotations(root);
540
+ return schema.annotations(annotations);
541
+ };
542
+ var anyToEffectSchema = (root) => {
543
+ const echoRefinement = root[ECHO_ANNOTATIONS_NS_DEPRECATED_KEY];
544
+ if (echoRefinement?.reference != null) return createEchoReferenceSchema(root.$id.startsWith("echo:") ? root.$id : void 0, echoRefinement.reference.typename, echoRefinement.reference.version);
545
+ return Schema.Any;
546
+ };
547
+ var refToEffectSchema = (root) => {
548
+ if (!("reference" in root)) return createEchoReferenceSchema(void 0, ANY_OBJECT_TYPENAME, ANY_OBJECT_VERSION);
549
+ const reference = root.reference;
550
+ if (typeof reference !== "object") throw new Error("Invalid reference field in ref schema");
551
+ const ref = reference.schema.$ref;
552
+ const targetSchemaDXN = DXN.tryMake(ref);
553
+ invariant(targetSchemaDXN, `Expected a type DXN, got: ${ref}`, {
554
+ "~LogMeta": "~LogMeta",
555
+ F: __dxlog_file,
556
+ L: 409,
557
+ S: void 0,
558
+ A: ["targetSchemaDXN", "`Expected a type DXN, got: ${ref}`"]
559
+ });
560
+ return createEchoReferenceSchema(ref, DXN.getName(targetSchemaDXN), reference.schemaVersion);
561
+ };
562
+ var annotations_toJsonSchemaFields = (annotations) => {
563
+ const schemaFields = {};
564
+ const echoAnnotations = {};
565
+ for (const [key, annotationId] of Object.entries(EchoAnnotations)) if (annotations[annotationId] != null) echoAnnotations[key] = annotations[annotationId];
566
+ if (Object.keys(echoAnnotations).length > 0) schemaFields[ECHO_ANNOTATIONS_NS_KEY] = echoAnnotations;
567
+ const echoIdentifier = annotations[TypeIdentifierAnnotationId];
568
+ if (echoIdentifier) schemaFields.$id = echoIdentifier;
569
+ for (const [key, annotationId] of Object.entries(CustomAnnotations)) {
570
+ const value = annotations[annotationId];
571
+ if (value != null) schemaFields[key] = value;
572
+ }
573
+ return schemaFields;
574
+ };
575
+ var decodeTypeIdentifierAnnotation = (schema) => {
576
+ if (schema.$id && schema.$id.startsWith("echo:")) return schema.$id;
577
+ const legacySchemaId = schema.echo?.type?.schemaId;
578
+ if (legacySchemaId) return EntityId.isValid(legacySchemaId) ? EID.make({ entityId: legacySchemaId }) : legacySchemaId;
579
+ };
580
+ var decodeTypeAnnotation = (schema) => {
581
+ if (schema.typename) {
582
+ const annotation = {
583
+ kind: schema.entityKind ? Schema.decodeSync(EntityKindSchema)(schema.entityKind) : EntityKind.Object,
584
+ typename: schema.typename,
585
+ version: schema.version ?? "0.1.0"
586
+ };
587
+ if (annotation.kind === EntityKind.Relation) {
588
+ const source = schema.relationSource?.$ref ?? raise(/* @__PURE__ */ new Error("Relation source not set"));
589
+ const target = schema.relationTarget?.$ref ?? raise(/* @__PURE__ */ new Error("Relation target not set"));
590
+ annotation.sourceSchema = DXN.tryMake(source) ?? raise(/* @__PURE__ */ new Error(`Invalid relation source: ${source}`));
591
+ annotation.targetSchema = DXN.tryMake(target) ?? raise(/* @__PURE__ */ new Error(`Invalid relation target: ${target}`));
592
+ }
593
+ return annotation;
594
+ }
595
+ if (!schema.typename && schema?.echo?.type) return {
596
+ kind: EntityKind.Object,
597
+ typename: schema.echo.type.typename,
598
+ version: schema.echo.type.version
599
+ };
600
+ };
601
+ var jsonSchemaFieldsToAnnotations = (schema) => {
602
+ const annotations = {};
603
+ const echoAnnotations = getNormalizedEchoAnnotations(schema) ?? {};
604
+ if (echoAnnotations) {
605
+ for (const [key, annotationId] of Object.entries(EchoAnnotations)) if (echoAnnotations[key]) annotations[annotationId] = echoAnnotations[key];
606
+ }
607
+ annotations[TypeIdentifierAnnotationId] = decodeTypeIdentifierAnnotation(schema);
608
+ const typeAnnotation = decodeTypeAnnotation(schema);
609
+ if (typeAnnotation) {
610
+ annotations[TypeAnnotationId] = typeAnnotation;
611
+ annotations[SchemaAST.JSONSchemaAnnotationId] = makeTypeJsonSchemaAnnotation({
612
+ identifier: DXN.make(typeAnnotation.typename, typeAnnotation.version),
613
+ kind: typeAnnotation.kind,
614
+ typename: typeAnnotation.typename,
615
+ version: typeAnnotation.version,
616
+ relationSource: typeAnnotation.sourceSchema,
617
+ relationTarget: typeAnnotation.targetSchema
618
+ });
619
+ }
620
+ for (const [key, annotationId] of Object.entries({
621
+ ...CustomAnnotations,
622
+ ...DecodedAnnotations
623
+ })) if (key in schema) annotations[annotationId] = schema[key];
624
+ return clearUndefined(annotations);
625
+ };
626
+ var makeAnnotatedRefinement = (ast, annotations) => {
627
+ return new SchemaAST.Refinement(ast, () => Option.none(), annotations);
628
+ };
629
+ var addJsonSchemaFields = (ast, schema) => makeAnnotatedRefinement(ast, { [SchemaAST.JSONSchemaAnnotationId]: schema });
630
+ /**
631
+ * Fixes field order.
632
+ * Sets `$schema` prop.
633
+ */
634
+ var normalizeJsonSchema = (jsonSchema) => {
635
+ if (jsonSchema.properties && "id" in jsonSchema.properties) jsonSchema.properties = orderKeys(jsonSchema.properties, ["id"]);
636
+ jsonSchema.$schema = JSON_SCHEMA_URL;
637
+ jsonSchema = orderKeys(jsonSchema, [
638
+ "$schema",
639
+ "$id",
640
+ "entityKind",
641
+ "typename",
642
+ "version",
643
+ "relationTarget",
644
+ "relationSource",
645
+ "type",
646
+ "enum",
647
+ "properties",
648
+ "required",
649
+ "propertyOrder",
650
+ "items",
651
+ "additionalProperties",
652
+ "anyOf",
653
+ "oneOf"
654
+ ]);
655
+ return jsonSchema;
656
+ };
657
+ //#endregion
658
+ export { ECHO_ANNOTATIONS_NS_DEPRECATED_KEY as a, JsonSchemaFields as c, getSchemaProperty as d, setSchemaProperty as f, EchoAnnotations as h, toPropType as i, JsonSchemaType as l, DecodedAnnotations as m, toEffectSchema as n, ECHO_ANNOTATIONS_NS_KEY as o, CustomAnnotations as p, toJsonSchema as r, JsonSchemaEchoAnnotations as s, PropType as t, getNormalizedEchoAnnotations as u };
659
+
660
+ //# sourceMappingURL=chunk-json-schema.mjs.map