Style and structure guide

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

Code formatting

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

.prettierc
{
    "singleQuote": true,
    "trailingComma": "all",
    "semi": false,
    "tabWidth": 4,
    "arrowParens": "avoid"
}

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 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.

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.

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:

Last updated