tree-processor 0.2.0 → 0.4.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 CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
  一个轻量级的树结构数据处理工具库,使用 TypeScript 编写,支持 tree-shaking,每个格式打包体积约 **3-4 KB**(ESM: 3.25 KB,CJS: 3.42 KB,UMD: 3.56 KB)。
4
4
 
5
- 目前已支持 mapTree、filterTree、findTree、pushTree、unshiftTree、popTree、shiftTree、someTree、everyTree、atTree、indexOfTree、atIndexOfTree、nodeDepthMap 和 dedupTree。每个方法的最后一个参数可以自定义 children 和 id 的属性名。
5
+ 目前已支持 mapTree、forEachTree、filterTree、findTree、pushTree、unshiftTree、popTree、shiftTree、someTree、everyTree、includesTree、atTree、indexOfTree、atIndexOfTree、getParentTree、nodeDepthMap、dedupTree、removeTreeisEmptyTree。每个方法的最后一个参数可以自定义 children 和 id 的属性名。
6
6
 
7
7
  ## ✨ 特性
8
8
 
@@ -12,6 +12,7 @@
12
12
  - 🎯 **类似数组 API** - 提供 map、filter、find 等熟悉的数组方法
13
13
  - ⚙️ **自定义字段名** - 支持自定义 children 和 id 字段名
14
14
  - ✅ **零依赖** - 无外部依赖,开箱即用
15
+ - 🧪 **完善的测试覆盖** - 包含 103 个测试用例,覆盖基础功能、边界情况、异常处理、复杂场景等
15
16
 
16
17
  ## 📦 安装
17
18
 
@@ -91,6 +92,18 @@ t.mapTree(treeData, (item) => {
91
92
  })
92
93
  ```
93
94
 
95
+ ### forEachTree(遍历树结构数据的方法,不返回值)
96
+
97
+ 遍历树结构数据,对每个节点执行回调函数。与 mapTree 的区别是不返回值,性能更好,适合只需要遍历而不需要返回结果的场景。
98
+
99
+ ```javascript
100
+ t.forEachTree(treeData, (item) => {
101
+ console.log(item)
102
+ // 可以在这里修改节点
103
+ item.visited = true
104
+ })
105
+ ```
106
+
94
107
  ### filterTree(树结构数据的filter方法)
95
108
 
96
109
  过滤树结构数据,返回满足条件的节点。
@@ -176,6 +189,16 @@ const result = t.everyTree(treeData, item => item.age >= 18)
176
189
  console.log(result)
177
190
  ```
178
191
 
192
+ ### includesTree(检查树中是否包含指定节点)
193
+
194
+ 检查树结构数据中是否包含指定ID的节点。
195
+
196
+ ```javascript
197
+ const hasNode = t.includesTree(treeData, targetId)
198
+
199
+ console.log(hasNode) // true 表示包含该节点,false 表示不包含
200
+ ```
201
+
179
202
  ### atTree(根据父节点ID和子节点索引获取节点)
180
203
 
181
204
  parentId 为指定父节点的 id,nodeIndex 为子节点的索引,可传负数,和数组的 at 方法一样。
@@ -206,6 +229,16 @@ const result = t.atIndexOfTree(treeData, [0, 1, 0])
206
229
  console.log(result)
207
230
  ```
208
231
 
232
+ ### getParentTree(获取节点的父节点)
233
+
234
+ 获取指定节点的父节点。如果节点是根节点,返回 null。
235
+
236
+ ```javascript
237
+ const parent = t.getParentTree(treeData, targetId)
238
+
239
+ console.log(parent) // 返回父节点对象,如果未找到或节点是根节点则返回 null
240
+ ```
241
+
209
242
  ### nodeDepthMap(返回节点ID到深度的映射)
210
243
 
211
244
  返回一个字典,键代表节点的 id,值代表该节点在数据的第几层。
@@ -226,6 +259,27 @@ const result = t.dedupTree(treeData, 'id')
226
259
  console.log(result)
227
260
  ```
228
261
 
262
+ ### removeTree(删除指定节点)
263
+
264
+ 删除树结构数据中指定ID的节点,包括根节点和子节点。
265
+
266
+ ```javascript
267
+ const success = t.removeTree(treeData, targetId)
268
+
269
+ console.log(success) // true 表示删除成功,false 表示未找到节点
270
+ console.log(treeData) // 删除后的树结构
271
+ ```
272
+
273
+ ### isEmptyTree(检查树是否为空)
274
+
275
+ 检查树结构数据是否为空。
276
+
277
+ ```javascript
278
+ const isEmpty = t.isEmptyTree(treeData)
279
+
280
+ console.log(isEmpty) // true 表示树为空,false 表示树不为空
281
+ ```
282
+
229
283
  ## 自定义字段名
230
284
 
231
285
  所有方法都支持自定义 children 和 id 的属性名,通过最后一个参数传入配置对象:
@@ -235,6 +289,21 @@ const fieldNames = { children: 'subNodes', id: 'nodeId' };
235
289
  const result = t.findTree(treeData, (item) => item.nodeId === 2, fieldNames);
236
290
  ```
237
291
 
292
+ ## 测试
293
+
294
+ ### 运行测试
295
+
296
+ ```bash
297
+ # 运行所有测试
298
+ npm test
299
+
300
+ # 运行测试并生成覆盖率报告
301
+ npm run test:coverage
302
+
303
+ # 运行测试(单次,不监听文件变化)
304
+ npm test -- --run
305
+ ```
306
+
238
307
  ## 开发
239
308
 
240
309
  ```bash
package/dist/index.d.ts CHANGED
@@ -18,6 +18,11 @@ export declare function indexOfTree(tree: TreeData, targetId: any, fieldNames?:
18
18
  export declare function atIndexOfTree(tree: TreeData, path: number[], fieldNames?: FieldNames): TreeNode | null;
19
19
  export declare function nodeDepthMap(tree: TreeData, fieldNames?: FieldNames): Record<string, number>;
20
20
  export declare function dedupTree(tree: TreeData, key: string, fieldNames?: FieldNames): TreeData;
21
+ export declare function removeTree(tree: TreeData, targetId: any, fieldNames?: FieldNames): boolean;
22
+ export declare function forEachTree(tree: TreeData, callback: (node: TreeNode) => void, fieldNames?: FieldNames): void;
23
+ export declare function isEmptyTree(tree: TreeData): boolean;
24
+ export declare function getParentTree(tree: TreeData, targetId: any, fieldNames?: FieldNames): TreeNode | null;
25
+ export declare function includesTree(tree: TreeData, targetId: any, fieldNames?: FieldNames): boolean;
21
26
  declare const treeProcessor: {
22
27
  mapTree: typeof mapTree;
23
28
  filterTree: typeof filterTree;
@@ -33,6 +38,11 @@ declare const treeProcessor: {
33
38
  atIndexOfTree: typeof atIndexOfTree;
34
39
  nodeDepthMap: typeof nodeDepthMap;
35
40
  dedupTree: typeof dedupTree;
41
+ removeTree: typeof removeTree;
42
+ forEachTree: typeof forEachTree;
43
+ isEmptyTree: typeof isEmptyTree;
44
+ getParentTree: typeof getParentTree;
45
+ includesTree: typeof includesTree;
36
46
  };
37
47
  export default treeProcessor;
38
48
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,UAAU;IACzB,QAAQ,EAAE,MAAM,CAAC;IACjB,EAAE,EAAE,MAAM,CAAC;CACZ;AAaD,MAAM,MAAM,QAAQ,GAAG,MAAM,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;AAK3C,MAAM,MAAM,QAAQ,GAAG,QAAQ,EAAE,CAAC;AASlC,wBAAgB,OAAO,CACrB,IAAI,EAAE,QAAQ,EACd,QAAQ,EAAE,CAAC,IAAI,EAAE,QAAQ,KAAK,GAAG,EACjC,UAAU,GAAE,UAAgC,GAC3C,GAAG,EAAE,CAeP;AASD,wBAAgB,UAAU,CACxB,IAAI,EAAE,QAAQ,EACd,QAAQ,EAAE,CAAC,IAAI,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,KAAK,OAAO,EACpD,UAAU,GAAE,UAAgC,GAC3C,QAAQ,CAiBV;AASD,wBAAgB,QAAQ,CACtB,IAAI,EAAE,QAAQ,EACd,WAAW,EAAE,CAAC,IAAI,EAAE,QAAQ,KAAK,OAAO,EACxC,UAAU,GAAE,UAAgC,GAC3C,QAAQ,GAAG,IAAI,CAcjB;AAUD,wBAAgB,QAAQ,CACtB,IAAI,EAAE,QAAQ,EACd,cAAc,EAAE,GAAG,EACnB,OAAO,EAAE,QAAQ,EACjB,UAAU,GAAE,UAAgC,GAC3C,OAAO,CAqBT;AAUD,wBAAgB,WAAW,CACzB,IAAI,EAAE,QAAQ,EACd,cAAc,EAAE,GAAG,EACnB,OAAO,EAAE,QAAQ,EACjB,UAAU,GAAE,UAAgC,GAC3C,OAAO,CAqBT;AASD,wBAAgB,OAAO,CACrB,IAAI,EAAE,QAAQ,EACd,MAAM,EAAE,GAAG,EACX,UAAU,GAAE,UAAgC,GAC3C,OAAO,CAsBT;AASD,wBAAgB,SAAS,CACvB,IAAI,EAAE,QAAQ,EACd,MAAM,EAAE,GAAG,EACX,UAAU,GAAE,UAAgC,GAC3C,OAAO,CAsBT;AASD,wBAAgB,QAAQ,CACtB,IAAI,EAAE,QAAQ,EACd,QAAQ,EAAE,CAAC,IAAI,EAAE,QAAQ,KAAK,OAAO,EACrC,UAAU,GAAE,UAAgC,GAC3C,OAAO,CAaT;AASD,wBAAgB,SAAS,CACvB,IAAI,EAAE,QAAQ,EACd,QAAQ,EAAE,CAAC,IAAI,EAAE,QAAQ,KAAK,OAAO,EACrC,UAAU,GAAE,UAAgC,GAC3C,OAAO,CAaT;AAUD,wBAAgB,MAAM,CACpB,IAAI,EAAE,QAAQ,EACd,QAAQ,EAAE,GAAG,EACb,SAAS,EAAE,MAAM,EACjB,UAAU,GAAE,UAAgC,GAC3C,QAAQ,GAAG,IAAI,CAqCjB;AASD,wBAAgB,WAAW,CACzB,IAAI,EAAE,QAAQ,EACd,QAAQ,EAAE,GAAG,EACb,UAAU,GAAE,UAAgC,GAC3C,MAAM,EAAE,GAAG,IAAI,CAsBjB;AASD,wBAAgB,aAAa,CAC3B,IAAI,EAAE,QAAQ,EACd,IAAI,EAAE,MAAM,EAAE,EACd,UAAU,GAAE,UAAgC,GAC3C,QAAQ,GAAG,IAAI,CA4BjB;AAQD,wBAAgB,YAAY,CAC1B,IAAI,EAAE,QAAQ,EACd,UAAU,GAAE,UAAgC,GAC3C,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC,CAexB;AASD,wBAAgB,SAAS,CACvB,IAAI,EAAE,QAAQ,EACd,GAAG,EAAE,MAAM,EACX,UAAU,GAAE,UAAgC,GAC3C,QAAQ,CA+BV;AAKD,QAAA,MAAM,aAAa;;;;;;;;;;;;;;;CAelB,CAAC;AAEF,eAAe,aAAa,CAAC"}
1
+ {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
package/dist/stats.html CHANGED
@@ -4929,7 +4929,7 @@ var drawChart = (function (exports) {
4929
4929
  </script>
4930
4930
  <script>
4931
4931
  /*<!--*/
4932
- const data = {"version":2,"tree":{"name":"root","children":[{"name":"tree-processor.cjs.js","children":[{"name":"src/index.ts","uid":"ee24d5a8-1"}]}],"isRoot":true},"nodeParts":{"ee24d5a8-1":{"renderedLength":9165,"gzipLength":1358,"brotliLength":1184,"metaUid":"ee24d5a8-0"}},"nodeMetas":{"ee24d5a8-0":{"id":"\\src\\index.ts","moduleParts":{"tree-processor.cjs.js":"ee24d5a8-1"},"imported":[],"importedBy":[],"isEntry":true}},"env":{"rollup":"4.56.0"},"options":{"gzip":true,"brotli":true,"sourcemap":false}};
4932
+ const data = {"version":2,"tree":{"name":"root","children":[{"name":"tree-processor.umd.js","children":[{"name":"src/index.ts","uid":"07707b15-1"}]}],"isRoot":true},"nodeParts":{"07707b15-1":{"renderedLength":11403,"gzipLength":1547,"brotliLength":1351,"metaUid":"07707b15-0"}},"nodeMetas":{"07707b15-0":{"id":"\\src\\index.ts","moduleParts":{"tree-processor.umd.js":"07707b15-1"},"imported":[],"importedBy":[],"isEntry":true}},"env":{"rollup":"4.56.0"},"options":{"gzip":true,"brotli":true,"sourcemap":false}};
4933
4933
 
4934
4934
  const run = () => {
4935
4935
  const width = window.innerWidth;
@@ -16,11 +16,11 @@ if(Array.isArray(n)&&n.length>0&&r(n))return!0}return!1}(n)}function o(n,e,t,i=r
16
16
  const n=o[i.children]
17
17
  if(Array.isArray(n)&&n.length>0&&r(n))return!0}return!1}(n)}function c(n,e,t=r){return function r(n){for(const i of n){if(i[t.id]===e){const r=i[t.children]
18
18
  return!!(Array.isArray(r)&&r.length>0)&&(r.pop(),!0)}const n=i[t.children]
19
- if(Array.isArray(n)&&n.length>0&&r(n))return!0}return!1}(n)}function s(n,e,t=r){return function r(n){for(const i of n){if(i[t.id]===e){const r=i[t.children]
19
+ if(Array.isArray(n)&&n.length>0&&r(n))return!0}return!1}(n)}function u(n,e,t=r){return function r(n){for(const i of n){if(i[t.id]===e){const r=i[t.children]
20
20
  return!!(Array.isArray(r)&&r.length>0)&&(r.shift(),!0)}const n=i[t.children]
21
- if(Array.isArray(n)&&n.length>0&&r(n))return!0}return!1}(n)}function u(n,e,t=r){for(const r of n){if(e(r))return!0
21
+ if(Array.isArray(n)&&n.length>0&&r(n))return!0}return!1}(n)}function s(n,e,t=r){for(const r of n){if(e(r))return!0
22
22
  const n=r[t.children]
23
- if(Array.isArray(n)&&n.length>0&&u(n,e,t))return!0}return!1}function f(n,e,t=r){for(const r of n){if(!e(r))return!1
23
+ if(Array.isArray(n)&&n.length>0&&s(n,e,t))return!0}return!1}function f(n,e,t=r){for(const r of n){if(!e(r))return!1
24
24
  const n=r[t.children]
25
25
  if(Array.isArray(n)&&n.length>0&&!f(n,e,t))return!1}return!0}function l(n,e,t,i=r){const o=function r(n){for(const t of n){if(t[i.id]===e)return t
26
26
  const n=t[i.children]
@@ -29,11 +29,11 @@ if(e)return e}}return null}(n)
29
29
  if(!o)return null
30
30
  const c=o[i.children]
31
31
  if(!Array.isArray(c)||0===c.length)return null
32
- const s=t>=0?t:c.length+t
33
- return s>=0&&s<c.length?c[s]:null}function h(n,e,t=r){return function r(n,i=[]){for(let o=0;o<n.length;o++){const c=n[o],s=[...i,o]
34
- if(c[t.id]===e)return s
35
- const u=c[t.children]
36
- if(Array.isArray(u)&&u.length>0){const n=r(u,s)
32
+ const u=t>=0?t:c.length+t
33
+ return u>=0&&u<c.length?c[u]:null}function h(n,e,t=r){return function r(n,i=[]){for(let o=0;o<n.length;o++){const c=n[o],u=[...i,o]
34
+ if(c[t.id]===e)return u
35
+ const s=c[t.children]
36
+ if(Array.isArray(s)&&s.length>0){const n=r(s,u)
37
37
  if(n)return n}}return null}(n)}function a(n,e,t=r){if(!Array.isArray(e)||0===e.length)return null
38
38
  let i=n
39
39
  for(let r=0;r<e.length;r++){const n=e[r]
@@ -49,6 +49,16 @@ Array.isArray(n)&&n.length>0&&r(n,i+1)}}(n),t}function y(n,e,t=r){const i=new Se
49
49
  return function r(n){const o=[]
50
50
  for(const c of n){const n=c[e]
51
51
  if(null!=n){if(i.has(n))continue
52
- i.add(n)}const s={...c},u=c[t.children]
53
- Array.isArray(u)&&u.length>0&&(s[t.children]=r(u)),o.push(s)}return o}(n)}const A={mapTree:n,filterTree:e,findTree:t,pushTree:i,unshiftTree:o,popTree:c,shiftTree:s,someTree:u,everyTree:f,atTree:l,indexOfTree:h,atIndexOfTree:a,nodeDepthMap:d,dedupTree:y}
54
- exports.atIndexOfTree=a,exports.atTree=l,exports.dedupTree=y,exports.default=A,exports.everyTree=f,exports.filterTree=e,exports.findTree=t,exports.indexOfTree=h,exports.mapTree=n,exports.nodeDepthMap=d,exports.popTree=c,exports.pushTree=i,exports.shiftTree=s,exports.someTree=u,exports.unshiftTree=o
52
+ i.add(n)}const u={...c},s=c[t.children]
53
+ Array.isArray(s)&&s.length>0&&(u[t.children]=r(s)),o.push(u)}return o}(n)}function A(n,e,t=r){return function r(n){for(let i=0;i<n.length;i++){const o=n[i]
54
+ if(o[t.id]===e)return n.splice(i,1),!0
55
+ const c=o[t.children]
56
+ if(Array.isArray(c)&&c.length>0&&r(c))return!0}return!1}(n)}function p(n,e,t=r){!function r(n){for(const i of n){e(i)
57
+ const n=i[t.children]
58
+ Array.isArray(n)&&n.length>0&&r(n)}}(n)}function T(r){return!Array.isArray(r)||0===r.length}function g(n,e,t=r){return function r(n,i=null){for(const o of n){if(o[t.id]===e)return i
59
+ const n=o[t.children]
60
+ if(Array.isArray(n)&&n.length>0){const e=r(n,o)
61
+ if(null!==e)return e}}return null}(n)}function x(n,e,t=r){for(const r of n){if(r[t.id]===e)return!0
62
+ const n=r[t.children]
63
+ if(Array.isArray(n)&&n.length>0&&x(n,e,t))return!0}return!1}const m={mapTree:n,filterTree:e,findTree:t,pushTree:i,unshiftTree:o,popTree:c,shiftTree:u,someTree:s,everyTree:f,atTree:l,indexOfTree:h,atIndexOfTree:a,nodeDepthMap:d,dedupTree:y,removeTree:A,forEachTree:p,isEmptyTree:T,getParentTree:g,includesTree:x}
64
+ exports.atIndexOfTree=a,exports.atTree=l,exports.dedupTree=y,exports.default=m,exports.everyTree=f,exports.filterTree=e,exports.findTree=t,exports.forEachTree=p,exports.getParentTree=g,exports.includesTree=x,exports.indexOfTree=h,exports.isEmptyTree=T,exports.mapTree=n,exports.nodeDepthMap=d,exports.popTree=c,exports.pushTree=i,exports.removeTree=A,exports.shiftTree=u,exports.someTree=s,exports.unshiftTree=o
@@ -48,5 +48,15 @@ return function r(n){const o=[]
48
48
  for(const c of n){const n=c[t]
49
49
  if(null!=n){if(i.has(n))continue
50
50
  i.add(n)}const u={...c},f=c[e.children]
51
- Array.isArray(f)&&f.length>0&&(u[e.children]=r(f)),o.push(u)}return o}(n)}const A={mapTree:n,filterTree:t,findTree:e,pushTree:i,unshiftTree:o,popTree:c,shiftTree:u,someTree:f,everyTree:l,atTree:s,indexOfTree:h,atIndexOfTree:a,nodeDepthMap:d,dedupTree:y}
52
- export{a as atIndexOfTree,s as atTree,y as dedupTree,A as default,l as everyTree,t as filterTree,e as findTree,h as indexOfTree,n as mapTree,d as nodeDepthMap,c as popTree,i as pushTree,u as shiftTree,f as someTree,o as unshiftTree}
51
+ Array.isArray(f)&&f.length>0&&(u[e.children]=r(f)),o.push(u)}return o}(n)}function A(n,t,e=r){return function r(n){for(let i=0;i<n.length;i++){const o=n[i]
52
+ if(o[e.id]===t)return n.splice(i,1),!0
53
+ const c=o[e.children]
54
+ if(Array.isArray(c)&&c.length>0&&r(c))return!0}return!1}(n)}function g(n,t,e=r){!function r(n){for(const i of n){t(i)
55
+ const n=i[e.children]
56
+ Array.isArray(n)&&n.length>0&&r(n)}}(n)}function T(r){return!Array.isArray(r)||0===r.length}function p(n,t,e=r){return function r(n,i=null){for(const o of n){if(o[e.id]===t)return i
57
+ const n=o[e.children]
58
+ if(Array.isArray(n)&&n.length>0){const t=r(n,o)
59
+ if(null!==t)return t}}return null}(n)}function m(n,t,e=r){for(const r of n){if(r[e.id]===t)return!0
60
+ const n=r[e.children]
61
+ if(Array.isArray(n)&&n.length>0&&m(n,t,e))return!0}return!1}const x={mapTree:n,filterTree:t,findTree:e,pushTree:i,unshiftTree:o,popTree:c,shiftTree:u,someTree:f,everyTree:l,atTree:s,indexOfTree:h,atIndexOfTree:a,nodeDepthMap:d,dedupTree:y,removeTree:A,forEachTree:g,isEmptyTree:T,getParentTree:p,includesTree:m}
62
+ export{a as atIndexOfTree,s as atTree,y as dedupTree,x as default,l as everyTree,t as filterTree,e as findTree,g as forEachTree,p as getParentTree,m as includesTree,h as indexOfTree,T as isEmptyTree,n as mapTree,d as nodeDepthMap,c as popTree,i as pushTree,A as removeTree,u as shiftTree,f as someTree,o as unshiftTree}
@@ -13,9 +13,9 @@ if(n)return n}}return null}function o(r,e,t,i=n){return function r(n){for(const
13
13
  const n=o[i.children]
14
14
  if(Array.isArray(n)&&n.length>0&&r(n))return!0}return!1}(r)}function f(r,e,t,i=n){return function r(n){for(const o of n){if(o[i.id]===e)return o[i.children]||(o[i.children]=[]),o[i.children].unshift(t),!0
15
15
  const n=o[i.children]
16
- if(Array.isArray(n)&&n.length>0&&r(n))return!0}return!1}(r)}function u(r,e,t=n){return function r(n){for(const i of n){if(i[t.id]===e){const r=i[t.children]
17
- return!!(Array.isArray(r)&&r.length>0)&&(r.pop(),!0)}const n=i[t.children]
18
16
  if(Array.isArray(n)&&n.length>0&&r(n))return!0}return!1}(r)}function c(r,e,t=n){return function r(n){for(const i of n){if(i[t.id]===e){const r=i[t.children]
17
+ return!!(Array.isArray(r)&&r.length>0)&&(r.pop(),!0)}const n=i[t.children]
18
+ if(Array.isArray(n)&&n.length>0&&r(n))return!0}return!1}(r)}function u(r,e,t=n){return function r(n){for(const i of n){if(i[t.id]===e){const r=i[t.children]
19
19
  return!!(Array.isArray(r)&&r.length>0)&&(r.shift(),!0)}const n=i[t.children]
20
20
  if(Array.isArray(n)&&n.length>0&&r(n))return!0}return!1}(r)}function s(r,e,t=n){for(const n of r){if(e(n))return!0
21
21
  const r=n[t.children]
@@ -28,11 +28,11 @@ if(e)return e}}return null}(r)
28
28
  if(!o)return null
29
29
  const f=o[i.children]
30
30
  if(!Array.isArray(f)||0===f.length)return null
31
- const u=t>=0?t:f.length+t
32
- return u>=0&&u<f.length?f[u]:null}function d(r,e,t=n){return function r(n,i=[]){for(let o=0;o<n.length;o++){const f=n[o],u=[...i,o]
33
- if(f[t.id]===e)return u
34
- const c=f[t.children]
35
- if(Array.isArray(c)&&c.length>0){const n=r(c,u)
31
+ const c=t>=0?t:f.length+t
32
+ return c>=0&&c<f.length?f[c]:null}function d(r,e,t=n){return function r(n,i=[]){for(let o=0;o<n.length;o++){const f=n[o],c=[...i,o]
33
+ if(f[t.id]===e)return c
34
+ const u=f[t.children]
35
+ if(Array.isArray(u)&&u.length>0){const n=r(u,c)
36
36
  if(n)return n}}return null}(r)}function a(r,e,t=n){if(!Array.isArray(e)||0===e.length)return null
37
37
  let i=r
38
38
  for(let r=0;r<e.length;r++){const n=e[r]
@@ -48,6 +48,16 @@ Array.isArray(n)&&n.length>0&&r(n,i+1)}}(r),t}function A(r,e,t=n){const i=new Se
48
48
  return function r(n){const o=[]
49
49
  for(const f of n){const n=f[e]
50
50
  if(null!=n){if(i.has(n))continue
51
- i.add(n)}const u={...f},c=f[t.children]
52
- Array.isArray(c)&&c.length>0&&(u[t.children]=r(c)),o.push(u)}return o}(r)}const T={mapTree:e,filterTree:t,findTree:i,pushTree:o,unshiftTree:f,popTree:u,shiftTree:c,someTree:s,everyTree:l,atTree:h,indexOfTree:d,atIndexOfTree:a,nodeDepthMap:y,dedupTree:A}
53
- r.atIndexOfTree=a,r.atTree=h,r.dedupTree=A,r.default=T,r.everyTree=l,r.filterTree=t,r.findTree=i,r.indexOfTree=d,r.mapTree=e,r.nodeDepthMap=y,r.popTree=u,r.pushTree=o,r.shiftTree=c,r.someTree=s,r.unshiftTree=f,Object.defineProperties(r,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}})})
51
+ i.add(n)}const c={...f},u=f[t.children]
52
+ Array.isArray(u)&&u.length>0&&(c[t.children]=r(u)),o.push(c)}return o}(r)}function T(r,e,t=n){return function r(n){for(let i=0;i<n.length;i++){const o=n[i]
53
+ if(o[t.id]===e)return n.splice(i,1),!0
54
+ const f=o[t.children]
55
+ if(Array.isArray(f)&&f.length>0&&r(f))return!0}return!1}(r)}function g(r,e,t=n){!function r(n){for(const i of n){e(i)
56
+ const n=i[t.children]
57
+ Array.isArray(n)&&n.length>0&&r(n)}}(r)}function p(r){return!Array.isArray(r)||0===r.length}function m(r,e,t=n){return function r(n,i=null){for(const o of n){if(o[t.id]===e)return i
58
+ const n=o[t.children]
59
+ if(Array.isArray(n)&&n.length>0){const e=r(n,o)
60
+ if(null!==e)return e}}return null}(r)}function x(r,e,t=n){for(const n of r){if(n[t.id]===e)return!0
61
+ const r=n[t.children]
62
+ if(Array.isArray(r)&&r.length>0&&x(r,e,t))return!0}return!1}const v={mapTree:e,filterTree:t,findTree:i,pushTree:o,unshiftTree:f,popTree:c,shiftTree:u,someTree:s,everyTree:l,atTree:h,indexOfTree:d,atIndexOfTree:a,nodeDepthMap:y,dedupTree:A,removeTree:T,forEachTree:g,isEmptyTree:p,getParentTree:m,includesTree:x}
63
+ r.atIndexOfTree=a,r.atTree=h,r.dedupTree=A,r.default=v,r.everyTree=l,r.filterTree=t,r.findTree=i,r.forEachTree=g,r.getParentTree=m,r.includesTree=x,r.indexOfTree=d,r.isEmptyTree=p,r.mapTree=e,r.nodeDepthMap=y,r.popTree=c,r.pushTree=o,r.removeTree=T,r.shiftTree=u,r.someTree=s,r.unshiftTree=f,Object.defineProperties(r,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}})})
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "tree-processor",
3
- "version": "0.2.0",
4
- "description": "A lightweight TypeScript library for processing tree-structured data with array-like methods (map, filter, find, push, pop, etc.), supporting tree-shaking and custom field names",
3
+ "version": "0.4.0",
4
+ "description": "A lightweight TypeScript library for processing tree-structured data with comprehensive methods (map, filter, find, push, pop, remove, getParent, includes, etc.), supporting tree-shaking and custom field names",
5
5
  "main": "dist/tree-processor.cjs.js",
6
6
  "module": "dist/tree-processor.esm.js",
7
7
  "types": "dist/index.d.ts",