sscaff
TypeScript icon, indicating that this package has built-in type declarations

2.0.388 • Public • Published

sscaff

Stupid scaffolding: copies an entire directory with variable substitution and pre/post node.js hooks.

Installation

yarn add sscaff

or:

npm install sscaff

Usage

Create a template directory with files and subdirectories. For example:

my-first-template
  {{name}}.txt
    Hello, my name is {{name}}!

Now, use sscaff to create a copy and substitute:

import { sscaff } from 'sscaff';

await sscaff('my-first-template', 'outdir', {
  name: 'oliver'
});

This will create the following:

outdir
  oliver.txt
    Hello, my name is oliver!

Built-in Substitutions

  • {{ $base }} will be substituted by the base name of the output directory (e.g. outdir in the example above).
  • {{ }} will be substituted by the empty string. You can use this substitution to "salt" a file name so it won't be recognized by the parent project. For example, if you want your template to include a gitignore file, you should call it {{}}.gitignore so it won't be recognized as a "real" gitignore in the parent project.

Hooks

If the template directory has a file named .hooks.sscaff.js, and exports pre and/or post functions, those will be called before and after the creation of the output, respectively.

These functions are both executed with the output directory as the working directory and accept the variables dictionary. Both functions can either be synchronous or asynchronous.

The pre function may also modify the variables dictionary (i.e. add variables, modify them, etc).

For example, let's add the following .hooks.sscaff.js file to my-first-template above.

const fs = require('fs').promises;

exports.pre = variables => {
  variables.orig = variables.name;
  variables.name = variables.name[0].toUpperCase() + variables.name.slice(1);
};

exports.post = async (variables) => {
  await fs.writeFile(variables.orig + '.bak', 'hello hello');
};

The resulting output will look like this now:

outdir
  Oliver.txt
    Hello, my name is Oliver!
  oliver.bak
    hello hello

Contributions

All contributions are welcome, just raise an issue or submit a PR. Add a test, update readme. Do the right thing.

License

Apache 2.0

Readme

Keywords

none

Package Sidebar

Install

npm i sscaff

Weekly Downloads

86,516

Version

2.0.388

License

Apache-2.0

Unpacked Size

36.2 kB

Total Files

15

Last publish

Collaborators

  • eladb
  • cdklabs-automation