@voidhash/mimic 0.0.4 → 0.0.6

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 (53) hide show
  1. package/.turbo/turbo-build.log +202 -198
  2. package/dist/Document.cjs +1 -2
  3. package/dist/Document.d.cts +9 -3
  4. package/dist/Document.d.cts.map +1 -1
  5. package/dist/Document.d.mts +9 -3
  6. package/dist/Document.d.mts.map +1 -1
  7. package/dist/Document.mjs +1 -2
  8. package/dist/Document.mjs.map +1 -1
  9. package/dist/Presence.d.mts.map +1 -1
  10. package/dist/Primitive.d.cts +2 -2
  11. package/dist/Primitive.d.mts +2 -2
  12. package/dist/_virtual/_@oxc-project_runtime@0.103.0/helpers/objectWithoutProperties.cjs +15 -0
  13. package/dist/_virtual/_@oxc-project_runtime@0.103.0/helpers/objectWithoutProperties.mjs +15 -0
  14. package/dist/_virtual/_@oxc-project_runtime@0.103.0/helpers/objectWithoutPropertiesLoose.cjs +14 -0
  15. package/dist/_virtual/_@oxc-project_runtime@0.103.0/helpers/objectWithoutPropertiesLoose.mjs +13 -0
  16. package/dist/client/ClientDocument.cjs +17 -12
  17. package/dist/client/ClientDocument.d.mts.map +1 -1
  18. package/dist/client/ClientDocument.mjs +17 -12
  19. package/dist/client/ClientDocument.mjs.map +1 -1
  20. package/dist/client/WebSocketTransport.cjs +6 -6
  21. package/dist/client/WebSocketTransport.mjs +6 -6
  22. package/dist/client/WebSocketTransport.mjs.map +1 -1
  23. package/dist/primitives/Tree.cjs +58 -8
  24. package/dist/primitives/Tree.d.cts +99 -10
  25. package/dist/primitives/Tree.d.cts.map +1 -1
  26. package/dist/primitives/Tree.d.mts +99 -10
  27. package/dist/primitives/Tree.d.mts.map +1 -1
  28. package/dist/primitives/Tree.mjs +58 -8
  29. package/dist/primitives/Tree.mjs.map +1 -1
  30. package/dist/primitives/shared.d.cts +9 -0
  31. package/dist/primitives/shared.d.cts.map +1 -1
  32. package/dist/primitives/shared.d.mts +9 -0
  33. package/dist/primitives/shared.d.mts.map +1 -1
  34. package/dist/primitives/shared.mjs.map +1 -1
  35. package/dist/server/ServerDocument.cjs +1 -1
  36. package/dist/server/ServerDocument.d.cts +3 -3
  37. package/dist/server/ServerDocument.d.cts.map +1 -1
  38. package/dist/server/ServerDocument.d.mts +3 -3
  39. package/dist/server/ServerDocument.d.mts.map +1 -1
  40. package/dist/server/ServerDocument.mjs +1 -1
  41. package/dist/server/ServerDocument.mjs.map +1 -1
  42. package/package.json +2 -2
  43. package/src/Document.ts +18 -5
  44. package/src/client/ClientDocument.ts +20 -21
  45. package/src/client/WebSocketTransport.ts +9 -9
  46. package/src/primitives/Tree.ts +213 -19
  47. package/src/primitives/shared.ts +10 -1
  48. package/src/server/ServerDocument.ts +4 -3
  49. package/tests/client/ClientDocument.test.ts +309 -2
  50. package/tests/client/WebSocketTransport.test.ts +228 -3
  51. package/tests/primitives/Tree.test.ts +296 -17
  52. package/tests/server/ServerDocument.test.ts +1 -1
  53. package/tsconfig.json +1 -1
@@ -33,6 +33,8 @@ type TreeState<_TRoot extends AnyTreeNodePrimitive> = readonly TreeNodeState[];
33
33
  */
34
34
  type TreeNodeSnapshot<TNode extends AnyTreeNodePrimitive> = {
35
35
  readonly id: string;
36
+ readonly pos: string;
37
+ readonly parentId: string | null;
36
38
  readonly type: InferTreeNodeType<TNode>;
37
39
  readonly children: TreeNodeSnapshot<InferTreeNodeChildren<TNode>>[];
38
40
  } & InferTreeNodeDataState<TNode>;
@@ -56,6 +58,86 @@ type TreeNodeUpdateValue<TNode extends AnyTreeNodePrimitive> = TNode["data"] ext
56
58
  * always require a data object (even if empty for all-optional fields).
57
59
  */
58
60
  type TreeNodeDataSetInput<TNode extends AnyTreeNodePrimitive> = TNode["data"] extends StructPrimitive<infer TFields, any, any> ? StructSetInput<TFields> : InferSetInput<TNode["data"]>;
61
+ /**
62
+ * Type guard to check if a type is `any` or unknown (structural check).
63
+ * Returns true if T is `any`, false otherwise.
64
+ */
65
+ type IsAny<T> = 0 extends (1 & T) ? true : false;
66
+ /**
67
+ * Get children types, with special handling for self-referential nodes.
68
+ * When InferTreeNodeChildren returns `any` (from TreeNodePrimitive<..., any>),
69
+ * we fall back to using TNode itself as its own child type.
70
+ * This handles the common case of self-referential nodes like:
71
+ * FolderNode = TreeNode("folder", { children: [TreeNodeSelf, FileNode] })
72
+ * Where FolderNode's TChildren is resolved to FolderNode | FileNode,
73
+ * but the self-referenced FolderNode has TChildren = any.
74
+ */
75
+ type ResolveChildrenForInput<TNode extends AnyTreeNodePrimitive, TOriginalNode extends AnyTreeNodePrimitive> = IsAny<InferTreeNodeChildren<TNode>> extends true ? TOriginalNode : InferTreeNodeChildren<TNode>;
76
+ /**
77
+ * Helper type that creates a properly typed node input for a specific node type.
78
+ * This is the "strict" version that enforces exact property matching.
79
+ *
80
+ * The TOriginalNode parameter is used to track the original root node type
81
+ * for proper self-reference resolution in deeply nested structures.
82
+ */
83
+ type TreeNodeSetInputStrictWithRoot<TNode extends AnyTreeNodePrimitive, TOriginalNode extends AnyTreeNodePrimitive> = {
84
+ readonly type: InferTreeNodeType<TNode>;
85
+ readonly id?: string;
86
+ readonly children: TreeNodeSetInputUnionWithRoot<ResolveChildrenForInput<TNode, TOriginalNode>, TOriginalNode>[];
87
+ } & TreeNodeDataSetInput<TNode>;
88
+ /**
89
+ * Distributive conditional type that creates a union of TreeNodeSetInputStrict
90
+ * for each node type in the union. This ensures proper type discrimination.
91
+ *
92
+ * When TNode is a union (e.g., FolderNode | FileNode), this distributes to:
93
+ * TreeNodeSetInputStrict<FolderNode> | TreeNodeSetInputStrict<FileNode>
94
+ *
95
+ * This creates a proper discriminated union where excess property checking works.
96
+ */
97
+ type TreeNodeSetInputUnionWithRoot<TNode extends AnyTreeNodePrimitive, TOriginalNode extends AnyTreeNodePrimitive> = TNode extends AnyTreeNodePrimitive ? TreeNodeSetInputStrictWithRoot<TNode, TOriginalNode> : never;
98
+ /**
99
+ * Helper type for single-parameter usage - uses TNode as its own original.
100
+ */
101
+ type TreeNodeSetInputStrict<TNode extends AnyTreeNodePrimitive> = TreeNodeSetInputStrictWithRoot<TNode, TNode>;
102
+ /**
103
+ * Distributive conditional for single-parameter usage.
104
+ */
105
+ type TreeNodeSetInputUnion<TNode extends AnyTreeNodePrimitive> = TNode extends AnyTreeNodePrimitive ? TreeNodeSetInputStrict<TNode> : never;
106
+ /**
107
+ * Input type for a single node in a nested tree set/default operation.
108
+ *
109
+ * - `type` is REQUIRED - explicit type discriminator for the node
110
+ * - `id` is optional - auto-generated if not provided
111
+ * - `children` is a typed array of allowed child node inputs
112
+ * - Data fields are spread at the node level (like TreeNodeSnapshot)
113
+ *
114
+ * When TNode is a union type (e.g., from InferTreeNodeChildren), this properly
115
+ * distributes to create a discriminated union where:
116
+ * - Each variant has its specific `type` literal
117
+ * - Each variant has its specific data fields
118
+ * - Excess property checking works correctly
119
+ *
120
+ * @example
121
+ * ```typescript
122
+ * const input: TreeNodeSetInput<BoardNode> = {
123
+ * type: "board",
124
+ * name: "My Board",
125
+ * children: [
126
+ * { type: "column", name: "Todo", children: [] }
127
+ * ]
128
+ * };
129
+ * ```
130
+ */
131
+ type TreeNodeSetInput<TNode extends AnyTreeNodePrimitive> = TreeNodeSetInputUnion<TNode>;
132
+ /**
133
+ * Input type for tree set() and default() operations.
134
+ * Accepts a nested tree structure that will be converted to flat TreeState internally.
135
+ */
136
+ type TreeSetInput<TRoot$1 extends AnyTreeNodePrimitive> = TreeNodeSetInput<TRoot$1>;
137
+ /**
138
+ * Infer the set input type for a tree primitive.
139
+ */
140
+ type InferTreeSetInput<T extends TreePrimitive<any>> = T extends TreePrimitive<infer TRoot> ? TreeSetInput<TRoot> : never;
59
141
  /**
60
142
  * Typed proxy for a specific node type - provides type-safe data access
61
143
  */
@@ -92,8 +174,8 @@ interface TreeNodeProxyBase<_TRoot extends AnyTreeNodePrimitive> {
92
174
  interface TreeProxy<TRoot$1 extends AnyTreeNodePrimitive> {
93
175
  /** Gets the entire tree state (flat array of nodes) */
94
176
  get(): TreeState<TRoot$1>;
95
- /** Replaces the entire tree */
96
- set(nodes: TreeState<TRoot$1>): void;
177
+ /** Replaces the entire tree with a nested input structure */
178
+ set(input: TreeSetInput<TRoot$1>): void;
97
179
  /** Gets the root node state */
98
180
  root(): TypedTreeNodeState<TRoot$1> | undefined;
99
181
  /** Gets ordered children states of a parent (null for root's children) */
@@ -131,14 +213,12 @@ interface TreeProxy<TRoot$1 extends AnyTreeNodePrimitive> {
131
213
  }
132
214
  interface TreePrimitiveSchema<TRoot$1 extends AnyTreeNodePrimitive> {
133
215
  readonly required: boolean;
134
- readonly defaultValue: TreeState<TRoot$1> | undefined;
216
+ readonly defaultInput: TreeNodeSetInput<TRoot$1> | undefined;
135
217
  readonly root: TRoot$1;
136
218
  readonly validators: readonly Validator<TreeState<TRoot$1>>[];
137
219
  }
138
- /** Input type for tree set() - tree state */
139
- type TreeSetInput<TRoot$1 extends AnyTreeNodePrimitive> = TreeState<TRoot$1>;
140
- /** Input type for tree update() - same as set() for trees */
141
- type TreeUpdateInput<TRoot$1 extends AnyTreeNodePrimitive> = TreeState<TRoot$1>;
220
+ /** Input type for tree update() - same as set() for trees (nested format) */
221
+ type TreeUpdateInput<TRoot$1 extends AnyTreeNodePrimitive> = TreeNodeSetInput<TRoot$1>;
142
222
  declare class TreePrimitive<TRoot$1 extends AnyTreeNodePrimitive, TRequired extends boolean = false, THasDefault extends boolean = false> implements Primitive<TreeState<TRoot$1>, TreeProxy<TRoot$1>, TRequired, THasDefault, TreeSetInput<TRoot$1>, TreeUpdateInput<TRoot$1>> {
143
223
  readonly _tag: "TreePrimitive";
144
224
  readonly _State: TreeState<TRoot$1>;
@@ -153,8 +233,8 @@ declare class TreePrimitive<TRoot$1 extends AnyTreeNodePrimitive, TRequired exte
153
233
  constructor(schema: TreePrimitiveSchema<TRoot$1>);
154
234
  /** Mark this tree as required */
155
235
  required(): TreePrimitive<TRoot$1, true, THasDefault>;
156
- /** Set a default value for this tree */
157
- default(defaultValue: TreeState<TRoot$1>): TreePrimitive<TRoot$1, TRequired, true>;
236
+ /** Set a default value for this tree (nested format) */
237
+ default(defaultInput: TreeNodeSetInput<TRoot$1>): TreePrimitive<TRoot$1, TRequired, true>;
158
238
  /** Get the root node type */
159
239
  get root(): TRoot$1;
160
240
  /** Add a custom validation rule */
@@ -171,6 +251,15 @@ declare class TreePrimitive<TRoot$1 extends AnyTreeNodePrimitive, TRequired exte
171
251
  * Validate that a node type can be a child of a parent node type
172
252
  */
173
253
  private _validateChildType;
254
+ /**
255
+ * Convert a nested TreeNodeSetInput to flat TreeState format.
256
+ * Recursively processes nodes, generating IDs and positions as needed.
257
+ *
258
+ * @param input - The root nested input to convert
259
+ * @param generateId - Optional ID generator (defaults to crypto.randomUUID)
260
+ * @returns Flat TreeState array
261
+ */
262
+ private _convertNestedToFlat;
174
263
  readonly _internal: PrimitiveInternal<TreeState<TRoot$1>, TreeProxy<TRoot$1>>;
175
264
  }
176
265
  /** Options for creating a Tree primitive */
@@ -181,5 +270,5 @@ interface TreeOptions<TRoot$1 extends AnyTreeNodePrimitive> {
181
270
  /** Creates a new TreePrimitive with the given root node type */
182
271
  declare const Tree: <TRoot$1 extends AnyTreeNodePrimitive>(options: TreeOptions<TRoot$1>) => TreePrimitive<TRoot$1, false, false>;
183
272
  //#endregion
184
- export { InferTreeSnapshot, Tree, TreeNodeDataSetInput, TreeNodeProxyBase, TreeNodeSnapshot, TreeNodeState, TreeNodeUpdateValue, TreeOptions, TreePrimitive, TreeProxy, TreeSetInput, TreeState, TreeUpdateInput, TypedNodeProxy, TypedTreeNodeState };
273
+ export { InferTreeSetInput, InferTreeSnapshot, Tree, TreeNodeDataSetInput, TreeNodeProxyBase, TreeNodeSetInput, TreeNodeSetInputUnion, TreeNodeSnapshot, TreeNodeState, TreeNodeUpdateValue, TreeOptions, TreePrimitive, TreeProxy, TreeSetInput, TreeState, TreeUpdateInput, TypedNodeProxy, TypedTreeNodeState };
185
274
  //# sourceMappingURL=Tree.d.cts.map
@@ -1 +1 @@
1
- {"version":3,"file":"Tree.d.cts","names":[],"sources":["../../src/primitives/Tree.ts"],"sourcesContent":[],"mappings":"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"}
1
+ {"version":3,"file":"Tree.d.cts","names":[],"sources":["../../src/primitives/Tree.ts"],"sourcesContent":[],"mappings":";;;;;;;AAkBA;AAWA;AAAkD,UAXjC,aAAA,CAWiC;EAEf,SAAA,EAAA,EAAA,MAAA;EAAlB,SAAA,IAAA,EAAA,MAAA;EAGuB,SAAA,QAAA,EAAA,MAAA,GAAA,IAAA;EAAvB,SAAA,GAAA,EAAA,MAAA;EAAsB,SAAA,IAAA,EAAA,OAAA;AAMvC;AAwDA;;;AAIiB,UAvEA,kBAuEA,CAAA,cAvEiC,oBAuEjC,CAAA,CAAA;EAC2C,SAAA,EAAA,EAAA,MAAA;EAAtB,SAAA,IAAA,EAtErB,iBAsEqB,CAtEH,KAsEG,CAAA;EAAjB,SAAA,QAAA,EAAA,MAAA,GAAA,IAAA;EACM,SAAA,GAAA,EAAA,MAAA;EAAvB,SAAA,IAAA,EApEa,sBAoEb,CApEoC,KAoEpC,CAAA;;AAKJ;;;AACY,KApEA,SAoEA,CAAA,eApEyB,oBAoEzB,CAAA,GAAA,SApE0D,aAoE1D,EAAA;;;;AAOA,KAnBA,gBAmBmB,CAAA,cAnBY,oBAmBZ,CAAA,GAAA;EAAe,SAAA,EAAA,EAAA,MAAA;EAC5C,SAAA,GAAA,EAAA,MAAA;EAAsB,SAAA,QAAA,EAAA,MAAA,GAAA,IAAA;EACA,SAAA,IAAA,EAjBP,iBAiBO,CAjBW,KAiBX,CAAA;EAAlB,SAAA,QAAA,EAhBe,gBAgBf,CAhBgC,qBAgBhC,CAhBsD,KAgBtD,CAAA,CAAA,EAAA;CACiB,GAhBnB,sBAgBmB,CAhBI,KAgBJ,CAAA;;;AAWvB;AAA+C,KAtBnC,iBAsBmC,CAAA,UAtBP,aAsBO,CAAA,GAAA,CAAA,CAAA,GArB7C,CAqB6C,SArBnC,aAqBmC,CAAA,KAAA,MAAA,CAAA,GArBN,gBAqBM,CArBW,KAqBX,CAAA,GAAA,KAAA;;;;;;AAGzC,KAjBM,mBAiBN,CAAA,cAjBwC,oBAiBxC,CAAA,GAhBJ,KAgBI,CAAA,MAAA,CAAA,SAhBkB,eAgBlB,CAAA,KAAA,QAAA,EAAA,GAAA,EAAA,GAAA,CAAA,GAfA,iBAeA,CAfkB,OAelB,CAAA,GAdA,gBAcA,CAdiB,KAcjB,CAAA,MAAA,CAAA,CAAA;;AAA6B;AAUH;;;;;;;AAcJ,KA3BhB,oBA2BgB,CAAA,cA3BmB,oBA2BnB,CAAA,GA1B1B,KA0B0B,CAAA,MAAA,CAAA,SA1BJ,eA0BI,CAAA,KAAA,QAAA,EAAA,GAAA,EAAA,GAAA,CAAA,GAzBtB,cAyBsB,CAzBP,OAyBO,CAAA,GAxBtB,aAwBsB,CAxBR,KAwBQ,CAAA,MAAA,CAAA,CAAA;;;AAAD;;KAdtB,KAuByF,CAAA,CAAA,CAAA,GAAA,CAAA,SAAA,CAAA,CAAA,GAvB/D,CAuB+D,CAAA,GAAA,IAAA,GAAA,KAAA;;;;;;;;;;KAZzF,uBAgBmB,CAAA,cAhBmB,oBAgBnB,EAAA,sBAhB+D,oBAgB/D,CAAA,GAftB,KAesB,CAfhB,qBAegB,CAfM,KAeN,CAAA,CAAA,SAAA,IAAA,GAdlB,aAckB,GAblB,qBAakB,CAbI,KAaJ,CAAA;AAAA;;;;;;;KAJnB,8BAgBkC,CAAA,cAhBW,oBAgBX,EAAA,sBAhBuD,oBAgBvD,CAAA,GAAA;EAA8B,SAAA,IAAA,EAfpD,iBAeoD,CAflC,KAekC,CAAA;EAKhE,SAAA,EAAA,CAAA,EAAA,MAAA;EAAqC,SAAA,QAAA,EAlBrB,6BAkBqB,CAlBS,uBAkBT,CAlBiC,KAkBjC,EAlBwC,aAkBxC,CAAA,EAlBwD,aAkBxD,CAAA,EAAA;CACT,GAlB7B,oBAkB6B,CAlBR,KAkBQ,CAAA;;;;AAKjC;;;;;;KAZK,6BAawD,CAAA,cAbZ,oBAaY,EAAA,sBAbgC,oBAahC,CAAA,GAZ3D,KAY2D,SAZ7C,oBAY6C,GAZtB,8BAYsB,CAZS,KAYT,EAZgB,aAYhB,CAAA,GAAA,KAAA;AA2B7D;;;KAlCK,sBAkC8D,CAAA,cAlCzB,oBAkCyB,CAAA,GAjCjE,8BAiCiE,CAjClC,KAiCkC,EAjC3B,KAiC2B,CAAA;;AAMnE;;AAAgF,KAlCpE,qBAkCoE,CAAA,cAlChC,oBAkCgC,CAAA,GAjC9E,KAiC8E,SAjChE,oBAiCgE,GAjCzC,sBAiCyC,CAjClB,KAiCkB,CAAA,GAAA,KAAA;;;AAKhF;;;;;;;AAmBA;;;;;;;;;;;AAgBA;;;;;AAQa,KAtDD,gBAsDC,CAAA,cAtD8B,oBAsD9B,CAAA,GAtDsD,qBAsDtD,CAtD4E,KAsD5E,CAAA;;;;;AAMJ,KAtDG,YAsDH,CAAA,gBAtD8B,oBAsD9B,CAAA,GAtDsD,gBAsDtD,CAtDuE,OAsDvE,CAAA;;AAMT;;AAEmB,KAzDP,iBAyDO,CAAA,UAzDqB,aAyDrB,CAAA,GAAA,CAAA,CAAA,GAxDjB,CAwDiB,SAxDP,aAwDO,CAAA,KAAA,MAAA,CAAA,GAxDsB,YAwDtB,CAxDmC,KAwDnC,CAAA,GAAA,KAAA;;;;AAMU,UA5CZ,cA4CY,CAAA,cA5CiB,oBA4CjB,CAAA,CAAA;EAAnB;EAG2B,SAAA,EAAA,EAAA,MAAA;EAGC;EAAlB,SAAA,IAAA,EA9CH,iBA8CG,CA9Ce,KA8Cf,CAAA;EAGQ;EAEd,SAAA,IAAA,EAjDG,UAiDH,CAjDc,KAiDd,CAAA,MAAA,CAAA,CAAA;EACiB;EAArB,GAAA,EAAA,EAhDD,kBAgDC,CAhDkB,KAgDlB,CAAA;EAIiB;EAEb,MAAA,CAAA,KAAA,EApDE,mBAoDF,CApDsB,KAoDtB,CAAA,CAAA,EAAA,IAAA;;;;;AASiB,UAvDd,iBAuDc,CAAA,eAvDmB,oBAuDnB,CAAA,CAAA;EAArB;EAIkB,SAAA,EAAA,EAAA,MAAA;EAEd;EACiB,SAAA,IAAA,EAAA,MAAA;EAArB;EAImB,EAAA,CAAA,cA5DV,oBA4DU,CAAA,CAAA,QAAA,EA3Df,KA2De,CAAA,EAAA,IAAA,IA1DhB,cA0DgB,CA1DD,KA0DC,CAAA;EAEf;EACiB,EAAA,CAAA,cA3DZ,oBA2DY,CAAA,CAAA,QAAA,EA1DjB,KA0DiB,CAAA,EAzD1B,cAyD0B,CAzDX,KAyDW,CAAA;EAArB;EAsBS,GAAA,EAAA,EA7EV,aA6EU;;;;;AAQL,UA/EG,SA+EH,CAAA,gBA/E2B,oBA+E3B,CAAA,CAAA;EACiB;EAApB,GAAA,EAAA,EA9EF,SA8EE,CA9EQ,OA8ER,CAAA;EAIsB;EAAjB,GAAA,CAAA,KAAA,EA/EH,YA+EG,CA/EU,OA+EV,CAAA,CAAA,EAAA,IAAA;EAAgB;EAGtB,IAAA,EAAA,EA/EA,kBA+EmB,CA/EA,OA+EA,CAAA,GAAA,SAAA;EAAe;EAEF,QAAA,CAAA,QAAA,EAAA,MAAA,GAAA,IAAA,CAAA,EA9EL,aA8EK,EAAA;EAAjB;EACR,IAAA,CAAA,EAAA,EAAA,MAAA,CAAA,EA5EG,iBA4EH,CA5EqB,OA4ErB,CAAA,GAAA,SAAA;EACmC;EAAV,WAAA,CAAA,cA1Ed,oBA0Ec,CAAA,CAAA,QAAA,EAAA,MAAA,GAAA,IAAA,EAAA,QAAA,EAxE5B,KAwE4B,EAAA,IAAA,EAvEhC,oBAuEgC,CAvEX,KAuEW,CAAA,CAAA,EAAA,MAAA;EAAV;EAAS,UAAA,CAAA,cAnEd,oBAmEc,CAAA,CAAA,QAAA,EAAA,MAAA,GAAA,IAAA,EAAA,QAAA,EAjE3B,KAiE2B,EAAA,IAAA,EAhE/B,oBAgE+B,CAhEV,KAgEU,CAAA,CAAA,EAAA,MAAA;EAI7B;EAA8B,QAAA,CAAA,cAhEjB,oBAgEiB,CAAA,CAAA,QAAA,EAAA,MAAA,GAAA,IAAA,EAAA,KAAA,EAAA,MAAA,EAAA,QAAA,EA7D5B,KA6D4B,EAAA,IAAA,EA5DhC,oBA4DgC,CA5DX,KA4DW,CAAA,CAAA,EAAA,MAAA;EAAyC;EAAjB,WAAA,CAAA,cAxDtC,oBAwDsC,CAAA,CAAA,SAAA,EAAA,MAAA,EAAA,QAAA,EAtDpD,KAsDoD,EAAA,IAAA,EArDxD,oBAqDwD,CArDnC,KAqDmC,CAAA,CAAA,EAAA,MAAA;EAAgB;EAErE,YAAA,CAAA,cAnDgB,oBAmDH,CAAA,CAAA,SAAA,EAAA,MAAA,EAAA,QAAA,EAjDZ,KAiDY,EAAA,IAAA,EAhDhB,oBAgDgB,CAhDK,KAgDL,CAAA,CAAA,EAAA,MAAA;EAAe;EACR,MAAA,CAAA,EAAA,EAAA,MAAA,CAAA,EAAA,IAAA;EAAV;EAA4B,IAAA,CAAA,MAAA,EAAA,MAAA,EAAA,WAAA,EAAA,MAAA,GAAA,IAAA,EAAA,OAAA,EAAA,MAAA,CAAA,EAAA,IAAA;EAAV;EAAkB,SAAA,CAAA,MAAA,EAAA,MAAA,EAAA,SAAA,EAAA,MAAA,CAAA,EAAA,IAAA;EAAW;EAA0B,UAAA,CAAA,MAAA,EAAA,MAAA,EAAA,SAAA,EAAA,MAAA,CAAA,EAAA,IAAA;EAAb;EAAqC,WAAA,CAAA,MAAA,EAAA,MAAA,EAAA,WAAA,EAAA,MAAA,GAAA,IAAA,CAAA,EAAA,IAAA;EAAhB;EAG1E,UAAA,CAAA,MAAA,EAAA,MAAA,EAAA,WAAA,EAAA,MAAA,GAAA,IAAA,CAAA,EAAA,IAAA;EAAV;EACU,EAAA,CAAA,cA/BX,oBA+BW,CAAA,CAAA,EAAA,EAAA,MAAA,EAAA,QAAA,EA7BhB,KA6BgB,CAAA,EA5BzB,UA4ByB,CA5Bd,KA4Bc,CAAA,MAAA,CAAA,CAAA;EAAV;EACI,QAAA,CAAA,cA1BC,oBA0BD,CAAA,CAAA,EAAA,EAAA,MAAA,EAAA,QAAA,EAxBV,KAwBU,EAAA,KAAA,EAvBb,mBAuBa,CAvBO,KAuBP,CAAA,CAAA,EAAA,IAAA;EACE;EACU,UAAA,EAAA,EArBpB,gBAqBoB,CArBH,OAqBG,CAAA,GAAA,SAAA;;UAlB1B,mBAmBgC,CAAA,gBAnBE,oBAmBF,CAAA,CAAA;EAAhB,SAAA,QAAA,EAAA,OAAA;EAgCgB,SAAA,YAAA,EAjDjB,gBAiDiB,CAjDA,OAiDA,CAAA,GAAA,SAAA;EAApB,SAAA,IAAA,EAhDL,OAgDK;EAKM,SAAA,UAAA,EAAA,SApDI,SAoDJ,CApDc,SAoDd,CApDwB,OAoDxB,CAAA,CAAA,EAAA;;;AAQa,KAxD7B,eAwD6B,CAAA,gBAxDC,oBAwDD,CAAA,GAxDyB,gBAwDzB,CAxD0C,OAwD1C,CAAA;AAAjB,cAtDX,aAsDW,CAAA,gBAtDiB,oBAsDjB,EAAA,kBAAA,OAAA,GAAA,KAAA,EAAA,oBAAA,OAAA,GAAA,KAAA,CAAA,YArDX,SAqDW,CArDD,SAqDC,CArDS,OAqDT,CAAA,EArDiB,SAqDjB,CArD2B,OAqD3B,CAAA,EArDmC,SAqDnC,EArD8C,WAqD9C,EArD2D,YAqD3D,CArDwE,OAqDxE,CAAA,EArDgF,eAqDhF,CArDgG,OAqDhG,CAAA,CAAA,CAAA;EAAwC,SAAA,IAAA,EAAA,eAAA;EAAO,SAAA,MAAA,EAlDnD,SAkDmD,CAlDzC,OAkDyC,CAAA;EAArB,SAAA,MAAA,EAjD9B,SAiD8B,CAjDpB,OAiDoB,CAAA;EAQpC,SAAA,UAAA,EAxDU,SAwDV;EAKiB,SAAA,YAAA,EA5DL,WA4DK;EAAV,SAAA,SAAA,EA3DE,YA2DF,CA3De,OA2Df,CAAA;EAA8D,SAAA,YAAA,EA1DzD,eA0DyD,CA1DzC,OA0DyC,CAAA;EAAO,iBAAA,OAAA;EAAW,QAAA,iBAAA;EAAhC,iBAAA,cAAA;EAgJnB,WAAA,CAAA,MAAA,EA1K5B,mBA0K4B,CA1KR,OA0KQ,CAAA;EAAV;EAA4B,QAAA,CAAA,CAAA,EArKtD,aAqKsD,CArKxC,OAqKwC,EAAA,IAAA,EArK3B,WAqK2B,CAAA;EAAV;EAApC,OAAA,CAAA,YAAA,EA7JE,gBA6JF,CA7JmB,OA6JnB,CAAA,CAAA,EA7J4B,aA6J5B,CA7J0C,OA6J1C,EA7JiD,SA6JjD,EAAA,IAAA,CAAA;EAlNT;EAAS,IAAA,IAAA,CAAA,CAAA,EA6DR,OA7DQ;EA0+BL;EAMJ,MAAA,CAQT,EAAA,EAAA,CAAA,KAAA,EAt7BiB,SAs7BjB,CAt7B2B,OAs7B3B,CAAA,EAAA,GAAA,OAAA,EAAA,OAAA,EAAA,MAAA,CAAA,EAt7BiE,aAs7BjE,CAt7B+E,OAs7B/E,EAt7BsF,SAs7BtF,EAt7BiG,WAs7BjG,CAAA;EAR+B;;;EAElB,QAAA,sBAAA;EAAd;;;;;;;;;;;;;;;;;sBAhyBmB,kBAAkB,UAAU,UAAQ,UAAU;;;UAwxBnD,4BAA0B;;iBAE1B;;;cAIJ,uBAAsB,+BACxB,YAAY,aACpB,cAAc"}
@@ -33,6 +33,8 @@ type TreeState<_TRoot extends AnyTreeNodePrimitive> = readonly TreeNodeState[];
33
33
  */
34
34
  type TreeNodeSnapshot<TNode extends AnyTreeNodePrimitive> = {
35
35
  readonly id: string;
36
+ readonly pos: string;
37
+ readonly parentId: string | null;
36
38
  readonly type: InferTreeNodeType<TNode>;
37
39
  readonly children: TreeNodeSnapshot<InferTreeNodeChildren<TNode>>[];
38
40
  } & InferTreeNodeDataState<TNode>;
@@ -56,6 +58,86 @@ type TreeNodeUpdateValue<TNode extends AnyTreeNodePrimitive> = TNode["data"] ext
56
58
  * always require a data object (even if empty for all-optional fields).
57
59
  */
58
60
  type TreeNodeDataSetInput<TNode extends AnyTreeNodePrimitive> = TNode["data"] extends StructPrimitive<infer TFields, any, any> ? StructSetInput<TFields> : InferSetInput<TNode["data"]>;
61
+ /**
62
+ * Type guard to check if a type is `any` or unknown (structural check).
63
+ * Returns true if T is `any`, false otherwise.
64
+ */
65
+ type IsAny<T> = 0 extends (1 & T) ? true : false;
66
+ /**
67
+ * Get children types, with special handling for self-referential nodes.
68
+ * When InferTreeNodeChildren returns `any` (from TreeNodePrimitive<..., any>),
69
+ * we fall back to using TNode itself as its own child type.
70
+ * This handles the common case of self-referential nodes like:
71
+ * FolderNode = TreeNode("folder", { children: [TreeNodeSelf, FileNode] })
72
+ * Where FolderNode's TChildren is resolved to FolderNode | FileNode,
73
+ * but the self-referenced FolderNode has TChildren = any.
74
+ */
75
+ type ResolveChildrenForInput<TNode extends AnyTreeNodePrimitive, TOriginalNode extends AnyTreeNodePrimitive> = IsAny<InferTreeNodeChildren<TNode>> extends true ? TOriginalNode : InferTreeNodeChildren<TNode>;
76
+ /**
77
+ * Helper type that creates a properly typed node input for a specific node type.
78
+ * This is the "strict" version that enforces exact property matching.
79
+ *
80
+ * The TOriginalNode parameter is used to track the original root node type
81
+ * for proper self-reference resolution in deeply nested structures.
82
+ */
83
+ type TreeNodeSetInputStrictWithRoot<TNode extends AnyTreeNodePrimitive, TOriginalNode extends AnyTreeNodePrimitive> = {
84
+ readonly type: InferTreeNodeType<TNode>;
85
+ readonly id?: string;
86
+ readonly children: TreeNodeSetInputUnionWithRoot<ResolveChildrenForInput<TNode, TOriginalNode>, TOriginalNode>[];
87
+ } & TreeNodeDataSetInput<TNode>;
88
+ /**
89
+ * Distributive conditional type that creates a union of TreeNodeSetInputStrict
90
+ * for each node type in the union. This ensures proper type discrimination.
91
+ *
92
+ * When TNode is a union (e.g., FolderNode | FileNode), this distributes to:
93
+ * TreeNodeSetInputStrict<FolderNode> | TreeNodeSetInputStrict<FileNode>
94
+ *
95
+ * This creates a proper discriminated union where excess property checking works.
96
+ */
97
+ type TreeNodeSetInputUnionWithRoot<TNode extends AnyTreeNodePrimitive, TOriginalNode extends AnyTreeNodePrimitive> = TNode extends AnyTreeNodePrimitive ? TreeNodeSetInputStrictWithRoot<TNode, TOriginalNode> : never;
98
+ /**
99
+ * Helper type for single-parameter usage - uses TNode as its own original.
100
+ */
101
+ type TreeNodeSetInputStrict<TNode extends AnyTreeNodePrimitive> = TreeNodeSetInputStrictWithRoot<TNode, TNode>;
102
+ /**
103
+ * Distributive conditional for single-parameter usage.
104
+ */
105
+ type TreeNodeSetInputUnion<TNode extends AnyTreeNodePrimitive> = TNode extends AnyTreeNodePrimitive ? TreeNodeSetInputStrict<TNode> : never;
106
+ /**
107
+ * Input type for a single node in a nested tree set/default operation.
108
+ *
109
+ * - `type` is REQUIRED - explicit type discriminator for the node
110
+ * - `id` is optional - auto-generated if not provided
111
+ * - `children` is a typed array of allowed child node inputs
112
+ * - Data fields are spread at the node level (like TreeNodeSnapshot)
113
+ *
114
+ * When TNode is a union type (e.g., from InferTreeNodeChildren), this properly
115
+ * distributes to create a discriminated union where:
116
+ * - Each variant has its specific `type` literal
117
+ * - Each variant has its specific data fields
118
+ * - Excess property checking works correctly
119
+ *
120
+ * @example
121
+ * ```typescript
122
+ * const input: TreeNodeSetInput<BoardNode> = {
123
+ * type: "board",
124
+ * name: "My Board",
125
+ * children: [
126
+ * { type: "column", name: "Todo", children: [] }
127
+ * ]
128
+ * };
129
+ * ```
130
+ */
131
+ type TreeNodeSetInput<TNode extends AnyTreeNodePrimitive> = TreeNodeSetInputUnion<TNode>;
132
+ /**
133
+ * Input type for tree set() and default() operations.
134
+ * Accepts a nested tree structure that will be converted to flat TreeState internally.
135
+ */
136
+ type TreeSetInput<TRoot$1 extends AnyTreeNodePrimitive> = TreeNodeSetInput<TRoot$1>;
137
+ /**
138
+ * Infer the set input type for a tree primitive.
139
+ */
140
+ type InferTreeSetInput<T extends TreePrimitive<any>> = T extends TreePrimitive<infer TRoot> ? TreeSetInput<TRoot> : never;
59
141
  /**
60
142
  * Typed proxy for a specific node type - provides type-safe data access
61
143
  */
@@ -92,8 +174,8 @@ interface TreeNodeProxyBase<_TRoot extends AnyTreeNodePrimitive> {
92
174
  interface TreeProxy<TRoot$1 extends AnyTreeNodePrimitive> {
93
175
  /** Gets the entire tree state (flat array of nodes) */
94
176
  get(): TreeState<TRoot$1>;
95
- /** Replaces the entire tree */
96
- set(nodes: TreeState<TRoot$1>): void;
177
+ /** Replaces the entire tree with a nested input structure */
178
+ set(input: TreeSetInput<TRoot$1>): void;
97
179
  /** Gets the root node state */
98
180
  root(): TypedTreeNodeState<TRoot$1> | undefined;
99
181
  /** Gets ordered children states of a parent (null for root's children) */
@@ -131,14 +213,12 @@ interface TreeProxy<TRoot$1 extends AnyTreeNodePrimitive> {
131
213
  }
132
214
  interface TreePrimitiveSchema<TRoot$1 extends AnyTreeNodePrimitive> {
133
215
  readonly required: boolean;
134
- readonly defaultValue: TreeState<TRoot$1> | undefined;
216
+ readonly defaultInput: TreeNodeSetInput<TRoot$1> | undefined;
135
217
  readonly root: TRoot$1;
136
218
  readonly validators: readonly Validator<TreeState<TRoot$1>>[];
137
219
  }
138
- /** Input type for tree set() - tree state */
139
- type TreeSetInput<TRoot$1 extends AnyTreeNodePrimitive> = TreeState<TRoot$1>;
140
- /** Input type for tree update() - same as set() for trees */
141
- type TreeUpdateInput<TRoot$1 extends AnyTreeNodePrimitive> = TreeState<TRoot$1>;
220
+ /** Input type for tree update() - same as set() for trees (nested format) */
221
+ type TreeUpdateInput<TRoot$1 extends AnyTreeNodePrimitive> = TreeNodeSetInput<TRoot$1>;
142
222
  declare class TreePrimitive<TRoot$1 extends AnyTreeNodePrimitive, TRequired extends boolean = false, THasDefault extends boolean = false> implements Primitive<TreeState<TRoot$1>, TreeProxy<TRoot$1>, TRequired, THasDefault, TreeSetInput<TRoot$1>, TreeUpdateInput<TRoot$1>> {
143
223
  readonly _tag: "TreePrimitive";
144
224
  readonly _State: TreeState<TRoot$1>;
@@ -153,8 +233,8 @@ declare class TreePrimitive<TRoot$1 extends AnyTreeNodePrimitive, TRequired exte
153
233
  constructor(schema: TreePrimitiveSchema<TRoot$1>);
154
234
  /** Mark this tree as required */
155
235
  required(): TreePrimitive<TRoot$1, true, THasDefault>;
156
- /** Set a default value for this tree */
157
- default(defaultValue: TreeState<TRoot$1>): TreePrimitive<TRoot$1, TRequired, true>;
236
+ /** Set a default value for this tree (nested format) */
237
+ default(defaultInput: TreeNodeSetInput<TRoot$1>): TreePrimitive<TRoot$1, TRequired, true>;
158
238
  /** Get the root node type */
159
239
  get root(): TRoot$1;
160
240
  /** Add a custom validation rule */
@@ -171,6 +251,15 @@ declare class TreePrimitive<TRoot$1 extends AnyTreeNodePrimitive, TRequired exte
171
251
  * Validate that a node type can be a child of a parent node type
172
252
  */
173
253
  private _validateChildType;
254
+ /**
255
+ * Convert a nested TreeNodeSetInput to flat TreeState format.
256
+ * Recursively processes nodes, generating IDs and positions as needed.
257
+ *
258
+ * @param input - The root nested input to convert
259
+ * @param generateId - Optional ID generator (defaults to crypto.randomUUID)
260
+ * @returns Flat TreeState array
261
+ */
262
+ private _convertNestedToFlat;
174
263
  readonly _internal: PrimitiveInternal<TreeState<TRoot$1>, TreeProxy<TRoot$1>>;
175
264
  }
176
265
  /** Options for creating a Tree primitive */
@@ -181,5 +270,5 @@ interface TreeOptions<TRoot$1 extends AnyTreeNodePrimitive> {
181
270
  /** Creates a new TreePrimitive with the given root node type */
182
271
  declare const Tree: <TRoot$1 extends AnyTreeNodePrimitive>(options: TreeOptions<TRoot$1>) => TreePrimitive<TRoot$1, false, false>;
183
272
  //#endregion
184
- export { InferTreeSnapshot, Tree, TreeNodeDataSetInput, TreeNodeProxyBase, TreeNodeSnapshot, TreeNodeState, TreeNodeUpdateValue, TreeOptions, TreePrimitive, TreeProxy, TreeSetInput, TreeState, TreeUpdateInput, TypedNodeProxy, TypedTreeNodeState };
273
+ export { InferTreeSetInput, InferTreeSnapshot, Tree, TreeNodeDataSetInput, TreeNodeProxyBase, TreeNodeSetInput, TreeNodeSetInputUnion, TreeNodeSnapshot, TreeNodeState, TreeNodeUpdateValue, TreeOptions, TreePrimitive, TreeProxy, TreeSetInput, TreeState, TreeUpdateInput, TypedNodeProxy, TypedTreeNodeState };
185
274
  //# sourceMappingURL=Tree.d.mts.map
@@ -1 +1 @@
1
- {"version":3,"file":"Tree.d.mts","names":[],"sources":["../../src/primitives/Tree.ts"],"sourcesContent":[],"mappings":"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"}
1
+ {"version":3,"file":"Tree.d.mts","names":[],"sources":["../../src/primitives/Tree.ts"],"sourcesContent":[],"mappings":"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"}
@@ -5,9 +5,15 @@ import { make } from "../OperationDefinition.mjs";
5
5
  import { isPrefix, pathsEqual, pathsOverlap } from "../OperationPath.mjs";
6
6
  import { fromDefinition } from "../Operation.mjs";
7
7
  import { base62CharSet, generateKeyBetween } from "../FractionalIndex.mjs";
8
+ import { _objectWithoutProperties } from "../_virtual/_@oxc-project_runtime@0.103.0/helpers/objectWithoutProperties.mjs";
8
9
  import { Effect, Schema } from "effect";
9
10
 
10
11
  //#region src/primitives/Tree.ts
12
+ const _excluded = [
13
+ "type",
14
+ "id",
15
+ "children"
16
+ ];
11
17
  /**
12
18
  * Helper to get children sorted by position
13
19
  */
@@ -125,15 +131,18 @@ var TreePrimitive = class TreePrimitive {
125
131
  }
126
132
  return _objectSpread2(_objectSpread2({
127
133
  id: node.id,
128
- type: node.type
134
+ type: node.type,
135
+ pos: node.pos,
136
+ parentId: node.parentId
129
137
  }, node.data), {}, { children });
130
138
  };
131
139
  return {
132
140
  get: () => {
133
141
  return getCurrentState();
134
142
  },
135
- set: (nodes) => {
136
- env.addOperation(fromDefinition(operationPath, this._opDefinitions.set, nodes));
143
+ set: (input) => {
144
+ const flatState = this._convertNestedToFlat(input, env.generateId);
145
+ env.addOperation(fromDefinition(operationPath, this._opDefinitions.set, flatState));
137
146
  },
138
147
  root: () => {
139
148
  return getCurrentState().find((n) => n.parentId === null);
@@ -428,7 +437,7 @@ var TreePrimitive = class TreePrimitive {
428
437
  },
429
438
  getInitialState: () => {
430
439
  var _rootNodeType$data$_i;
431
- if (this._schema.defaultValue !== void 0) return this._schema.defaultValue;
440
+ if (this._schema.defaultInput !== void 0) return this._convertNestedToFlat(this._schema.defaultInput);
432
441
  const rootNodeType = this._schema.root;
433
442
  const rootData = (_rootNodeType$data$_i = rootNodeType.data._internal.getInitialState()) !== null && _rootNodeType$data$_i !== void 0 ? _rootNodeType$data$_i : {};
434
443
  const rootId = crypto.randomUUID();
@@ -441,6 +450,9 @@ var TreePrimitive = class TreePrimitive {
441
450
  data: rootData
442
451
  }];
443
452
  },
453
+ convertSetInputToState: (input) => {
454
+ return this._convertNestedToFlat(input);
455
+ },
444
456
  transformOperation: (clientOp, serverOp) => {
445
457
  const clientPath = clientOp.path;
446
458
  const serverPath = serverOp.path;
@@ -509,9 +521,9 @@ var TreePrimitive = class TreePrimitive {
509
521
  required() {
510
522
  return new TreePrimitive(_objectSpread2(_objectSpread2({}, this._schema), {}, { required: true }));
511
523
  }
512
- /** Set a default value for this tree */
513
- default(defaultValue) {
514
- return new TreePrimitive(_objectSpread2(_objectSpread2({}, this._schema), {}, { defaultValue }));
524
+ /** Set a default value for this tree (nested format) */
525
+ default(defaultInput) {
526
+ return new TreePrimitive(_objectSpread2(_objectSpread2({}, this._schema), {}, { defaultInput }));
515
527
  }
516
528
  /** Get the root node type */
517
529
  get root() {
@@ -560,11 +572,49 @@ var TreePrimitive = class TreePrimitive {
560
572
  const parentNodePrimitive = this._getNodeTypePrimitive(parentType);
561
573
  if (!parentNodePrimitive.isChildAllowed(childType)) throw new ValidationError(`Node type "${childType}" is not allowed as a child of "${parentType}". Allowed types: ${parentNodePrimitive.children.map((c) => c.type).join(", ") || "none"}`);
562
574
  }
575
+ /**
576
+ * Convert a nested TreeNodeSetInput to flat TreeState format.
577
+ * Recursively processes nodes, generating IDs and positions as needed.
578
+ *
579
+ * @param input - The root nested input to convert
580
+ * @param generateId - Optional ID generator (defaults to crypto.randomUUID)
581
+ * @returns Flat TreeState array
582
+ */
583
+ _convertNestedToFlat(input, generateId = () => crypto.randomUUID()) {
584
+ const result = [];
585
+ const seenIds = /* @__PURE__ */ new Set();
586
+ const processNode = (nodeInput, parentId, parentType, leftPos, rightPos) => {
587
+ var _nodeInput$id;
588
+ this._validateChildType(parentType, nodeInput.type);
589
+ const nodePrimitive = this._getNodeTypePrimitive(nodeInput.type);
590
+ const id = (_nodeInput$id = nodeInput.id) !== null && _nodeInput$id !== void 0 ? _nodeInput$id : generateId();
591
+ if (seenIds.has(id)) throw new ValidationError(`Duplicate node ID: ${id}`);
592
+ seenIds.add(id);
593
+ const pos = generateTreePosBetween(leftPos, rightPos);
594
+ const { type: _type, id: _id, children } = nodeInput, dataFields = _objectWithoutProperties(nodeInput, _excluded);
595
+ const mergedData = applyDefaults(nodePrimitive.data, dataFields);
596
+ result.push({
597
+ id,
598
+ type: nodeInput.type,
599
+ parentId,
600
+ pos,
601
+ data: mergedData
602
+ });
603
+ let prevChildPos = null;
604
+ for (let i = 0; i < children.length; i++) {
605
+ const childInput = children[i];
606
+ processNode(childInput, id, nodeInput.type, prevChildPos, null);
607
+ prevChildPos = result[result.length - 1].pos;
608
+ }
609
+ };
610
+ processNode(input, null, null, null, null);
611
+ return result;
612
+ }
563
613
  };
564
614
  /** Creates a new TreePrimitive with the given root node type */
565
615
  const Tree = (options) => new TreePrimitive({
566
616
  required: false,
567
- defaultValue: void 0,
617
+ defaultInput: void 0,
568
618
  root: options.root,
569
619
  validators: []
570
620
  });