# API documentation
## readme-generator : object
From: `@hperchec/readme-generator@3.1.0`
**Example**
```js
const readmeGenerator = require('@hperchec/readme-generator')
```
* [readme-generator](#module_readme-generator) : object
* _static_
* [.generate](#module_readme-generator.generate) ⇒ void \| Promise.<void>
* [.render](#module_readme-generator.render) ⇒ string \| Promise.<string>
* [.processConfig](#module_readme-generator.processConfig) ⇒ Configuration \| Promise.<Configuration>
* [.defaultConfig](#module_readme-generator.defaultConfig) : Configuration
* [.defaultEjsData](#module_readme-generator.defaultEjsData) : object
* [.$config](#module_readme-generator.defaultEjsData.$config) : Configuration
* [.$utils](#module_readme-generator.defaultEjsData.$utils) : object
* _inner_
* [~Configuration](#module_readme-generator..Configuration) : object
### readmeGenerator.generate ⇒ void \| Promise.<void>
Writes rendered README markdown to file
**Returns**: void \| Promise.<void> - Promise is immediately resolved except if a module is async.
**Throws**:
- Throws error if render or file writing fails
| Param | Type | Description |
| --- | --- | --- |
| config | Configuration \| string | The config object to process. Can be path to config file as string. |
| [options] | object | Options object |
| [options.data] | object | Additionnal data object to merge with default EJS data |
**Example**
```js
readmeGenerator.generate(config) // => output to README.md file
readmeGenerator.generate('./.docs/readme/config.js') // pass config path
readmeGenerator.generate(config, { data: { foo: 'bar' } }) // pass options
// Async
await readmeGenerator.generate('./.docs/readme/config.js') // async module
await readmeGenerator.generate({
ejsDataPath: '/path/to/ejs/data.js' // async module
})
```
### readmeGenerator.render ⇒ string \| Promise.<string>
Render README markdown
**Returns**: string \| Promise.<string> - Returns the rendered markdown as string. Promise is immediately resolved except if a module is async.
| Param | Type | Description |
| --- | --- | --- |
| config | Configuration \| string | Same as generate config but `fileName` and `destFolder` option are just ignored |
| [options] | object | Same as generate |
**Example**
```js
const result = readmeGenerator.render(config)
const result = readmeGenerator.render('./.docs/readme/config.js')
const result = readmeGenerator.render(config, { data: { foo: 'bar' } })
// Async
const result = await readmeGenerator.render('./.docs/readme/config.js') // async module
const result = await readmeGenerator.render({
ejsDataPath: '/path/to/ejs/data.js' // async module
})
```
### readmeGenerator.processConfig ⇒ Configuration \| Promise.<Configuration>
Takes a custom config as unique parameter and merges it with the default configuration object.
**Returns**: Configuration \| Promise.<Configuration> - Returns the processed configuration. Promise is immediately resolved except if module is async.
| Param | Type | Description |
| --- | --- | --- |
| config | Configuration \| string | The config object to process. Can be path to config file as string. |
**Example**
```js
readmeGenerator.processConfig({ ... }) // pass object
readmeGenerator.processConfig('./.docs/readme/config.js') // pass path as string
// If module.exports is a promise
await readmeGenerator.processConfig('./.docs/readme/config.js') // async module
```
### readmeGenerator.defaultConfig : Configuration
Returns the default configuration object.
This base configuration is used by `processConfig` method and so `generate` and `render` methods.
See also [Configuration](#module_readme-generator..Configuration) defaults.
### readmeGenerator.defaultEjsData : object
Returns the default EJS data object.
This base EJS data object is used by `render` methods and merged with user provided EJS data.
* [.defaultEjsData](#module_readme-generator.defaultEjsData) : object
* [.$config](#module_readme-generator.defaultEjsData.$config) : Configuration
* [.$utils](#module_readme-generator.defaultEjsData.$utils) : object
#### defaultEjsData.$config : Configuration
Contains the default configuration by default.
Will be merged with custom configuration when using `generate` or `render` method.
**Example**
```js
// Access configuration
$config.fileName // => README.md
```
#### defaultEjsData.$utils : object
Contains the following methods:
- `table`: generates a markdown table
- `asciiTree`: generates an "ASCII" tree
- ... all methods from `markdown-utils` package
> Please check the following package documentations:
> - [markdown-utils](https://github.com/jonschlinkert/markdown-utils)
> - [markdown-table](https://www.npmjs.com/package/markdown-table) (⚠ v1.1.3)
> - [ascii-tree](https://www.npmjs.com/package/ascii-tree)
**Example**
```js
// Generates a blockquote
$utils.blockquote('This is a blockquote')
// Generates a table
$utils.table([
[ 'Column 1', 'Column 2' ],
[ 'Value 1', 'Value 2' ]
])
// Generates an ascii tree
$utils.asciiTree('*.\n**a\n**b\n*...')
```
### readme-generator~Configuration : object
Configuration object definition
**Properties**
| Name | Type | Description |
| --- | --- | --- |
| [fileName] | string | Output file name: `README.md` by default. Only for **generate** method |
| [destFolder] | string | Output path, default is `process.cwd` (project root). Only for **generate** method |
| [templatePath] | string | Template path: default is `.docs/readme/template.md` |
| [ejsDataPath] | string | Path to EJS data file: default is `.docs/readme/data.js`. If null, no file will be required |
| [ejsOptions] | object | EJS options: see also [EJS documentation](https://www.npmjs.com/package/ejs#options). |
| [ejsOptions.root] | Array.<string> | The path of template folder is automatically included. |
| [ejsOptions.views] | Array.<string> | The path of template folder and the path of internal partials are automatically included. |
| [appendAutoGenMessage] | boolean | If true, append "don't edit" message to rendered markdown. Default is **true**. |
| [autoToc] | boolean | If true, parse `` special comment to automatically inject generated table of contents. Default is **true**. The `markdown-toc` package is used for this feature, check the [documentation](https://www.npmjs.com/package/markdown-toc). |
| [slugify] | function | If provided, will be used by `markdown-toc` to slugify headings id. Default uses `github-slugger` (⚠ v1.5.0): see [**slug** method documentation](https://github.com/Flet/github-slugger#usage). |