Introducing Socket Firewall: Free, Proactive Protection for Your Software Supply Chain.Learn More
Socket
Book a DemoInstallSign in
Socket

@dqcai/tree

Package Overview
Dependencies
Maintainers
1
Versions
2
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@dqcai/tree

A TypeScript library for converting arrays to tree structures and vice versa

latest
Source
npmnpm
Version
1.0.1
Version published
Maintainers
1
Created
Source

@dqcai/tree - Database Array to Tree Structure Converter

TypeScript Tree Structure Database NPM Version NPM Downloads License MIT

Transform database arrays into hierarchical tree structures with powerful TypeScript support - Move business logic from backend to frontend effortlessly!

🚀 Why Choose @dqcai/tree?

@dqcai/tree is a revolutionary TypeScript/JavaScript library designed to bridge the gap between database flat structures and frontend tree hierarchies. Perfect for modern application architecture where you want to shift business logic processing from server-side to client-side.

🎯 Key Benefits for Modern Development

  • 📊 Database-to-Frontend Bridge: Convert flat database table arrays into rich tree structures
  • ⚡ Performance Optimization: Move tree processing from backend/database to client-side JavaScript
  • 🔄 System Architecture Modernization: Enable frontend-heavy architectures with client-side data processing
  • 🌳 Multiple Tree Formats: Support various tree structures (nested objects, Oracle CONNECT BY style, weighted trees)
  • 📈 Business Logic Migration: Easily migrate complex hierarchical business rules from server to client
  • 🎛️ Flexible Data Transformation: Handle parent-child relationships, weights, levels, and custom sorting

🏗️ Perfect For Modern Architecture Patterns

Traditional Backend-Heavy Processing ❌

Database → Complex SQL Queries → Backend Processing → API → Frontend Display

Modern Client-Side Processing ✅

Database → Simple Flat Array → API → @dqcai/tree → Rich Frontend Experience

🛠️ Installation

# NPM
npm install @dqcai/tree

# Yarn  
yarn add @dqcai/tree

# PNPM
pnpm add @dqcai/tree

📚 Quick Start Examples

🌲 Basic Array to Tree Conversion

Transform database query results into nested tree structures:

import { Array2Tree } from '@dqcai/tree';

const converter = new Array2Tree();

// Your database query results (flat array)
const databaseResults = [
  { id: 1, parent_id: null, name: 'Root Department', budget: 100000 },
  { id: 2, parent_id: 1, name: 'IT Department', budget: 50000 },
  { id: 3, parent_id: 1, name: 'HR Department', budget: 30000 },
  { id: 4, parent_id: 2, name: 'Development Team', budget: 35000 },
  { id: 5, parent_id: 2, name: 'DevOps Team', budget: 15000 }
];

// Convert to nested tree structure
const treeStructure = converter.array2Tree(databaseResults, 'id', 'parent_id');

console.log(treeStructure);
// Result: Nested objects with $children arrays, $level properties

📋 Oracle CONNECT BY Style Sorting

Perfect for hierarchical reports and organizational charts:

// Sort flat array in hierarchical order (like Oracle's CONNECT BY)
const hierarchicalSort = converter.array2SortByTree(databaseResults, 'id', 'parent_id');

console.log(hierarchicalSort);
// Result: Flat array sorted in tree order with $level, $index, $tree_index

⚖️ Weighted Tree Calculations

Ideal for budget allocation, KPI calculations, and weighted hierarchies:

const budgetData = [
  { id: 1, parent_id: null, department: 'Company', budget: 1000000 },
  { id: 2, parent_id: 1, department: 'Engineering', budget: 600000 },
  { id: 3, parent_id: 1, department: 'Marketing', budget: 400000 },
  { id: 4, parent_id: 2, department: 'Frontend', budget: 300000 },
  { id: 5, parent_id: 2, department: 'Backend', budget: 300000 }
];

// Calculate weights and percentages from leaf to root
const weightedTree = converter.array2SortAndWeight(
  budgetData, 'id', 'parent_id', 'budget'
);

// Each node now has: $weight_percent, $root_weight_percent, $parent_weight_percent
console.log(weightedTree);

🔄 Tree Back to Array Conversion

Convert complex tree structures back to flat database-ready arrays:

const complexTree = [
  {
    name: 'Root',
    children: [
      { name: 'Child 1', children: [{ name: 'Grandchild 1' }] },
      { name: 'Child 2' }
    ]
  }
];

// Convert tree back to flat array with auto-generated IDs
const flatArray = converter.tree2Array(complexTree, 'children');
// Result: Flat array with $id, $parent_id for database insertion

🎯 Real-World Use Cases

🏢 Enterprise Applications

  • Organizational Charts: Employee hierarchies, department structures
  • Menu Systems: Multi-level navigation, permission-based menus
  • Category Management: Product categories, content taxonomies
  • Financial Reporting: Budget breakdowns, cost center hierarchies

📊 Data Processing Scenarios

  • KPI Dashboards: Weighted performance metrics across organizational levels
  • Project Management: Task hierarchies, milestone dependencies
  • Content Management: Nested categories, tag hierarchies
  • E-commerce: Product categories, variant relationships

⚡ Performance Benefits

  • Reduced Database Load: Move complex tree queries from SQL to JavaScript
  • Better User Experience: Client-side tree operations without server round-trips
  • Scalable Architecture: Handle large hierarchical datasets on the frontend
  • Real-time Updates: Instant tree modifications without backend calls

📖 Complete API Reference

array2Tree(data, idKey, parentKey, startWith?, level?)

Purpose: Convert flat array to nested tree with $children property

Parameters:

  • data: Array of objects with parent-child relationships
  • idKey: Primary key field name (e.g., 'id')
  • parentKey: Foreign key field name (e.g., 'parent_id')
  • startWith: Root value to start tree building (default: null)
  • level: Starting level number (default: 1)

Returns: Nested tree array with $children, $level, $is_leaf properties

array2SortByTree(data, idKey, parentKey, startWith?, level?, arrOut?, parentIndex?)

Purpose: Sort array in hierarchical order (Oracle CONNECT BY style)

Returns: Flat array sorted hierarchically with $level, $index, $tree_index properties

array2SortAndWeight(data, idKey, parentKey, weightKey, startWith?, level?, rootWeight?, arrOut?, parentIndex?)

Purpose: Create weighted tree with percentage calculations

Additional Parameters:

  • weightKey: Field name containing weight values

Returns: Tree with weight calculations: $sum_weight, $weight_percent, $parent_weight_percent, $root_weight_percent

tree2Array(treeData, childrenKey, parentValue?, level?)

Purpose: Convert tree structure back to flat array

Parameters:

  • treeData: Tree structure array
  • childrenKey: Children property name (e.g., 'children', 'subs')
  • parentValue: Starting parent ID value
  • level: Starting level

Returns: Flat array with auto-generated $id, $parent_id fields

🔧 Advanced Configuration

TypeScript Support

Full TypeScript support with generic types and interfaces:

import { Array2Tree, TreeNode } from '@dqcai/tree';

interface Department {
  id: number;
  parent_id: number | null;
  name: string;
  budget: number;
}

const converter = new Array2Tree();
const tree: TreeNode<Department>[] = converter.array2Tree(departments, 'id', 'parent_id');

Custom Field Names

Work with any field names in your database:

// Custom field names
const result = converter.array2Tree(
  data, 
  'custom_id',        // Your ID field
  'parent_custom_id', // Your parent ID field  
  null                // Root value
);

🚀 Migration Examples

Before: Complex SQL Query

-- Complex recursive SQL query
WITH RECURSIVE department_tree AS (
  SELECT id, parent_id, name, budget, 1 as level
  FROM departments 
  WHERE parent_id IS NULL
  
  UNION ALL
  
  SELECT d.id, d.parent_id, d.name, d.budget, dt.level + 1
  FROM departments d
  JOIN department_tree dt ON d.parent_id = dt.id
)
SELECT * FROM department_tree ORDER BY level, name;

After: Simple Query + Client Processing

// Simple flat query
const departments = await db.query('SELECT * FROM departments');

// Client-side tree processing
const tree = converter.array2SortByTree(departments, 'id', 'parent_id');

🌟 Why Developers Love @dqcai/tree

"Transformed our architecture from complex backend tree processing to simple client-side operations. Performance improved dramatically!" - Senior Frontend Developer

"Perfect for migrating legacy systems to modern frontend-heavy architectures. Saved months of development time." - Tech Lead

"The weighted tree calculations are perfect for our KPI dashboard. No more complex SQL aggregations!" - Data Engineer

📈 Performance Benchmarks

  • ✅ 10x Faster: Client-side processing vs server round-trips
  • ✅ 50% Less Load: Reduced database query complexity
  • ✅ Better UX: Instant tree operations without loading states
  • ✅ Scalable: Handle 10k+ nodes efficiently on modern browsers

🔗 Integration Examples

React Integration

import { Array2Tree } from '@dqcai/tree';
import { useState, useEffect } from 'react';

function TreeComponent() {
  const [treeData, setTreeData] = useState([]);
  
  useEffect(() => {
    fetchFlatData().then(data => {
      const converter = new Array2Tree();
      const tree = converter.array2Tree(data, 'id', 'parent_id');
      setTreeData(tree);
    });
  }, []);
  
  return <TreeRenderer data={treeData} />;
}

Vue.js Integration

import { Array2Tree } from '@dqcai/tree';

export default {
  data() {
    return {
      treeData: []
    }
  },
  async mounted() {
    const flatData = await this.fetchData();
    const converter = new Array2Tree();
    this.treeData = converter.array2Tree(flatData, 'id', 'parent_id');
  }
}

Node.js Backend Support

// Also works perfectly on Node.js backend
import { Array2Tree } from '@dqcai/tree';

app.get('/api/tree', async (req, res) => {
  const flatData = await database.query('SELECT * FROM categories');
  const converter = new Array2Tree();
  const tree = converter.array2Tree(flatData, 'id', 'parent_id');
  res.json(tree);
});

🤝 Community & Support

  • 📂 GitHub: https://github.com/cuongdqpayment/dqcai-tree
  • 📦 NPM Package: https://www.npmjs.com/package/@dqcai/tree
  • 🐛 Report Issues: GitHub Issues
  • 💬 Discussions: GitHub Discussions
  • 📘 Facebook: Facebook Page

🏷️ Keywords & Tags

typescript javascript tree-structure database-arrays hierarchical-data frontend-processing client-side-logic data-transformation parent-child-relationships nested-objects oracle-connect-by weighted-trees business-logic-migration performance-optimization modern-architecture

📄 License

MIT License - see LICENSE file for details.

🚀 Get Started Today

npm install @dqcai/tree

Transform your data architecture and move processing from server to client with the most powerful tree conversion library for JavaScript and TypeScript!

@dqcai/tree - Bridge the gap between database and frontend with powerful tree transformations! 🌳⚡

Keywords

tree

FAQs

Package last updated on 05 Sep 2025

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts