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

@z1digitalstudio/autogen

v0.0.1-beta.4

Published

> a tool to automate code generation

Downloads

10

Readme

autogen

a tool to automate code generation

autogen is a simple to use tool that can generate code automatically based on other input files. A simple use case would be to generate an index.ts file that re-exports the contents of all subdirectories:

Suppose we have this directory structure:

/src
  /components
    /Header
      - index.spec.tsx
      - index.tsx
      - styles.ts
    /Input
      - index.spec.tsx
      - index.tsx
      - styles.ts
    /Select
      - index.spec.tsx
      - index.tsx
      - styles.ts
    - index.ts

We'd want to have an index.ts file like this:

export { default as Header } from './Header';
export { default as Input } from './Input';
export { default as Select } from './Select';

However, this kind of boilerplate is inconvenient to maintain, and can get outdated easily (for example: someone might remove a component, but not its entry in the index file). With this tool, we can automatically generate this file.

autogen is written in TypeScript and distributed from the NPM registry, but it is not restricted to the Javascript ecosystem, and you can use it to generate code in other languages. It uses Handlebars as its templating language.

Installation

$ yarn add --dev @z1digitalstudio/autogen

# or

$ npm install --save-dev @z1digitalstudio/autogen

Usage

To use this tool, you need to create your templates first. Following the previous example, let's create the template for src/components/index.ts in autogen/src/components/index.ts.hbs:

{{#each components}}
export { default as {{this}} } from './{{this}}';
{{/each}}

Our file structure would look like this:

/autogen
  /src
    /components
      - index.ts
/src
  /components
    /Header
      - index.spec.tsx
      - index.tsx
      - styles.ts
    /Input
      - index.spec.tsx
      - index.tsx
      - styles.ts
    /Select
      - index.spec.tsx
      - index.tsx
      - styles.ts
    - index.ts

Now we must define our autogen.config.js file with all our necessary configuration:

module.exports = {
  baseDir: 'autogen',
  templates: [
    {
      dependencies: ['src/components/*/index.tsx'],
      templateFile: `src/components/index.ts.hbs`,
      transformData: async files => ({
        components: files
          .map(file => /src\/components\/(.+)\/index\.tsx/.exec(file))
          .filter(it => !!it)
          .map(([, component]) => component),
      }),
    },
  ],
};

Here's an overview of the file:

  • baseDir specifies where the directory containing all templates is placed.
  • templateFile points to the template inside the base directory.
  • transformData allows us to pass any information we need to the template. In this case, we don't want the full paths, we just need the name of the subdirectory. The function can be async in case we wanted to make more complex operations, like reading the contents of the file to determine if it contains a default export, and filter it out otherwise.

With all of that, we're all set. We can now run

$ yarn autogen

# or, if we're using npm...

$ node node_modules/.bin/autogen

We can also run yarn autogen --watch to put autogen in watch mode. It will react to changes in watched files, and file additions or deletions, and regenerate the code when necessary.