@weser/tree 1.0.0 → 2.0.0
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/README.md +1 -1
- package/dist/add.d.ts +2 -0
- package/dist/add.js +9 -0
- package/dist/clone.d.ts +2 -0
- package/dist/clone.js +22 -0
- package/dist/create.d.ts +2 -0
- package/dist/create.js +7 -0
- package/dist/find.d.ts +2 -0
- package/dist/find.js +14 -0
- package/dist/findAll.d.ts +2 -0
- package/dist/findAll.js +12 -0
- package/dist/get.d.ts +2 -0
- package/dist/get.js +14 -0
- package/dist/getParent.d.ts +2 -0
- package/dist/getParent.js +4 -0
- package/dist/index.d.ts +12 -12
- package/dist/index.js +12 -12
- package/dist/insert.d.ts +2 -0
- package/dist/insert.js +17 -0
- package/dist/move.d.ts +2 -0
- package/dist/move.js +12 -0
- package/dist/remove.d.ts +2 -0
- package/dist/remove.js +14 -0
- package/dist/replace.d.ts +2 -0
- package/dist/replace.js +21 -0
- package/dist/traverse.js +2 -2
- package/dist/tsconfig.tsbuildinfo +1 -1
- package/dist/update.d.ts +2 -0
- package/dist/update.js +12 -0
- package/package.json +3 -3
package/README.md
CHANGED
package/dist/add.d.ts
ADDED
package/dist/add.js
ADDED
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
import get from './get.js';
|
|
2
|
+
import insert from './insert.js';
|
|
3
|
+
export default function add(rootNode, id, newNode) {
|
|
4
|
+
const parentNode = get(rootNode, id);
|
|
5
|
+
if (!parentNode || !parentNode.children) {
|
|
6
|
+
return rootNode;
|
|
7
|
+
}
|
|
8
|
+
return insert(rootNode, id, parentNode.children.length, newNode);
|
|
9
|
+
}
|
package/dist/clone.d.ts
ADDED
package/dist/clone.js
ADDED
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
import get from './get.js';
|
|
2
|
+
export default function clone(rootNode, id) {
|
|
3
|
+
const node = get(rootNode, id);
|
|
4
|
+
if (!node) {
|
|
5
|
+
return null;
|
|
6
|
+
}
|
|
7
|
+
return cloneById(node);
|
|
8
|
+
}
|
|
9
|
+
function cloneById(node) {
|
|
10
|
+
if (!node.children || node.children.length === 0) {
|
|
11
|
+
return {
|
|
12
|
+
...node,
|
|
13
|
+
id: crypto.randomUUID(),
|
|
14
|
+
};
|
|
15
|
+
}
|
|
16
|
+
const newChildren = node.children.map(cloneById);
|
|
17
|
+
return {
|
|
18
|
+
...node,
|
|
19
|
+
id: crypto.randomUUID(),
|
|
20
|
+
children: newChildren,
|
|
21
|
+
};
|
|
22
|
+
}
|
package/dist/create.d.ts
ADDED
package/dist/create.js
ADDED
package/dist/find.d.ts
ADDED
package/dist/find.js
ADDED
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export default function find(rootNode, condition) {
|
|
2
|
+
if (condition(rootNode)) {
|
|
3
|
+
return rootNode;
|
|
4
|
+
}
|
|
5
|
+
if (rootNode.children) {
|
|
6
|
+
for (const node of rootNode.children) {
|
|
7
|
+
const result = find(node, condition);
|
|
8
|
+
if (result) {
|
|
9
|
+
return result;
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
return null;
|
|
14
|
+
}
|
package/dist/findAll.js
ADDED
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
export default function findAll(rootNode, condition) {
|
|
2
|
+
const nodes = [];
|
|
3
|
+
if (condition(rootNode)) {
|
|
4
|
+
nodes.push(rootNode);
|
|
5
|
+
}
|
|
6
|
+
if (rootNode.children) {
|
|
7
|
+
for (const node of rootNode.children) {
|
|
8
|
+
nodes.push(...findAll(node, condition));
|
|
9
|
+
}
|
|
10
|
+
}
|
|
11
|
+
return nodes;
|
|
12
|
+
}
|
package/dist/get.d.ts
ADDED
package/dist/get.js
ADDED
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
export default function get(rootNode, id) {
|
|
2
|
+
if (rootNode.id === id) {
|
|
3
|
+
return rootNode;
|
|
4
|
+
}
|
|
5
|
+
if (rootNode.children) {
|
|
6
|
+
for (const node of rootNode.children) {
|
|
7
|
+
const result = get(node, id);
|
|
8
|
+
if (result) {
|
|
9
|
+
return result;
|
|
10
|
+
}
|
|
11
|
+
}
|
|
12
|
+
}
|
|
13
|
+
return null;
|
|
14
|
+
}
|
package/dist/index.d.ts
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
|
-
export { default as
|
|
2
|
-
export { default as
|
|
3
|
-
export { default as
|
|
4
|
-
export { default as
|
|
5
|
-
export { default as
|
|
6
|
-
export { default as
|
|
7
|
-
export { default as
|
|
8
|
-
export { default as
|
|
9
|
-
export { default as
|
|
10
|
-
export { default as
|
|
11
|
-
export { default as
|
|
1
|
+
export { default as add } from './add.js';
|
|
2
|
+
export { default as clone } from './clone.js';
|
|
3
|
+
export { default as create } from './create.js';
|
|
4
|
+
export { default as find } from './find.js';
|
|
5
|
+
export { default as findAll } from './findAll.js';
|
|
6
|
+
export { default as get } from './get.js';
|
|
7
|
+
export { default as getParent } from './getParent.js';
|
|
8
|
+
export { default as insert } from './insert.js';
|
|
9
|
+
export { default as move } from './move.js';
|
|
10
|
+
export { default as remove } from './remove.js';
|
|
11
|
+
export { default as replace } from './replace.js';
|
|
12
12
|
export { default as traverse } from './traverse.js';
|
|
13
|
-
export { default as
|
|
13
|
+
export { default as update } from './update.js';
|
|
14
14
|
export * from './types.js';
|
package/dist/index.js
CHANGED
|
@@ -1,14 +1,14 @@
|
|
|
1
|
-
export { default as
|
|
2
|
-
export { default as
|
|
3
|
-
export { default as
|
|
4
|
-
export { default as
|
|
5
|
-
export { default as
|
|
6
|
-
export { default as
|
|
7
|
-
export { default as
|
|
8
|
-
export { default as
|
|
9
|
-
export { default as
|
|
10
|
-
export { default as
|
|
11
|
-
export { default as
|
|
1
|
+
export { default as add } from './add.js';
|
|
2
|
+
export { default as clone } from './clone.js';
|
|
3
|
+
export { default as create } from './create.js';
|
|
4
|
+
export { default as find } from './find.js';
|
|
5
|
+
export { default as findAll } from './findAll.js';
|
|
6
|
+
export { default as get } from './get.js';
|
|
7
|
+
export { default as getParent } from './getParent.js';
|
|
8
|
+
export { default as insert } from './insert.js';
|
|
9
|
+
export { default as move } from './move.js';
|
|
10
|
+
export { default as remove } from './remove.js';
|
|
11
|
+
export { default as replace } from './replace.js';
|
|
12
12
|
export { default as traverse } from './traverse.js';
|
|
13
|
-
export { default as
|
|
13
|
+
export { default as update } from './update.js';
|
|
14
14
|
export * from './types.js';
|
package/dist/insert.d.ts
ADDED
package/dist/insert.js
ADDED
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
import get from './get.js';
|
|
2
|
+
import replace from './replace.js';
|
|
3
|
+
export default function insert(rootNode, id, index, newNode) {
|
|
4
|
+
const parentNode = get(rootNode, id);
|
|
5
|
+
if (!parentNode || !parentNode.children) {
|
|
6
|
+
return rootNode;
|
|
7
|
+
}
|
|
8
|
+
const children = [
|
|
9
|
+
...parentNode.children.slice(0, index),
|
|
10
|
+
newNode,
|
|
11
|
+
...parentNode.children.slice(index),
|
|
12
|
+
];
|
|
13
|
+
return replace(rootNode, id, {
|
|
14
|
+
...parentNode,
|
|
15
|
+
children,
|
|
16
|
+
});
|
|
17
|
+
}
|
package/dist/move.d.ts
ADDED
package/dist/move.js
ADDED
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import get from './get.js';
|
|
2
|
+
import insert from './insert.js';
|
|
3
|
+
import remove from './remove.js';
|
|
4
|
+
export default function move(rootNode, id, parentId, index) {
|
|
5
|
+
const node = get(rootNode, id);
|
|
6
|
+
const parentNode = get(rootNode, parentId);
|
|
7
|
+
if (!node || !parentNode || !parentNode.children) {
|
|
8
|
+
return rootNode;
|
|
9
|
+
}
|
|
10
|
+
const removedNode = remove(rootNode, id);
|
|
11
|
+
return insert(removedNode, parentId, index ?? parentNode.children.length, node);
|
|
12
|
+
}
|
package/dist/remove.d.ts
ADDED
package/dist/remove.js
ADDED
|
@@ -0,0 +1,14 @@
|
|
|
1
|
+
import { map, filter } from '@weser/array';
|
|
2
|
+
export default function remove(rootNode, id) {
|
|
3
|
+
return removeById(rootNode, id);
|
|
4
|
+
}
|
|
5
|
+
function removeById(rootNode, id) {
|
|
6
|
+
if (!rootNode.children || rootNode.children.length === 0) {
|
|
7
|
+
return rootNode;
|
|
8
|
+
}
|
|
9
|
+
const children = map(filter(rootNode.children, (node) => node.id !== id), (node) => removeById(node, id));
|
|
10
|
+
return {
|
|
11
|
+
...rootNode,
|
|
12
|
+
children,
|
|
13
|
+
};
|
|
14
|
+
}
|
package/dist/replace.js
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
import get from './get.js';
|
|
2
|
+
export default function replace(rootNode, id, newNode) {
|
|
3
|
+
const node = get(rootNode, id);
|
|
4
|
+
if (!node) {
|
|
5
|
+
return rootNode;
|
|
6
|
+
}
|
|
7
|
+
return replaceById(rootNode, id, newNode);
|
|
8
|
+
}
|
|
9
|
+
function replaceById(rootNode, id, newNode) {
|
|
10
|
+
if (rootNode.id === id) {
|
|
11
|
+
return newNode;
|
|
12
|
+
}
|
|
13
|
+
if (!rootNode.children || rootNode.children.length === 0) {
|
|
14
|
+
return rootNode;
|
|
15
|
+
}
|
|
16
|
+
const children = rootNode.children.map((node) => replaceById(node, id, newNode));
|
|
17
|
+
return {
|
|
18
|
+
...rootNode,
|
|
19
|
+
children,
|
|
20
|
+
};
|
|
21
|
+
}
|
package/dist/traverse.js
CHANGED
|
@@ -1,10 +1,10 @@
|
|
|
1
|
-
import {
|
|
1
|
+
import { each } from '@weser/array';
|
|
2
2
|
export default function traverse(rootNode, callback, type = 'top-down') {
|
|
3
3
|
if (type === 'top-down') {
|
|
4
4
|
callback(rootNode);
|
|
5
5
|
}
|
|
6
6
|
if (rootNode.children) {
|
|
7
|
-
|
|
7
|
+
each(rootNode.children, (node) => traverse(node, callback, type));
|
|
8
8
|
}
|
|
9
9
|
if (type === 'bottom-up') {
|
|
10
10
|
callback(rootNode);
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"root":["../src/
|
|
1
|
+
{"root":["../src/add.ts","../src/clone.ts","../src/create.ts","../src/find.ts","../src/findall.ts","../src/get.ts","../src/getparent.ts","../src/index.ts","../src/insert.ts","../src/move.ts","../src/remove.ts","../src/replace.ts","../src/traverse.ts","../src/types.ts","../src/update.ts"],"version":"5.9.3"}
|
package/dist/update.d.ts
ADDED
package/dist/update.js
ADDED
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import get from './get.js';
|
|
2
|
+
import replace from './replace.js';
|
|
3
|
+
export default function update(rootNode, id, newNode) {
|
|
4
|
+
const node = get(rootNode, id);
|
|
5
|
+
if (!node) {
|
|
6
|
+
return rootNode;
|
|
7
|
+
}
|
|
8
|
+
return replace(rootNode, id, {
|
|
9
|
+
...node,
|
|
10
|
+
...newNode,
|
|
11
|
+
});
|
|
12
|
+
}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@weser/tree",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "2.0.0",
|
|
4
4
|
"description": "Tiny helpers for working with tree data structure",
|
|
5
5
|
"author": "Robin Weser <robin@weser.io>",
|
|
6
6
|
"license": "MIT",
|
|
@@ -41,12 +41,12 @@
|
|
|
41
41
|
"utils"
|
|
42
42
|
],
|
|
43
43
|
"dependencies": {
|
|
44
|
-
"@weser/
|
|
44
|
+
"@weser/array": "1.0.0"
|
|
45
45
|
},
|
|
46
46
|
"devDependencies": {
|
|
47
47
|
"ava": "^6.1.3",
|
|
48
48
|
"rimraf": "^3.0.2",
|
|
49
49
|
"typescript": "^5.4.5"
|
|
50
50
|
},
|
|
51
|
-
"gitHead": "
|
|
51
|
+
"gitHead": "490b5b37e8da7f0cac2880543874914c6f6be5d6"
|
|
52
52
|
}
|