# generify

> A reusable project generator

Latest version **4.2.0** (published 2021-01-07) · MIT license · 0 weekly downloads

## Install

```sh
npm install generify
pnpm add generify
yarn add generify
bun add generify
```

Provides the command `generify`.

## Health

**Score 15/100 (F)** — status: abandoned.

Positive: no vulnerabilities.

Warnings: low downloads; no types; no esm support.

Negative: abandoned; low maintenance score.

## Facts

| | |
|---|---|
| Version | 4.2.0 |
| Published | 2021-01-07 |
| First published | 2014-10-17 |
| Weekly downloads | 0 |
| License | MIT |
| TypeScript types | none |
| Module format | CommonJS |
| Dependencies | 4 |
| Unpacked size | 19.7 KB |
| Known vulnerabilities | 0 |
| Install scripts | no |
| GitHub stars | 34 |
| Author | Matteo Collina |
| Maintainers | matteo.collina |
| Keywords | project, generator, module |

## Links

- npm: https://www.npmjs.com/package/generify
- Repository: https://github.com/mcollina/generify
- Issues: https://github.com/mcollina/generify/issues
- npm.io page: https://npm.io/package/generify

## Dependencies (4)

- [pump](https://npm.io/package/pump.md) ^3.0.0
- [split2](https://npm.io/package/split2.md) ^3.0.0
- [walker](https://npm.io/package/walker.md) ^1.0.6
- [isbinaryfile](https://npm.io/package/isbinaryfile.md) ^4.0.2

## Recent versions

- 4.2.0 (latest) — 2021-01-07
- 4.1.0 — 2020-03-25
- 4.0.0 — 2019-12-23
- 3.0.3 — 2019-02-20
- 3.0.2 — 2018-10-16
- 3.0.1 — 2018-07-12
- 3.0.0 — 2018-07-11
- 2.1.0 — 2018-03-10
- 2.0.0 — 2018-03-04
- 1.1.0 — 2014-11-24
- 1.0.0 — 2014-10-17

## README

# generify&nbsp;&nbsp;![Build Status](https://github.com/mcollina/generify/workflows/ci/badge.svg)

A reusable project generator that _copies file recursively_, while
replacing keywords from passed data.

## Example

```js
'use strict'

const generify = require('generify')
const source = './template'
const dest = '/tmp/generify-test'
const data = { hello: 'hello world' }

// without notification
generify(source, dest, data, function (err) {
  if (err) {
    console.log(err)
  } else {
    console.log('ok!')
  }
})

// with notification
generify(source, dest, data, onData, done)

function onData (file) {
  console.log('writing file')
}

function done (err) {
  if (err) {
    console.log(err)
  } else {
    console.log('ok!')
  }
}
```

This will replace all the `__hello__` patterns found in all files
with the `'hello world'` string.

If the supplied `data` has a key `transforms`, with a hash of tranformation
functions, then the found tokens will be used to run a corresponding
transform on the supplied data. Example:

```js
const data = {
  transforms: { foo: (data, context) => data.toUpperCase() },
  foo: 'foo'
}

// __foo__ => foo_transform(data = 'foo') => 'FOO'
```

The `context` object contains properties: `source` (input file path),
`dest` (output file path), `key` (the matched key).

### Files and Directories

files and directories located in the template folder may also be replaced. File and folder names wrapped with `@` delimiters will be replaced.

#### Example

Given a template with:

`/template/@foo@/@bar@.txt`

and data:

```js
const data = {
  foo: 'hello',
  bar: 'world'
}
```

The outputted file will be:

`<dest>/hello/world.txt`

### `__` handling

If a file begins with `__` that will be automatically converted into a
`.`. This is useful for generating `.gitignore` files.

If the supplied `data` has a key `copyAsNamed`, with an array of names, then
the filenames in that list will not be processed through this rule. Each file
name in the list should not include a path,
e.g. `['__do-not-replace-underscores.js']`.

## Executable

__generify__ also offers an executable that can be called with:

  Usage: generify template destination [json file]

Where the json file contains the data to be replaced.

## Acknowledgements

This project was kindly sponsored by [nearForm](http://nearform.com).

## License

MIT

---
_Source: https://npm.io/package/generify · Machine-readable twin of the npm.io package page. Health data is recomputed on every publish._
