# FastStore CLI

## Overview

FastStore CLI is the container CLI used by the merchant engineering team. This
CLI is the starting point for everything that an engineer needs to interact with
the Store developer environment.

> You can read more about the architecture [here](./docs/cli-architecture.md).

## Setup and running

Once you installed the dependencies in the root, you'll be able to build the CLI
and distribute locally to test:

```sh
# To build the CLI
pnpm build
# To link the package locally
```

The FastStore CLI acts as a container CLI, so it has some implementations
regarding the Store dev env, but most of the time the interactions will be done
by a module-specific CLI. So, to test locally, you'll need to use the
`tests/sample-module-cli` package. Navigate to there, and run:

```sh
pnpm build
```

After that, you'll use the `tests/sample-store` (which mimics the Store
monorepo) package to test your CLI changes. Navigate to there and run:

```sh
# Install deps
pnpm i
# To link the CLI as a dep
pnpm link @vtex/fsp-cli
```

Now, you should be able to run any commands from the CLI. In the
`tests/sample-store`, run:

```sh
__FSP_MODE__='development' pnpm fsp --help
```

Notice that you need to prefix your calls with `__FSP_MODE__='development'`.
That's the way we tell the CLI we're running its binary in `development` mode.
Alternatively, you can use the npm script available in the `sample-store/`:

```sh
pnpm fsp --help # or pnpm fsp <command-name>
```

You should see a list of commands, including the ones created by the
`tests/sample-module-cli`. Try one of these commands, like `pnpm fsp dev` or
`pnpm fsp sample-module create`.

> TBD: Add a document explaining how the CLI loads other CLIs dynamically.

### Testing changes

After you setup everything, you'll just need to run `pnpm build` for a change in
the `cli/` package, and the changes will be applied by pnpm to the
`sample-store`. The same process works for changes in the `sample-module-cli`
package.
