# CLI

![@harnessio/oats-cli](https://img.shields.io/npm/v/@harnessio/oats-cli.svg?style=flat-square)

Command-line utility for converting OpenAPI (formerly Swagger) definitions to TypeScript.

## Installation

Using NPM:

```
npm i -D @harnessio/oats-cli
```

Using Yarn:

```
yarn add -D @harnessio/oats-cli
```

You can run the commands shown below using `npx` (which is bundled with `npm`).
For example `npx oats import --config oats.config.ts`.

## Usage

```
Usage: oats <cmd> [args]

Commands:
  oats import  Import OpenAPI specification and output TypeScript code

Options:
  --version  Show version number                                       [boolean]
  --help     Show help                                                 [boolean]

```

### Available commands

### import

```
oats import

Import OpenAPI specification and output TypeScript code

Options:
      --version      Show version number                               [boolean]
      --help         Show help                                         [boolean]
      --file         Path to OpenAPI spec file. Can be either a JSON or YAML fil
                     e.                                                 [string]
      --url          URL to remote OpenAPI spec file.                   [string]
  -o, --output       Location for the output.                           [string]
  -c, --config       Location for the config file.
                                            [string] [default: "oats.config.ts"]
      --clean        Remove the output directory before generating service.
                                                      [boolean] [default: false]
      --service      Pick the services to generate from a config file. All the s
                     ervices will generated by default.    [array] [default: []]
      --genOnlyUsed  By default, all types defined in spec are generated. Pass
                     this flag to, only generate types, which are referenced in
                     paths.
                                                      [boolean] [default: false]
      --verbose      Shows verbose output                              [boolean]
```

## Config

Config can also be provided to the cli using a config file. By default, the cli
will look for `oats.config.ts` file in the current directory. This can be changed
using the `--config` flag. Using a TypeScript file for config is recommended.

```ts
// oats.config.ts
import { defineConfig } from '@harnessio/oats-cli/config';

export default defineConfig({
  /**
   * The plugins defined here will be used for all the services.
   * You can also override the plugins at individual service level.
   */
  plugins: [],
  /**
   * Config for the services to generated.
   * Its a map of string and config
   */
  services: {
    // Name for the service.
    // You can use this name to pick a service while using the --service flag
    myservice: {
      /**
       * Path where the output should be written to.
       * This is a required field.
       */
      output: './path/to/output/folder',
      /**
       * Path from where the OpenAPI spec is to be read.
       * Either path or url must be defined.
       */
      file: string,
      /**
       * URL from where the OpenAPI spec is to be read.
       * Either path or url must be defined.
       */
      url: string,
      /**
       * By default, all types defined in spec are generated.
       * Pass this flag, to only generate types, which are referenced in paths.
       */
      genOnlyUsed: boolean,
      /**
       * A function, which can be used to pre-process the imported spec.
       *
       * The function will receive the spec as an argument and it needs to
       * return the spec after the processing.
       */
      transformer: (spec) => spec;
      /**
       * Plugins to be overriden for this particular service.
       * The plugins will be replaced and not merged.
       */
      plugins: Plugin[];
    },
  },
});
```

# License

MIT.
