@voidhash/mimic 0.0.1 → 0.0.3

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 (278) hide show
  1. package/.turbo/turbo-build.log +257 -42
  2. package/dist/Document.cjs +152 -0
  3. package/dist/Document.d.cts +67 -0
  4. package/dist/Document.d.cts.map +1 -0
  5. package/dist/Document.d.mts +68 -0
  6. package/dist/Document.d.mts.map +1 -0
  7. package/dist/Document.mjs +147 -0
  8. package/dist/Document.mjs.map +1 -0
  9. package/dist/EffectSchema.cjs +180 -0
  10. package/dist/EffectSchema.d.cts +84 -0
  11. package/dist/EffectSchema.d.cts.map +1 -0
  12. package/dist/EffectSchema.d.mts +84 -0
  13. package/dist/EffectSchema.d.mts.map +1 -0
  14. package/dist/EffectSchema.mjs +176 -0
  15. package/dist/EffectSchema.mjs.map +1 -0
  16. package/dist/FractionalIndex.cjs +365 -0
  17. package/dist/FractionalIndex.mjs +364 -0
  18. package/dist/FractionalIndex.mjs.map +1 -0
  19. package/dist/Operation.cjs +53 -0
  20. package/dist/Operation.d.cts +39 -0
  21. package/dist/Operation.d.cts.map +1 -0
  22. package/dist/Operation.d.mts +39 -0
  23. package/dist/Operation.d.mts.map +1 -0
  24. package/dist/Operation.mjs +46 -0
  25. package/dist/Operation.mjs.map +1 -0
  26. package/dist/OperationDefinition.cjs +13 -0
  27. package/dist/OperationDefinition.d.cts +12 -0
  28. package/dist/OperationDefinition.d.cts.map +1 -0
  29. package/dist/OperationDefinition.d.mts +12 -0
  30. package/dist/OperationDefinition.d.mts.map +1 -0
  31. package/dist/OperationDefinition.mjs +13 -0
  32. package/dist/OperationDefinition.mjs.map +1 -0
  33. package/dist/OperationPath.cjs +148 -0
  34. package/dist/OperationPath.d.cts +60 -0
  35. package/dist/OperationPath.d.cts.map +1 -0
  36. package/dist/OperationPath.d.mts +60 -0
  37. package/dist/OperationPath.d.mts.map +1 -0
  38. package/dist/OperationPath.mjs +138 -0
  39. package/dist/OperationPath.mjs.map +1 -0
  40. package/dist/{Presence-gWrmGBeu.cjs → Presence.cjs} +4 -39
  41. package/dist/{Presence-N8u7Eppr.d.mts → Presence.d.cts} +2 -2
  42. package/dist/Presence.d.cts.map +1 -0
  43. package/dist/{Presence-DKKP4v5X.d.cts → Presence.d.mts} +2 -2
  44. package/dist/Presence.d.mts.map +1 -0
  45. package/dist/{Presence-DdMVKcOv.mjs → Presence.mjs} +3 -28
  46. package/dist/Presence.mjs.map +1 -0
  47. package/dist/Primitive.cjs +52 -0
  48. package/dist/Primitive.d.cts +20 -0
  49. package/dist/Primitive.d.cts.map +1 -0
  50. package/dist/Primitive.d.mts +20 -0
  51. package/dist/Primitive.d.mts.map +1 -0
  52. package/dist/Primitive.mjs +48 -0
  53. package/dist/Primitive.mjs.map +1 -0
  54. package/dist/ProxyEnvironment.cjs +34 -0
  55. package/dist/ProxyEnvironment.d.cts +31 -0
  56. package/dist/ProxyEnvironment.d.cts.map +1 -0
  57. package/dist/ProxyEnvironment.d.mts +31 -0
  58. package/dist/ProxyEnvironment.d.mts.map +1 -0
  59. package/dist/ProxyEnvironment.mjs +29 -0
  60. package/dist/ProxyEnvironment.mjs.map +1 -0
  61. package/dist/Transaction.cjs +66 -0
  62. package/dist/Transaction.d.cts +56 -0
  63. package/dist/Transaction.d.cts.map +1 -0
  64. package/dist/Transaction.d.mts +56 -0
  65. package/dist/Transaction.d.mts.map +1 -0
  66. package/dist/Transaction.mjs +58 -0
  67. package/dist/Transaction.mjs.map +1 -0
  68. package/dist/Transform.cjs +11 -0
  69. package/dist/Transform.d.cts +21 -0
  70. package/dist/Transform.d.cts.map +1 -0
  71. package/dist/Transform.d.mts +21 -0
  72. package/dist/Transform.d.mts.map +1 -0
  73. package/dist/Transform.mjs +6 -0
  74. package/dist/Transform.mjs.map +1 -0
  75. package/dist/_virtual/_@oxc-project_runtime@0.103.0/helpers/defineProperty.cjs +14 -0
  76. package/dist/_virtual/_@oxc-project_runtime@0.103.0/helpers/defineProperty.mjs +14 -0
  77. package/dist/_virtual/_@oxc-project_runtime@0.103.0/helpers/objectSpread2.cjs +27 -0
  78. package/dist/_virtual/_@oxc-project_runtime@0.103.0/helpers/objectSpread2.mjs +27 -0
  79. package/dist/_virtual/_@oxc-project_runtime@0.103.0/helpers/toPrimitive.cjs +16 -0
  80. package/dist/_virtual/_@oxc-project_runtime@0.103.0/helpers/toPrimitive.mjs +16 -0
  81. package/dist/_virtual/_@oxc-project_runtime@0.103.0/helpers/toPropertyKey.cjs +11 -0
  82. package/dist/_virtual/_@oxc-project_runtime@0.103.0/helpers/toPropertyKey.mjs +11 -0
  83. package/dist/_virtual/_@oxc-project_runtime@0.103.0/helpers/typeof.cjs +18 -0
  84. package/dist/_virtual/_@oxc-project_runtime@0.103.0/helpers/typeof.mjs +12 -0
  85. package/dist/_virtual/rolldown_runtime.cjs +43 -0
  86. package/dist/{chunk-CLMFDpHK.mjs → _virtual/rolldown_runtime.mjs} +1 -1
  87. package/dist/client/ClientDocument.cjs +590 -0
  88. package/dist/client/ClientDocument.d.cts +161 -0
  89. package/dist/client/ClientDocument.d.cts.map +1 -0
  90. package/dist/client/ClientDocument.d.mts +162 -0
  91. package/dist/client/ClientDocument.d.mts.map +1 -0
  92. package/dist/client/ClientDocument.mjs +586 -0
  93. package/dist/client/ClientDocument.mjs.map +1 -0
  94. package/dist/client/Rebase.cjs +204 -0
  95. package/dist/client/Rebase.d.cts +87 -0
  96. package/dist/client/Rebase.d.cts.map +1 -0
  97. package/dist/client/Rebase.d.mts +88 -0
  98. package/dist/client/Rebase.d.mts.map +1 -0
  99. package/dist/client/Rebase.mjs +198 -0
  100. package/dist/client/Rebase.mjs.map +1 -0
  101. package/dist/client/StateMonitor.cjs +133 -0
  102. package/dist/client/StateMonitor.d.cts +122 -0
  103. package/dist/client/StateMonitor.d.cts.map +1 -0
  104. package/dist/client/StateMonitor.d.mts +122 -0
  105. package/dist/client/StateMonitor.d.mts.map +1 -0
  106. package/dist/client/StateMonitor.mjs +129 -0
  107. package/dist/client/StateMonitor.mjs.map +1 -0
  108. package/dist/client/Transport.cjs +11 -0
  109. package/dist/client/Transport.d.cts +237 -0
  110. package/dist/client/Transport.d.cts.map +1 -0
  111. package/dist/client/Transport.d.mts +237 -0
  112. package/dist/client/Transport.d.mts.map +1 -0
  113. package/dist/client/Transport.mjs +6 -0
  114. package/dist/client/Transport.mjs.map +1 -0
  115. package/dist/client/WebSocketTransport.cjs +396 -0
  116. package/dist/client/WebSocketTransport.d.cts +29 -0
  117. package/dist/client/WebSocketTransport.d.cts.map +1 -0
  118. package/dist/client/WebSocketTransport.d.mts +29 -0
  119. package/dist/client/WebSocketTransport.d.mts.map +1 -0
  120. package/dist/client/WebSocketTransport.mjs +392 -0
  121. package/dist/client/WebSocketTransport.mjs.map +1 -0
  122. package/dist/client/errors.cjs +135 -0
  123. package/dist/client/errors.d.cts +87 -0
  124. package/dist/client/errors.d.cts.map +1 -0
  125. package/dist/client/errors.d.mts +87 -0
  126. package/dist/client/errors.d.mts.map +1 -0
  127. package/dist/client/errors.mjs +127 -0
  128. package/dist/client/errors.mjs.map +1 -0
  129. package/dist/client/index.cjs +22 -1424
  130. package/dist/client/index.d.cts +8 -692
  131. package/dist/client/index.d.mts +8 -692
  132. package/dist/client/index.mjs +9 -1413
  133. package/dist/index.cjs +30 -2529
  134. package/dist/index.d.cts +12 -143
  135. package/dist/index.d.mts +12 -143
  136. package/dist/index.mjs +13 -2526
  137. package/dist/primitives/Array.cjs +302 -0
  138. package/dist/primitives/Array.d.cts +95 -0
  139. package/dist/primitives/Array.d.cts.map +1 -0
  140. package/dist/primitives/Array.d.mts +95 -0
  141. package/dist/primitives/Array.d.mts.map +1 -0
  142. package/dist/primitives/Array.mjs +301 -0
  143. package/dist/primitives/Array.mjs.map +1 -0
  144. package/dist/primitives/Boolean.cjs +95 -0
  145. package/dist/primitives/Boolean.d.cts +44 -0
  146. package/dist/primitives/Boolean.d.cts.map +1 -0
  147. package/dist/primitives/Boolean.d.mts +44 -0
  148. package/dist/primitives/Boolean.d.mts.map +1 -0
  149. package/dist/primitives/Boolean.mjs +94 -0
  150. package/dist/primitives/Boolean.mjs.map +1 -0
  151. package/dist/primitives/Either.cjs +200 -0
  152. package/dist/primitives/Either.d.cts +113 -0
  153. package/dist/primitives/Either.d.cts.map +1 -0
  154. package/dist/primitives/Either.d.mts +113 -0
  155. package/dist/primitives/Either.d.mts.map +1 -0
  156. package/dist/primitives/Either.mjs +199 -0
  157. package/dist/primitives/Either.mjs.map +1 -0
  158. package/dist/primitives/Lazy.cjs +46 -0
  159. package/dist/primitives/Lazy.d.cts +46 -0
  160. package/dist/primitives/Lazy.d.cts.map +1 -0
  161. package/dist/primitives/Lazy.d.mts +46 -0
  162. package/dist/primitives/Lazy.d.mts.map +1 -0
  163. package/dist/primitives/Lazy.mjs +46 -0
  164. package/dist/primitives/Lazy.mjs.map +1 -0
  165. package/dist/primitives/Literal.cjs +91 -0
  166. package/dist/primitives/Literal.d.cts +46 -0
  167. package/dist/primitives/Literal.d.cts.map +1 -0
  168. package/dist/primitives/Literal.d.mts +46 -0
  169. package/dist/primitives/Literal.d.mts.map +1 -0
  170. package/dist/primitives/Literal.mjs +90 -0
  171. package/dist/primitives/Literal.mjs.map +1 -0
  172. package/dist/primitives/Number.cjs +115 -0
  173. package/dist/primitives/Number.d.cts +54 -0
  174. package/dist/primitives/Number.d.cts.map +1 -0
  175. package/dist/primitives/Number.d.mts +54 -0
  176. package/dist/primitives/Number.d.mts.map +1 -0
  177. package/dist/primitives/Number.mjs +114 -0
  178. package/dist/primitives/Number.mjs.map +1 -0
  179. package/dist/primitives/String.cjs +127 -0
  180. package/dist/primitives/String.d.cts +56 -0
  181. package/dist/primitives/String.d.cts.map +1 -0
  182. package/dist/primitives/String.d.mts +56 -0
  183. package/dist/primitives/String.d.mts.map +1 -0
  184. package/dist/primitives/String.mjs +126 -0
  185. package/dist/primitives/String.mjs.map +1 -0
  186. package/dist/primitives/Struct.cjs +207 -0
  187. package/dist/primitives/Struct.d.cts +96 -0
  188. package/dist/primitives/Struct.d.cts.map +1 -0
  189. package/dist/primitives/Struct.d.mts +97 -0
  190. package/dist/primitives/Struct.d.mts.map +1 -0
  191. package/dist/primitives/Struct.mjs +206 -0
  192. package/dist/primitives/Struct.mjs.map +1 -0
  193. package/dist/primitives/Tree.cjs +575 -0
  194. package/dist/primitives/Tree.d.cts +185 -0
  195. package/dist/primitives/Tree.d.cts.map +1 -0
  196. package/dist/primitives/Tree.d.mts +185 -0
  197. package/dist/primitives/Tree.d.mts.map +1 -0
  198. package/dist/primitives/Tree.mjs +574 -0
  199. package/dist/primitives/Tree.mjs.map +1 -0
  200. package/dist/primitives/TreeNode.cjs +73 -0
  201. package/dist/primitives/TreeNode.d.cts +92 -0
  202. package/dist/primitives/TreeNode.d.cts.map +1 -0
  203. package/dist/primitives/TreeNode.d.mts +93 -0
  204. package/dist/primitives/TreeNode.d.mts.map +1 -0
  205. package/dist/primitives/TreeNode.mjs +72 -0
  206. package/dist/primitives/TreeNode.mjs.map +1 -0
  207. package/dist/primitives/Union.cjs +170 -0
  208. package/dist/primitives/Union.d.cts +81 -0
  209. package/dist/primitives/Union.d.cts.map +1 -0
  210. package/dist/primitives/Union.d.mts +81 -0
  211. package/dist/primitives/Union.d.mts.map +1 -0
  212. package/dist/primitives/Union.mjs +169 -0
  213. package/dist/primitives/Union.mjs.map +1 -0
  214. package/dist/primitives/shared.cjs +60 -0
  215. package/dist/primitives/shared.d.cts +147 -0
  216. package/dist/primitives/shared.d.cts.map +1 -0
  217. package/dist/primitives/shared.d.mts +147 -0
  218. package/dist/primitives/shared.d.mts.map +1 -0
  219. package/dist/primitives/shared.mjs +58 -0
  220. package/dist/primitives/shared.mjs.map +1 -0
  221. package/dist/server/ServerDocument.cjs +110 -0
  222. package/dist/server/ServerDocument.d.cts +98 -0
  223. package/dist/server/ServerDocument.d.cts.map +1 -0
  224. package/dist/server/ServerDocument.d.mts +99 -0
  225. package/dist/server/ServerDocument.d.mts.map +1 -0
  226. package/dist/server/ServerDocument.mjs +106 -0
  227. package/dist/server/ServerDocument.mjs.map +1 -0
  228. package/dist/server/errors.cjs +85 -0
  229. package/dist/server/errors.d.cts +53 -0
  230. package/dist/server/errors.d.cts.map +1 -0
  231. package/dist/server/errors.d.mts +53 -0
  232. package/dist/server/errors.d.mts.map +1 -0
  233. package/dist/server/errors.mjs +81 -0
  234. package/dist/server/errors.mjs.map +1 -0
  235. package/dist/server/index.cjs +9 -185
  236. package/dist/server/index.d.cts +3 -148
  237. package/dist/server/index.d.mts +3 -148
  238. package/dist/server/index.mjs +3 -181
  239. package/dist/types/index.cjs +16 -0
  240. package/dist/types/index.d.cts +16 -0
  241. package/dist/types/index.d.cts.map +1 -0
  242. package/dist/types/index.d.mts +16 -0
  243. package/dist/types/index.d.mts.map +1 -0
  244. package/dist/types/index.mjs +12 -0
  245. package/dist/types/index.mjs.map +1 -0
  246. package/dist/utils/tree-helpers.cjs +443 -0
  247. package/dist/utils/tree-helpers.d.cts +280 -0
  248. package/dist/utils/tree-helpers.d.cts.map +1 -0
  249. package/dist/utils/tree-helpers.d.mts +280 -0
  250. package/dist/utils/tree-helpers.d.mts.map +1 -0
  251. package/dist/utils/tree-helpers.mjs +439 -0
  252. package/dist/utils/tree-helpers.mjs.map +1 -0
  253. package/package.json +2 -2
  254. package/src/index.ts +2 -0
  255. package/src/primitives/shared.ts +7 -1
  256. package/src/types/index.ts +137 -0
  257. package/src/utils/index.ts +7 -0
  258. package/src/utils/tree-helpers.ts +648 -0
  259. package/tsdown.config.ts +1 -1
  260. package/dist/Document-ChuFrTk1.cjs +0 -571
  261. package/dist/Document-CwiAFTIq.mjs +0 -438
  262. package/dist/Document-CwiAFTIq.mjs.map +0 -1
  263. package/dist/Presence-DKKP4v5X.d.cts.map +0 -1
  264. package/dist/Presence-DdMVKcOv.mjs.map +0 -1
  265. package/dist/Presence-N8u7Eppr.d.mts.map +0 -1
  266. package/dist/Primitive-CvFVxR8_.d.cts +0 -1175
  267. package/dist/Primitive-CvFVxR8_.d.cts.map +0 -1
  268. package/dist/Primitive-lEhQyGVL.d.mts +0 -1175
  269. package/dist/Primitive-lEhQyGVL.d.mts.map +0 -1
  270. package/dist/client/index.d.cts.map +0 -1
  271. package/dist/client/index.d.mts.map +0 -1
  272. package/dist/client/index.mjs.map +0 -1
  273. package/dist/index.d.cts.map +0 -1
  274. package/dist/index.d.mts.map +0 -1
  275. package/dist/index.mjs.map +0 -1
  276. package/dist/server/index.d.cts.map +0 -1
  277. package/dist/server/index.d.mts.map +0 -1
  278. package/dist/server/index.mjs.map +0 -1
@@ -0,0 +1,170 @@
1
+ const require_rolldown_runtime = require('../_virtual/rolldown_runtime.cjs');
2
+ const require_defineProperty = require('../_virtual/_@oxc-project_runtime@0.103.0/helpers/defineProperty.cjs');
3
+ const require_objectSpread2 = require('../_virtual/_@oxc-project_runtime@0.103.0/helpers/objectSpread2.cjs');
4
+ const require_shared = require('./shared.cjs');
5
+ const require_OperationDefinition = require('../OperationDefinition.cjs');
6
+ const require_OperationPath = require('../OperationPath.cjs');
7
+ const require_Operation = require('../Operation.cjs');
8
+ require('../Primitive.cjs');
9
+ let effect = require("effect");
10
+
11
+ //#region src/primitives/Union.ts
12
+ var UnionPrimitive = class UnionPrimitive {
13
+ constructor(schema) {
14
+ require_defineProperty._defineProperty(this, "_tag", "UnionPrimitive");
15
+ require_defineProperty._defineProperty(this, "_State", void 0);
16
+ require_defineProperty._defineProperty(this, "_Proxy", void 0);
17
+ require_defineProperty._defineProperty(this, "_TRequired", void 0);
18
+ require_defineProperty._defineProperty(this, "_THasDefault", void 0);
19
+ require_defineProperty._defineProperty(this, "TSetInput", void 0);
20
+ require_defineProperty._defineProperty(this, "TUpdateInput", void 0);
21
+ require_defineProperty._defineProperty(this, "_schema", void 0);
22
+ require_defineProperty._defineProperty(this, "_opDefinitions", { set: require_OperationDefinition.make({
23
+ kind: "union.set",
24
+ payload: effect.Schema.Unknown,
25
+ target: effect.Schema.Unknown,
26
+ apply: (payload) => payload
27
+ }) });
28
+ require_defineProperty._defineProperty(this, "_internal", {
29
+ createProxy: (env, operationPath) => {
30
+ const variants = this._schema.variants;
31
+ const defaultValue = this._schema.defaultValue;
32
+ return {
33
+ get: () => {
34
+ const state = env.getState(operationPath);
35
+ return state !== null && state !== void 0 ? state : defaultValue;
36
+ },
37
+ set: (value) => {
38
+ const merged = this._applyVariantDefaults(value);
39
+ env.addOperation(require_Operation.fromDefinition(operationPath, this._opDefinitions.set, merged));
40
+ },
41
+ as: (variant) => {
42
+ const variantPrimitive = variants[variant];
43
+ if (!variantPrimitive) throw new require_shared.ValidationError(`Unknown variant: ${globalThis.String(variant)}`);
44
+ return variantPrimitive._internal.createProxy(env, operationPath);
45
+ },
46
+ match: (handlers) => {
47
+ const state = env.getState(operationPath);
48
+ if (!state) return void 0;
49
+ const variantKey = this._findVariantKey(state);
50
+ if (!variantKey) return void 0;
51
+ const handler = handlers[variantKey];
52
+ if (!handler) return void 0;
53
+ return handler(variants[variantKey]._internal.createProxy(env, operationPath));
54
+ },
55
+ toSnapshot: () => {
56
+ const state = env.getState(operationPath);
57
+ const effectiveState = state !== null && state !== void 0 ? state : defaultValue;
58
+ if (!effectiveState) return;
59
+ const variantKey = this._findVariantKey(effectiveState);
60
+ if (!variantKey) return;
61
+ return variants[variantKey]._internal.createProxy(env, operationPath).toSnapshot();
62
+ }
63
+ };
64
+ },
65
+ applyOperation: (state, operation) => {
66
+ if (operation.path.toTokens().filter((t) => t !== "").length === 0) {
67
+ if (operation.kind !== "union.set") throw new require_shared.ValidationError(`UnionPrimitive root cannot apply operation of kind: ${operation.kind}`);
68
+ const payload = operation.payload;
69
+ if (typeof payload !== "object" || payload === null) throw new require_shared.ValidationError(`UnionPrimitive.set requires an object payload`);
70
+ if (payload[this._schema.discriminator] === void 0) throw new require_shared.ValidationError(`UnionPrimitive.set requires a "${this._schema.discriminator}" discriminator field`);
71
+ return payload;
72
+ }
73
+ if (state === void 0) throw new require_shared.ValidationError(`Cannot apply nested operation to undefined union state`);
74
+ const variantKey = this._findVariantKey(state);
75
+ if (variantKey === void 0) throw new require_shared.ValidationError(`Cannot determine active variant from state`);
76
+ return this._schema.variants[variantKey]._internal.applyOperation(state, operation);
77
+ },
78
+ getInitialState: () => {
79
+ return this._schema.defaultValue;
80
+ },
81
+ transformOperation: (clientOp, serverOp) => {
82
+ const clientPath = clientOp.path;
83
+ const serverPath = serverOp.path;
84
+ if (!require_OperationPath.pathsOverlap(clientPath, serverPath)) return {
85
+ type: "transformed",
86
+ operation: clientOp
87
+ };
88
+ const clientTokens = clientPath.toTokens().filter((t) => t !== "");
89
+ const serverTokens = serverPath.toTokens().filter((t) => t !== "");
90
+ if (clientTokens.length === 0 && serverTokens.length === 0) return {
91
+ type: "transformed",
92
+ operation: clientOp
93
+ };
94
+ if (serverTokens.length === 0 && serverOp.kind === "union.set") return {
95
+ type: "transformed",
96
+ operation: clientOp
97
+ };
98
+ if (clientTokens.length === 0 && clientOp.kind === "union.set") return {
99
+ type: "transformed",
100
+ operation: clientOp
101
+ };
102
+ if (clientTokens.length > 0 && serverTokens.length > 0) {
103
+ if (clientTokens[0] !== serverTokens[0]) return {
104
+ type: "transformed",
105
+ operation: clientOp
106
+ };
107
+ const variantKeys = Object.keys(this._schema.variants);
108
+ if (variantKeys.length === 0) return {
109
+ type: "transformed",
110
+ operation: clientOp
111
+ };
112
+ return this._schema.variants[variantKeys[0]]._internal.transformOperation(clientOp, serverOp);
113
+ }
114
+ return {
115
+ type: "transformed",
116
+ operation: clientOp
117
+ };
118
+ }
119
+ });
120
+ this._schema = schema;
121
+ }
122
+ /** Mark this union as required */
123
+ required() {
124
+ return new UnionPrimitive(require_objectSpread2._objectSpread2(require_objectSpread2._objectSpread2({}, this._schema), {}, { required: true }));
125
+ }
126
+ /** Set a default value for this union */
127
+ default(defaultValue) {
128
+ const merged = this._applyVariantDefaults(defaultValue);
129
+ return new UnionPrimitive(require_objectSpread2._objectSpread2(require_objectSpread2._objectSpread2({}, this._schema), {}, { defaultValue: merged }));
130
+ }
131
+ /** Get the discriminator field name */
132
+ get discriminator() {
133
+ return this._schema.discriminator;
134
+ }
135
+ /** Get the variants */
136
+ get variants() {
137
+ return this._schema.variants;
138
+ }
139
+ /** Find the variant key from a state value */
140
+ _findVariantKey(state) {
141
+ if (typeof state !== "object" || state === null) return;
142
+ const discriminatorValue = state[this._schema.discriminator];
143
+ for (const key in this._schema.variants) {
144
+ const discriminatorField = this._schema.variants[key].fields[this._schema.discriminator];
145
+ if (discriminatorField && discriminatorField._tag === "LiteralPrimitive") {
146
+ if (discriminatorField.literal === discriminatorValue) return key;
147
+ }
148
+ }
149
+ }
150
+ /** Apply defaults to a variant value based on the discriminator */
151
+ _applyVariantDefaults(value) {
152
+ const variantKey = this._findVariantKey(value);
153
+ if (!variantKey) return value;
154
+ const variantPrimitive = this._schema.variants[variantKey];
155
+ return require_shared.applyDefaults(variantPrimitive, value);
156
+ }
157
+ };
158
+ function Union(options) {
159
+ var _options$discriminato;
160
+ return new UnionPrimitive({
161
+ required: false,
162
+ defaultValue: void 0,
163
+ discriminator: (_options$discriminato = options.discriminator) !== null && _options$discriminato !== void 0 ? _options$discriminato : "type",
164
+ variants: options.variants
165
+ });
166
+ }
167
+
168
+ //#endregion
169
+ exports.Union = Union;
170
+ exports.UnionPrimitive = UnionPrimitive;
@@ -0,0 +1,81 @@
1
+ import { InferProxy, InferSetInput, InferSnapshot, InferState, MaybeUndefined, Primitive, PrimitiveInternal } from "./shared.cjs";
2
+ import { StructPrimitive } from "./Struct.cjs";
3
+
4
+ //#region src/primitives/Union.d.ts
5
+
6
+ /**
7
+ * Type constraint for union variants - must be struct primitives
8
+ */
9
+ type UnionVariants = Record<string, StructPrimitive<any, any, any>>;
10
+ /**
11
+ * Infer the union state type from variants
12
+ */
13
+ type InferUnionState<TVariants extends UnionVariants> = { [K in keyof TVariants]: InferState<TVariants[K]> }[keyof TVariants];
14
+ /**
15
+ * Infer the union snapshot type from variants
16
+ */
17
+ type InferUnionSnapshot<TVariants extends UnionVariants> = { [K in keyof TVariants]: InferSnapshot<TVariants[K]> }[keyof TVariants];
18
+ /**
19
+ * Compute the input type for union.set() operations.
20
+ * Uses each variant's TSetInput type.
21
+ */
22
+ type UnionSetInput<TVariants extends UnionVariants> = { [K in keyof TVariants]: InferSetInput<TVariants[K]> }[keyof TVariants];
23
+ /**
24
+ * Proxy for accessing union variants
25
+ */
26
+ interface UnionProxy<TVariants extends UnionVariants, _TDiscriminator extends string, TRequired extends boolean = false, THasDefault extends boolean = false> {
27
+ /** Gets the current union value */
28
+ get(): MaybeUndefined<InferUnionState<TVariants>, TRequired, THasDefault>;
29
+ /** Sets the entire union value (applies defaults for variant fields) */
30
+ set(value: UnionSetInput<TVariants>): void;
31
+ /** Access a specific variant's proxy (assumes the variant is active) */
32
+ as<K$1 extends keyof TVariants>(variant: K$1): InferProxy<TVariants[K$1]>;
33
+ /** Pattern match on the variant type */
34
+ match<R>(handlers: { [K in keyof TVariants]: (proxy: InferProxy<TVariants[K$1]>) => R }): R | undefined;
35
+ /** Returns a readonly snapshot of the union for rendering */
36
+ toSnapshot(): MaybeUndefined<InferUnionSnapshot<TVariants>, TRequired, THasDefault>;
37
+ }
38
+ interface UnionPrimitiveSchema<TVariants extends UnionVariants, TDiscriminator extends string> {
39
+ readonly required: boolean;
40
+ readonly defaultValue: InferUnionState<TVariants> | undefined;
41
+ readonly discriminator: TDiscriminator;
42
+ readonly variants: TVariants;
43
+ }
44
+ declare class UnionPrimitive<TVariants extends UnionVariants, TDiscriminator extends string = "type", TRequired extends boolean = false, THasDefault extends boolean = false> implements Primitive<InferUnionState<TVariants>, UnionProxy<TVariants, TDiscriminator, TRequired, THasDefault>, TRequired, THasDefault, UnionSetInput<TVariants>, UnionSetInput<TVariants>> {
45
+ readonly _tag: "UnionPrimitive";
46
+ readonly _State: InferUnionState<TVariants>;
47
+ readonly _Proxy: UnionProxy<TVariants, TDiscriminator, TRequired, THasDefault>;
48
+ readonly _TRequired: TRequired;
49
+ readonly _THasDefault: THasDefault;
50
+ readonly TSetInput: UnionSetInput<TVariants>;
51
+ readonly TUpdateInput: UnionSetInput<TVariants>;
52
+ private readonly _schema;
53
+ private readonly _opDefinitions;
54
+ constructor(schema: UnionPrimitiveSchema<TVariants, TDiscriminator>);
55
+ /** Mark this union as required */
56
+ required(): UnionPrimitive<TVariants, TDiscriminator, true, THasDefault>;
57
+ /** Set a default value for this union */
58
+ default(defaultValue: UnionSetInput<TVariants>): UnionPrimitive<TVariants, TDiscriminator, true, true>;
59
+ /** Get the discriminator field name */
60
+ get discriminator(): TDiscriminator;
61
+ /** Get the variants */
62
+ get variants(): TVariants;
63
+ /** Find the variant key from a state value */
64
+ private _findVariantKey;
65
+ /** Apply defaults to a variant value based on the discriminator */
66
+ private _applyVariantDefaults;
67
+ readonly _internal: PrimitiveInternal<InferUnionState<TVariants>, UnionProxy<TVariants, TDiscriminator, TRequired, THasDefault>>;
68
+ }
69
+ /** Options for creating a Union primitive */
70
+ interface UnionOptions<TVariants extends UnionVariants, TDiscriminator extends string> {
71
+ /** The field name used to discriminate between variants (defaults to "type") */
72
+ readonly discriminator?: TDiscriminator;
73
+ /** The variant struct primitives */
74
+ readonly variants: TVariants;
75
+ }
76
+ /** Creates a new UnionPrimitive with the given variants */
77
+ declare function Union<TVariants extends UnionVariants>(options: UnionOptions<TVariants, "type">): UnionPrimitive<TVariants, "type", false, false>;
78
+ declare function Union<TVariants extends UnionVariants, TDiscriminator extends string>(options: UnionOptions<TVariants, TDiscriminator>): UnionPrimitive<TVariants, TDiscriminator, false, false>;
79
+ //#endregion
80
+ export { InferUnionSnapshot, InferUnionState, Union, UnionOptions, UnionPrimitive, UnionProxy, UnionSetInput, UnionVariants };
81
+ //# sourceMappingURL=Union.d.cts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Union.d.cts","names":[],"sources":["../../src/primitives/Union.ts"],"sourcesContent":[],"mappings":"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"}
@@ -0,0 +1,81 @@
1
+ import { InferProxy, InferSetInput, InferSnapshot, InferState, MaybeUndefined, Primitive, PrimitiveInternal } from "./shared.mjs";
2
+ import { StructPrimitive } from "./Struct.mjs";
3
+ import "../Primitive.mjs";
4
+
5
+ //#region src/primitives/Union.d.ts
6
+ /**
7
+ * Type constraint for union variants - must be struct primitives
8
+ */
9
+ type UnionVariants = Record<string, StructPrimitive<any, any, any>>;
10
+ /**
11
+ * Infer the union state type from variants
12
+ */
13
+ type InferUnionState<TVariants extends UnionVariants> = { [K in keyof TVariants]: InferState<TVariants[K]> }[keyof TVariants];
14
+ /**
15
+ * Infer the union snapshot type from variants
16
+ */
17
+ type InferUnionSnapshot<TVariants extends UnionVariants> = { [K in keyof TVariants]: InferSnapshot<TVariants[K]> }[keyof TVariants];
18
+ /**
19
+ * Compute the input type for union.set() operations.
20
+ * Uses each variant's TSetInput type.
21
+ */
22
+ type UnionSetInput<TVariants extends UnionVariants> = { [K in keyof TVariants]: InferSetInput<TVariants[K]> }[keyof TVariants];
23
+ /**
24
+ * Proxy for accessing union variants
25
+ */
26
+ interface UnionProxy<TVariants extends UnionVariants, _TDiscriminator extends string, TRequired extends boolean = false, THasDefault extends boolean = false> {
27
+ /** Gets the current union value */
28
+ get(): MaybeUndefined<InferUnionState<TVariants>, TRequired, THasDefault>;
29
+ /** Sets the entire union value (applies defaults for variant fields) */
30
+ set(value: UnionSetInput<TVariants>): void;
31
+ /** Access a specific variant's proxy (assumes the variant is active) */
32
+ as<K$1 extends keyof TVariants>(variant: K$1): InferProxy<TVariants[K$1]>;
33
+ /** Pattern match on the variant type */
34
+ match<R>(handlers: { [K in keyof TVariants]: (proxy: InferProxy<TVariants[K$1]>) => R }): R | undefined;
35
+ /** Returns a readonly snapshot of the union for rendering */
36
+ toSnapshot(): MaybeUndefined<InferUnionSnapshot<TVariants>, TRequired, THasDefault>;
37
+ }
38
+ interface UnionPrimitiveSchema<TVariants extends UnionVariants, TDiscriminator extends string> {
39
+ readonly required: boolean;
40
+ readonly defaultValue: InferUnionState<TVariants> | undefined;
41
+ readonly discriminator: TDiscriminator;
42
+ readonly variants: TVariants;
43
+ }
44
+ declare class UnionPrimitive<TVariants extends UnionVariants, TDiscriminator extends string = "type", TRequired extends boolean = false, THasDefault extends boolean = false> implements Primitive<InferUnionState<TVariants>, UnionProxy<TVariants, TDiscriminator, TRequired, THasDefault>, TRequired, THasDefault, UnionSetInput<TVariants>, UnionSetInput<TVariants>> {
45
+ readonly _tag: "UnionPrimitive";
46
+ readonly _State: InferUnionState<TVariants>;
47
+ readonly _Proxy: UnionProxy<TVariants, TDiscriminator, TRequired, THasDefault>;
48
+ readonly _TRequired: TRequired;
49
+ readonly _THasDefault: THasDefault;
50
+ readonly TSetInput: UnionSetInput<TVariants>;
51
+ readonly TUpdateInput: UnionSetInput<TVariants>;
52
+ private readonly _schema;
53
+ private readonly _opDefinitions;
54
+ constructor(schema: UnionPrimitiveSchema<TVariants, TDiscriminator>);
55
+ /** Mark this union as required */
56
+ required(): UnionPrimitive<TVariants, TDiscriminator, true, THasDefault>;
57
+ /** Set a default value for this union */
58
+ default(defaultValue: UnionSetInput<TVariants>): UnionPrimitive<TVariants, TDiscriminator, true, true>;
59
+ /** Get the discriminator field name */
60
+ get discriminator(): TDiscriminator;
61
+ /** Get the variants */
62
+ get variants(): TVariants;
63
+ /** Find the variant key from a state value */
64
+ private _findVariantKey;
65
+ /** Apply defaults to a variant value based on the discriminator */
66
+ private _applyVariantDefaults;
67
+ readonly _internal: PrimitiveInternal<InferUnionState<TVariants>, UnionProxy<TVariants, TDiscriminator, TRequired, THasDefault>>;
68
+ }
69
+ /** Options for creating a Union primitive */
70
+ interface UnionOptions<TVariants extends UnionVariants, TDiscriminator extends string> {
71
+ /** The field name used to discriminate between variants (defaults to "type") */
72
+ readonly discriminator?: TDiscriminator;
73
+ /** The variant struct primitives */
74
+ readonly variants: TVariants;
75
+ }
76
+ /** Creates a new UnionPrimitive with the given variants */
77
+ declare function Union<TVariants extends UnionVariants>(options: UnionOptions<TVariants, "type">): UnionPrimitive<TVariants, "type", false, false>;
78
+ declare function Union<TVariants extends UnionVariants, TDiscriminator extends string>(options: UnionOptions<TVariants, TDiscriminator>): UnionPrimitive<TVariants, TDiscriminator, false, false>;
79
+ //#endregion
80
+ export { InferUnionSnapshot, InferUnionState, Union, UnionOptions, UnionPrimitive, UnionProxy, UnionSetInput, UnionVariants };
81
+ //# sourceMappingURL=Union.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Union.d.mts","names":[],"sources":["../../src/primitives/Union.ts"],"sourcesContent":[],"mappings":"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"}
@@ -0,0 +1,169 @@
1
+ import { _defineProperty } from "../_virtual/_@oxc-project_runtime@0.103.0/helpers/defineProperty.mjs";
2
+ import { _objectSpread2 } from "../_virtual/_@oxc-project_runtime@0.103.0/helpers/objectSpread2.mjs";
3
+ import { ValidationError, applyDefaults } from "./shared.mjs";
4
+ import { make } from "../OperationDefinition.mjs";
5
+ import { pathsOverlap } from "../OperationPath.mjs";
6
+ import { fromDefinition } from "../Operation.mjs";
7
+ import "../Primitive.mjs";
8
+ import { Schema } from "effect";
9
+
10
+ //#region src/primitives/Union.ts
11
+ var UnionPrimitive = class UnionPrimitive {
12
+ constructor(schema) {
13
+ _defineProperty(this, "_tag", "UnionPrimitive");
14
+ _defineProperty(this, "_State", void 0);
15
+ _defineProperty(this, "_Proxy", void 0);
16
+ _defineProperty(this, "_TRequired", void 0);
17
+ _defineProperty(this, "_THasDefault", void 0);
18
+ _defineProperty(this, "TSetInput", void 0);
19
+ _defineProperty(this, "TUpdateInput", void 0);
20
+ _defineProperty(this, "_schema", void 0);
21
+ _defineProperty(this, "_opDefinitions", { set: make({
22
+ kind: "union.set",
23
+ payload: Schema.Unknown,
24
+ target: Schema.Unknown,
25
+ apply: (payload) => payload
26
+ }) });
27
+ _defineProperty(this, "_internal", {
28
+ createProxy: (env, operationPath) => {
29
+ const variants = this._schema.variants;
30
+ const defaultValue = this._schema.defaultValue;
31
+ return {
32
+ get: () => {
33
+ const state = env.getState(operationPath);
34
+ return state !== null && state !== void 0 ? state : defaultValue;
35
+ },
36
+ set: (value) => {
37
+ const merged = this._applyVariantDefaults(value);
38
+ env.addOperation(fromDefinition(operationPath, this._opDefinitions.set, merged));
39
+ },
40
+ as: (variant) => {
41
+ const variantPrimitive = variants[variant];
42
+ if (!variantPrimitive) throw new ValidationError(`Unknown variant: ${globalThis.String(variant)}`);
43
+ return variantPrimitive._internal.createProxy(env, operationPath);
44
+ },
45
+ match: (handlers) => {
46
+ const state = env.getState(operationPath);
47
+ if (!state) return void 0;
48
+ const variantKey = this._findVariantKey(state);
49
+ if (!variantKey) return void 0;
50
+ const handler = handlers[variantKey];
51
+ if (!handler) return void 0;
52
+ return handler(variants[variantKey]._internal.createProxy(env, operationPath));
53
+ },
54
+ toSnapshot: () => {
55
+ const state = env.getState(operationPath);
56
+ const effectiveState = state !== null && state !== void 0 ? state : defaultValue;
57
+ if (!effectiveState) return;
58
+ const variantKey = this._findVariantKey(effectiveState);
59
+ if (!variantKey) return;
60
+ return variants[variantKey]._internal.createProxy(env, operationPath).toSnapshot();
61
+ }
62
+ };
63
+ },
64
+ applyOperation: (state, operation) => {
65
+ if (operation.path.toTokens().filter((t) => t !== "").length === 0) {
66
+ if (operation.kind !== "union.set") throw new ValidationError(`UnionPrimitive root cannot apply operation of kind: ${operation.kind}`);
67
+ const payload = operation.payload;
68
+ if (typeof payload !== "object" || payload === null) throw new ValidationError(`UnionPrimitive.set requires an object payload`);
69
+ if (payload[this._schema.discriminator] === void 0) throw new ValidationError(`UnionPrimitive.set requires a "${this._schema.discriminator}" discriminator field`);
70
+ return payload;
71
+ }
72
+ if (state === void 0) throw new ValidationError(`Cannot apply nested operation to undefined union state`);
73
+ const variantKey = this._findVariantKey(state);
74
+ if (variantKey === void 0) throw new ValidationError(`Cannot determine active variant from state`);
75
+ return this._schema.variants[variantKey]._internal.applyOperation(state, operation);
76
+ },
77
+ getInitialState: () => {
78
+ return this._schema.defaultValue;
79
+ },
80
+ transformOperation: (clientOp, serverOp) => {
81
+ const clientPath = clientOp.path;
82
+ const serverPath = serverOp.path;
83
+ if (!pathsOverlap(clientPath, serverPath)) return {
84
+ type: "transformed",
85
+ operation: clientOp
86
+ };
87
+ const clientTokens = clientPath.toTokens().filter((t) => t !== "");
88
+ const serverTokens = serverPath.toTokens().filter((t) => t !== "");
89
+ if (clientTokens.length === 0 && serverTokens.length === 0) return {
90
+ type: "transformed",
91
+ operation: clientOp
92
+ };
93
+ if (serverTokens.length === 0 && serverOp.kind === "union.set") return {
94
+ type: "transformed",
95
+ operation: clientOp
96
+ };
97
+ if (clientTokens.length === 0 && clientOp.kind === "union.set") return {
98
+ type: "transformed",
99
+ operation: clientOp
100
+ };
101
+ if (clientTokens.length > 0 && serverTokens.length > 0) {
102
+ if (clientTokens[0] !== serverTokens[0]) return {
103
+ type: "transformed",
104
+ operation: clientOp
105
+ };
106
+ const variantKeys = Object.keys(this._schema.variants);
107
+ if (variantKeys.length === 0) return {
108
+ type: "transformed",
109
+ operation: clientOp
110
+ };
111
+ return this._schema.variants[variantKeys[0]]._internal.transformOperation(clientOp, serverOp);
112
+ }
113
+ return {
114
+ type: "transformed",
115
+ operation: clientOp
116
+ };
117
+ }
118
+ });
119
+ this._schema = schema;
120
+ }
121
+ /** Mark this union as required */
122
+ required() {
123
+ return new UnionPrimitive(_objectSpread2(_objectSpread2({}, this._schema), {}, { required: true }));
124
+ }
125
+ /** Set a default value for this union */
126
+ default(defaultValue) {
127
+ const merged = this._applyVariantDefaults(defaultValue);
128
+ return new UnionPrimitive(_objectSpread2(_objectSpread2({}, this._schema), {}, { defaultValue: merged }));
129
+ }
130
+ /** Get the discriminator field name */
131
+ get discriminator() {
132
+ return this._schema.discriminator;
133
+ }
134
+ /** Get the variants */
135
+ get variants() {
136
+ return this._schema.variants;
137
+ }
138
+ /** Find the variant key from a state value */
139
+ _findVariantKey(state) {
140
+ if (typeof state !== "object" || state === null) return;
141
+ const discriminatorValue = state[this._schema.discriminator];
142
+ for (const key in this._schema.variants) {
143
+ const discriminatorField = this._schema.variants[key].fields[this._schema.discriminator];
144
+ if (discriminatorField && discriminatorField._tag === "LiteralPrimitive") {
145
+ if (discriminatorField.literal === discriminatorValue) return key;
146
+ }
147
+ }
148
+ }
149
+ /** Apply defaults to a variant value based on the discriminator */
150
+ _applyVariantDefaults(value) {
151
+ const variantKey = this._findVariantKey(value);
152
+ if (!variantKey) return value;
153
+ const variantPrimitive = this._schema.variants[variantKey];
154
+ return applyDefaults(variantPrimitive, value);
155
+ }
156
+ };
157
+ function Union(options) {
158
+ var _options$discriminato;
159
+ return new UnionPrimitive({
160
+ required: false,
161
+ defaultValue: void 0,
162
+ discriminator: (_options$discriminato = options.discriminator) !== null && _options$discriminato !== void 0 ? _options$discriminato : "type",
163
+ variants: options.variants
164
+ });
165
+ }
166
+
167
+ //#endregion
168
+ export { Union, UnionPrimitive };
169
+ //# sourceMappingURL=Union.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"Union.mjs","names":["OperationDefinition.make","Operation.fromDefinition","OperationPath.pathsOverlap"],"sources":["../../src/primitives/Union.ts"],"sourcesContent":["import { Effect, Schema } from \"effect\";\nimport * as OperationDefinition from \"../OperationDefinition\";\nimport * as Operation from \"../Operation\";\nimport * as OperationPath from \"../OperationPath\";\nimport * as ProxyEnvironment from \"../ProxyEnvironment\";\nimport * as Transform from \"../Transform\";\nimport type { Primitive, PrimitiveInternal, MaybeUndefined, AnyPrimitive, InferState, InferProxy, InferSnapshot, InferSetInput } from \"../Primitive\";\nimport { ValidationError } from \"../Primitive\";\nimport { LiteralPrimitive } from \"./Literal\";\nimport { StructPrimitive, InferStructState } from \"./Struct\";\nimport { runValidators, applyDefaults } from \"./shared\";\n\n\n/**\n * Type constraint for union variants - must be struct primitives\n */\nexport type UnionVariants = Record<string, StructPrimitive<any, any, any>>;\n\n/**\n * Infer the union state type from variants\n */\nexport type InferUnionState<TVariants extends UnionVariants> = {\n [K in keyof TVariants]: InferState<TVariants[K]>;\n}[keyof TVariants];\n\n/**\n * Infer the union snapshot type from variants\n */\nexport type InferUnionSnapshot<TVariants extends UnionVariants> = {\n [K in keyof TVariants]: InferSnapshot<TVariants[K]>;\n}[keyof TVariants];\n\n/**\n * Compute the input type for union.set() operations.\n * Uses each variant's TSetInput type.\n */\nexport type UnionSetInput<TVariants extends UnionVariants> = {\n [K in keyof TVariants]: InferSetInput<TVariants[K]>;\n}[keyof TVariants];\n\n/**\n * Proxy for accessing union variants\n */\nexport interface UnionProxy<TVariants extends UnionVariants, _TDiscriminator extends string, TRequired extends boolean = false, THasDefault extends boolean = false> {\n /** Gets the current union value */\n get(): MaybeUndefined<InferUnionState<TVariants>, TRequired, THasDefault>;\n \n /** Sets the entire union value (applies defaults for variant fields) */\n set(value: UnionSetInput<TVariants>): void;\n \n /** Access a specific variant's proxy (assumes the variant is active) */\n as<K extends keyof TVariants>(variant: K): InferProxy<TVariants[K]>;\n \n /** Pattern match on the variant type */\n match<R>(handlers: {\n [K in keyof TVariants]: (proxy: InferProxy<TVariants[K]>) => R;\n }): R | undefined;\n \n /** Returns a readonly snapshot of the union for rendering */\n toSnapshot(): MaybeUndefined<InferUnionSnapshot<TVariants>, TRequired, THasDefault>;\n}\n\ninterface UnionPrimitiveSchema<TVariants extends UnionVariants, TDiscriminator extends string> {\n readonly required: boolean;\n readonly defaultValue: InferUnionState<TVariants> | undefined;\n readonly discriminator: TDiscriminator;\n readonly variants: TVariants;\n}\n\nexport class UnionPrimitive<TVariants extends UnionVariants, TDiscriminator extends string = \"type\", TRequired extends boolean = false, THasDefault extends boolean = false>\n implements Primitive<InferUnionState<TVariants>, UnionProxy<TVariants, TDiscriminator, TRequired, THasDefault>, TRequired, THasDefault, UnionSetInput<TVariants>, UnionSetInput<TVariants>>\n{\n readonly _tag = \"UnionPrimitive\" as const;\n readonly _State!: InferUnionState<TVariants>;\n readonly _Proxy!: UnionProxy<TVariants, TDiscriminator, TRequired, THasDefault>;\n readonly _TRequired!: TRequired;\n readonly _THasDefault!: THasDefault;\n readonly TSetInput!: UnionSetInput<TVariants>;\n readonly TUpdateInput!: UnionSetInput<TVariants>;\n\n private readonly _schema: UnionPrimitiveSchema<TVariants, TDiscriminator>;\n\n private readonly _opDefinitions = {\n set: OperationDefinition.make({\n kind: \"union.set\" as const,\n payload: Schema.Unknown,\n target: Schema.Unknown,\n apply: (payload) => payload,\n }),\n };\n\n constructor(schema: UnionPrimitiveSchema<TVariants, TDiscriminator>) {\n this._schema = schema;\n }\n\n /** Mark this union as required */\n required(): UnionPrimitive<TVariants, TDiscriminator, true, THasDefault> {\n return new UnionPrimitive({\n ...this._schema,\n required: true,\n });\n }\n\n /** Set a default value for this union */\n default(defaultValue: UnionSetInput<TVariants>): UnionPrimitive<TVariants, TDiscriminator, true, true> {\n // Apply defaults to the variant\n const merged = this._applyVariantDefaults(defaultValue as Partial<InferUnionState<TVariants>>);\n return new UnionPrimitive({\n ...this._schema,\n defaultValue: merged,\n });\n }\n\n /** Get the discriminator field name */\n get discriminator(): TDiscriminator {\n return this._schema.discriminator;\n }\n\n /** Get the variants */\n get variants(): TVariants {\n return this._schema.variants;\n }\n\n /** Find the variant key from a state value */\n private _findVariantKey(state: InferUnionState<TVariants>): keyof TVariants | undefined {\n if (typeof state !== \"object\" || state === null) {\n return undefined;\n }\n const discriminatorValue = (state as Record<string, unknown>)[this._schema.discriminator];\n \n // Find the variant that matches this discriminator value\n for (const key in this._schema.variants) {\n const variant = this._schema.variants[key]!;\n const discriminatorField = variant.fields[this._schema.discriminator];\n if (discriminatorField && discriminatorField._tag === \"LiteralPrimitive\") {\n const literalPrimitive = discriminatorField as LiteralPrimitive<any, any, any>;\n if (literalPrimitive.literal === discriminatorValue) {\n return key;\n }\n }\n }\n return undefined;\n }\n\n /** Apply defaults to a variant value based on the discriminator */\n private _applyVariantDefaults(value: Partial<InferUnionState<TVariants>>): InferUnionState<TVariants> {\n const variantKey = this._findVariantKey(value as InferUnionState<TVariants>);\n if (!variantKey) {\n return value as InferUnionState<TVariants>;\n }\n \n const variantPrimitive = this._schema.variants[variantKey]!;\n return applyDefaults(variantPrimitive as AnyPrimitive, value) as InferUnionState<TVariants>;\n }\n\n readonly _internal: PrimitiveInternal<InferUnionState<TVariants>, UnionProxy<TVariants, TDiscriminator, TRequired, THasDefault>> = {\n createProxy: (\n env: ProxyEnvironment.ProxyEnvironment,\n operationPath: OperationPath.OperationPath\n ): UnionProxy<TVariants, TDiscriminator, TRequired, THasDefault> => {\n const variants = this._schema.variants;\n const defaultValue = this._schema.defaultValue;\n\n return {\n get: (): MaybeUndefined<InferUnionState<TVariants>, TRequired, THasDefault> => {\n const state = env.getState(operationPath) as InferUnionState<TVariants> | undefined;\n return (state ?? defaultValue) as MaybeUndefined<InferUnionState<TVariants>, TRequired, THasDefault>;\n },\n set: (value: UnionSetInput<TVariants>) => {\n // Apply defaults for the variant\n const merged = this._applyVariantDefaults(value as Partial<InferUnionState<TVariants>>);\n env.addOperation(\n Operation.fromDefinition(operationPath, this._opDefinitions.set, merged)\n );\n },\n as: <K extends keyof TVariants>(variant: K): InferProxy<TVariants[K]> => {\n const variantPrimitive = variants[variant];\n if (!variantPrimitive) {\n throw new ValidationError(`Unknown variant: ${globalThis.String(variant)}`);\n }\n return variantPrimitive._internal.createProxy(env, operationPath) as InferProxy<TVariants[K]>;\n },\n match: <R,>(handlers: { [K in keyof TVariants]: (proxy: InferProxy<TVariants[K]>) => R }): R | undefined => {\n const state = env.getState(operationPath) as InferUnionState<TVariants> | undefined;\n if (!state) return undefined;\n \n const variantKey = this._findVariantKey(state);\n if (!variantKey) return undefined;\n \n const handler = handlers[variantKey];\n if (!handler) return undefined;\n \n const variantProxy = variants[variantKey]!._internal.createProxy(env, operationPath) as InferProxy<TVariants[typeof variantKey]>;\n return handler(variantProxy);\n },\n toSnapshot: (): MaybeUndefined<InferUnionSnapshot<TVariants>, TRequired, THasDefault> => {\n const state = env.getState(operationPath) as InferUnionState<TVariants> | undefined;\n const effectiveState = state ?? defaultValue;\n if (!effectiveState) {\n return undefined as MaybeUndefined<InferUnionSnapshot<TVariants>, TRequired, THasDefault>;\n }\n \n const variantKey = this._findVariantKey(effectiveState);\n if (!variantKey) {\n return undefined as MaybeUndefined<InferUnionSnapshot<TVariants>, TRequired, THasDefault>;\n }\n \n const variantPrimitive = variants[variantKey]!;\n const variantProxy = variantPrimitive._internal.createProxy(env, operationPath);\n return (variantProxy as unknown as { toSnapshot(): InferUnionSnapshot<TVariants> }).toSnapshot() as MaybeUndefined<InferUnionSnapshot<TVariants>, TRequired, THasDefault>;\n },\n };\n },\n\n applyOperation: (\n state: InferUnionState<TVariants> | undefined,\n operation: Operation.Operation<any, any, any>\n ): InferUnionState<TVariants> => {\n const path = operation.path;\n const tokens = path.toTokens().filter((t: string) => t !== \"\");\n\n // If path is empty, this is a union-level operation\n if (tokens.length === 0) {\n if (operation.kind !== \"union.set\") {\n throw new ValidationError(`UnionPrimitive root cannot apply operation of kind: ${operation.kind}`);\n }\n\n const payload = operation.payload;\n if (typeof payload !== \"object\" || payload === null) {\n throw new ValidationError(`UnionPrimitive.set requires an object payload`);\n }\n\n // Validate that the discriminator field exists and matches a variant\n const discriminatorValue = (payload as Record<string, unknown>)[this._schema.discriminator];\n if (discriminatorValue === undefined) {\n throw new ValidationError(`UnionPrimitive.set requires a \"${this._schema.discriminator}\" discriminator field`);\n }\n\n return payload as InferUnionState<TVariants>;\n }\n\n // Otherwise, delegate to the active variant\n // We need to determine which variant is active based on current state\n if (state === undefined) {\n throw new ValidationError(`Cannot apply nested operation to undefined union state`);\n }\n\n const variantKey = this._findVariantKey(state);\n if (variantKey === undefined) {\n throw new ValidationError(`Cannot determine active variant from state`);\n }\n\n const variantPrimitive = this._schema.variants[variantKey]!;\n const newState = variantPrimitive._internal.applyOperation(\n state as InferState<typeof variantPrimitive>,\n operation\n );\n\n return newState as InferUnionState<TVariants>;\n },\n\n getInitialState: (): InferUnionState<TVariants> | undefined => {\n return this._schema.defaultValue;\n },\n\n transformOperation: (\n clientOp: Operation.Operation<any, any, any>,\n serverOp: Operation.Operation<any, any, any>\n ): Transform.TransformResult => {\n const clientPath = clientOp.path;\n const serverPath = serverOp.path;\n\n // If paths don't overlap at all, no transformation needed\n if (!OperationPath.pathsOverlap(clientPath, serverPath)) {\n return { type: \"transformed\", operation: clientOp };\n }\n\n const clientTokens = clientPath.toTokens().filter((t: string) => t !== \"\");\n const serverTokens = serverPath.toTokens().filter((t: string) => t !== \"\");\n\n // If both are at root level (union.set operations)\n if (clientTokens.length === 0 && serverTokens.length === 0) {\n // Client wins (last-write-wins)\n return { type: \"transformed\", operation: clientOp };\n }\n\n // If server set entire union and client is updating a field\n if (serverTokens.length === 0 && serverOp.kind === \"union.set\") {\n // Client's field operation proceeds - optimistic update\n // Server will validate/reject if needed\n return { type: \"transformed\", operation: clientOp };\n }\n\n // If client set entire union and server is updating a field\n if (clientTokens.length === 0 && clientOp.kind === \"union.set\") {\n // Client's union.set supersedes server's field update\n return { type: \"transformed\", operation: clientOp };\n }\n\n // Both operations target fields within the union\n // Since union variants are struct primitives, delegate to the first variant\n // that matches (they all should have the same field structure for the overlapping field)\n if (clientTokens.length > 0 && serverTokens.length > 0) {\n const clientField = clientTokens[0];\n const serverField = serverTokens[0];\n\n // Different fields - no conflict\n if (clientField !== serverField) {\n return { type: \"transformed\", operation: clientOp };\n }\n\n // Same field - delegate to a variant (use first variant as they share structure)\n const variantKeys = Object.keys(this._schema.variants);\n if (variantKeys.length === 0) {\n return { type: \"transformed\", operation: clientOp };\n }\n\n const firstVariant = this._schema.variants[variantKeys[0]!]!;\n const result = firstVariant._internal.transformOperation(clientOp, serverOp);\n\n return result;\n }\n\n // Default: no transformation needed\n return { type: \"transformed\", operation: clientOp };\n },\n };\n}\n\n/** Options for creating a Union primitive */\nexport interface UnionOptions<TVariants extends UnionVariants, TDiscriminator extends string> {\n /** The field name used to discriminate between variants (defaults to \"type\") */\n readonly discriminator?: TDiscriminator;\n /** The variant struct primitives */\n readonly variants: TVariants;\n}\n\n/** Creates a new UnionPrimitive with the given variants */\nexport function Union<TVariants extends UnionVariants>(\n options: UnionOptions<TVariants, \"type\">\n): UnionPrimitive<TVariants, \"type\", false, false>;\nexport function Union<TVariants extends UnionVariants, TDiscriminator extends string>(\n options: UnionOptions<TVariants, TDiscriminator>\n): UnionPrimitive<TVariants, TDiscriminator, false, false>;\nexport function Union<TVariants extends UnionVariants, TDiscriminator extends string = \"type\">(\n options: UnionOptions<TVariants, TDiscriminator>\n): UnionPrimitive<TVariants, TDiscriminator, false, false> {\n const discriminator = (options.discriminator ?? \"type\") as TDiscriminator;\n return new UnionPrimitive({\n required: false,\n defaultValue: undefined,\n discriminator,\n variants: options.variants,\n });\n}\n\n"],"mappings":"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"}
@@ -0,0 +1,60 @@
1
+ const require_defineProperty = require('../_virtual/_@oxc-project_runtime@0.103.0/helpers/defineProperty.cjs');
2
+ const require_objectSpread2 = require('../_virtual/_@oxc-project_runtime@0.103.0/helpers/objectSpread2.cjs');
3
+
4
+ //#region src/primitives/shared.ts
5
+ var ValidationError = class extends Error {
6
+ constructor(message) {
7
+ super(message);
8
+ require_defineProperty._defineProperty(this, "_tag", "ValidationError");
9
+ this.name = "ValidationError";
10
+ }
11
+ };
12
+ /**
13
+ * Runs all validators against a value, throwing ValidationError if any fail.
14
+ */
15
+ function runValidators(value, validators) {
16
+ for (const validator of validators) if (!validator.validate(value)) throw new ValidationError(validator.message);
17
+ }
18
+ /**
19
+ * Checks if an operation is compatible with the given operation definitions.
20
+ * @param operation - The operation to check.
21
+ * @param operationDefinitions - The operation definitions to check against.
22
+ * @returns True if the operation is compatible, false otherwise.
23
+ */
24
+ function isCompatibleOperation(operation, operationDefinitions) {
25
+ return Object.values(operationDefinitions).some((value) => value.kind === operation.kind);
26
+ }
27
+ /**
28
+ * Applies default values to a partial input, recursively handling nested structs.
29
+ *
30
+ * Uses a two-layer approach:
31
+ * 1. First, get the struct's initial state (which includes struct-level defaults)
32
+ * 2. Then, layer the provided values on top
33
+ * 3. Finally, ensure nested structs are recursively processed
34
+ *
35
+ * @param primitive - The primitive definition containing field information
36
+ * @param value - The partial value provided by the user
37
+ * @returns The value with defaults applied for missing fields
38
+ */
39
+ function applyDefaults(primitive, value) {
40
+ if (primitive._tag === "StructPrimitive") {
41
+ var _structPrimitive$_int;
42
+ const structPrimitive = primitive;
43
+ const result = require_objectSpread2._objectSpread2(require_objectSpread2._objectSpread2({}, (_structPrimitive$_int = structPrimitive._internal.getInitialState()) !== null && _structPrimitive$_int !== void 0 ? _structPrimitive$_int : {}), value);
44
+ for (const key in structPrimitive.fields) {
45
+ const fieldPrimitive = structPrimitive.fields[key];
46
+ if (result[key] === void 0) {
47
+ const fieldDefault = fieldPrimitive._internal.getInitialState();
48
+ if (fieldDefault !== void 0) result[key] = fieldDefault;
49
+ } else if (fieldPrimitive._tag === "StructPrimitive" && typeof result[key] === "object" && result[key] !== null) result[key] = applyDefaults(fieldPrimitive, result[key]);
50
+ }
51
+ return result;
52
+ }
53
+ return value;
54
+ }
55
+
56
+ //#endregion
57
+ exports.ValidationError = ValidationError;
58
+ exports.applyDefaults = applyDefaults;
59
+ exports.isCompatibleOperation = isCompatibleOperation;
60
+ exports.runValidators = runValidators;