Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/ramhejazi/draxt
draxt.js – NodeList/jQuery-like package for File System (node.js)
https://github.com/ramhejazi/draxt
filesystem fs fs-extra glob node nodejs utility
Last synced: 3 months ago
JSON representation
draxt.js – NodeList/jQuery-like package for File System (node.js)
- Host: GitHub
- URL: https://github.com/ramhejazi/draxt
- Owner: ramhejazi
- License: mit
- Created: 2018-06-30T23:20:38.000Z (over 6 years ago)
- Default Branch: master
- Last Pushed: 2023-12-11T13:36:12.000Z (11 months ago)
- Last Synced: 2024-03-14T20:21:21.373Z (8 months ago)
- Topics: filesystem, fs, fs-extra, glob, node, nodejs, utility
- Language: JavaScript
- Homepage: https://ramhejazi.github.io/draxt/
- Size: 531 KB
- Stars: 190
- Watchers: 6
- Forks: 4
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
- awesome-repositories - ramhejazi/draxt - draxt.js – NodeList/jQuery-like package for File System (node.js) (JavaScript)
README
`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
``````js
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`] 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.```js
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]:
```bash
$ npm i draxt
```Via [yarn]:
```bash
$ yarn add draxt
```## Docs
- [`draxt` APIs][draxt-doc]
- Interfaces
- [`Node`]
- [`File`]
- [`Directory`]
- [`SymbolicLink`]## Test
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!```bash
$ npm run test
```## License
[Licensed under MIT.][license]
[repo]: https://github.com/ramhejazi/draxt
[logo]: draxt-logo.jpg
[license]: https://github.com/ramhejazi/draxt/blob/master/LICENSE
[license-badge]: https://img.shields.io/badge/license-MIT-blue.svg?style=flat-square
[coverall]: https://coveralls.io/github/ramhejazi/draxt
[coverall-badge]: https://img.shields.io/coveralls/github/ramhejazi/draxt.svg?style=flat-square
[npm-link]: https://www.npmjs.com/package/draxt
[npm-badge]: https://img.shields.io/npm/v/draxt.svg?style=flat-square
[travis-link]: https://travis-ci.org/ramhejazi/draxt
[travis-badge]: https://img.shields.io/travis/ramhejazi/draxt.svg?style=flat-square
[deps-status-link]: https://david-dm.org/ramhejazi/draxt
[deps-status-badge]: https://david-dm.org/ramhejazi/draxt.svg?style=flat-square
[npm]: https://docs.npmjs.com/getting-started/what-is-npm
[yarn]: https://yarnpkg.com/en/
[glob]: https://en.wikipedia.org/wiki/Glob_(programming)
[`fs`]: https://nodejs.org/api/fs.html
[`fs-extra`]: https://github.com/jprichardson/node-fs-extra
[`glob`]: https://github.com/isaacs/node-glob
[Pahlavi language]: https://en.wikipedia.org/wiki/Middle_Persian
[draxt-doc]: https://ramhejazi.github.io/draxt#draxt
[`Node`]: https://ramhejazi.github.io/draxt#interfaces-node
[`File`]: https://ramhejazi.github.io/draxt#interfaces-file
[`Directory`]: https://ramhejazi.github.io/draxt#interfaces-directory
[`SymbolicLink`]: https://ramhejazi.github.io/draxt#interfaces-symboliclink
[`draxt.extend`]: https://ramhejazi.github.io/draxt#draxt-extend
[`node.siblingsSync()`]: https://ramhejazi.github.io/draxt#node-siblings
[`node.siblings()`]: https://ramhejazi.github.io/draxt#node-siblings