@pektin/declare-fs
TypeScript icon, indicating that this package has built-in type declarations

2.2.2 • Public • Published

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?

  1. mkdir yourProject
  2. git clone https://yourawesomeproject yourProject
  3. cd yourProject
  4. touch .env
  5. Now create a secret using your favorite password manager... if you have one
  6. it has to look like this SECRET_VAR_FOR_PROJECT="d903j89feoef"
  7. 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

No runtime dependencies

Readme

Keywords

none

Package Sidebar

Install

npm i @pektin/declare-fs

Weekly Downloads

2

Version

2.2.2

License

MIT

Unpacked Size

148 kB

Total Files

81

Last publish

Collaborators

  • pektin-dolly
  • firstdorsal