draxt
is a utility module for selecting and manipulating filesystem objects in a Node.js environment.
It uses glob patterns as its "selector engine". draxt
also provides several DOM-like interfaces representing filesystem objects which build on promisified APIs for the fs
and fs-extra
modules.
Example directory structure:
/app/
├── controllers/
│ └── index.js
├── public/
│ ├── script.js
│ └── style.css
└── views/
└── index.html
const $ = require('draxt');
(async () => {
// Select `/app` directory content and create a new `draxt` collection.
const $app = await $('/app/**');
$app
// Let's filter js files:
.filter((node) => node.extension === 'js')
// Now we have a new `draxt` collection with 2 nodes.
.forEach(async (node, index, allNodes) => {
// `node` is instance of `File` class. Because it's a file!
console.log(node.pathName);
// → '/app/controllers/index.js' for the first node!
console.log(node instanceof $.File); // → `true`
// Let's get contents of the node. `file.read` returns a promise object.
const content = await node.read('utf8');
// Let's use some synchronous methods!
node.appendSync('\na new line!')
.chmodSync('765')
// move the file into another directory!
.appendToSync('/tmp'); // or `.moveToSync('/tmp')`
console.log(node.pathName);
// → '/hell/index.js' for the first node in the list!
// get the parent directory of the node.
// returns a `Directory` instance with the pathName of '/tmp'!
const parentNode = node.parentSync(); // or `await node.parent()`
// is the directory empty?
console.log(parentNode.isEmptySync()); // → `false`
});
})();
Key notes:
draxt
has only 2 dependencies:glob
andfs-extra
modules.draxt
usesglob
patterns to select filesystem objects.- Each item in a
draxt
collection is an instance of aFile
,Directory
, orSymbolicLink
class, which is a subclass ofNode
. - Every asynchronous method has a synchronous version. E.g.,
node.siblingsSync()
fornode.siblings()
. draxt
is a simple constructor function. You can extend/overwrite its methods via itsprototype
property (or itsfn
alias) or by using thedraxt.extend
method.
const draxt = require('draxt');
// Add a method (`images`) for filtering image files.
draxt.fn.images = function() {
const imgExtensions = ['jpeg', 'jpg', 'png', 'git', ...];
return this.filter(node => {
return node.isFile() && imgExtensions.indexOf(node.extension) > -1;
});
}
Installing via npm:
$ npm i draxt
Via yarn:
$ yarn add draxt
draxt
APIs- Interfaces
In the past, mock-fs was used for mocking test file system, but since the package is not compatible with
newer versions of node.js, now regular linux cmds like mkdir
and echo
are used for creating test files and
folders. The test fs structure are created in /tmp
directory. That being said, for now, tests only work on Linux!
$ npm run test