npm package: @snickbit/indexer
Description: Simple cli tool to generate index files for almost any project.
Latest version: 2.10.1

# @snickbit/indexer

Simple cli tool to generate index files for almost any project.

## Installation

```bash
pnpm add -g @snickbit/indexer
```

```bash
yarn global add @snickbit/indexer
```

```bash
npm install -g @snickbit/indexer
```

## Usage

### CLI Usage


```bash
indexer [source] [--config|c=config/file/path.json] [--dry-run|d]
```

Once you have a config file, you can use the CLI to generate index files just by running `indexer` in the same directory as the config file.


### Config Options

Indexer is configured by a "indexer.config.json" file or the "indexer" package.json property.

Starter config file for a library:

```json
{
	"source": "src/**/*.{js,jsx,ts,tsx}",
	"output": "src/index.ts",
	"type": "wildcard"
}
```

#### source

Type: string | string[] \
Example: "src/**/*.{js,jsx,ts,tsx}"

Glob pattern(s) to match the source files.

**Note:** Generated index files are automatically excluded from the glob pattern. If you want to include a generated index in a parent index, use the `include` property.

#### output

Type: string
Example: "src/index.ts"

The index file to generate.

**Note:** It's recommended to output to a file inside the source directory, so that the index file can be committed and/or transpiled by any build tools. 

#### type

Type: string
Default: 'wildcard'

The type of exports to generate in the index file.

Options:

- default - Re-exports the default export of the source file(s) as a named export. \
  `export {default as Factory} from './src/Factory.ts'`
- wildcard - Re-exports all exports of the source file(s). \
  `export * from './src/main.ts'`
- group - Re-exports all exports of the source file(s) as a named export. \
  `export * as Factory from './src/Factory.ts'`
- slug - Re-exports all exports of the source file(s) as a slugged export. \
  `export * as commands_my_command from './src/commands/my-command.ts'`

#### casing

Type: string

The casing of the exported name(s).

Options:

- keep - Maintains the casing of the file name, but removes non-variable characters.
- camel - `myCommand`
- pascal - `MyCommand`
- snake - `my_command`
- lower - `mycommand`
- upper - `MYCOMMAND`

#### ignore

Type: string[] \

Array of glob patterns to ignore.

#### include

Type: string[] \

Array of glob patterns to explicitly include. Overrides the `ignore` option.

Example:

```json
 [
	"**/node_modules/**",
	"**/dist/**"
]
```

#### overrides

Type: object

Overrides the type of exports for specific files or globs.

Example:

```json
{
	"source": "src/**/*.{js,jsx,ts,tsx}",
	"output": "src/index.ts",
	"type": "wildcard",
	"overrides": {
		"./src/commands/**/*.ts": "group",
		"./src/models/*.ts": "default"
	}
}
```

#### default

Type: object

Generate a default export for the index file.

Options:
- source - optional glob(s) specific to the default export.
- type - either 'default', 'group', or 'slug' export type
- overrides - optional overrides for the default export.
- 
Example:

Config: 
```json
{
	"source": "src/**/*.ts",
	"output": "src/index.ts",
	"type": "wildcard",
	"default": {
		"source": "src/factory.ts",
		"type": "default"
	}
}
```

Results: 

```js
// WARNING: This file is automatically generated. Any changes will be lost the next time the generator is run.

import {default as factory} from './factory'

export * from './MyClass'
export * from './config'
export * from './definitions'
export * from './factory'
export * from './helpers'

export default factory
```

#### recursive

Type: boolean \
Default: false

Root only. Whether to recursively generate index files for subdirectories. Recursive indexes will always be named `index.[ext]` and will be placed in the same directory as the source file.

#### indexes

Type: object[]

Array of indexer configurations. Use this to generate multiple index files. The root configuration will be used as a base and be merged with the other configuration(s).


## License

Copyright (c) 2022 - **Nicholas Lowe** aka **Snickbit**

[MIT License](https://github.com/snickbit/indexer/blob/main/LICENSE)