npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2024 – Pkg Stats / Ryan Hefner

@pektin/declare-fs

v2.2.2

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

125

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?

  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