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

domakey

v0.0.6

Published

Automated code-creation scripting framework

Downloads

55

Readme

DoMakey - automated code-creation scripting framework

What's a 'DoMakey'

The purpose of DoMakey is to enable automated code-creation for developers, thus reducing time spent setting up boilerplate code.

DoMakey is a command line interface which calls template-building scripts you write yourself. (These are super straight-forward, don't freak.)

The key features of domakey are exemplified here:

// File: .domakey/component.js

module.exports = async ({ cliArgs, makey }) => {
  // Read from passed cli param: `$ domakey component HomePage`
  const compName = cliArgs[0];

  // Ask for user input:
  const pageTitle = await makey.ask('Component\'s page title:');

  // Ask and cast y/n response to boolean
  const componentHasTest = await makey.askYN('Would you like to add a test?');

  // ... define `compBody`, and possibly `testBody`

  makey.createFile(
    `components/${compName}.jsx`,
    compBody,
  );

  componentHasTest && makey.createFile(
    `components/${compName}.spec.jsx`,
    testBody,
  );
}

Installation

Option 1. Install globally npm install -g domakey

Run with: domakey tmplName param1 param2

Option 2. Install locally

Best to save it as a devDependency in your project, with -D or --save-dev

npm install -D domakey

Run with: npm run domakey -- tmplName param1 param2

or w/ yarn: yarn domakey tmplName param1 param2

Get started:

Run domakey dmktmpl myNewTemplate to create a boilerplate template at .domakey/myNewTemplate.js

Documentation

CLI arguments

domakey <tmplName> [<params>...]

Where...

tmplName is a script filename (with or without '.js' extension) within the .domakey/ directory

params are arbitrary, repeatable parameters to be passed to your script.

Any argument preceeded by two dashes (--) will be cast to boolean; if starting with '--no-', it will become false, otherwise true. These can be passed anywhere after the script name parameter (order has no effect.)

For example:

domakey parser --ignore-whitespace --no-overwrite json html will run .domakey/parser.js. The function in parser.js will receive the following argument:

{
  templateName: "parser",
  cliArgs: ["json", "html"],
  cliFlags: {
    "ignore-whitespace": true,
    "overwrite": false,
  },
  makey: makeyLibraryObj, //*see note
}

*The makey parameter is always present and is described below.

Template files

You will need to create a directory .domakey at your project root level

In .domakey/yourTemplateFile.js, you should export a single asynchronous function which takes an object as a single argument.

The argument will be passed with the following keys:

Template Argument Object

Key Name | Description ------------- | ------------- templateName | The name of the script being run. (Should always mirror the filename, but is available nonetheless.) cliArgs | Array of subsequent parameters passed to the cli after the script name. Excludes params starting with '--'. cliFlags | Object of cli arguments which started with '--'. See 'CLI argments' section. makey** | The 'makey' library object used to perform IO interactions such as asking questions or creating files. (See 'makey' section below.)

**You can opt to include const makey = require('makey'); at the top of your template files, instead of using the passed param key. Up to you.

Quickstart tip: Run domakey dmktmpl myNewTemplate to create a boilerplate template at .domakey/myNewTemplate.js

The makey interface

The functions available in the makey object are listed here.

ask

Render text to the console and await user response.

Parameters

  • question (string) - the text to render to screen.

Returns

  • Promise<string> - The text the user entered. Empty string if user just hits 'enter'.
const strFaveFruit = await makey.ask('What\'s your favourite fruit?');

askYN

Render text to the console, adding " (Y/n) ", and awaits a user response which is cast to boolean.

Parameters

  • question (string) - The text to render to screen.
  • default (boolean, defaults to true) - What should be the default value if the user just hits 'enter'; Y (true) / N (false).

Returns

  • Promise<boolean> - true if the user responded 'y', false if 'n'. An empty response returns the default.
const boolIsCool = await makey.askYN('Do you think I\'m cool?');

print

Prints text to screen. A new line is automatically added afterwards.

Parameters

  • text (string) - The text to render to screen.
makey.print('Now hear this');

printHeading

Prints text to screen in === my heading ===

Parameters

  • text (string) - The text to render to screen as heading.
makey.print('Testing options');
// renders: "\n=== Testing options ==="

nl

Prints a new line only

No Parameters

nl();

createFile

Write a new file.

Parameters

  • fileName (string) - The path, relative to execution, of the file to create
  • body (string) - The contents of the file

Returns

  • boolean - true if successfully written.
const boolWriteSuccess = createFile(
  `src/bandits/${banditNameVar}.js`,
  banditBioVar,
);

editFile

Amend an existing file.

Parameters

  • fileName (string) - The path, relative to execution, of the file to create
  • callback (function) - A function which is called with a single parameter: the existing content of the file. This callback should return the new contents of the file as a string. If the callback returns false, the file will not be changed.

Returns

  • boolean - true if successfully edited.
const boolWriteSuccess = editFile(
  `src/bandits/${banditNameVar}.js`,
  existingBody => `${existingBody}${banditExportLine};\n`,
);

(end of documentation)

Why?

There were numerous, opinionated and framework-specific creation tools out there. The patterns we use at my workplace are sort-of particular (and awesome!), and I thought why not put the 'open' back into open-source to allow folks to take control of this.

What's in store

I'm aiming for DoMakey to also parse a structured input file (json / yaml... not sure yet) and batch pump the input through to the script files. In this way, a developer could set up script files (for example: for React Components, Redux reducers, action creators, stylesheets) then skeleton an app within the input file to have DoMakey magic up the general app framework. Then you code out the logic without getting sidetracked on following formatting procedures.

I'll be adding to my own DoMakey template libary along the way, firstly focused on functional React/Redux and Express / Node / Sequelize stacks. Maybe some good samaratin could help provide Angular / Vue stack templates.