tree-processor 0.5.0 → 0.6.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、forEachTree、filterTree、findTree、pushTree、unshiftTree、popTree、shiftTree、someTree、everyTree、includesTree、atTree、indexOfTree、atIndexOfTree、getParentTree、nodeDepthMap、dedupTree、removeTree 和 isEmptyTree。每个方法的最后一个参数可以自定义 children 和 id 的属性名。
5
+ 目前已支持 mapTree、forEachTree、filterTree、findTree、pushTree、unshiftTree、popTree、shiftTree、someTree、everyTree、includesTree、atTree、indexOfTree、atIndexOfTree、getParentTree、nodeDepthMap、dedupTree、removeTree、isEmptyTree、isTreeisForest。每个方法的最后一个参数可以自定义 children 和 id 的属性名。
6
6
 
7
7
  ## ✨ 特性
8
8
 
@@ -12,7 +12,7 @@
12
12
  - 🎯 **类似数组 API** - 提供 map、filter、find 等熟悉的数组方法
13
13
  - ⚙️ **自定义字段名** - 支持自定义 children 和 id 字段名
14
14
  - ✅ **零依赖** - 无外部依赖,开箱即用
15
- - 🧪 **完善的测试覆盖** - 包含 117 个测试用例,覆盖基础功能、边界情况、异常处理、复杂场景、npm 包导入等
15
+ - 🧪 **完善的测试覆盖** - 包含 160 个测试用例,覆盖基础功能、边界情况、异常处理、复杂场景、npm 包导入等
16
16
 
17
17
  ## 📦 安装
18
18
 
@@ -280,6 +280,101 @@ const isEmpty = t.isEmptyTree(treeData)
280
280
  console.log(isEmpty) // true 表示树为空,false 表示树不为空
281
281
  ```
282
282
 
283
+ ### isTree(判断数据是否是树结构)
284
+
285
+ 判断数据是否是树结构(单个对象)。树结构必须是一个对象(不能是数组、null、undefined 或基本类型),如果存在 children 字段,必须是数组类型,并且会递归检查所有子节点。
286
+
287
+ ```javascript
288
+ // 有效的树结构
289
+ const tree = {
290
+ id: 1,
291
+ name: 'node1',
292
+ children: [
293
+ { id: 2, name: 'node2' },
294
+ { id: 3, name: 'node3' },
295
+ ],
296
+ };
297
+
298
+ const isValid = t.isTree(tree)
299
+ console.log(isValid) // true
300
+
301
+ // 无效的树结构
302
+ const invalidTree = {
303
+ id: 1,
304
+ children: null, // children 不能是 null
305
+ };
306
+
307
+ const isInvalid = t.isTree(invalidTree)
308
+ console.log(isInvalid) // false
309
+
310
+ // 支持自定义字段名
311
+ const customTree = {
312
+ nodeId: 1,
313
+ name: 'node1',
314
+ subNodes: [
315
+ { nodeId: 2, name: 'node2' },
316
+ ],
317
+ };
318
+
319
+ const fieldNames = { children: 'subNodes', id: 'nodeId' };
320
+ const isValidCustom = t.isTree(customTree, fieldNames)
321
+ console.log(isValidCustom) // true
322
+ ```
323
+
324
+ ### isForest(判断数据是否是森林结构)
325
+
326
+ 判断数据是否是森林结构(数组)。森林结构必须是一个数组,数组中的每个元素都必须是有效的树结构。
327
+
328
+ ```javascript
329
+ // 有效的森林结构
330
+ const forest = [
331
+ {
332
+ id: 1,
333
+ name: 'node1',
334
+ children: [
335
+ { id: 2, name: 'node2' },
336
+ ],
337
+ },
338
+ {
339
+ id: 3,
340
+ name: 'node3',
341
+ children: [{ id: 4, name: 'node4' }],
342
+ },
343
+ ];
344
+
345
+ const isValid = t.isForest(forest)
346
+ console.log(isValid) // true
347
+
348
+ // 空数组也是有效的森林结构
349
+ const emptyForest = []
350
+ const isEmptyValid = t.isForest(emptyForest)
351
+ console.log(isEmptyValid) // true
352
+
353
+ // 无效的森林结构
354
+ const invalidForest = [
355
+ { id: 1, children: [{ id: 2 }] },
356
+ 'not a tree', // 数组元素必须是树结构
357
+ ];
358
+
359
+ const isInvalid = t.isForest(invalidForest)
360
+ console.log(isInvalid) // false
361
+
362
+ // 支持自定义字段名
363
+ const customForest = [
364
+ {
365
+ nodeId: 1,
366
+ name: 'node1',
367
+ subNodes: [
368
+ { nodeId: 2, name: 'node2' },
369
+ ],
370
+ },
371
+ ];
372
+
373
+ const fieldNames = { children: 'subNodes', id: 'nodeId' };
374
+ const isValidCustom = t.isForest(customForest, fieldNames)
375
+ console.log(isValidCustom) // true
376
+ ```
377
+
283
378
  ## 自定义字段名
284
379
 
285
380
  所有方法都支持自定义 children 和 id 的属性名,通过最后一个参数传入配置对象:
package/dist/index.d.ts CHANGED
@@ -23,6 +23,8 @@ export declare function forEachTree(tree: TreeData, callback: (node: TreeNode) =
23
23
  export declare function isEmptyTree(tree: TreeData): boolean;
24
24
  export declare function getParentTree(tree: TreeData, targetId: any, fieldNames?: FieldNames): TreeNode | null;
25
25
  export declare function includesTree(tree: TreeData, targetId: any, fieldNames?: FieldNames): boolean;
26
+ export declare function isTree(data: any, fieldNames?: FieldNames): boolean;
27
+ export declare function isForest(data: any, fieldNames?: FieldNames): boolean;
26
28
  declare const treeProcessor: {
27
29
  mapTree: typeof mapTree;
28
30
  filterTree: typeof filterTree;
@@ -43,6 +45,8 @@ declare const treeProcessor: {
43
45
  isEmptyTree: typeof isEmptyTree;
44
46
  getParentTree: typeof getParentTree;
45
47
  includesTree: typeof includesTree;
48
+ isTree: typeof isTree;
49
+ isForest: typeof isForest;
46
50
  };
47
51
  export default treeProcessor;
48
52
  //# sourceMappingURL=index.d.ts.map
@@ -1 +1 @@
1
- {"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
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.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}};
4932
+ const data = {"version":2,"tree":{"name":"root","children":[{"name":"tree-processor.esm.js","children":[{"name":"src/index.ts","uid":"69ea8d72-1"}]}],"isRoot":true},"nodeParts":{"69ea8d72-1":{"renderedLength":12228,"gzipLength":1669,"brotliLength":1461,"metaUid":"69ea8d72-0"}},"nodeMetas":{"69ea8d72-0":{"id":"\\src\\index.ts","moduleParts":{"tree-processor.esm.js":"69ea8d72-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;
@@ -6,59 +6,65 @@ return function r(n){for(const o of n){i.push(e(o))
6
6
  const n=o[t.children]
7
7
  Array.isArray(n)&&n.length>0&&r(n)}}(n),i}function e(n,e,t=r){const i=[]
8
8
  return function r(n){n.forEach((n,o)=>{e(n,o)&&i.push(n)
9
- const c=n[t.children]
10
- Array.isArray(c)&&c.length>0&&r(c,o)})}(n),i}function t(n,e,i=r){for(const r of n){if(e(r))return r
9
+ const s=n[t.children]
10
+ Array.isArray(s)&&s.length>0&&r(s,o)})}(n),i}function t(n,e,i=r){for(const r of n){if(e(r))return r
11
11
  const n=r[i.children]
12
12
  if(Array.isArray(n)&&n.length>0){const r=t(n,e,i)
13
13
  if(r)return r}}return null}function i(n,e,t,i=r){return function r(n){for(const o of n){if(o[i.id]===e)return o[i.children]||(o[i.children]=[]),o[i.children].push(t),!0
14
14
  const n=o[i.children]
15
15
  if(Array.isArray(n)&&n.length>0&&r(n))return!0}return!1}(n)}function o(n,e,t,i=r){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
16
16
  const n=o[i.children]
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]
17
+ 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]
18
18
  return!!(Array.isArray(r)&&r.length>0)&&(r.pop(),!0)}const n=i[t.children]
19
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 s(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 f(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&&s(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&&f(n,e,t))return!0}return!1}function c(n,e,t=r){for(const r of n){if(!e(r))return!1
24
24
  const n=r[t.children]
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
25
+ if(Array.isArray(n)&&n.length>0&&!c(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]
27
27
  if(Array.isArray(n)&&n.length>0){const e=r(n)
28
28
  if(e)return e}}return null}(n)
29
29
  if(!o)return null
30
- const c=o[i.children]
31
- if(!Array.isArray(c)||0===c.length)return null
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)
30
+ const s=o[i.children]
31
+ if(!Array.isArray(s)||0===s.length)return null
32
+ const u=t>=0?t:s.length+t
33
+ return u>=0&&u<s.length?s[u]:null}function h(n,e,t=r){return function r(n,i=[]){for(let o=0;o<n.length;o++){const s=n[o],u=[...i,o]
34
+ if(s[t.id]===e)return u
35
+ const f=s[t.children]
36
+ if(Array.isArray(f)&&f.length>0){const n=r(f,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]
40
40
  if(!Array.isArray(i)||n<0||n>=i.length)return null
41
41
  const o=i[n]
42
42
  if(r===e.length-1)return o
43
- const c=o[t.children]
44
- if(!Array.isArray(c))return null
45
- i=c}return null}function d(n,e=r){const t={}
43
+ const s=o[t.children]
44
+ if(!Array.isArray(s))return null
45
+ i=s}return null}function d(n,e=r){const t={}
46
46
  return function r(n,i=1){for(const o of n){t[o[e.id]]=i
47
47
  const n=o[e.children]
48
48
  Array.isArray(n)&&n.length>0&&r(n,i+1)}}(n),t}function y(n,e,t=r){const i=new Set
49
49
  return function r(n){const o=[]
50
- for(const c of n){const n=c[e]
50
+ for(const s of n){const n=s[e]
51
51
  if(null!=n){if(i.has(n))continue
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]
52
+ i.add(n)}const u={...s},f=s[t.children]
53
+ Array.isArray(f)&&f.length>0&&(u[t.children]=r(f)),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
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)
55
+ const s=o[t.children]
56
+ if(Array.isArray(s)&&s.length>0&&r(s))return!0}return!1}(n)}function p(n,e,t=r){!function r(n){for(const i of n){e(i)
57
57
  const n=i[t.children]
58
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
59
  const n=o[t.children]
60
60
  if(Array.isArray(n)&&n.length>0){const e=r(n,o)
61
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
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
63
+ if(Array.isArray(n)&&n.length>0&&x(n,e,t))return!0}return!1}function m(n,e=r){if(!n||"object"!=typeof n||Array.isArray(n))return!1
64
+ const t=n[e.children]
65
+ if(void 0!==t){if(null===t)return!1
66
+ if(!Array.isArray(t))return!1
67
+ for(const r of t)if(!m(r,e))return!1}return!0}function v(n,e=r){if(!Array.isArray(n))return!1
68
+ for(const r of n)if(!m(r,e))return!1
69
+ return!0}const E={mapTree:n,filterTree:e,findTree:t,pushTree:i,unshiftTree:o,popTree:s,shiftTree:u,someTree:f,everyTree:c,atTree:l,indexOfTree:h,atIndexOfTree:a,nodeDepthMap:d,dedupTree:y,removeTree:A,forEachTree:p,isEmptyTree:T,getParentTree:g,includesTree:x,isTree:m,isForest:v}
70
+ exports.atIndexOfTree=a,exports.atTree=l,exports.dedupTree=y,exports.default=E,exports.everyTree=c,exports.filterTree=e,exports.findTree=t,exports.forEachTree=p,exports.getParentTree=g,exports.includesTree=x,exports.indexOfTree=h,exports.isEmptyTree=T,exports.isForest=v,exports.isTree=m,exports.mapTree=n,exports.nodeDepthMap=d,exports.popTree=s,exports.pushTree=i,exports.removeTree=A,exports.shiftTree=u,exports.someTree=f,exports.unshiftTree=o
@@ -18,9 +18,9 @@ if(Array.isArray(n)&&n.length>0&&r(n))return!0}return!1}(n)}function u(n,t,e=r){
18
18
  return!!(Array.isArray(r)&&r.length>0)&&(r.shift(),!0)}const n=i[e.children]
19
19
  if(Array.isArray(n)&&n.length>0&&r(n))return!0}return!1}(n)}function f(n,t,e=r){for(const r of n){if(t(r))return!0
20
20
  const n=r[e.children]
21
- if(Array.isArray(n)&&n.length>0&&f(n,t,e))return!0}return!1}function l(n,t,e=r){for(const r of n){if(!t(r))return!1
21
+ if(Array.isArray(n)&&n.length>0&&f(n,t,e))return!0}return!1}function s(n,t,e=r){for(const r of n){if(!t(r))return!1
22
22
  const n=r[e.children]
23
- if(Array.isArray(n)&&n.length>0&&!l(n,t,e))return!1}return!0}function s(n,t,e,i=r){const o=function r(n){for(const e of n){if(e[i.id]===t)return e
23
+ if(Array.isArray(n)&&n.length>0&&!s(n,t,e))return!1}return!0}function l(n,t,e,i=r){const o=function r(n){for(const e of n){if(e[i.id]===t)return e
24
24
  const n=e[i.children]
25
25
  if(Array.isArray(n)&&n.length>0){const t=r(n)
26
26
  if(t)return t}}return null}(n)
@@ -40,10 +40,10 @@ const o=i[n]
40
40
  if(r===t.length-1)return o
41
41
  const c=o[e.children]
42
42
  if(!Array.isArray(c))return null
43
- i=c}return null}function d(n,t=r){const e={}
43
+ i=c}return null}function y(n,t=r){const e={}
44
44
  return function r(n,i=1){for(const o of n){e[o[t.id]]=i
45
45
  const n=o[t.children]
46
- Array.isArray(n)&&n.length>0&&r(n,i+1)}}(n),e}function y(n,t,e=r){const i=new Set
46
+ Array.isArray(n)&&n.length>0&&r(n,i+1)}}(n),e}function d(n,t,e=r){const i=new Set
47
47
  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
@@ -58,5 +58,11 @@ const n=o[e.children]
58
58
  if(Array.isArray(n)&&n.length>0){const t=r(n,o)
59
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
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}
61
+ if(Array.isArray(n)&&n.length>0&&m(n,t,e))return!0}return!1}function v(n,t=r){if(!n||"object"!=typeof n||Array.isArray(n))return!1
62
+ const e=n[t.children]
63
+ if(void 0!==e){if(null===e)return!1
64
+ if(!Array.isArray(e))return!1
65
+ for(const r of e)if(!v(r,t))return!1}return!0}function x(n,t=r){if(!Array.isArray(n))return!1
66
+ for(const r of n)if(!v(r,t))return!1
67
+ return!0}const E={mapTree:n,filterTree:t,findTree:e,pushTree:i,unshiftTree:o,popTree:c,shiftTree:u,someTree:f,everyTree:s,atTree:l,indexOfTree:h,atIndexOfTree:a,nodeDepthMap:y,dedupTree:d,removeTree:A,forEachTree:g,isEmptyTree:T,getParentTree:p,includesTree:m,isTree:v,isForest:x}
68
+ export{a as atIndexOfTree,l as atTree,d as dedupTree,E as default,s as everyTree,t as filterTree,e as findTree,g as forEachTree,p as getParentTree,m as includesTree,h as indexOfTree,T as isEmptyTree,x as isForest,v as isTree,n as mapTree,y 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 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
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
+ 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]
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,12 +28,12 @@ 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 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
- if(n)return n}}return null}(r)}function a(r,e,t=n){if(!Array.isArray(e)||0===e.length)return null
31
+ const u=t>=0?t:f.length+t
32
+ return u>=0&&u<f.length?f[u]:null}function a(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)
36
+ if(n)return n}}return null}(r)}function d(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]
39
39
  if(!Array.isArray(i)||n<0||n>=i.length)return null
@@ -48,8 +48,8 @@ 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 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]
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)}function T(r,e,t=n){return function r(n){for(let i=0;i<n.length;i++){const o=n[i]
53
53
  if(o[t.id]===e)return n.splice(i,1),!0
54
54
  const f=o[t.children]
55
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)
@@ -57,7 +57,13 @@ const n=i[t.children]
57
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
58
  const n=o[t.children]
59
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
60
+ if(null!==e)return e}}return null}(r)}function v(r,e,t=n){for(const n of r){if(n[t.id]===e)return!0
61
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"}})})
62
+ if(Array.isArray(r)&&r.length>0&&v(r,e,t))return!0}return!1}function x(r,e=n){if(!r||"object"!=typeof r||Array.isArray(r))return!1
63
+ const t=r[e.children]
64
+ if(void 0!==t){if(null===t)return!1
65
+ if(!Array.isArray(t))return!1
66
+ for(const r of t)if(!x(r,e))return!1}return!0}function b(r,e=n){if(!Array.isArray(r))return!1
67
+ for(const n of r)if(!x(n,e))return!1
68
+ return!0}const E={mapTree:e,filterTree:t,findTree:i,pushTree:o,unshiftTree:f,popTree:u,shiftTree:c,someTree:s,everyTree:l,atTree:h,indexOfTree:a,atIndexOfTree:d,nodeDepthMap:y,dedupTree:A,removeTree:T,forEachTree:g,isEmptyTree:p,getParentTree:m,includesTree:v,isTree:x,isForest:b}
69
+ r.atIndexOfTree=d,r.atTree=h,r.dedupTree=A,r.default=E,r.everyTree=l,r.filterTree=t,r.findTree=i,r.forEachTree=g,r.getParentTree=m,r.includesTree=v,r.indexOfTree=a,r.isEmptyTree=p,r.isForest=b,r.isTree=x,r.mapTree=e,r.nodeDepthMap=y,r.popTree=u,r.pushTree=o,r.removeTree=T,r.shiftTree=c,r.someTree=s,r.unshiftTree=f,Object.defineProperties(r,{__esModule:{value:!0},[Symbol.toStringTag]:{value:"Module"}})})
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "tree-processor",
3
- "version": "0.5.0",
3
+ "version": "0.6.0",
4
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",
@@ -49,7 +49,7 @@
49
49
  "license": "MIT",
50
50
  "repository": {
51
51
  "type": "git",
52
- "url": ""
52
+ "url": "https://github.com/knott11/tree-processor"
53
53
  },
54
54
  "devDependencies": {
55
55
  "@rollup/plugin-commonjs": "^28.0.1",