@voidhash/mimic 0.0.1 → 0.0.2
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.
- package/.turbo/turbo-build.log +19 -19
- package/dist/{Primitive-lEhQyGVL.d.mts → Primitive-DqQFc3Gu.d.mts} +8 -3
- package/dist/Primitive-DqQFc3Gu.d.mts.map +1 -0
- package/dist/{Primitive-CvFVxR8_.d.cts → Primitive-awpEjnKL.d.cts} +8 -3
- package/dist/Primitive-awpEjnKL.d.cts.map +1 -0
- package/dist/client/index.d.cts +1 -1
- package/dist/client/index.d.cts.map +1 -1
- package/dist/client/index.d.mts +1 -1
- package/dist/client/index.d.mts.map +1 -1
- package/dist/index.cjs +454 -0
- package/dist/index.d.cts +278 -2
- package/dist/index.d.cts.map +1 -1
- package/dist/index.d.mts +278 -2
- package/dist/index.d.mts.map +1 -1
- package/dist/index.mjs +443 -1
- package/dist/index.mjs.map +1 -1
- package/dist/server/index.d.cts +1 -1
- package/dist/server/index.d.mts +1 -1
- package/package.json +2 -2
- package/src/index.ts +2 -0
- package/src/primitives/shared.ts +7 -1
- package/src/types/index.ts +137 -0
- package/src/utils/index.ts +7 -0
- package/src/utils/tree-helpers.ts +648 -0
- package/dist/Primitive-CvFVxR8_.d.cts.map +0 -1
- package/dist/Primitive-lEhQyGVL.d.mts.map +0 -1
|
@@ -0,0 +1,648 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Tree snapshot utility functions.
|
|
3
|
+
*
|
|
4
|
+
* Standalone helpers for traversing and querying tree snapshots.
|
|
5
|
+
* All functions handle undefined snapshots gracefully.
|
|
6
|
+
*
|
|
7
|
+
* @since 0.0.1
|
|
8
|
+
*/
|
|
9
|
+
|
|
10
|
+
import type { TreeNodeSnapshot, TreePrimitive } from "../primitives/Tree.js";
|
|
11
|
+
import type { AnyTreeNodePrimitive } from "../primitives/TreeNode.js";
|
|
12
|
+
|
|
13
|
+
// =============================================================================
|
|
14
|
+
// Result Types
|
|
15
|
+
// =============================================================================
|
|
16
|
+
|
|
17
|
+
/**
|
|
18
|
+
* Result of finding a node with path information.
|
|
19
|
+
*/
|
|
20
|
+
export interface NodeSearchResult<TNode extends AnyTreeNodePrimitive> {
|
|
21
|
+
readonly node: TreeNodeSnapshot<TNode>;
|
|
22
|
+
readonly path: readonly string[]; // Array of node IDs from root to this node
|
|
23
|
+
readonly depth: number;
|
|
24
|
+
}
|
|
25
|
+
|
|
26
|
+
/**
|
|
27
|
+
* Result of finding a parent node.
|
|
28
|
+
*/
|
|
29
|
+
export interface ParentSearchResult<TNode extends AnyTreeNodePrimitive> {
|
|
30
|
+
readonly parent: TreeNodeSnapshot<TNode>;
|
|
31
|
+
readonly childIndex: number; // Index of the target node in parent's children
|
|
32
|
+
}
|
|
33
|
+
|
|
34
|
+
/**
|
|
35
|
+
* Flattened node with parent information.
|
|
36
|
+
*/
|
|
37
|
+
export interface FlattenedNode<TNode extends AnyTreeNodePrimitive> {
|
|
38
|
+
readonly node: TreeNodeSnapshot<TNode>;
|
|
39
|
+
readonly parentId: string | null;
|
|
40
|
+
readonly depth: number;
|
|
41
|
+
}
|
|
42
|
+
|
|
43
|
+
/**
|
|
44
|
+
* Options for tree traversal.
|
|
45
|
+
*/
|
|
46
|
+
export interface TraverseOptions {
|
|
47
|
+
readonly order?: "pre" | "post";
|
|
48
|
+
}
|
|
49
|
+
|
|
50
|
+
// =============================================================================
|
|
51
|
+
// Core Functions
|
|
52
|
+
// =============================================================================
|
|
53
|
+
|
|
54
|
+
/**
|
|
55
|
+
* Find a node by ID in a tree snapshot.
|
|
56
|
+
*
|
|
57
|
+
* @param snapshot - The root tree snapshot
|
|
58
|
+
* @param id - The node ID to find
|
|
59
|
+
* @returns The node snapshot if found, undefined otherwise
|
|
60
|
+
*/
|
|
61
|
+
export function findNodeById<TNode extends AnyTreeNodePrimitive>(
|
|
62
|
+
snapshot: TreeNodeSnapshot<TNode> | undefined,
|
|
63
|
+
id: string
|
|
64
|
+
): TreeNodeSnapshot<TNode> | undefined {
|
|
65
|
+
if (!snapshot) return undefined;
|
|
66
|
+
if (snapshot.id === id) return snapshot;
|
|
67
|
+
|
|
68
|
+
for (const child of snapshot.children) {
|
|
69
|
+
const found = findNodeById(child as TreeNodeSnapshot<TNode>, id);
|
|
70
|
+
if (found) return found;
|
|
71
|
+
}
|
|
72
|
+
|
|
73
|
+
return undefined;
|
|
74
|
+
}
|
|
75
|
+
|
|
76
|
+
/**
|
|
77
|
+
* Find a node by ID with full path information.
|
|
78
|
+
*
|
|
79
|
+
* @param snapshot - The root tree snapshot
|
|
80
|
+
* @param id - The node ID to find
|
|
81
|
+
* @returns NodeSearchResult with node, path, and depth, or undefined if not found
|
|
82
|
+
*/
|
|
83
|
+
export function findNodeWithPath<TNode extends AnyTreeNodePrimitive>(
|
|
84
|
+
snapshot: TreeNodeSnapshot<TNode> | undefined,
|
|
85
|
+
id: string
|
|
86
|
+
): NodeSearchResult<TNode> | undefined {
|
|
87
|
+
if (!snapshot) return undefined;
|
|
88
|
+
|
|
89
|
+
const search = (
|
|
90
|
+
node: TreeNodeSnapshot<TNode>,
|
|
91
|
+
currentPath: string[],
|
|
92
|
+
depth: number
|
|
93
|
+
): NodeSearchResult<TNode> | undefined => {
|
|
94
|
+
const path = [...currentPath, node.id];
|
|
95
|
+
|
|
96
|
+
if (node.id === id) {
|
|
97
|
+
return { node, path, depth };
|
|
98
|
+
}
|
|
99
|
+
|
|
100
|
+
for (const child of node.children) {
|
|
101
|
+
const result = search(child as TreeNodeSnapshot<TNode>, path, depth + 1);
|
|
102
|
+
if (result) return result;
|
|
103
|
+
}
|
|
104
|
+
|
|
105
|
+
return undefined;
|
|
106
|
+
};
|
|
107
|
+
|
|
108
|
+
return search(snapshot, [], 0);
|
|
109
|
+
}
|
|
110
|
+
|
|
111
|
+
/**
|
|
112
|
+
* Get the parent node of a given node ID.
|
|
113
|
+
*
|
|
114
|
+
* @param snapshot - The root tree snapshot
|
|
115
|
+
* @param nodeId - The ID of the node whose parent we want
|
|
116
|
+
* @returns ParentSearchResult with parent node and child index, or undefined
|
|
117
|
+
*/
|
|
118
|
+
export function getParent<TNode extends AnyTreeNodePrimitive>(
|
|
119
|
+
snapshot: TreeNodeSnapshot<TNode> | undefined,
|
|
120
|
+
nodeId: string
|
|
121
|
+
): ParentSearchResult<TNode> | undefined {
|
|
122
|
+
if (!snapshot) return undefined;
|
|
123
|
+
|
|
124
|
+
// Check if any direct child is the target
|
|
125
|
+
for (let i = 0; i < snapshot.children.length; i++) {
|
|
126
|
+
const child = snapshot.children[i];
|
|
127
|
+
if (child && child.id === nodeId) {
|
|
128
|
+
return {
|
|
129
|
+
parent: snapshot,
|
|
130
|
+
childIndex: i,
|
|
131
|
+
};
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
|
|
135
|
+
// Recursively search children
|
|
136
|
+
for (const child of snapshot.children) {
|
|
137
|
+
const result = getParent(child as TreeNodeSnapshot<TNode>, nodeId);
|
|
138
|
+
if (result) return result;
|
|
139
|
+
}
|
|
140
|
+
|
|
141
|
+
return undefined;
|
|
142
|
+
}
|
|
143
|
+
|
|
144
|
+
/**
|
|
145
|
+
* Get a subtree rooted at a specific node ID.
|
|
146
|
+
*
|
|
147
|
+
* @param snapshot - The root tree snapshot
|
|
148
|
+
* @param nodeId - The ID of the node to use as new root
|
|
149
|
+
* @returns The subtree snapshot, or undefined if node not found
|
|
150
|
+
*/
|
|
151
|
+
export function getSubtree<TNode extends AnyTreeNodePrimitive>(
|
|
152
|
+
snapshot: TreeNodeSnapshot<TNode> | undefined,
|
|
153
|
+
nodeId: string
|
|
154
|
+
): TreeNodeSnapshot<TNode> | undefined {
|
|
155
|
+
return findNodeById(snapshot, nodeId);
|
|
156
|
+
}
|
|
157
|
+
|
|
158
|
+
/**
|
|
159
|
+
* Get all ancestor nodes from a node up to the root.
|
|
160
|
+
*
|
|
161
|
+
* @param snapshot - The root tree snapshot
|
|
162
|
+
* @param nodeId - The ID of the node
|
|
163
|
+
* @returns Array of ancestor snapshots from immediate parent to root, or empty array
|
|
164
|
+
*/
|
|
165
|
+
export function getAncestors<TNode extends AnyTreeNodePrimitive>(
|
|
166
|
+
snapshot: TreeNodeSnapshot<TNode> | undefined,
|
|
167
|
+
nodeId: string
|
|
168
|
+
): readonly TreeNodeSnapshot<TNode>[] {
|
|
169
|
+
if (!snapshot) return [];
|
|
170
|
+
|
|
171
|
+
const result = findNodeWithPath(snapshot, nodeId);
|
|
172
|
+
if (!result || result.path.length <= 1) return [];
|
|
173
|
+
|
|
174
|
+
// Path includes the node itself, so we need all nodes except the last one
|
|
175
|
+
const ancestorIds = result.path.slice(0, -1);
|
|
176
|
+
const ancestors: TreeNodeSnapshot<TNode>[] = [];
|
|
177
|
+
|
|
178
|
+
// Collect ancestors in reverse order (parent first, root last)
|
|
179
|
+
for (let i = ancestorIds.length - 1; i >= 0; i--) {
|
|
180
|
+
const id = ancestorIds[i];
|
|
181
|
+
if (id) {
|
|
182
|
+
const ancestor = findNodeById(snapshot, id);
|
|
183
|
+
if (ancestor) {
|
|
184
|
+
ancestors.push(ancestor);
|
|
185
|
+
}
|
|
186
|
+
}
|
|
187
|
+
}
|
|
188
|
+
|
|
189
|
+
return ancestors;
|
|
190
|
+
}
|
|
191
|
+
|
|
192
|
+
/**
|
|
193
|
+
* Get all descendant nodes of a given node (flat array).
|
|
194
|
+
*
|
|
195
|
+
* @param snapshot - The root tree snapshot
|
|
196
|
+
* @param nodeId - The ID of the node (if undefined, returns all descendants of root)
|
|
197
|
+
* @returns Flat array of all descendant node snapshots
|
|
198
|
+
*/
|
|
199
|
+
export function getDescendants<TNode extends AnyTreeNodePrimitive>(
|
|
200
|
+
snapshot: TreeNodeSnapshot<TNode> | undefined,
|
|
201
|
+
nodeId?: string
|
|
202
|
+
): readonly TreeNodeSnapshot<TNode>[] {
|
|
203
|
+
if (!snapshot) return [];
|
|
204
|
+
|
|
205
|
+
const startNode = nodeId ? findNodeById(snapshot, nodeId) : snapshot;
|
|
206
|
+
if (!startNode) return [];
|
|
207
|
+
|
|
208
|
+
const descendants: TreeNodeSnapshot<TNode>[] = [];
|
|
209
|
+
|
|
210
|
+
const collect = (node: TreeNodeSnapshot<TNode>) => {
|
|
211
|
+
for (const child of node.children) {
|
|
212
|
+
descendants.push(child as TreeNodeSnapshot<TNode>);
|
|
213
|
+
collect(child as TreeNodeSnapshot<TNode>);
|
|
214
|
+
}
|
|
215
|
+
};
|
|
216
|
+
|
|
217
|
+
collect(startNode);
|
|
218
|
+
return descendants;
|
|
219
|
+
}
|
|
220
|
+
|
|
221
|
+
/**
|
|
222
|
+
* Get siblings of a node (nodes with the same parent).
|
|
223
|
+
*
|
|
224
|
+
* @param snapshot - The root tree snapshot
|
|
225
|
+
* @param nodeId - The ID of the node
|
|
226
|
+
* @param includeSelf - Whether to include the node itself (default: false)
|
|
227
|
+
* @returns Array of sibling snapshots
|
|
228
|
+
*/
|
|
229
|
+
export function getSiblings<TNode extends AnyTreeNodePrimitive>(
|
|
230
|
+
snapshot: TreeNodeSnapshot<TNode> | undefined,
|
|
231
|
+
nodeId: string,
|
|
232
|
+
includeSelf: boolean = false
|
|
233
|
+
): readonly TreeNodeSnapshot<TNode>[] {
|
|
234
|
+
if (!snapshot) return [];
|
|
235
|
+
|
|
236
|
+
const parentResult = getParent(snapshot, nodeId);
|
|
237
|
+
|
|
238
|
+
// If no parent, this is the root - root has no siblings
|
|
239
|
+
if (!parentResult) return [];
|
|
240
|
+
|
|
241
|
+
const siblings = parentResult.parent.children as readonly TreeNodeSnapshot<TNode>[];
|
|
242
|
+
|
|
243
|
+
if (includeSelf) {
|
|
244
|
+
return siblings;
|
|
245
|
+
}
|
|
246
|
+
|
|
247
|
+
return siblings.filter((s) => s.id !== nodeId);
|
|
248
|
+
}
|
|
249
|
+
|
|
250
|
+
// =============================================================================
|
|
251
|
+
// Query Functions
|
|
252
|
+
// =============================================================================
|
|
253
|
+
|
|
254
|
+
/**
|
|
255
|
+
* Find the first node matching a predicate.
|
|
256
|
+
*
|
|
257
|
+
* @param snapshot - The root tree snapshot
|
|
258
|
+
* @param predicate - Function to test each node
|
|
259
|
+
* @returns First matching node snapshot, or undefined
|
|
260
|
+
*/
|
|
261
|
+
export function findNode<TNode extends AnyTreeNodePrimitive>(
|
|
262
|
+
snapshot: TreeNodeSnapshot<TNode> | undefined,
|
|
263
|
+
predicate: (node: TreeNodeSnapshot<TNode>) => boolean
|
|
264
|
+
): TreeNodeSnapshot<TNode> | undefined {
|
|
265
|
+
if (!snapshot) return undefined;
|
|
266
|
+
|
|
267
|
+
if (predicate(snapshot)) return snapshot;
|
|
268
|
+
|
|
269
|
+
for (const child of snapshot.children) {
|
|
270
|
+
const found = findNode(child as TreeNodeSnapshot<TNode>, predicate);
|
|
271
|
+
if (found) return found;
|
|
272
|
+
}
|
|
273
|
+
|
|
274
|
+
return undefined;
|
|
275
|
+
}
|
|
276
|
+
|
|
277
|
+
/**
|
|
278
|
+
* Find all nodes matching a predicate.
|
|
279
|
+
*
|
|
280
|
+
* @param snapshot - The root tree snapshot
|
|
281
|
+
* @param predicate - Function to test each node
|
|
282
|
+
* @returns Array of matching node snapshots
|
|
283
|
+
*/
|
|
284
|
+
export function findNodes<TNode extends AnyTreeNodePrimitive>(
|
|
285
|
+
snapshot: TreeNodeSnapshot<TNode> | undefined,
|
|
286
|
+
predicate: (node: TreeNodeSnapshot<TNode>) => boolean
|
|
287
|
+
): readonly TreeNodeSnapshot<TNode>[] {
|
|
288
|
+
if (!snapshot) return [];
|
|
289
|
+
|
|
290
|
+
const results: TreeNodeSnapshot<TNode>[] = [];
|
|
291
|
+
|
|
292
|
+
const search = (node: TreeNodeSnapshot<TNode>) => {
|
|
293
|
+
if (predicate(node)) {
|
|
294
|
+
results.push(node);
|
|
295
|
+
}
|
|
296
|
+
for (const child of node.children) {
|
|
297
|
+
search(child as TreeNodeSnapshot<TNode>);
|
|
298
|
+
}
|
|
299
|
+
};
|
|
300
|
+
|
|
301
|
+
search(snapshot);
|
|
302
|
+
return results;
|
|
303
|
+
}
|
|
304
|
+
|
|
305
|
+
/**
|
|
306
|
+
* Get the depth of a specific node (0 = root).
|
|
307
|
+
*
|
|
308
|
+
* @param snapshot - The root tree snapshot
|
|
309
|
+
* @param nodeId - The ID of the node
|
|
310
|
+
* @returns The depth, or -1 if not found
|
|
311
|
+
*/
|
|
312
|
+
export function getNodeDepth<TNode extends AnyTreeNodePrimitive>(
|
|
313
|
+
snapshot: TreeNodeSnapshot<TNode> | undefined,
|
|
314
|
+
nodeId: string
|
|
315
|
+
): number {
|
|
316
|
+
if (!snapshot) return -1;
|
|
317
|
+
|
|
318
|
+
const result = findNodeWithPath(snapshot, nodeId);
|
|
319
|
+
return result ? result.depth : -1;
|
|
320
|
+
}
|
|
321
|
+
|
|
322
|
+
/**
|
|
323
|
+
* Check if one node is an ancestor of another.
|
|
324
|
+
*
|
|
325
|
+
* @param snapshot - The root tree snapshot
|
|
326
|
+
* @param ancestorId - Potential ancestor node ID
|
|
327
|
+
* @param descendantId - Potential descendant node ID
|
|
328
|
+
* @returns true if ancestorId is an ancestor of descendantId
|
|
329
|
+
*/
|
|
330
|
+
export function isAncestorOf<TNode extends AnyTreeNodePrimitive>(
|
|
331
|
+
snapshot: TreeNodeSnapshot<TNode> | undefined,
|
|
332
|
+
ancestorId: string,
|
|
333
|
+
descendantId: string
|
|
334
|
+
): boolean {
|
|
335
|
+
if (!snapshot) return false;
|
|
336
|
+
|
|
337
|
+
const result = findNodeWithPath(snapshot, descendantId);
|
|
338
|
+
if (!result) return false;
|
|
339
|
+
|
|
340
|
+
// Check if ancestorId is in the path (excluding the descendant itself)
|
|
341
|
+
return result.path.slice(0, -1).includes(ancestorId);
|
|
342
|
+
}
|
|
343
|
+
|
|
344
|
+
// =============================================================================
|
|
345
|
+
// Traversal Functions
|
|
346
|
+
// =============================================================================
|
|
347
|
+
|
|
348
|
+
/**
|
|
349
|
+
* Traverse the tree and call a visitor function for each node.
|
|
350
|
+
* Return false from visitor to stop traversal.
|
|
351
|
+
*
|
|
352
|
+
* @param snapshot - The root tree snapshot
|
|
353
|
+
* @param visitor - Function called for each node (return false to stop)
|
|
354
|
+
* @param options - Traversal options (order: 'pre' | 'post')
|
|
355
|
+
*/
|
|
356
|
+
export function traverse<TNode extends AnyTreeNodePrimitive>(
|
|
357
|
+
snapshot: TreeNodeSnapshot<TNode> | undefined,
|
|
358
|
+
visitor: (node: TreeNodeSnapshot<TNode>, depth: number) => void | false,
|
|
359
|
+
options: TraverseOptions = {}
|
|
360
|
+
): void {
|
|
361
|
+
if (!snapshot) return;
|
|
362
|
+
|
|
363
|
+
const { order = "pre" } = options;
|
|
364
|
+
|
|
365
|
+
const visit = (node: TreeNodeSnapshot<TNode>, depth: number): boolean => {
|
|
366
|
+
if (order === "pre") {
|
|
367
|
+
const result = visitor(node, depth);
|
|
368
|
+
if (result === false) return false;
|
|
369
|
+
}
|
|
370
|
+
|
|
371
|
+
for (const child of node.children) {
|
|
372
|
+
const shouldContinue = visit(child as TreeNodeSnapshot<TNode>, depth + 1);
|
|
373
|
+
if (!shouldContinue) return false;
|
|
374
|
+
}
|
|
375
|
+
|
|
376
|
+
if (order === "post") {
|
|
377
|
+
const result = visitor(node, depth);
|
|
378
|
+
if (result === false) return false;
|
|
379
|
+
}
|
|
380
|
+
|
|
381
|
+
return true;
|
|
382
|
+
};
|
|
383
|
+
|
|
384
|
+
visit(snapshot, 0);
|
|
385
|
+
}
|
|
386
|
+
|
|
387
|
+
/**
|
|
388
|
+
* Flatten the tree into an array with parent information.
|
|
389
|
+
*
|
|
390
|
+
* @param snapshot - The root tree snapshot
|
|
391
|
+
* @returns Array of { node, parentId, depth } objects
|
|
392
|
+
*/
|
|
393
|
+
export function flattenTree<TNode extends AnyTreeNodePrimitive>(
|
|
394
|
+
snapshot: TreeNodeSnapshot<TNode> | undefined
|
|
395
|
+
): readonly FlattenedNode<TNode>[] {
|
|
396
|
+
if (!snapshot) return [];
|
|
397
|
+
|
|
398
|
+
const result: FlattenedNode<TNode>[] = [];
|
|
399
|
+
|
|
400
|
+
const flatten = (
|
|
401
|
+
node: TreeNodeSnapshot<TNode>,
|
|
402
|
+
parentId: string | null,
|
|
403
|
+
depth: number
|
|
404
|
+
) => {
|
|
405
|
+
result.push({ node, parentId, depth });
|
|
406
|
+
|
|
407
|
+
for (const child of node.children) {
|
|
408
|
+
flatten(child as TreeNodeSnapshot<TNode>, node.id, depth + 1);
|
|
409
|
+
}
|
|
410
|
+
};
|
|
411
|
+
|
|
412
|
+
flatten(snapshot, null, 0);
|
|
413
|
+
return result;
|
|
414
|
+
}
|
|
415
|
+
|
|
416
|
+
/**
|
|
417
|
+
* Map over all nodes in the tree, transforming each node's data.
|
|
418
|
+
* Preserves tree structure while transforming node content.
|
|
419
|
+
*
|
|
420
|
+
* @param snapshot - The root tree snapshot
|
|
421
|
+
* @param mapper - Function to transform each node
|
|
422
|
+
* @returns New tree structure with transformed nodes, or undefined
|
|
423
|
+
*/
|
|
424
|
+
export function mapTree<TNode extends AnyTreeNodePrimitive, R>(
|
|
425
|
+
snapshot: TreeNodeSnapshot<TNode> | undefined,
|
|
426
|
+
mapper: (node: TreeNodeSnapshot<TNode>, depth: number) => R
|
|
427
|
+
): { value: R; children: ReturnType<typeof mapTree<TNode, R>>[] } | undefined {
|
|
428
|
+
if (!snapshot) return undefined;
|
|
429
|
+
|
|
430
|
+
const map = (
|
|
431
|
+
node: TreeNodeSnapshot<TNode>,
|
|
432
|
+
depth: number
|
|
433
|
+
): { value: R; children: ReturnType<typeof mapTree<TNode, R>>[] } => {
|
|
434
|
+
const value = mapper(node, depth);
|
|
435
|
+
const children = node.children.map((child) =>
|
|
436
|
+
map(child as TreeNodeSnapshot<TNode>, depth + 1)
|
|
437
|
+
);
|
|
438
|
+
return { value, children };
|
|
439
|
+
};
|
|
440
|
+
|
|
441
|
+
return map(snapshot, 0);
|
|
442
|
+
}
|
|
443
|
+
|
|
444
|
+
// =============================================================================
|
|
445
|
+
// Schema Functions (work with TreeNodePrimitive, not snapshots)
|
|
446
|
+
// =============================================================================
|
|
447
|
+
|
|
448
|
+
/**
|
|
449
|
+
* Build a lookup map from node type strings to their TreeNodePrimitive definitions.
|
|
450
|
+
* Useful for resolving snapshot node types back to their schema definitions.
|
|
451
|
+
*
|
|
452
|
+
* @param tree - The TreePrimitive to analyze
|
|
453
|
+
* @returns Map from type string to TreeNodePrimitive
|
|
454
|
+
*
|
|
455
|
+
* @example
|
|
456
|
+
* ```ts
|
|
457
|
+
* const typeMap = buildNodeTypeMap(fileTree);
|
|
458
|
+
* const folderPrimitive = typeMap.get("folder"); // FolderNode
|
|
459
|
+
* ```
|
|
460
|
+
*/
|
|
461
|
+
export function buildNodeTypeMap<TRoot extends AnyTreeNodePrimitive>(
|
|
462
|
+
tree: TreePrimitive<TRoot>
|
|
463
|
+
): Map<string, AnyTreeNodePrimitive> {
|
|
464
|
+
const map = new Map<string, AnyTreeNodePrimitive>();
|
|
465
|
+
const visited = new Set<string>();
|
|
466
|
+
|
|
467
|
+
const visit = (node: AnyTreeNodePrimitive) => {
|
|
468
|
+
if (visited.has(node.type)) return;
|
|
469
|
+
visited.add(node.type);
|
|
470
|
+
map.set(node.type, node);
|
|
471
|
+
|
|
472
|
+
for (const child of node.children) {
|
|
473
|
+
visit(child);
|
|
474
|
+
}
|
|
475
|
+
};
|
|
476
|
+
|
|
477
|
+
visit(tree.root);
|
|
478
|
+
return map;
|
|
479
|
+
}
|
|
480
|
+
|
|
481
|
+
/**
|
|
482
|
+
* Get the TreeNodePrimitive definition for a snapshot node.
|
|
483
|
+
* Requires the tree schema to resolve the type string to its primitive.
|
|
484
|
+
*
|
|
485
|
+
* @param tree - The TreePrimitive schema
|
|
486
|
+
* @param snapshot - The node snapshot to get the primitive for
|
|
487
|
+
* @returns The TreeNodePrimitive, or undefined if not found
|
|
488
|
+
*
|
|
489
|
+
* @example
|
|
490
|
+
* ```ts
|
|
491
|
+
* const node = findNodeById(treeSnapshot, "some-id");
|
|
492
|
+
* const primitive = getNodePrimitive(fileTree, node);
|
|
493
|
+
* // primitive is FolderNode or FileNode depending on node.type
|
|
494
|
+
* ```
|
|
495
|
+
*/
|
|
496
|
+
export function getNodePrimitive<TRoot extends AnyTreeNodePrimitive>(
|
|
497
|
+
tree: TreePrimitive<TRoot>,
|
|
498
|
+
snapshot: TreeNodeSnapshot<AnyTreeNodePrimitive>
|
|
499
|
+
): AnyTreeNodePrimitive | undefined {
|
|
500
|
+
return getNodeTypeByName(tree, snapshot.type);
|
|
501
|
+
}
|
|
502
|
+
|
|
503
|
+
/**
|
|
504
|
+
* Get the allowed child types for a snapshot node.
|
|
505
|
+
* Combines schema lookup with the node's allowed children.
|
|
506
|
+
*
|
|
507
|
+
* @param tree - The TreePrimitive schema
|
|
508
|
+
* @param snapshot - The node snapshot to get allowed children for
|
|
509
|
+
* @returns Array of allowed child TreeNodePrimitives, or empty array if not found
|
|
510
|
+
*
|
|
511
|
+
* @example
|
|
512
|
+
* ```ts
|
|
513
|
+
* const node = findNodeById(treeSnapshot, "folder-id");
|
|
514
|
+
* const allowedChildren = getAllowedChildTypesForNode(fileTree, node);
|
|
515
|
+
* // Returns [FolderNode, FileNode] if the folder can contain both
|
|
516
|
+
* ```
|
|
517
|
+
*/
|
|
518
|
+
export function getAllowedChildTypesForNode<TRoot extends AnyTreeNodePrimitive>(
|
|
519
|
+
tree: TreePrimitive<TRoot>,
|
|
520
|
+
snapshot: TreeNodeSnapshot<AnyTreeNodePrimitive>
|
|
521
|
+
): readonly AnyTreeNodePrimitive[] {
|
|
522
|
+
const primitive = getNodePrimitive(tree, snapshot);
|
|
523
|
+
if (!primitive) return [];
|
|
524
|
+
return primitive.children;
|
|
525
|
+
}
|
|
526
|
+
|
|
527
|
+
/**
|
|
528
|
+
* Check if a child type is allowed for a specific snapshot node.
|
|
529
|
+
*
|
|
530
|
+
* @param tree - The TreePrimitive schema
|
|
531
|
+
* @param parentSnapshot - The parent node snapshot
|
|
532
|
+
* @param childTypeName - The type string of the potential child
|
|
533
|
+
* @returns true if the child type is allowed
|
|
534
|
+
*
|
|
535
|
+
* @example
|
|
536
|
+
* ```ts
|
|
537
|
+
* const folder = findNodeById(treeSnapshot, "folder-id");
|
|
538
|
+
* canAddChildType(fileTree, folder, "file"); // true
|
|
539
|
+
* canAddChildType(fileTree, folder, "unknown"); // false
|
|
540
|
+
* ```
|
|
541
|
+
*/
|
|
542
|
+
export function canAddChildType<TRoot extends AnyTreeNodePrimitive>(
|
|
543
|
+
tree: TreePrimitive<TRoot>,
|
|
544
|
+
parentSnapshot: TreeNodeSnapshot<AnyTreeNodePrimitive>,
|
|
545
|
+
childTypeName: string
|
|
546
|
+
): boolean {
|
|
547
|
+
const primitive = getNodePrimitive(tree, parentSnapshot);
|
|
548
|
+
if (!primitive) return false;
|
|
549
|
+
return primitive.isChildAllowed(childTypeName);
|
|
550
|
+
}
|
|
551
|
+
|
|
552
|
+
/**
|
|
553
|
+
* Get all allowed child node types for a specific node type.
|
|
554
|
+
*
|
|
555
|
+
* @param nodeType - The TreeNodePrimitive to get children for
|
|
556
|
+
* @returns Array of allowed child TreeNodePrimitives
|
|
557
|
+
*
|
|
558
|
+
* @example
|
|
559
|
+
* ```ts
|
|
560
|
+
* const FolderNode = TreeNode("folder", { ... });
|
|
561
|
+
* const FileNode = TreeNode("file", { ... });
|
|
562
|
+
*
|
|
563
|
+
* // Get allowed children for FolderNode
|
|
564
|
+
* const allowedChildren = getAllowedChildTypes(FolderNode);
|
|
565
|
+
* // Returns [FolderNode, FileNode] if folder can contain both
|
|
566
|
+
* ```
|
|
567
|
+
*/
|
|
568
|
+
export function getAllowedChildTypes<TNode extends AnyTreeNodePrimitive>(
|
|
569
|
+
nodeType: TNode
|
|
570
|
+
): readonly AnyTreeNodePrimitive[] {
|
|
571
|
+
return nodeType.children;
|
|
572
|
+
}
|
|
573
|
+
|
|
574
|
+
/**
|
|
575
|
+
* Get all unique node types reachable in a tree schema.
|
|
576
|
+
* Recursively traverses the tree structure starting from the root.
|
|
577
|
+
*
|
|
578
|
+
* @param tree - The TreePrimitive to analyze
|
|
579
|
+
* @returns Array of all unique TreeNodePrimitives in the tree schema
|
|
580
|
+
*
|
|
581
|
+
* @example
|
|
582
|
+
* ```ts
|
|
583
|
+
* const fileTree = Tree({ root: FolderNode });
|
|
584
|
+
* const allNodeTypes = getAllNodeTypes(fileTree);
|
|
585
|
+
* // Returns [FolderNode, FileNode] - all possible node types
|
|
586
|
+
* ```
|
|
587
|
+
*/
|
|
588
|
+
export function getAllNodeTypes<TRoot extends AnyTreeNodePrimitive>(
|
|
589
|
+
tree: TreePrimitive<TRoot>
|
|
590
|
+
): readonly AnyTreeNodePrimitive[] {
|
|
591
|
+
const visited = new Set<string>();
|
|
592
|
+
const result: AnyTreeNodePrimitive[] = [];
|
|
593
|
+
|
|
594
|
+
const visit = (node: AnyTreeNodePrimitive) => {
|
|
595
|
+
if (visited.has(node.type)) return;
|
|
596
|
+
visited.add(node.type);
|
|
597
|
+
result.push(node);
|
|
598
|
+
|
|
599
|
+
for (const child of node.children) {
|
|
600
|
+
visit(child);
|
|
601
|
+
}
|
|
602
|
+
};
|
|
603
|
+
|
|
604
|
+
visit(tree.root);
|
|
605
|
+
return result;
|
|
606
|
+
}
|
|
607
|
+
|
|
608
|
+
/**
|
|
609
|
+
* Get the node type primitive by its type string from a tree schema.
|
|
610
|
+
*
|
|
611
|
+
* @param tree - The TreePrimitive to search
|
|
612
|
+
* @param typeName - The type string to find (e.g., "folder", "file")
|
|
613
|
+
* @returns The matching TreeNodePrimitive, or undefined if not found
|
|
614
|
+
*
|
|
615
|
+
* @example
|
|
616
|
+
* ```ts
|
|
617
|
+
* const fileTree = Tree({ root: FolderNode });
|
|
618
|
+
* const folderType = getNodeTypeByName(fileTree, "folder");
|
|
619
|
+
* // Returns FolderNode
|
|
620
|
+
* ```
|
|
621
|
+
*/
|
|
622
|
+
export function getNodeTypeByName<TRoot extends AnyTreeNodePrimitive>(
|
|
623
|
+
tree: TreePrimitive<TRoot>,
|
|
624
|
+
typeName: string
|
|
625
|
+
): AnyTreeNodePrimitive | undefined {
|
|
626
|
+
const allTypes = getAllNodeTypes(tree);
|
|
627
|
+
return allTypes.find((node) => node.type === typeName);
|
|
628
|
+
}
|
|
629
|
+
|
|
630
|
+
/**
|
|
631
|
+
* Check if a child type is allowed under a parent type.
|
|
632
|
+
*
|
|
633
|
+
* @param parentType - The parent TreeNodePrimitive
|
|
634
|
+
* @param childTypeName - The type string of the potential child
|
|
635
|
+
* @returns true if the child type is allowed
|
|
636
|
+
*
|
|
637
|
+
* @example
|
|
638
|
+
* ```ts
|
|
639
|
+
* isChildTypeAllowed(FolderNode, "file"); // true if folder can contain files
|
|
640
|
+
* isChildTypeAllowed(FileNode, "folder"); // false - files can't have children
|
|
641
|
+
* ```
|
|
642
|
+
*/
|
|
643
|
+
export function isChildTypeAllowed(
|
|
644
|
+
parentType: AnyTreeNodePrimitive,
|
|
645
|
+
childTypeName: string
|
|
646
|
+
): boolean {
|
|
647
|
+
return parentType.isChildAllowed(childTypeName);
|
|
648
|
+
}
|
|
@@ -1 +0,0 @@
|
|
|
1
|
-
{"version":3,"file":"Primitive-CvFVxR8_.d.cts","names":[],"sources":["../src/OperationPath.ts","../src/OperationDefinition.ts","../src/Operation.ts","../src/Transaction.ts","../src/ProxyEnvironment.ts","../src/Transform.ts","../src/primitives/shared.ts","../src/primitives/String.ts","../src/primitives/Struct.ts","../src/primitives/Boolean.ts","../src/primitives/Number.ts","../src/primitives/Literal.ts","../src/primitives/Array.ts","../src/primitives/Lazy.ts","../src/primitives/Union.ts","../src/primitives/Either.ts","../src/primitives/TreeNode.ts","../src/primitives/Tree.ts","../src/Primitive.ts"],"sourcesContent":[],"mappings":"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"}
|