to-path-tree
TypeScript icon, indicating that this package has built-in type declarations

1.2.3 • Public • Published

to-path-tree

NPM Version NPM Downloads License

Convert a file path array to a tree.

Installation

pnpm i to-path-tree

Usage

Function usage

import { pathToTree } from 'to-path-tree'

const paths = [
  'src/index.ts',
  'src/a/index.ts',
  'src/a/b/index.ts',
  'src/a/b/d/index.ts',
  'src/foo.ts',
  'src/b/index.js',
  'src/b/c/index.ts',
  'a/index.ts',
  'a/b.ts',
  'a/b/index.js'
]

const tree = pathToTree(paths)

Builder usage

import { PathTreeBuilder } from 'to-path-tree'

const builder = new PathTreeBuilder()
builder.addPath('src/index.ts')
builder.addPath('src/a/index.ts')
builder.removePath('src/index.ts')
builder.getItems('src/a/') // get all file items under 'src/a/'
builder.getSubDirectories('src/') // get all subdirectories under 'src/'

Tree types

The data structure of the tree is as follows:

export interface NodeItem<T> {
  path: string
  /**
   * e.g. index
   */
  filename: string
  /**
   * e.g. ts
   */
  ext: string
  /**
   * e.g. index.ts
   */
  file: string
  data?: T
  isEntry: boolean // the entry is index
  parent: TreeNode<T>
}

export interface TreeNode<T> {
  items: NodeItem<T>[]
  name: string
  /**
   * This path is strict path, must start with sep, e.g. `/`
   */
  path: string
  /**
   * Relative to parent path
   */
  relativePath: string
  /**
   * Relative to root path, exclude sep
   */
  relativePathName: string
  subDirectory: {
    [key: string]: TreeNode<T>
  } | null
  parent?: TreeNode<T>
}

Traverse the tree

You can use walkPathTree to traverse the tree.

For example:

import { pathToTree, walkPathTree } from 'to-path-tree'

const tree = pathToTree(input)
walkPathTree(tree, (node) => {
  for (const item of node.items) {
    // NOTE: item.path is strict path, must start with sep, e.g. `/`
    if (item.path === '/src/a/b/d/index.ts') {
      // do something...
    }
  }
})

License

MIT

Package Sidebar

Install

npm i to-path-tree

Weekly Downloads

9

Version

1.2.3

License

MIT

Unpacked Size

42.4 kB

Total Files

9

Last publish

Collaborators

  • alexzzz