simple-tree-utils
Advanced tools
Comparing version 0.0.3 to 0.0.4
@@ -23,10 +23,11 @@ (function(f){if(typeof exports==="object"&&typeof module!=="undefined"){module.exports=f()}else if(typeof define==="function"&&define.amd){define([],f)}else{var g;if(typeof window!=="undefined"){g=window}else if(typeof global!=="undefined"){g=global}else if(typeof self!=="undefined"){g=self}else{g=this}g.treeUtils = f()}})(function(){var define,module,exports;return (function(){function r(e,n,t){function o(i,f){if(!n[i]){if(!e[i]){var c="function"==typeof require&&require;if(!f&&c)return c(i,!0);if(u)return u(i,!0);var a=new Error("Cannot find module '"+i+"'");throw a.code="MODULE_NOT_FOUND",a}var p=n[i]={exports:{}};e[i][0].call(p.exports,function(r){var n=e[i][1][r];return o(n||r)},p,p.exports,r,e,n,t)}return n[i].exports}for(var u="function"==typeof require&&require,i=0;i<t.length;i++)o(t[i]);return o}return r})()({1:[function(require,module,exports){ | ||
exports.TreeUtils = void 0; | ||
/* eslint-disable @typescript-eslint/no-explicit-any */ | ||
class TreeUtils { | ||
static list2Tree(list, parentId = null) { | ||
return this.deepCopy(list) | ||
list2Tree(list, parentId = null) { | ||
return TreeUtils.deepCopy(list) | ||
.filter((item) => item.parentId === parentId) | ||
.map((item) => (Object.assign(Object.assign({}, item), { children: this.list2Tree(list, item.id) }))); | ||
} | ||
static tree2List(tree, parentId = null) { | ||
return this.deepCopy(tree).reduce((acc, curr) => { | ||
tree2List(tree, parentId = null) { | ||
return TreeUtils.deepCopy(tree).reduce((acc, curr) => { | ||
const { children } = curr, rest = __rest(curr, ["children"]); | ||
@@ -40,6 +41,6 @@ return [ | ||
} | ||
static findTreeNodeById(tree, id) { | ||
findTreeNodeById(tree, id) { | ||
return this.findTreeNode(tree, item => item.id === id); | ||
} | ||
static findTreeNode(tree, fn) { | ||
findTreeNode(tree, fn) { | ||
const node = tree.find(item => fn(item)); | ||
@@ -51,3 +52,3 @@ if (node) { | ||
} | ||
static deleteNode(tree, id) { | ||
deleteNode(tree, id) { | ||
const index = tree.findIndex(item => item.id == id); | ||
@@ -59,3 +60,3 @@ if (index != -1) { | ||
} | ||
static addNode(tree, parentId, childData) { | ||
addNode(tree, parentId, childData) { | ||
if (parentId == null) { | ||
@@ -72,3 +73,3 @@ tree.push(childData); | ||
} | ||
static editNode(tree, id, data) { | ||
editNode(tree, id, data) { | ||
const index = tree.findIndex(item => item.id == id); | ||
@@ -86,4 +87,5 @@ if (index != -1) { | ||
exports.TreeUtils = TreeUtils; | ||
/* eslint-enable @typescript-eslint/no-explicit-any */ | ||
},{}]},{},[1])(1) | ||
}); |
@@ -1,1 +0,1 @@ | ||
(function(f){if(typeof exports==="object"&&typeof module!=="undefined"){module.exports=f()}else if(typeof define==="function"&&define.amd){define([],f)}else{var g;if(typeof window!=="undefined"){g=window}else if(typeof global!=="undefined"){g=global}else if(typeof self!=="undefined"){g=self}else{g=this}g.treeUtils=f()}})(function(){var define,module,exports;return function(){function r(e,n,t){function o(i,f){if(!n[i]){if(!e[i]){var c="function"==typeof require&&require;if(!f&&c)return c(i,!0);if(u)return u(i,!0);var a=new Error("Cannot find module '"+i+"'");throw a.code="MODULE_NOT_FOUND",a}var p=n[i]={exports:{}};e[i][0].call(p.exports,function(r){var n=e[i][1][r];return o(n||r)},p,p.exports,r,e,n,t)}return n[i].exports}for(var u="function"==typeof require&&require,i=0;i<t.length;i++)o(t[i]);return o}return r}()({1:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.TreeUtils=void 0;var main_1=require("./main");Object.defineProperty(exports,"TreeUtils",{enumerable:true,get:function(){return main_1.TreeUtils}})},{"./main":2}],2:[function(require,module,exports){"use strict";var __rest=this&&this.__rest||function(s,e){var t={};for(var p in s)if(Object.prototype.hasOwnProperty.call(s,p)&&e.indexOf(p)<0)t[p]=s[p];if(s!=null&&typeof Object.getOwnPropertySymbols==="function")for(var i=0,p=Object.getOwnPropertySymbols(s);i<p.length;i++){if(e.indexOf(p[i])<0&&Object.prototype.propertyIsEnumerable.call(s,p[i]))t[p[i]]=s[p[i]]}return t};Object.defineProperty(exports,"__esModule",{value:true});exports.TreeUtils=void 0;class TreeUtils{static list2Tree(list,parentId=null){return this.deepCopy(list).filter(item=>item.parentId===parentId).map(item=>Object.assign(Object.assign({},item),{children:this.list2Tree(list,item.id)}))}static tree2List(tree,parentId=null){return this.deepCopy(tree).reduce((acc,curr)=>{const{children}=curr,rest=__rest(curr,["children"]);return[...acc,Object.assign(Object.assign({},rest),{parentId:parentId}),...children.length?this.tree2List(children,rest.id):[]]},[])}static findTreeNodeById(tree,id){return this.findTreeNode(tree,item=>item.id===id)}static findTreeNode(tree,fn){const node=tree.find(item=>fn(item));if(node){return node}return tree.reduce((acc,curr)=>acc||this.findTreeNode(curr.children||[],fn),null)}static deleteNode(tree,id){const index=tree.findIndex(item=>item.id==id);if(index!=-1){return tree.splice(index,1)[0]}return tree.reduce((acc,curr)=>acc||this.deleteNode(curr.children,id),null)}static addNode(tree,parentId,childData){if(parentId==null){tree.push(childData);return}const index=tree.findIndex(item=>item.id==parentId);if(index!=-1){tree[index].children.push(Object.assign({children:[]},childData));return}tree.forEach(item=>this.addNode(item.children,parentId,childData))}static editNode(tree,id,data){const index=tree.findIndex(item=>item.id==id);if(index!=-1){tree[index]=Object.assign({id:tree[index].id,children:[]},data);return}tree.forEach(item=>this.editNode(item.children,id,data))}static deepCopy(obj){return JSON.parse(JSON.stringify(obj))}}exports.TreeUtils=TreeUtils},{}]},{},[1])(1)}); | ||
(function(f){if(typeof exports==="object"&&typeof module!=="undefined"){module.exports=f()}else if(typeof define==="function"&&define.amd){define([],f)}else{var g;if(typeof window!=="undefined"){g=window}else if(typeof global!=="undefined"){g=global}else if(typeof self!=="undefined"){g=self}else{g=this}g.treeUtils=f()}})(function(){var define,module,exports;return function(){function r(e,n,t){function o(i,f){if(!n[i]){if(!e[i]){var c="function"==typeof require&&require;if(!f&&c)return c(i,!0);if(u)return u(i,!0);var a=new Error("Cannot find module '"+i+"'");throw a.code="MODULE_NOT_FOUND",a}var p=n[i]={exports:{}};e[i][0].call(p.exports,function(r){var n=e[i][1][r];return o(n||r)},p,p.exports,r,e,n,t)}return n[i].exports}for(var u="function"==typeof require&&require,i=0;i<t.length;i++)o(t[i]);return o}return r}()({1:[function(require,module,exports){"use strict";Object.defineProperty(exports,"__esModule",{value:true});exports.TreeUtils=void 0;var main_1=require("./main");Object.defineProperty(exports,"TreeUtils",{enumerable:true,get:function(){return main_1.TreeUtils}})},{"./main":2}],2:[function(require,module,exports){"use strict";var __rest=this&&this.__rest||function(s,e){var t={};for(var p in s)if(Object.prototype.hasOwnProperty.call(s,p)&&e.indexOf(p)<0)t[p]=s[p];if(s!=null&&typeof Object.getOwnPropertySymbols==="function")for(var i=0,p=Object.getOwnPropertySymbols(s);i<p.length;i++){if(e.indexOf(p[i])<0&&Object.prototype.propertyIsEnumerable.call(s,p[i]))t[p[i]]=s[p[i]]}return t};Object.defineProperty(exports,"__esModule",{value:true});exports.TreeUtils=void 0;class TreeUtils{list2Tree(list,parentId=null){return TreeUtils.deepCopy(list).filter(item=>item.parentId===parentId).map(item=>Object.assign(Object.assign({},item),{children:this.list2Tree(list,item.id)}))}tree2List(tree,parentId=null){return TreeUtils.deepCopy(tree).reduce((acc,curr)=>{const{children}=curr,rest=__rest(curr,["children"]);return[...acc,Object.assign(Object.assign({},rest),{parentId:parentId}),...children.length?this.tree2List(children,rest.id):[]]},[])}findTreeNodeById(tree,id){return this.findTreeNode(tree,item=>item.id===id)}findTreeNode(tree,fn){const node=tree.find(item=>fn(item));if(node){return node}return tree.reduce((acc,curr)=>acc||this.findTreeNode(curr.children||[],fn),null)}deleteNode(tree,id){const index=tree.findIndex(item=>item.id==id);if(index!=-1){return tree.splice(index,1)[0]}return tree.reduce((acc,curr)=>acc||this.deleteNode(curr.children,id),null)}addNode(tree,parentId,childData){if(parentId==null){tree.push(childData);return}const index=tree.findIndex(item=>item.id==parentId);if(index!=-1){tree[index].children.push(Object.assign({children:[]},childData));return}tree.forEach(item=>this.addNode(item.children,parentId,childData))}editNode(tree,id,data){const index=tree.findIndex(item=>item.id==id);if(index!=-1){tree[index]=Object.assign({id:tree[index].id,children:[]},data);return}tree.forEach(item=>this.editNode(item.children,id,data))}static deepCopy(obj){return JSON.parse(JSON.stringify(obj))}}exports.TreeUtils=TreeUtils},{}]},{},[1])(1)}); |
export declare class TreeUtils { | ||
static list2Tree(list: any[], parentId?: any): any[]; | ||
static tree2List(tree: any[], parentId?: any): any[]; | ||
static findTreeNodeById(tree: any[], id: any): any; | ||
static findTreeNode(tree: any[], fn: (item: any) => boolean): any; | ||
static deleteNode(tree: any[], id: any): any; | ||
static addNode(tree: any[], parentId: any, childData: any): void; | ||
static editNode(tree: any[], id: any, data: any): void; | ||
list2Tree(list: any[], parentId?: any): any[]; | ||
tree2List(tree: any[], parentId?: any): any[]; | ||
findTreeNodeById(tree: any[], id: any): any; | ||
findTreeNode(tree: any[], fn: (item: any) => boolean): any; | ||
deleteNode(tree: any[], id: any): any; | ||
addNode(tree: any[], parentId: any, childData: any): void; | ||
editNode(tree: any[], id: any, data: any): void; | ||
private static deepCopy; | ||
} |
@@ -15,10 +15,11 @@ "use strict"; | ||
exports.TreeUtils = void 0; | ||
/* eslint-disable @typescript-eslint/no-explicit-any */ | ||
class TreeUtils { | ||
static list2Tree(list, parentId = null) { | ||
return this.deepCopy(list) | ||
list2Tree(list, parentId = null) { | ||
return TreeUtils.deepCopy(list) | ||
.filter((item) => item.parentId === parentId) | ||
.map((item) => (Object.assign(Object.assign({}, item), { children: this.list2Tree(list, item.id) }))); | ||
} | ||
static tree2List(tree, parentId = null) { | ||
return this.deepCopy(tree).reduce((acc, curr) => { | ||
tree2List(tree, parentId = null) { | ||
return TreeUtils.deepCopy(tree).reduce((acc, curr) => { | ||
const { children } = curr, rest = __rest(curr, ["children"]); | ||
@@ -32,6 +33,6 @@ return [ | ||
} | ||
static findTreeNodeById(tree, id) { | ||
findTreeNodeById(tree, id) { | ||
return this.findTreeNode(tree, item => item.id === id); | ||
} | ||
static findTreeNode(tree, fn) { | ||
findTreeNode(tree, fn) { | ||
const node = tree.find(item => fn(item)); | ||
@@ -43,3 +44,3 @@ if (node) { | ||
} | ||
static deleteNode(tree, id) { | ||
deleteNode(tree, id) { | ||
const index = tree.findIndex(item => item.id == id); | ||
@@ -51,3 +52,3 @@ if (index != -1) { | ||
} | ||
static addNode(tree, parentId, childData) { | ||
addNode(tree, parentId, childData) { | ||
if (parentId == null) { | ||
@@ -64,3 +65,3 @@ tree.push(childData); | ||
} | ||
static editNode(tree, id, data) { | ||
editNode(tree, id, data) { | ||
const index = tree.findIndex(item => item.id == id); | ||
@@ -78,1 +79,2 @@ if (index != -1) { | ||
exports.TreeUtils = TreeUtils; | ||
/* eslint-enable @typescript-eslint/no-explicit-any */ |
{ | ||
"name": "simple-tree-utils", | ||
"version": "0.0.3", | ||
"version": "0.0.4", | ||
"description": "Tree utils library.", | ||
@@ -15,4 +15,4 @@ "keywords": [], | ||
"test:ci": "nyc -r lcov jasmine-ts --config=jasmine.json && cat ./coverage/lcov.info | coveralls", | ||
"lint": "npx eslint .", | ||
"lint:fix": "npx eslint . --fix", | ||
"lint": "npx eslint ./src", | ||
"lint:fix": "npx eslint ./src --fix", | ||
"docs": "npx typedoc src/index.ts", | ||
@@ -19,0 +19,0 @@ "publish": "npm run build && npm publish" |
@@ -0,5 +1,6 @@ | ||
/* eslint-disable @typescript-eslint/no-explicit-any */ | ||
export class TreeUtils { | ||
static list2Tree(list: any[], parentId: any = null): any[] { | ||
return this.deepCopy(list) | ||
list2Tree(list: any[], parentId: any = null): any[] { | ||
return TreeUtils.deepCopy(list) | ||
.filter((item: any) => item.parentId === parentId) | ||
@@ -12,4 +13,4 @@ .map((item: any) => ({ | ||
static tree2List(tree: any[], parentId: any = null): any[] { | ||
return this.deepCopy(tree).reduce((acc: any, curr: any) => { | ||
tree2List(tree: any[], parentId: any = null): any[] { | ||
return TreeUtils.deepCopy(tree).reduce((acc: any, curr: any) => { | ||
const {children, ...rest} = curr; | ||
@@ -24,7 +25,7 @@ return [ | ||
static findTreeNodeById(tree: any[], id: any): any { | ||
findTreeNodeById(tree: any[], id: any): any { | ||
return this.findTreeNode(tree, item => item.id === id); | ||
} | ||
static findTreeNode(tree: any[], fn: (item: any) => boolean): any { | ||
findTreeNode(tree: any[], fn: (item: any) => boolean): any { | ||
const node = tree.find(item => fn(item)); | ||
@@ -39,3 +40,3 @@ if (node) { | ||
static deleteNode(tree: any[], id: any): any { | ||
deleteNode(tree: any[], id: any): any { | ||
const index = tree.findIndex(item => item.id == id); | ||
@@ -48,3 +49,3 @@ if (index != -1) { | ||
static addNode(tree: any[], parentId: any, childData: any): void { | ||
addNode(tree: any[], parentId: any, childData: any): void { | ||
if (parentId == null) { | ||
@@ -62,3 +63,3 @@ tree.push(childData); | ||
static editNode(tree: any[], id: any, data: any): void { | ||
editNode(tree: any[], id: any, data: any): void { | ||
const index = tree.findIndex(item => item.id == id); | ||
@@ -76,1 +77,2 @@ if (index != -1) { | ||
} | ||
/* eslint-enable @typescript-eslint/no-explicit-any */ |
@@ -1,2 +0,2 @@ | ||
import {TreeUtils} from "../src/main"; | ||
import {TreeUtils} from "../src"; | ||
@@ -31,18 +31,21 @@ | ||
describe('', () => { | ||
it('1', () => { | ||
expect(TreeUtils.list2Tree(LIST_MOCK_ITEMS)).toEqual(TREE_MOCK_ITEMS); | ||
const treeUtils = new TreeUtils(); | ||
describe('Tree utils methods', () => { | ||
it('should convert list to tree', () => { | ||
expect(treeUtils.list2Tree(LIST_MOCK_ITEMS)).toEqual(TREE_MOCK_ITEMS); | ||
}); | ||
it('2', () => { | ||
expect(TreeUtils.tree2List(TREE_MOCK_ITEMS).sort((a: any, b: any) => a.id - b.id)).toEqual(LIST_MOCK_ITEMS); | ||
it('should convert tree to list', () => { | ||
expect(treeUtils.tree2List(TREE_MOCK_ITEMS).sort((a: any, b: any) => a.id - b.id)).toEqual(LIST_MOCK_ITEMS); | ||
}); | ||
it('3', () => { | ||
expect(TreeUtils.findTreeNodeById(TREE_MOCK_ITEMS, 6)).toEqual({id: 6, parentId: 3, name: 'Node 6', children: []}); | ||
it('should find node by given id', () => { | ||
expect(treeUtils.findTreeNodeById(TREE_MOCK_ITEMS, 6)).toEqual({id: 6, parentId: 3, name: 'Node 6', children: []}); | ||
}); | ||
it('4', () => { | ||
it('should delete node by given id', () => { | ||
const mock = JSON.parse(JSON.stringify(TREE_MOCK_ITEMS)); | ||
TreeUtils.deleteNode(mock, 6); | ||
treeUtils.deleteNode(mock, 6); | ||
const out = [ | ||
@@ -66,5 +69,5 @@ { | ||
it('5', () => { | ||
it('should add node to parent with given id', () => { | ||
const mock = JSON.parse(JSON.stringify(TREE_MOCK_ITEMS)); | ||
TreeUtils.addNode(mock, 4, {id: 7, parentId: 4, name: 'Node 7', children: []}); | ||
treeUtils.addNode(mock, 4, {id: 7, parentId: 4, name: 'Node 7', children: []}); | ||
const out = [ | ||
@@ -92,5 +95,5 @@ { | ||
it('6', () => { | ||
it('should edit node of given id by given data', () => { | ||
const mock = JSON.parse(JSON.stringify(TREE_MOCK_ITEMS)); | ||
TreeUtils.editNode(mock, 5, {id: 5, parentId: 2, name: 'Node 5 edited', children: []}); | ||
treeUtils.editNode(mock, 5, {id: 5, parentId: 2, name: 'Node 5 edited', children: []}); | ||
const out = [ | ||
@@ -97,0 +100,0 @@ { |
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
30053
447