Security News
pnpm 10.0.0 Blocks Lifecycle Scripts by Default
pnpm 10 blocks lifecycle scripts by default to improve security, addressing supply chain attack risks but sparking debate over compatibility and workflow changes.
directory-tree
Advanced tools
Creates a JavaScript object representing a directory tree.
This library gets ~100k downloads per week. If you find it useful, feel free to
$ npm install directory-tree
const dirTree = require("directory-tree");
const tree = dirTree("/some/path");
And you can also filter by an extensions regex: This is useful for including only certain types of files.
const dirTree = require("directory-tree");
const filteredTree = dirTree("/some/path", { extensions: /\.txt/ });
Example for filtering multiple extensions with Regex.
const dirTree = require("directory-tree");
const filteredTree = dirTree("/some/path", {
extensions: /\.(md|js|html|java|py|rb)$/
});
You can also exclude paths from the tree using a regex:
const dirTree = require("directory-tree");
const filteredTree = dirTree("/some/path", { exclude: /some_path_to_exclude/ });
You can also specify which additional attributes you would like to be included about each file/directory:
const dirTree = require('directory-tree');
const filteredTree = dirTree('/some/path', {attributes:['mode', 'mtime']});
The default attributes are [name, path]
for Files and [name, path, children]
for Directories
A callback function can be executed with each file that matches the extensions provided:
const PATH = require('path');
const dirTree = require('directory-tree');
const tree = dirTree('./test/test_data', {extensions:/\.txt$/}, (item, PATH, stats) => {
console.log(item);
});
The callback function takes the directory item (has path, name, size, and extension) and an instance of node path and an instance of node FS.stats.
You can also pass a callback function for directories:
const PATH = require('path');
const dirTree = require('directory-tree');
const tree = dirTree('./test/test_data', {extensions:/\.txt$/}, null, (item, PATH, stats) => {
console.log(item);
});
exclude
: RegExp|RegExp[]
- A RegExp or an array of RegExp to test for exclusion of directories.
extensions
: RegExp
- A RegExp to test for exclusion of files with the matching extension.
attributes
: string[]
- Array of FS.stats attributes.
normalizePath
: Boolean
- If true, windows style paths will be normalized to unix style pathes (/ instead of \).
depth
: number
- If presented, reads so many nested dirs as specified in argument. Usage of size attribute with depth option is prohibited.
Given a directory structured like this:
photos
├── summer
│ └── june
│ └── windsurf.jpg
└── winter
└── january
├── ski.png
└── snowboard.jpg
directory-tree
with attributes: ["size", "type", "extension"]
will return this JS object:
{
"path": "photos",
"name": "photos",
"size": 600,
"type": "directory",
"children": [
{
"path": "photos/summer",
"name": "summer",
"size": 400,
"type": "directory",
"children": [
{
"path": "photos/summer/june",
"name": "june",
"size": 400,
"type": "directory",
"children": [
{
"path": "photos/summer/june/windsurf.jpg",
"name": "windsurf.jpg",
"size": 400,
"type": "file",
"extension": ".jpg"
}
]
}
]
},
{
"path": "photos/winter",
"name": "winter",
"size": 200,
"type": "directory",
"children": [
{
"path": "photos/winter/january",
"name": "january",
"size": 200,
"type": "directory",
"children": [
{
"path": "photos/winter/january/ski.png",
"name": "ski.png",
"size": 100,
"type": "file",
"extension": ".png"
},
{
"path": "photos/winter/january/snowboard.jpg",
"name": "snowboard.jpg",
"size": 100,
"type": "file",
"extension": ".jpg"
}
]
}
]
}
]
}
You can easily extend a DirectoryTree
object with custom fields by adding them to the custom field.
For example add an id
based on the path of a DirectoryTree
object for each directory and file like so:
import { createHash } from 'crypto';
import * as directoryTree from 'directory-tree';
import { DirectoryTree, DirectoryTreeOptions, DirectoryTreeCallback } from 'directory-tree';
const callback: DirectoryTreeCallback = (
item: DirectoryTree,
path: string
) => {
item.custom = {id: createHash('sha1').update(path).digest('base64')};
};
const dirTree: DirectoryTree & { id?: string } = directoryTree(
"<your-directory-path>",
{},
callback,
callback
);
// to explore the object with the new custom fields
console.log(JSON.stringify(dirTree, null, 2));
Device, FIFO and socket files are ignored.
Files to which the user does not have permissions are included in the directory tree, however, directories to which the user does not have permissions, along with all of its contained files, are completely ignored.
To run tests go the package root in your CLI and run,
$ npm test
Make sure you have the dev dependencies installed (e.g. npm install .
)
This project requires at least Node v4.2.
Check out version 0.1.1
if you need support for older versions of Node.
You can use script directly from command line for generating json data.
$ npx directory-tree --help
$ npx directory-tree --path /Users/user/target --attributes type,extension --pretty -o ./xz.json --depth 1
-p, --path string 🗂 The input folder to process. Required.
-e, --exclude string 🐒 Exclude some folders from processing by regexp string. Ex -e "test_data/some_dir$|js|.DS_Store"
-o, --output string 📝 Put result into file provided by this options. Overwrites if exists.
-d, --depth number ☞ Reads dirs in deep as specified. Usage of size attribute with depth option is prohibited.
--attributes string ℹ️ Grab file attributes. Example: --attributes size,type,extension. Usage of size attribute with depth option is prohibited
--pretty 💎 Json pretty print
FAQs
Convert a directory tree to a JS object.
We found that directory-tree demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?
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.
Security News
pnpm 10 blocks lifecycle scripts by default to improve security, addressing supply chain attack risks but sparking debate over compatibility and workflow changes.
Product
Socket now supports uv.lock files to ensure consistent, secure dependency resolution for Python projects and enhance supply chain security.
Research
Security News
Socket researchers have discovered multiple malicious npm packages targeting Solana private keys, abusing Gmail to exfiltrate the data and drain Solana wallets.