npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

stats-filelist

v1.0.2

Published

Get a list of files and directories with `Stats` of each item. And filter the list with evaluating path, path pattern, type, size, modified time, and more.

Downloads

184

Readme

statsFilelist

npm GitHub issues dependencies license

Get a list of files and directories with Stats of each item. And filter the list with evaluating path, path pattern, type, size, modified time, and more.

By default, statsFilelist gets all files and directories under specific directories recursively, and it returns an Array that includes the expanded fs.Stats objects of each item.
That expanded fs.Stats object has additional properties such as fullPath, extension, etc.. (See Stats object.)
The got Stats objects will be useful more than the path list because you are supposed to do something with those files or directories after getting those.

It returns the filtered list if you want. That filter evaluates that Stats object by using flexible ways such as RegExp, callback, etc..
And also, the filter can control the behavior of statsFilelist. For example, it make statsFilelist stop getting files any more when the file you want was found out.

var filelist = require('stats-filelist');

// Asynchronous method:
filelist.get(['dir-1', 'dir-2'], function(list) {
  console.log(list);
}, /\.js$/i); // Get JavaScript files.
// `extension` property also can be used.

// Synchronous method:
var list = filelist.getSync(['dir-1', 'dir-2'],
  function(stats) { return stats.size > 1024; }); // Get 1KB+ files.
console.log(list);

Methods

get, getSync

filelist.get(path, callback[, options])
filelist.get(path, callback[, filter[, recursive]])
list = filelist.getSync(path[, options])
list = filelist.getSync(path[, filter[, recursive]])

get is asynchronous method, and getSync is synchronous method.

path argument is a string as the path of target directory, or an Array that includes those of multiple target directories. The default value of path argument is . (i.e. current working directory).

callback argument that is specified to get method is a function that is called with list Array when processing finished. That is same as list Array that is returned by getSync method.

By default, the list Array includes Stats objects. Also, what it includes can be specified via listOf option.

For example:

console.log('File name: ' + list[3].name + ' Updated: ' + list[3].mtime);

options argument is an Object that has filter property, and more. (See Options.)
filter and recursive arguments are same as filter and recursive option.
For example, the following 2 codes work same:

filelist.get(path, callback, wanted);
filelist.get(path, callback, { filter: wanted });

Options

options Object that is passed to the methods can have following properties:

filter

Type: RegExp, string or function
Default: undefined

By default, the list statsFilelist returns includes all items under specific directories. This option decides whether the list includes each item.
This can be one of following types:

RegExp

If the full path of the current item matches this RegExp, that item is included to the list.

For example, the PNG files are listed (extension property of Stats object also can be used.):

list = filelist.getSync('./media', /\.png$/i);

For example, the files and directories except debug.log and package.json are listed:

list = filelist.getSync('./repo',
  /^(?!.*[\/\\](?:debug\.log|package\.json)$).+$/);

For example, the files and directories except files starting with a dot are listed:

list = filelist.getSync('./project', /^(?!.*[\/\\]\.[^\/\\]*$).+$/);

For example, the files and directories under css directories are listed:

list = filelist.getSync('./websites', /[\/\\]css[\/\\]/i);

string

If the full path of the current item includes this string, that item is included to the list.
/ and \ are replaced to the platform-specific file separator before this is used. In Windows, the string comparisons are case-insensitive (e.g. it considers that file.txt is included in FooFile.TXT).

For example, the files and directories under node_modules directories are listed:

list = filelist.getSync('./dev', '/node_modules/');

For example, the files and directories starting with a dot are listed:

list = filelist.getSync('./project', '/.');

function

This function decides whether the current item is included to the list, and also, it can control the behavior of statsFilelist.
It is called with the Stats object of the current item.

When it returns a boolean
include = filter(stats)

If this function returns a true, the current item is included to the list. If it returns a false, the current item is not included to the list.

For example, the directories are listed:

list = filelist.getSync(null, function(stats) {
  return stats.isDirectory(); // Use `stats.isFile()` if you want files.
});

For example, the files and directories that were modified recently are listed:

list = filelist.getSync('./docs', function(stats) {
  return stats.mtime > yesterday;
});

For example, the index.html files are listed:

list = filelist.getSync('./public_html', function(stats) {
  return stats.name === 'index.html';
});
When it returns an Object
object = filter(stats)

If this function returns an Object, the following properties of this Object decide whether the current item is included to the list, and it controls the behavior of statsFilelist:

include

If true is specified to this property, the current item is included to the list. If false is specified to it, the current item is not included to the list.

For example, the files are listed:

list = filelist.getSync(null, function(stats) {
  return {
    include: stats.isFile()
  };
});

If this Object has only include property, that boolean can be returned instead of this Object.

exit

If true is specified to this property, statsFilelist exits from current directory after processing of current item, and the remaining items in current directory are not processed.
Note that the "current directory" means the parent directory of current item, it is not the directory current item points.
This is used to finish the method fast.

For example, it does not have to look for the file any more in that directory if it found out public_html, because any more public_html are clearly not existing under that directory tree:

list = filelist.getSync('./websites', function(stats) {
  return stats.name === 'public_html' ? {
      include: true,
      exit: true
    } : false; // Others are not listed.
});
stop

If true is specified to this property, statsFilelist stops getting the items after processing of current item, and it returns the list that includes the items that were added until now, and the all remaining items are not processed.
This is used to finish the method fast when you want to find out an only one file in the target path.

For example, it does not have to look for the file any more if it found out foo.py, because any more foo.py are clearly not existing under that project directory tree:

list = filelist.getSync('./project', function(stats) {
  return stats.name === 'foo.py' ? {
      include: true,
      stop: true
    } : false; // Others are not listed.
});
recursive

This is not recursive option.

This property overrides recursive option temporarily.
When the current item is directory, if true is specified to this property, statsFilelist gets the items in that directory even if false is specified to recursive option. If false is specified to it, statsFilelist does not get the items in that directory even if true is specified to recursive option.
This is used to finish the method fast.

For example, it does not have to list the files and directories in node_modules directory:

list = filelist.getSync('./websites', function(stats) {
  return stats.name === 'node_modules' ? {
      include: false,
      recursive: false
    } : true; // Others are listed.
});

recursive

Type: boolean
Default: true

This is not recursive property of filter option.

By default, statsFilelist gets all items under specific directories recursively. If false is specified to this property, statsFilelist does not get the items in the sub directories.
This can be controlled on demand by recursive property of filter option.

clearCache

Type: boolean
Default: false

Ever since it is loaded, statsFilelist caches the got Stats objects to finish the processing fast.
If you want to clear the cache data to get the newest information such as modified time of the updated files, specify true to this option.

listOf

Type: string
Default: undefined

By default, statsFilelist returns the list of Stats objects. If the name of property or method of Stats object is specified to this option, it returns the list of those values. That is value that was returned by specific method if the name of method is specified.

For example, the list of full paths of each file and directory is returned:

list = filelist.getSync(null, { listOf: 'fullPath' });

list:

[
  '/path/to/file-1',
  '/path/to/file-2',
  '/path/to/dir-1',
  '/path/to/file-3'
]

For example, the list of names of each file and directory is returned:

list = filelist.getSync(null, { listOf: 'name' });

list:

[
  'file-1',
  'file-2',
  'dir-1',
  'file-3'
]

For example, the list of booleans to indicate whether it is file (return value of isFile method) of each item is returned:

list = filelist.getSync(null, { listOf: 'isFile' });

list:

[
  true,
  true,
  false,
  true
]

Stats object

The Stats object that is evaluated in filter and included to the list that is returned by statsFilelist by default is the expanded fs.Stats object.
This has native methods such as isFile, isDirectory, etc. and native properties such as mode, size, mtime, etc. and following additional properties:

path

The path of the item that was joined to specific target path.

fullPath

The full path of the item.

dirPath

The full path of the parent directory of the item.

name

The name of the item.

extension

The file extension of the item. This does not include . as separator.