Introducing Socket Firewall: Free, Proactive Protection for Your Software Supply Chain.Learn More
Socket
Book a DemoInstallSign in
Socket

@pektin/declare-fs

Package Overview
Dependencies
Maintainers
2
Versions
18
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@pektin/declare-fs

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!

latest
npmnpm
Version
2.2.2
Version published
Maintainers
2
Created
Source

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

No runtime dependencies

FAQs

Package last updated on 27 May 2022

Did you know?

Socket

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Install

Related posts