@pektin/js-fs
v2.2.1
Published
Declare your wanted filesystem structure instead of manually creating folders and files. Create fs structures with nodejs deno or output a shell script that creates them!
Downloads
1
Readme
The Problem
Tired of creating folders and files one by one like this?
const baseFolder = "base";
await fs.writeFile(path.join(baseFolder, `folder`, `file.txt`), "some string");
await fs.writeFile(path.join(baseFolder, `folder`), "some string");
Losing track of the folders/files created?
Missing subdirectories throwing nasty errors?
Importing fs with or without promises...?
Joining paths?
Telling users to create folders/files for your project by hand like this?
mkdir yourProject
git clone https://yourawesomeproject yourProject
cd yourProject
touch .env
- Now create a secret using your favorite password manager... if you have one
- it has to look like this
SECRET_VAR_FOR_PROJECT="d903j89feoef"
- ohh this works different on another OS... bad luck
declare-fs
to the rescue
With declare-fs
you won't have to imperatively tell what files and folders you want to have created.
You can just declare them like this:
import { declareFs } from "@pektin/declare-fs";
const options: = {
replace: true, // delete ALL folders/files first
method: `node` // method to use for creation; defaults to `sh-command`
};
declareFs({
orange: {
// empty folder named black
black: {},
// file with the name "hello-world.txt" and the contents "Hello World!"
"hello-world.txt": "Hello World!",
// have the quokka git repo cloned into the folder green
green: { $git: `https://github.com/wallabyjs/quokka` },
// a file like hello-wold.txt above but with the permission set to executable
"run-my-app.sh": { $file: `echo "Hello World!"`, $perms: `700` },
},
},options);
Resulting filesystem structure
orange
├── black
├── green
│ ├── EULA.md
│ ├── ISSUE_TEMPLATE
│ └── README.md
├── hello-world.txt # Hello World!
└── run-my-app.sh # echo "Hello World!"
Without options
import { declareFs } from "@pektin/declare-fs";
declareFs({
orange: {
// empty folder named black
black: {},
// file with the name "hello-world.txt" and the contents "Hello World!"
"hello-world.txt": "Hello World!",
// have the quokka git repo cloned into the folder green
green: { $git: `https://github.com/wallabyjs/quokka` },
// a file like hello-wold.txt above but with the permission set to executable
"run-my-app.sh": { $file: `echo "Hello World!"`, $perms: `700` },
},
});
This will return
sh -c 'mkdir ./orange;mkdir ./orange/black;echo -e "Hello World!"> ./orange/hello-world.txt;git clone https://github.com/wallabyjs/quokka ./orange/green;echo -e "echo \"Hello World!\""> ./orange/run-my-app.sh;chmod 700 ./orange/run-my-app.sh'
what will create the same structure as above when executed
Different modes
- deno
- node
- sh-script
- sh-command