@weser/tree 1.0.0 → 2.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (119) hide show
  1. package/README.md +1 -1
  2. package/dist/__tests__/add.test.d.ts +2 -0
  3. package/dist/__tests__/add.test.d.ts.map +1 -0
  4. package/dist/__tests__/add.test.js +48 -0
  5. package/dist/__tests__/add.test.js.map +1 -0
  6. package/dist/__tests__/clone.test.d.ts +2 -0
  7. package/dist/__tests__/clone.test.d.ts.map +1 -0
  8. package/dist/__tests__/clone.test.js +46 -0
  9. package/dist/__tests__/clone.test.js.map +1 -0
  10. package/dist/__tests__/create.test.d.ts +2 -0
  11. package/dist/__tests__/create.test.d.ts.map +1 -0
  12. package/dist/__tests__/create.test.js +29 -0
  13. package/dist/__tests__/create.test.js.map +1 -0
  14. package/dist/__tests__/find.test.d.ts +2 -0
  15. package/dist/__tests__/find.test.d.ts.map +1 -0
  16. package/dist/__tests__/find.test.js +36 -0
  17. package/dist/__tests__/find.test.js.map +1 -0
  18. package/dist/__tests__/findAll.test.d.ts +2 -0
  19. package/dist/__tests__/findAll.test.d.ts.map +1 -0
  20. package/dist/__tests__/findAll.test.js +34 -0
  21. package/dist/__tests__/findAll.test.js.map +1 -0
  22. package/dist/__tests__/get.test.d.ts +2 -0
  23. package/dist/__tests__/get.test.d.ts.map +1 -0
  24. package/dist/__tests__/get.test.js +34 -0
  25. package/dist/__tests__/get.test.js.map +1 -0
  26. package/dist/__tests__/getParent.test.d.ts +2 -0
  27. package/dist/__tests__/getParent.test.d.ts.map +1 -0
  28. package/dist/__tests__/getParent.test.js +33 -0
  29. package/dist/__tests__/getParent.test.js.map +1 -0
  30. package/dist/__tests__/helpers.d.ts +9 -0
  31. package/dist/__tests__/helpers.d.ts.map +1 -0
  32. package/dist/__tests__/helpers.js +34 -0
  33. package/dist/__tests__/helpers.js.map +1 -0
  34. package/dist/__tests__/insert.test.d.ts +2 -0
  35. package/dist/__tests__/insert.test.d.ts.map +1 -0
  36. package/dist/__tests__/insert.test.js +49 -0
  37. package/dist/__tests__/insert.test.js.map +1 -0
  38. package/dist/__tests__/move.test.d.ts +2 -0
  39. package/dist/__tests__/move.test.d.ts.map +1 -0
  40. package/dist/__tests__/move.test.js +48 -0
  41. package/dist/__tests__/move.test.js.map +1 -0
  42. package/dist/__tests__/remove.test.d.ts +2 -0
  43. package/dist/__tests__/remove.test.d.ts.map +1 -0
  44. package/dist/__tests__/remove.test.js +43 -0
  45. package/dist/__tests__/remove.test.js.map +1 -0
  46. package/dist/__tests__/replace.test.d.ts +2 -0
  47. package/dist/__tests__/replace.test.d.ts.map +1 -0
  48. package/dist/__tests__/replace.test.js +48 -0
  49. package/dist/__tests__/replace.test.js.map +1 -0
  50. package/dist/__tests__/traverse.test.d.ts +2 -0
  51. package/dist/__tests__/traverse.test.d.ts.map +1 -0
  52. package/dist/__tests__/traverse.test.js +55 -0
  53. package/dist/__tests__/traverse.test.js.map +1 -0
  54. package/dist/__tests__/update.test.d.ts +2 -0
  55. package/dist/__tests__/update.test.d.ts.map +1 -0
  56. package/dist/__tests__/update.test.js +41 -0
  57. package/dist/__tests__/update.test.js.map +1 -0
  58. package/dist/add.d.ts +3 -0
  59. package/dist/add.d.ts.map +1 -0
  60. package/dist/add.js +10 -0
  61. package/dist/add.js.map +1 -0
  62. package/dist/clone.d.ts +3 -0
  63. package/dist/clone.d.ts.map +1 -0
  64. package/dist/clone.js +23 -0
  65. package/dist/clone.js.map +1 -0
  66. package/dist/create.d.ts +3 -0
  67. package/dist/create.d.ts.map +1 -0
  68. package/dist/create.js +8 -0
  69. package/dist/create.js.map +1 -0
  70. package/dist/find.d.ts +3 -0
  71. package/dist/find.d.ts.map +1 -0
  72. package/dist/find.js +15 -0
  73. package/dist/find.js.map +1 -0
  74. package/dist/findAll.d.ts +3 -0
  75. package/dist/findAll.d.ts.map +1 -0
  76. package/dist/findAll.js +13 -0
  77. package/dist/findAll.js.map +1 -0
  78. package/dist/get.d.ts +3 -0
  79. package/dist/get.d.ts.map +1 -0
  80. package/dist/get.js +15 -0
  81. package/dist/get.js.map +1 -0
  82. package/dist/getParent.d.ts +3 -0
  83. package/dist/getParent.d.ts.map +1 -0
  84. package/dist/getParent.js +5 -0
  85. package/dist/getParent.js.map +1 -0
  86. package/dist/index.d.ts +15 -14
  87. package/dist/index.d.ts.map +1 -0
  88. package/dist/index.js +15 -14
  89. package/dist/index.js.map +1 -0
  90. package/dist/insert.d.ts +3 -0
  91. package/dist/insert.d.ts.map +1 -0
  92. package/dist/insert.js +18 -0
  93. package/dist/insert.js.map +1 -0
  94. package/dist/move.d.ts +3 -0
  95. package/dist/move.d.ts.map +1 -0
  96. package/dist/move.js +13 -0
  97. package/dist/move.js.map +1 -0
  98. package/dist/remove.d.ts +3 -0
  99. package/dist/remove.d.ts.map +1 -0
  100. package/dist/remove.js +15 -0
  101. package/dist/remove.js.map +1 -0
  102. package/dist/replace.d.ts +3 -0
  103. package/dist/replace.d.ts.map +1 -0
  104. package/dist/replace.js +22 -0
  105. package/dist/replace.js.map +1 -0
  106. package/dist/traverse.d.ts +2 -1
  107. package/dist/traverse.d.ts.map +1 -0
  108. package/dist/traverse.js +3 -2
  109. package/dist/traverse.js.map +1 -0
  110. package/dist/tsconfig.tsbuildinfo +1 -1
  111. package/dist/types.d.ts +1 -0
  112. package/dist/types.d.ts.map +1 -0
  113. package/dist/types.js +1 -0
  114. package/dist/types.js.map +1 -0
  115. package/dist/update.d.ts +3 -0
  116. package/dist/update.d.ts.map +1 -0
  117. package/dist/update.js +13 -0
  118. package/dist/update.js.map +1 -0
  119. package/package.json +8 -8
package/README.md CHANGED
@@ -1,3 +1,3 @@
1
1
  # @weser/loops
2
2
 
3
- [Documentation](https://packages.weser.io/loops)
3
+ [Documentation](https://stack.weser.io/loops)
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=add.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"add.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/add.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,48 @@
1
+ import { describe, test, expect } from 'vitest';
2
+ import add from '../add';
3
+ import get from '../get';
4
+ import { createTestTree, createSimpleNode } from './helpers';
5
+ describe('add', () => {
6
+ test('adds child to parent node', () => {
7
+ const tree = createTestTree();
8
+ const newNode = createSimpleNode('new-node', 'New Node');
9
+ const result = add(tree, 'root', newNode);
10
+ const added = get(result, 'new-node');
11
+ expect(added?.name).toBe('New Node');
12
+ });
13
+ test('adds child at end of children array', () => {
14
+ const tree = createTestTree();
15
+ const newNode = createSimpleNode('new-node', 'New Node');
16
+ const result = add(tree, 'root', newNode);
17
+ const parent = get(result, 'root');
18
+ expect(parent?.children?.at(-1)?.id).toBe('new-node');
19
+ });
20
+ test('adds child to nested node', () => {
21
+ const tree = createTestTree();
22
+ const newNode = createSimpleNode('new-grandchild', 'New Grandchild');
23
+ const result = add(tree, 'child1', newNode);
24
+ const parent = get(result, 'child1');
25
+ expect(parent?.children).toHaveLength(3);
26
+ expect(parent?.children?.at(-1)?.id).toBe('new-grandchild');
27
+ });
28
+ test('returns unchanged tree if parent not found', () => {
29
+ const tree = createTestTree();
30
+ const newNode = createSimpleNode('new-node', 'New Node');
31
+ const result = add(tree, 'non-existent', newNode);
32
+ expect(result).toBe(tree);
33
+ });
34
+ test('returns unchanged tree if parent has no children array', () => {
35
+ const tree = createTestTree();
36
+ const newNode = createSimpleNode('new-node', 'New Node');
37
+ const result = add(tree, 'grandchild1', newNode);
38
+ expect(result).toBe(tree);
39
+ });
40
+ test('can add to empty children array', () => {
41
+ const tree = createTestTree();
42
+ const newNode = createSimpleNode('new-node', 'New Node');
43
+ const result = add(tree, 'child2', newNode);
44
+ const parent = get(result, 'child2');
45
+ expect(parent?.children).toHaveLength(1);
46
+ });
47
+ });
48
+ //# sourceMappingURL=add.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"add.test.js","sourceRoot":"","sources":["../../src/__tests__/add.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=clone.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"clone.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/clone.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,46 @@
1
+ import { describe, test, expect } from 'vitest';
2
+ import clone from '../clone';
3
+ import { createTestTree } from './helpers';
4
+ describe('clone', () => {
5
+ test('clones node with new id', () => {
6
+ const tree = createTestTree();
7
+ const cloned = clone(tree, 'child1');
8
+ expect(cloned).not.toBeNull();
9
+ expect(cloned?.id).not.toBe('child1');
10
+ expect(cloned?.name).toBe('Child 1');
11
+ });
12
+ test('clones all descendants with new ids', () => {
13
+ const tree = createTestTree();
14
+ const cloned = clone(tree, 'child1');
15
+ expect(cloned?.children).toHaveLength(2);
16
+ expect(cloned?.children?.[0].id).not.toBe('grandchild1');
17
+ expect(cloned?.children?.[1].id).not.toBe('grandchild2');
18
+ });
19
+ test('preserves structure', () => {
20
+ const tree = createTestTree();
21
+ const cloned = clone(tree, 'child1');
22
+ expect(cloned?.children).toHaveLength(2);
23
+ expect(cloned?.children?.[0].name).toBe('Grandchild 1');
24
+ expect(cloned?.children?.[1].name).toBe('Grandchild 2');
25
+ });
26
+ test('returns null for non-existent node', () => {
27
+ const tree = createTestTree();
28
+ const cloned = clone(tree, 'non-existent');
29
+ expect(cloned).toBeNull();
30
+ });
31
+ test('clones leaf node', () => {
32
+ const tree = createTestTree();
33
+ const cloned = clone(tree, 'grandchild1');
34
+ expect(cloned).not.toBeNull();
35
+ expect(cloned?.id).not.toBe('grandchild1');
36
+ expect(cloned?.name).toBe('Grandchild 1');
37
+ expect(cloned?.children).toBeNull();
38
+ });
39
+ test('cloned tree is independent', () => {
40
+ const tree = createTestTree();
41
+ const cloned = clone(tree, 'root');
42
+ // Verify the clone has different ids
43
+ expect(cloned?.id).not.toBe('root');
44
+ });
45
+ });
46
+ //# sourceMappingURL=clone.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"clone.test.js","sourceRoot":"","sources":["../../src/__tests__/clone.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=create.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/create.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,29 @@
1
+ import { describe, test, expect } from 'vitest';
2
+ import create from '../create';
3
+ describe('create', () => {
4
+ test('creates node with auto-generated id', () => {
5
+ const node = create({ name: 'Test', children: null });
6
+ expect(node.id).toBeDefined();
7
+ expect(typeof node.id).toBe('string');
8
+ expect(node.id.length).toBeGreaterThan(0);
9
+ });
10
+ test('preserves other properties', () => {
11
+ const node = create({ name: 'Test Node', children: null });
12
+ expect(node.name).toBe('Test Node');
13
+ expect(node.children).toBeNull();
14
+ });
15
+ test('generates unique ids', () => {
16
+ const node1 = create({ name: 'Node 1', children: null });
17
+ const node2 = create({ name: 'Node 2', children: null });
18
+ expect(node1.id).not.toBe(node2.id);
19
+ });
20
+ test('handles nodes with children', () => {
21
+ const node = create({
22
+ name: 'Parent',
23
+ children: [{ id: 'child', name: 'Child', children: null }],
24
+ });
25
+ expect(node.children).toHaveLength(1);
26
+ expect(node.children[0].id).toBe('child');
27
+ });
28
+ });
29
+ //# sourceMappingURL=create.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"create.test.js","sourceRoot":"","sources":["../../src/__tests__/create.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AAE/C,OAAO,MAAM,MAAM,WAAW,CAAA;AAG9B,QAAQ,CAAC,QAAQ,EAAE,GAAG,EAAE;IACtB,IAAI,CAAC,qCAAqC,EAAE,GAAG,EAAE;QAC/C,MAAM,IAAI,GAAG,MAAM,CAAW,EAAE,IAAI,EAAE,MAAM,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAA;QAE/D,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,CAAC,WAAW,EAAE,CAAA;QAC7B,MAAM,CAAC,OAAO,IAAI,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;QACrC,MAAM,CAAC,IAAI,CAAC,EAAE,CAAC,MAAM,CAAC,CAAC,eAAe,CAAC,CAAC,CAAC,CAAA;IAC3C,CAAC,CAAC,CAAA;IAEF,IAAI,CAAC,4BAA4B,EAAE,GAAG,EAAE;QACtC,MAAM,IAAI,GAAG,MAAM,CAAW,EAAE,IAAI,EAAE,WAAW,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAA;QAEpE,MAAM,CAAC,IAAI,CAAC,IAAI,CAAC,CAAC,IAAI,CAAC,WAAW,CAAC,CAAA;QACnC,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,QAAQ,EAAE,CAAA;IAClC,CAAC,CAAC,CAAA;IAEF,IAAI,CAAC,sBAAsB,EAAE,GAAG,EAAE;QAChC,MAAM,KAAK,GAAG,MAAM,CAAW,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAA;QAClE,MAAM,KAAK,GAAG,MAAM,CAAW,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC,CAAA;QAElE,MAAM,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC,GAAG,CAAC,IAAI,CAAC,KAAK,CAAC,EAAE,CAAC,CAAA;IACrC,CAAC,CAAC,CAAA;IAEF,IAAI,CAAC,6BAA6B,EAAE,GAAG,EAAE;QACvC,MAAM,IAAI,GAAG,MAAM,CAAW;YAC5B,IAAI,EAAE,QAAQ;YACd,QAAQ,EAAE,CAAC,EAAE,EAAE,EAAE,OAAO,EAAE,IAAI,EAAE,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAC;SAC3D,CAAC,CAAA;QAEF,MAAM,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAA;QACrC,MAAM,CAAC,IAAI,CAAC,QAAS,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,OAAO,CAAC,CAAA;IAC5C,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=find.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"find.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/find.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,36 @@
1
+ import { describe, test, expect } from 'vitest';
2
+ import find from '../find';
3
+ import { createTestTree } from './helpers';
4
+ describe('find', () => {
5
+ test('finds node by condition', () => {
6
+ const tree = createTestTree();
7
+ const result = find(tree, (node) => node.name === 'Child 2');
8
+ expect(result?.id).toBe('child2');
9
+ });
10
+ test('finds root node when condition matches', () => {
11
+ const tree = createTestTree();
12
+ const result = find(tree, (node) => node.name === 'Root');
13
+ expect(result?.id).toBe('root');
14
+ });
15
+ test('finds nested node', () => {
16
+ const tree = createTestTree();
17
+ const result = find(tree, (node) => node.name === 'Grandchild 1');
18
+ expect(result?.id).toBe('grandchild1');
19
+ });
20
+ test('returns null if not found', () => {
21
+ const tree = createTestTree();
22
+ const result = find(tree, (node) => node.name === 'Non-existent');
23
+ expect(result).toBeNull();
24
+ });
25
+ test('returns first matching node', () => {
26
+ const tree = createTestTree();
27
+ const result = find(tree, (node) => node.id.startsWith('child'));
28
+ expect(result?.id).toBe('child1');
29
+ });
30
+ test('works with single node tree', () => {
31
+ const tree = { id: 'single', name: 'Single', children: null };
32
+ const result = find(tree, (node) => node.name === 'Single');
33
+ expect(result?.id).toBe('single');
34
+ });
35
+ });
36
+ //# sourceMappingURL=find.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"find.test.js","sourceRoot":"","sources":["../../src/__tests__/find.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AAE/C,OAAO,IAAI,MAAM,SAAS,CAAA;AAC1B,OAAO,EAAE,cAAc,EAAE,MAAM,WAAW,CAAA;AAE1C,QAAQ,CAAC,MAAM,EAAE,GAAG,EAAE;IACpB,IAAI,CAAC,yBAAyB,EAAE,GAAG,EAAE;QACnC,MAAM,IAAI,GAAG,cAAc,EAAE,CAAA;QAC7B,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,SAAS,CAAC,CAAA;QAE5D,MAAM,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;IACnC,CAAC,CAAC,CAAA;IAEF,IAAI,CAAC,wCAAwC,EAAE,GAAG,EAAE;QAClD,MAAM,IAAI,GAAG,cAAc,EAAE,CAAA;QAC7B,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,MAAM,CAAC,CAAA;QAEzD,MAAM,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;IACjC,CAAC,CAAC,CAAA;IAEF,IAAI,CAAC,mBAAmB,EAAE,GAAG,EAAE;QAC7B,MAAM,IAAI,GAAG,cAAc,EAAE,CAAA;QAC7B,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,cAAc,CAAC,CAAA;QAEjE,MAAM,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAA;IACxC,CAAC,CAAC,CAAA;IAEF,IAAI,CAAC,2BAA2B,EAAE,GAAG,EAAE;QACrC,MAAM,IAAI,GAAG,cAAc,EAAE,CAAA;QAC7B,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,cAAc,CAAC,CAAA;QAEjE,MAAM,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE,CAAA;IAC3B,CAAC,CAAC,CAAA;IAEF,IAAI,CAAC,6BAA6B,EAAE,GAAG,EAAE;QACvC,MAAM,IAAI,GAAG,cAAc,EAAE,CAAA;QAC7B,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAA;QAEhE,MAAM,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;IACnC,CAAC,CAAC,CAAA;IAEF,IAAI,CAAC,6BAA6B,EAAE,GAAG,EAAE;QACvC,MAAM,IAAI,GAAG,EAAE,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAA;QAC7D,MAAM,MAAM,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,QAAQ,CAAC,CAAA;QAE3D,MAAM,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;IACnC,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=findAll.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"findAll.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/findAll.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,34 @@
1
+ import { describe, test, expect } from 'vitest';
2
+ import findAll from '../findAll';
3
+ import { createTestTree } from './helpers';
4
+ describe('findAll', () => {
5
+ test('finds all matching nodes', () => {
6
+ const tree = createTestTree();
7
+ const result = findAll(tree, (node) => node.id.startsWith('child'));
8
+ expect(result).toHaveLength(3);
9
+ expect(result.map((n) => n.id)).toEqual(['child1', 'child2', 'child3']);
10
+ });
11
+ test('includes root node if matches', () => {
12
+ const tree = createTestTree();
13
+ const result = findAll(tree, (node) => node.name.includes('Root'));
14
+ expect(result).toHaveLength(1);
15
+ expect(result[0].id).toBe('root');
16
+ });
17
+ test('finds nested nodes', () => {
18
+ const tree = createTestTree();
19
+ const result = findAll(tree, (node) => node.id.startsWith('grandchild'));
20
+ expect(result).toHaveLength(2);
21
+ });
22
+ test('returns empty array if none match', () => {
23
+ const tree = createTestTree();
24
+ const result = findAll(tree, (node) => node.name === 'Non-existent');
25
+ expect(result).toEqual([]);
26
+ });
27
+ test('finds all nodes with empty children', () => {
28
+ const tree = createTestTree();
29
+ const result = findAll(tree, (node) => node.children === null || node.children?.length === 0);
30
+ // grandchild1, grandchild2, child2 (empty array), child3 (null)
31
+ expect(result).toHaveLength(4);
32
+ });
33
+ });
34
+ //# sourceMappingURL=findAll.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"findAll.test.js","sourceRoot":"","sources":["../../src/__tests__/findAll.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AAE/C,OAAO,OAAO,MAAM,YAAY,CAAA;AAChC,OAAO,EAAE,cAAc,EAAE,MAAM,WAAW,CAAA;AAE1C,QAAQ,CAAC,SAAS,EAAE,GAAG,EAAE;IACvB,IAAI,CAAC,0BAA0B,EAAE,GAAG,EAAE;QACpC,MAAM,IAAI,GAAG,cAAc,EAAE,CAAA;QAC7B,MAAM,MAAM,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAA;QAEnE,MAAM,CAAC,MAAM,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAA;QAC9B,MAAM,CAAC,MAAM,CAAC,GAAG,CAAC,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC,QAAQ,EAAE,QAAQ,EAAE,QAAQ,CAAC,CAAC,CAAA;IACzE,CAAC,CAAC,CAAA;IAEF,IAAI,CAAC,+BAA+B,EAAE,GAAG,EAAE;QACzC,MAAM,IAAI,GAAG,cAAc,EAAE,CAAA;QAC7B,MAAM,MAAM,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAA;QAElE,MAAM,CAAC,MAAM,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAA;QAC9B,MAAM,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;IACnC,CAAC,CAAC,CAAA;IAEF,IAAI,CAAC,oBAAoB,EAAE,GAAG,EAAE;QAC9B,MAAM,IAAI,GAAG,cAAc,EAAE,CAAA;QAC7B,MAAM,MAAM,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,YAAY,CAAC,CAAC,CAAA;QAExE,MAAM,CAAC,MAAM,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAA;IAChC,CAAC,CAAC,CAAA;IAEF,IAAI,CAAC,mCAAmC,EAAE,GAAG,EAAE;QAC7C,MAAM,IAAI,GAAG,cAAc,EAAE,CAAA;QAC7B,MAAM,MAAM,GAAG,OAAO,CAAC,IAAI,EAAE,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,IAAI,KAAK,cAAc,CAAC,CAAA;QAEpE,MAAM,CAAC,MAAM,CAAC,CAAC,OAAO,CAAC,EAAE,CAAC,CAAA;IAC5B,CAAC,CAAC,CAAA;IAEF,IAAI,CAAC,qCAAqC,EAAE,GAAG,EAAE;QAC/C,MAAM,IAAI,GAAG,cAAc,EAAE,CAAA;QAC7B,MAAM,MAAM,GAAG,OAAO,CACpB,IAAI,EACJ,CAAC,IAAI,EAAE,EAAE,CAAC,IAAI,CAAC,QAAQ,KAAK,IAAI,IAAI,IAAI,CAAC,QAAQ,EAAE,MAAM,KAAK,CAAC,CAChE,CAAA;QAED,gEAAgE;QAChE,MAAM,CAAC,MAAM,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,CAAA;IAChC,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=get.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/get.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,34 @@
1
+ import { describe, test, expect } from 'vitest';
2
+ import get from '../get';
3
+ import { createTestTree } from './helpers';
4
+ describe('get', () => {
5
+ test('gets root node by id', () => {
6
+ const tree = createTestTree();
7
+ const result = get(tree, 'root');
8
+ expect(result).toBe(tree);
9
+ expect(result?.name).toBe('Root');
10
+ });
11
+ test('gets child node by id', () => {
12
+ const tree = createTestTree();
13
+ const result = get(tree, 'child1');
14
+ expect(result?.id).toBe('child1');
15
+ expect(result?.name).toBe('Child 1');
16
+ });
17
+ test('gets nested node by id', () => {
18
+ const tree = createTestTree();
19
+ const result = get(tree, 'grandchild1');
20
+ expect(result?.id).toBe('grandchild1');
21
+ expect(result?.name).toBe('Grandchild 1');
22
+ });
23
+ test('returns null for non-existent id', () => {
24
+ const tree = createTestTree();
25
+ const result = get(tree, 'non-existent');
26
+ expect(result).toBeNull();
27
+ });
28
+ test('works with tree without children', () => {
29
+ const tree = { id: 'single', name: 'Single', children: null };
30
+ const result = get(tree, 'single');
31
+ expect(result?.id).toBe('single');
32
+ });
33
+ });
34
+ //# sourceMappingURL=get.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"get.test.js","sourceRoot":"","sources":["../../src/__tests__/get.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AAE/C,OAAO,GAAG,MAAM,QAAQ,CAAA;AACxB,OAAO,EAAE,cAAc,EAAE,MAAM,WAAW,CAAA;AAE1C,QAAQ,CAAC,KAAK,EAAE,GAAG,EAAE;IACnB,IAAI,CAAC,sBAAsB,EAAE,GAAG,EAAE;QAChC,MAAM,IAAI,GAAG,cAAc,EAAE,CAAA;QAC7B,MAAM,MAAM,GAAG,GAAG,CAAC,IAAI,EAAE,MAAM,CAAC,CAAA;QAEhC,MAAM,CAAC,MAAM,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,CAAA;QACzB,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;IACnC,CAAC,CAAC,CAAA;IAEF,IAAI,CAAC,uBAAuB,EAAE,GAAG,EAAE;QACjC,MAAM,IAAI,GAAG,cAAc,EAAE,CAAA;QAC7B,MAAM,MAAM,GAAG,GAAG,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAA;QAElC,MAAM,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;QACjC,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,CAAA;IACtC,CAAC,CAAC,CAAA;IAEF,IAAI,CAAC,wBAAwB,EAAE,GAAG,EAAE;QAClC,MAAM,IAAI,GAAG,cAAc,EAAE,CAAA;QAC7B,MAAM,MAAM,GAAG,GAAG,CAAC,IAAI,EAAE,aAAa,CAAC,CAAA;QAEvC,MAAM,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,aAAa,CAAC,CAAA;QACtC,MAAM,CAAC,MAAM,EAAE,IAAI,CAAC,CAAC,IAAI,CAAC,cAAc,CAAC,CAAA;IAC3C,CAAC,CAAC,CAAA;IAEF,IAAI,CAAC,kCAAkC,EAAE,GAAG,EAAE;QAC5C,MAAM,IAAI,GAAG,cAAc,EAAE,CAAA;QAC7B,MAAM,MAAM,GAAG,GAAG,CAAC,IAAI,EAAE,cAAc,CAAC,CAAA;QAExC,MAAM,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE,CAAA;IAC3B,CAAC,CAAC,CAAA;IAEF,IAAI,CAAC,kCAAkC,EAAE,GAAG,EAAE;QAC5C,MAAM,IAAI,GAAG,EAAE,EAAE,EAAE,QAAQ,EAAE,IAAI,EAAE,QAAQ,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAA;QAC7D,MAAM,MAAM,GAAG,GAAG,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAA;QAElC,MAAM,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;IACnC,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=getParent.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getParent.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/getParent.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,33 @@
1
+ import { describe, test, expect } from 'vitest';
2
+ import getParent from '../getParent';
3
+ import { createTestTree } from './helpers';
4
+ describe('getParent', () => {
5
+ test('gets parent of child node', () => {
6
+ const tree = createTestTree();
7
+ const result = getParent(tree, 'child1');
8
+ expect(result?.id).toBe('root');
9
+ });
10
+ test('gets parent of nested node', () => {
11
+ const tree = createTestTree();
12
+ const result = getParent(tree, 'grandchild1');
13
+ expect(result?.id).toBe('child1');
14
+ });
15
+ test('returns null for root node', () => {
16
+ const tree = createTestTree();
17
+ const result = getParent(tree, 'root');
18
+ expect(result).toBeNull();
19
+ });
20
+ test('returns null for non-existent node', () => {
21
+ const tree = createTestTree();
22
+ const result = getParent(tree, 'non-existent');
23
+ expect(result).toBeNull();
24
+ });
25
+ test('works with different depth levels', () => {
26
+ const tree = createTestTree();
27
+ const parent1 = getParent(tree, 'grandchild2');
28
+ const parent2 = getParent(tree, 'child2');
29
+ expect(parent1?.id).toBe('child1');
30
+ expect(parent2?.id).toBe('root');
31
+ });
32
+ });
33
+ //# sourceMappingURL=getParent.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"getParent.test.js","sourceRoot":"","sources":["../../src/__tests__/getParent.test.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,IAAI,EAAE,MAAM,EAAE,MAAM,QAAQ,CAAA;AAE/C,OAAO,SAAS,MAAM,cAAc,CAAA;AACpC,OAAO,EAAE,cAAc,EAAE,MAAM,WAAW,CAAA;AAE1C,QAAQ,CAAC,WAAW,EAAE,GAAG,EAAE;IACzB,IAAI,CAAC,2BAA2B,EAAE,GAAG,EAAE;QACrC,MAAM,IAAI,GAAG,cAAc,EAAE,CAAA;QAC7B,MAAM,MAAM,GAAG,SAAS,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAA;QAExC,MAAM,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;IACjC,CAAC,CAAC,CAAA;IAEF,IAAI,CAAC,4BAA4B,EAAE,GAAG,EAAE;QACtC,MAAM,IAAI,GAAG,cAAc,EAAE,CAAA;QAC7B,MAAM,MAAM,GAAG,SAAS,CAAC,IAAI,EAAE,aAAa,CAAC,CAAA;QAE7C,MAAM,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;IACnC,CAAC,CAAC,CAAA;IAEF,IAAI,CAAC,4BAA4B,EAAE,GAAG,EAAE;QACtC,MAAM,IAAI,GAAG,cAAc,EAAE,CAAA;QAC7B,MAAM,MAAM,GAAG,SAAS,CAAC,IAAI,EAAE,MAAM,CAAC,CAAA;QAEtC,MAAM,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE,CAAA;IAC3B,CAAC,CAAC,CAAA;IAEF,IAAI,CAAC,oCAAoC,EAAE,GAAG,EAAE;QAC9C,MAAM,IAAI,GAAG,cAAc,EAAE,CAAA;QAC7B,MAAM,MAAM,GAAG,SAAS,CAAC,IAAI,EAAE,cAAc,CAAC,CAAA;QAE9C,MAAM,CAAC,MAAM,CAAC,CAAC,QAAQ,EAAE,CAAA;IAC3B,CAAC,CAAC,CAAA;IAEF,IAAI,CAAC,mCAAmC,EAAE,GAAG,EAAE;QAC7C,MAAM,IAAI,GAAG,cAAc,EAAE,CAAA;QAC7B,MAAM,OAAO,GAAG,SAAS,CAAC,IAAI,EAAE,aAAa,CAAC,CAAA;QAC9C,MAAM,OAAO,GAAG,SAAS,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAA;QAEzC,MAAM,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,QAAQ,CAAC,CAAA;QAClC,MAAM,CAAC,OAAO,EAAE,EAAE,CAAC,CAAC,IAAI,CAAC,MAAM,CAAC,CAAA;IAClC,CAAC,CAAC,CAAA;AACJ,CAAC,CAAC,CAAA"}
@@ -0,0 +1,9 @@
1
+ export type TestNode = {
2
+ id: string;
3
+ name: string;
4
+ children: TestNode[] | null;
5
+ };
6
+ export declare function createTestTree(): TestNode;
7
+ export declare function createSimpleNode(id: string, name: string): TestNode;
8
+ export declare function createParentNode(id: string, name: string, children: TestNode[]): TestNode;
9
+ //# sourceMappingURL=helpers.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"helpers.d.ts","sourceRoot":"","sources":["../../src/__tests__/helpers.ts"],"names":[],"mappings":"AAEA,MAAM,MAAM,QAAQ,GAAG;IACrB,EAAE,EAAE,MAAM,CAAA;IACV,IAAI,EAAE,MAAM,CAAA;IACZ,QAAQ,EAAE,QAAQ,EAAE,GAAG,IAAI,CAAA;CAC5B,CAAA;AAED,wBAAgB,cAAc,IAAI,QAAQ,CAyBzC;AAED,wBAAgB,gBAAgB,CAAC,EAAE,EAAE,MAAM,EAAE,IAAI,EAAE,MAAM,GAAG,QAAQ,CAEnE;AAED,wBAAgB,gBAAgB,CAC9B,EAAE,EAAE,MAAM,EACV,IAAI,EAAE,MAAM,EACZ,QAAQ,EAAE,QAAQ,EAAE,GACnB,QAAQ,CAEV"}
@@ -0,0 +1,34 @@
1
+ // Shared test helpers and fixtures for tree tests
2
+ export function createTestTree() {
3
+ return {
4
+ id: 'root',
5
+ name: 'Root',
6
+ children: [
7
+ {
8
+ id: 'child1',
9
+ name: 'Child 1',
10
+ children: [
11
+ { id: 'grandchild1', name: 'Grandchild 1', children: null },
12
+ { id: 'grandchild2', name: 'Grandchild 2', children: null },
13
+ ],
14
+ },
15
+ {
16
+ id: 'child2',
17
+ name: 'Child 2',
18
+ children: [],
19
+ },
20
+ {
21
+ id: 'child3',
22
+ name: 'Child 3',
23
+ children: null,
24
+ },
25
+ ],
26
+ };
27
+ }
28
+ export function createSimpleNode(id, name) {
29
+ return { id, name, children: null };
30
+ }
31
+ export function createParentNode(id, name, children) {
32
+ return { id, name, children };
33
+ }
34
+ //# sourceMappingURL=helpers.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"helpers.js","sourceRoot":"","sources":["../../src/__tests__/helpers.ts"],"names":[],"mappings":"AAAA,kDAAkD;AAQlD,MAAM,UAAU,cAAc;IAC5B,OAAO;QACL,EAAE,EAAE,MAAM;QACV,IAAI,EAAE,MAAM;QACZ,QAAQ,EAAE;YACR;gBACE,EAAE,EAAE,QAAQ;gBACZ,IAAI,EAAE,SAAS;gBACf,QAAQ,EAAE;oBACR,EAAE,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,cAAc,EAAE,QAAQ,EAAE,IAAI,EAAE;oBAC3D,EAAE,EAAE,EAAE,aAAa,EAAE,IAAI,EAAE,cAAc,EAAE,QAAQ,EAAE,IAAI,EAAE;iBAC5D;aACF;YACD;gBACE,EAAE,EAAE,QAAQ;gBACZ,IAAI,EAAE,SAAS;gBACf,QAAQ,EAAE,EAAE;aACb;YACD;gBACE,EAAE,EAAE,QAAQ;gBACZ,IAAI,EAAE,SAAS;gBACf,QAAQ,EAAE,IAAI;aACf;SACF;KACF,CAAA;AACH,CAAC;AAED,MAAM,UAAU,gBAAgB,CAAC,EAAU,EAAE,IAAY;IACvD,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,IAAI,EAAE,CAAA;AACrC,CAAC;AAED,MAAM,UAAU,gBAAgB,CAC9B,EAAU,EACV,IAAY,EACZ,QAAoB;IAEpB,OAAO,EAAE,EAAE,EAAE,IAAI,EAAE,QAAQ,EAAE,CAAA;AAC/B,CAAC"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=insert.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"insert.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/insert.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,49 @@
1
+ import { describe, test, expect } from 'vitest';
2
+ import insert from '../insert';
3
+ import get from '../get';
4
+ import { createTestTree, createSimpleNode } from './helpers';
5
+ describe('insert', () => {
6
+ test('inserts at specific position', () => {
7
+ const tree = createTestTree();
8
+ const newNode = createSimpleNode('new-node', 'New Node');
9
+ const result = insert(tree, 'root', 1, newNode);
10
+ const parent = get(result, 'root');
11
+ expect(parent?.children?.[1].id).toBe('new-node');
12
+ });
13
+ test('inserts at beginning', () => {
14
+ const tree = createTestTree();
15
+ const newNode = createSimpleNode('first', 'First');
16
+ const result = insert(tree, 'root', 0, newNode);
17
+ const parent = get(result, 'root');
18
+ expect(parent?.children?.[0].id).toBe('first');
19
+ });
20
+ test('inserts at end', () => {
21
+ const tree = createTestTree();
22
+ const newNode = createSimpleNode('last', 'Last');
23
+ const result = insert(tree, 'root', 3, newNode);
24
+ const parent = get(result, 'root');
25
+ expect(parent?.children?.at(-1)?.id).toBe('last');
26
+ });
27
+ test('preserves existing children order', () => {
28
+ const tree = createTestTree();
29
+ const newNode = createSimpleNode('new-node', 'New Node');
30
+ const result = insert(tree, 'root', 1, newNode);
31
+ const parent = get(result, 'root');
32
+ expect(parent?.children?.[0].id).toBe('child1');
33
+ expect(parent?.children?.[1].id).toBe('new-node');
34
+ expect(parent?.children?.[2].id).toBe('child2');
35
+ });
36
+ test('returns unchanged tree if parent not found', () => {
37
+ const tree = createTestTree();
38
+ const newNode = createSimpleNode('new-node', 'New Node');
39
+ const result = insert(tree, 'non-existent', 0, newNode);
40
+ expect(result).toBe(tree);
41
+ });
42
+ test('returns unchanged tree if parent has no children', () => {
43
+ const tree = createTestTree();
44
+ const newNode = createSimpleNode('new-node', 'New Node');
45
+ const result = insert(tree, 'grandchild1', 0, newNode);
46
+ expect(result).toBe(tree);
47
+ });
48
+ });
49
+ //# sourceMappingURL=insert.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"insert.test.js","sourceRoot":"","sources":["../../src/__tests__/insert.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=move.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"move.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/move.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,48 @@
1
+ import { describe, test, expect } from 'vitest';
2
+ import move from '../move';
3
+ import get from '../get';
4
+ import { createTestTree } from './helpers';
5
+ describe('move', () => {
6
+ test('moves node to new parent', () => {
7
+ const tree = createTestTree();
8
+ const result = move(tree, 'grandchild1', 'child2');
9
+ // Node should be in new parent
10
+ const newParent = get(result, 'child2');
11
+ expect(newParent?.children?.some((c) => c.id === 'grandchild1')).toBe(true);
12
+ });
13
+ test('removes node from old parent', () => {
14
+ const tree = createTestTree();
15
+ const result = move(tree, 'grandchild1', 'child2');
16
+ // Node should not be in old parent
17
+ const oldParent = get(result, 'child1');
18
+ expect(oldParent?.children?.some((c) => c.id === 'grandchild1')).toBe(false);
19
+ });
20
+ test('moves to specific index', () => {
21
+ const tree = createTestTree();
22
+ const result = move(tree, 'child3', 'root', 0);
23
+ const parent = get(result, 'root');
24
+ expect(parent?.children?.[0].id).toBe('child3');
25
+ });
26
+ test('moves to end if no index specified', () => {
27
+ const tree = createTestTree();
28
+ const result = move(tree, 'child1', 'child2');
29
+ const newParent = get(result, 'child2');
30
+ expect(newParent?.children?.at(-1)?.id).toBe('child1');
31
+ });
32
+ test('returns unchanged tree if node not found', () => {
33
+ const tree = createTestTree();
34
+ const result = move(tree, 'non-existent', 'root');
35
+ expect(result).toBe(tree);
36
+ });
37
+ test('returns unchanged tree if parent not found', () => {
38
+ const tree = createTestTree();
39
+ const result = move(tree, 'child1', 'non-existent');
40
+ expect(result).toBe(tree);
41
+ });
42
+ test('returns unchanged tree if parent has no children', () => {
43
+ const tree = createTestTree();
44
+ const result = move(tree, 'child1', 'grandchild1');
45
+ expect(result).toBe(tree);
46
+ });
47
+ });
48
+ //# sourceMappingURL=move.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"move.test.js","sourceRoot":"","sources":["../../src/__tests__/move.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=remove.test.d.ts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"remove.test.d.ts","sourceRoot":"","sources":["../../src/__tests__/remove.test.ts"],"names":[],"mappings":""}
@@ -0,0 +1,43 @@
1
+ import { describe, test, expect } from 'vitest';
2
+ import remove from '../remove';
3
+ import get from '../get';
4
+ import { createTestTree } from './helpers';
5
+ describe('remove', () => {
6
+ test('removes node from tree', () => {
7
+ const tree = createTestTree();
8
+ const result = remove(tree, 'child2');
9
+ expect(get(result, 'child2')).toBeNull();
10
+ });
11
+ test('preserves other siblings', () => {
12
+ const tree = createTestTree();
13
+ const result = remove(tree, 'child2');
14
+ expect(get(result, 'child1')).not.toBeNull();
15
+ expect(get(result, 'child3')).not.toBeNull();
16
+ });
17
+ test('removes nested node', () => {
18
+ const tree = createTestTree();
19
+ const result = remove(tree, 'grandchild1');
20
+ expect(get(result, 'grandchild1')).toBeNull();
21
+ expect(get(result, 'grandchild2')).not.toBeNull();
22
+ });
23
+ test('removes node with children', () => {
24
+ const tree = createTestTree();
25
+ const result = remove(tree, 'child1');
26
+ expect(get(result, 'child1')).toBeNull();
27
+ expect(get(result, 'grandchild1')).toBeNull();
28
+ expect(get(result, 'grandchild2')).toBeNull();
29
+ });
30
+ test('returns tree unchanged if node not found', () => {
31
+ const tree = createTestTree();
32
+ const result = remove(tree, 'non-existent');
33
+ expect(get(result, 'root')).not.toBeNull();
34
+ expect(get(result, 'child1')).not.toBeNull();
35
+ });
36
+ test('updates parent children count', () => {
37
+ const tree = createTestTree();
38
+ const result = remove(tree, 'child2');
39
+ const parent = get(result, 'root');
40
+ expect(parent?.children).toHaveLength(2);
41
+ });
42
+ });
43
+ //# sourceMappingURL=remove.test.js.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"remove.test.js","sourceRoot":"","sources":["../../src/__tests__/remove.test.ts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=replace.test.d.ts.map