---
description: This page describe the preferred code style and folder structures of a module
---

# Style and structure guide

## Code formatting

By default a Multijet project uses **Prettier** as a code formatter, customizable with the root configuration file:

{% code title=".prettierc" %}
```json
{
    "singleQuote": true,
    "trailingComma": "all",
    "semi": false,
    "tabWidth": 4,
    "arrowParens": "avoid"
}
```
{% endcode %}

## Editor configuration

If you are using **VSCode**, multijet includes a default configuration (located in the `.vscode` folder) that includes recommended extensions, debug configurations and formatting settings.

It is highly recommended to use [Conventional Commits](https://www.conventionalcommits.org/en/v1.0.0/) as a **standard for all Git commits**.

## Modules file structure

It is suggested to follow a standard file structure when developing shared **libs**.

The followings are **examples** of how you can structure your libraries in order to make them more consistent and readable.

{% hint style="info" %}
It's important to write **interfaces** so you can decouple the implementation of your library or module. All shared libs or modules, if possibile, should export at least **one interface** and **one implementation** for that same interface.
{% endhint %}

```
my-lib/
└── src/
    ├── core/
    │   └── ... core implementation
    ├── models/
    │   └── ... interfaces and models
    ├── common/
    │   ├── const.ts
    │   ├── errors.ts
    │   └── ... used in the entire lib
    ├── helper/
    │   └── ... helper functions
    └── index.ts
```

If your library needs to be divided in **submodules** you can follow the same structure as follows:

```
my-lib/
└── src/
    ├── module-1/
    │   ├── core/
    │   │   └── module-1.ts
    │   ├── models/
    │   │   ├── module-1.models.ts
    │   │   ├── module-1.errors.ts
    │   │   ├── module-1.consts.ts
    │   │   └── ...
    │   └── helper
    ├── module-2/
    │   ├── core
    │   ├── models
    │   └── helper
    ├── common/
    │   ├── consts.ts
    │   ├── types.ts
    │   └── ... used between modules
    └── index.ts
```

The library `index.ts` should **only contain exports** for the modules and interfaces you want to export, nothing more.

The following is a real example of a small lib:

<img src="https://2336160172-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FjmkHdY7knLuXJlYSN4hh%2Fuploads%2FUIKCtIZ9bgoNh0yVgzQg%2Fimage.png?alt=media&#x26;token=6f694994-d7a1-4ed0-98a8-13a65d6aadab" alt="" data-size="original">
