Skip to content

matutter/profs

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

56 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Build Status Coverage Status dependencies Status

Profs exports the primisified fs library and includes multiple customized implimentation from fs-extra such as walk, touch, and mkdirp.

mkdirp

Acts like the linux command "mkdir -p" and creates the full path to a directory. mkdirp Will not throw EEXIST or ENOENT but will throw for any other error.

const fs = require('profs')
var path = 'this/doesnt/exit/yet'

fs.mkdirp(path).then(() => console.log('done!'))

touch & touchp

Acts like the linux command "touch" and creates an empty file. touchp will create the path to the file if it doesn't exist.

fs.touch('to/my/file.txt').then(() => console.log('done!'))

walk

Recursively walks a given path and produces a File tree.

fs.walk('path/to/dir').then( tree_root => {
  var everything = tree_root.flatten()
  tree_root.children.forEach(node => { /*...*/ })
})

The options include a file filter function which is provided a File object and must return true to include it in the tree.

examples

// get all '.js' files
var options = {
  filter: file => file.isDirectory || file.endsWith('.js')
}
fs.walk('path/to/dir', options).then( tree_root => {
  var js_files = tree_root.flatten().filter(file => file.isFile)
})
// get all '.js' file names using `onFile` callback
var js_files = []

var options = {
  filter: file => file.isDirectory || file.basename.endsWith('.js'),
  onFile: (file, parent) => js_files.push(file.basename)
}

fs.walk('..', options).return(js_files)

API

Generated with dox

File(filepath:String, dirname:String, basename:String)

The file object contains the dirname, basename, children, isFile or isDirectory value, and a stat() function.

File.each(fn:Function, leaves_first:Boolean)

Iterates a callback over all children, if the callback produces a promise it will resolve before subsequent children are iterated over.

If the leaves_first parameter is truthy the callback will iterate over the tree in a leaf-to-root direction.

File.flatten(filter:Function)

Flattens all File nodes into a single flat array.

walk(root:String, opts:[object Object])

Walk will recursively walk a directory structure creating a file tree as it progresses. The file tree is a composite of "nodes" where each node is a File object and may be traversed by the File.children property, or, File.parent. File.children is an array of File objects and File.parent is mutable.

Walk will return the root node once the promise is fulfilled.

options.filter is a filter function on each node which will filter the nodes inclusion within the file tree. The filter option may also be an object with a file and directory filter function; example { file: f=>true, directory: d=>true }.

The onFile and onDirectory functions are handler functions which are passed either a file or directory & the parent directory if any.
Example: { onFile : (file, parent, options) => { ... } }

The filter, if truthy, will flatten the file tree before it is returned. This may also be a filter function to return only specific Files.

The promissory chain will wait for all filter, onFile, onDirectory callbacks to finish if they return a promise; returning a promise is not necessary.

mkdirp(filepath:String)

Creates all non-existing directories in a root-to-leaf direction after checking if the leaf doesn't exist. The root promise should be fulfilled in a race-tolerant way ( EEXIST are allowed after an ENOENT )

touch(path:String|Buffer, truncate:Boolean, mode:Integer)

Creates a file if it does not exist by opening it with 'a+', or truncating it with 'w+' when the truncate flag is truthy. Will fail if the file cannot be read or written to (EACCESS) or is an existing directory (EISDIR).

removerf(filepath:String)

Recursively removes all files and folders.
Files will be unlinked, and directories are deleted with rmdir from leaf to root.

About

A promissory fs library with extras

Topics

Resources

Stars

Watchers

Forks

Packages

No packages published