Nonlinear Performance Magnification

    draxt

    1.0.0 • Public • Published
    draxt.js logo
    draxt license npm-link draxt build state draxt coverage status dependencies status

    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.

    draxt means tree in the Pahlavi language.

    /app/
     ├── controllers/
     │   └── index.js
     ├── public/
     │   ├── script.js
     │   └── style.css
     └── views/
         └── index.njk
    // Let's use a familiar variable name!
    const $ = require('draxt');
     
    (async () => {
      // Select `/app` directory contents 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('/hell') // or `.moveToSync('/hell')`
     
          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 '/hell'!
          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 and fs-extra modules.
    • draxt uses glob patterns to select filesystem objects.
    • Each item in a draxt collection is an instance of a File, Directory, or SymbolicLink class, which is a subclass of Node.
    • Every asynchronous method has a synchronous version. E.g., node.siblingsSync() for node.siblings().
    • draxt is a simple constructor function. You can extend/overwrite its methods via its prototype property (or its fn alias) or by using the draxt.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;
        });
    }

    Install

    Installing via npm:

    $ npm i draxt

    Via yarn:

    $ yarn add draxt

    Docs

    Test

    $ npm test

    License

    Licensed under MIT.

    Install

    npm i draxt

    DownloadsWeekly Downloads

    19

    Version

    1.0.0

    License

    MIT

    Unpacked Size

    233 kB

    Total Files

    22

    Last publish

    Collaborators

    • ramhejazi