https://github.com/therayvoice/ray-fs
A library with easy to use, mind blowing file-system tools for NodeJS. Based on FS! with chainable methods, sync first approach, and amazing UX.
https://github.com/therayvoice/ray-fs
chainable-methods filesystem fs hacktoberfest nodejs synchronous
Last synced: about 1 month ago
JSON representation
A library with easy to use, mind blowing file-system tools for NodeJS. Based on FS! with chainable methods, sync first approach, and amazing UX.
- Host: GitHub
- URL: https://github.com/therayvoice/ray-fs
- Owner: therayvoice
- License: mit
- Created: 2021-06-15T18:26:59.000Z (almost 4 years ago)
- Default Branch: main
- Last Pushed: 2021-07-07T16:24:48.000Z (almost 4 years ago)
- Last Synced: 2025-03-18T12:57:37.135Z (about 1 month ago)
- Topics: chainable-methods, filesystem, fs, hacktoberfest, nodejs, synchronous
- Language: JavaScript
- Homepage:
- Size: 32.2 KB
- Stars: 1
- Watchers: 1
- Forks: 0
- Open Issues: 1
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
# ray-fs
A library with easy to use, mind blowing file-system tools for NodeJS. Based on FS! with chainable methods, sync first approach, and amazing UX.# Installation
To install with NPM use:
```
npm i ray-fs --save
```Then attach it to your file using:
```javascript
const fs = require('ray-fs');// use code here
```# Usage
The ray-fs library has the following methods and properties:
1. .value: To return the output of the previous method in the chain.For example:-
```javascript
fs
.lsDir() // gets the list of Directories
.value // returns the list of Directories
```2. .logVal(): To `console.log()` the output of the previous method in chain.
For example:-
```javascript
fs
.lsFile() // gets the list of Files
.logVal() // logs the list of Files
```3. .cd(dirName): To change the "working-directory" to `dirName`. A virtual version of shell's `cd`, it does not allow a movement to directories deeper then depth=1.
4. .ls(): To get a list of all the Files in the "working-directory".
5. .exists(fileURL): To check if a FS item (like a File) exists at `fileURL`.
6. .isFile(fileURL): To check if `fileURL` is a File or not! (a Directory maybe)
7. .isDir(dirURL): To check if `dirURL` is a Direcotry or not!
8. .lsMatches(filterFunction): To get a list of all items in the "working-directory" that matches `filterFunction`.
```javascript
fs
// To get a list of all items in the "working-directory" that have names ending in ".js"
.lsMatches(item => /.js$/.test(item))
.value // To return that list
```Better written as:
```javascript
fs
// To get a list of all Javascript Files in the "working-directory"
.lsMatches(item => fs.isFile(item).value && /.js$/.test(item))
.value // To return that list
```9. .lsDir(): To get a list of all Directories in the "working-directory".
10. .lsFile(): To get a list of all Files in the "working-directory".
11. .version(): To get the current version of `ray-fs`.
12. .write(fileURL, content): To write the `content` into the file at `fileURL`.
13. .read(fileURL).value: To read the content of the file at `fileURL`. The path used must be relative from the root directory of your project, e.g. "./README.md".
14. .writeJSON(fileURL, json): To write the `json` into the file at `fileURL`.
15. .readJSON(fileURL).value: To read/import the JSON content of the file at `fileURL`.
16. .updateJSON(file, callback): TO update the json object in a .json file. For example:
```javascript
const fs = require('ray-fs');const file = "june.json";
fs
.updateJSON(file, (json) => {
json.oldProp = "replace old prop's value with new value";
json.newProp = "adds a new prop with a new value";
return json;
});```
17. .readArray(fileURL).value: To read/import the content of the file at `fileURL` as an Array of lines of content.
18. .push(fileURL, content): To add the `content` below the existing content of the file at `fileURL`.
19. .rm(url): To delete the item at `url`.
20. .cp(url, destinationURL): To copy the item at `url` to `destinationURL`.
21. .mv(url, destinationURL): To move the item at `url` to `destinationURL`.
22. .mkdir(dirName): To create a new Directory named `dirName`.
23. .logDir(): To log the name of the "working-directory".
24. .validFileName(fileName): To check if a file name complies with the file naming rules. (beta version)
25. .validDirName(dirName): To check if a directory name complies with the naming rules. (beta version)
26. .stream(responseBody, filePath, errorCallback, sucessCallback): To pipe a `response.body` to a `filePath`.
27. .initDir(dirName): To check if a directory exists, if no then create it.
28. .initDirs(dirName1, dirName2, ...): To check if all of the provided directories exist, if any don't then create them.
29. .initFile(fileName, fileContent): To check if a file exists, if no then create it, then add the provided `fileContent` to it. The `fileContent` paremeter can be passed a JSON `object` or a `String`.
Note: The documentation is incomplete, and will be completed soon.
## Chaining Functions
Chain functions to make code more readable!```javascript
const fs = require('ray-fs');fs
.mkdir('myProject')
.cd('myProject')
.write('myFile.txt', 'Hello World!')
.cp('myFile.txt', 'myGreeting.txt')
.read('myFile.txt')
.logVal()
.read('myGreeting.txt')
.logVal()```
The .value prop and the .## Tips
1. Absolute URL's aren't allowed, instead use .cd() to change the "working-directory" first!
2. Chain for the betterment of code, don't chain where it dosen't make sense.
3. This library is not meant to replace `fs`, it is meant to be an alternative way to write code that can also be written with `fs`. This library will allow you to write significaltly shorter and clearer code.# Comming Soon
1. Async methods.
2. color logs.