@zapal/dx
Version:
Zapal DX. Set of code quality tools configurations, rule sets and utilities. Prettier, ESLint, TypeScript, Commitlint, etc.
184 lines (137 loc) • 4.41 kB
Markdown
# /dx
Zapal DX (Developer Experience) - opinionated and simple set of code quality tools' configurations, rule sets and utilities, to
make your life easier.
Used by Zapal internally, but open-sourced for everyone to use.
## Getting started
Tools for which configurations are provided:
- Prettier (`>=3 <4`)
- ESLint (`>=9 <10`)
- TypeScript (`>=4.8.0 <6`)
- Commitlint (`>=19 <20`)
_P.S.: The configurations by default may not suit your needs. You can extend them or override them with your own configurations_.
**IMPORTANT**: This package is not contains a tools itself as dependencies, only a set of configurations.
## Installation
```bash
# pnpm
pnpm add -D /dx
# npm
npm i -D /dx
# yarn
yarn add -D /dx
```
## Usage
All the configurations are available as named exports and default export (the base configurations) from the package
subdirectories.
**Separate directory for each tool's configurations:**
- **Prettier:** `/dx/prettier`
- **ESLint:** `/dx/eslint`
- **TypeScript:** `/dx/typescript`
- **Commitlint:** `/dx/commitlint`
**IMPORTANT**: There is no exports from the root of the package, only from the subdirectories.
### Prettier
Prettier configurations use `prettier-plugin-packagejson` and `/prettier-plugin-sort-imports` plugins by default.
- `prettier-plugin-packagejson` is used to format `package.json` files and does not require any additional configuration.
- `/prettier-plugin-sort-imports` is used to sort imports in TS/JS/React/Vue/Svelte files. It may require an additional
configuration to provide the best development experience. Check the
[plugin's documentation](https://www.npmjs.com/package/@ianvs/prettier-plugin-sort-imports) for more information.
The default configuration for `/prettier-plugin-sort-imports` is:
```json
{
"importOrderTypeScriptVersion": "5.0.0",
"importOrder": [
"<BUILTIN_MODULES>",
"^(@zapal)(/.*)$",
"<THIRD_PARTY_MODULES>",
"",
"^[.]",
"",
"^(?!.*[.]css$)[./].*$",
".css$"
]
}
```
Using the default configuration:
<!-- prettier-ignore-start -->
```json5
// package.json
{
"prettier": "@zapal/dx/prettier"
}
```
<!-- prettier-ignore-end -->
```js
// .prettierrc.js or .prettierrc.mjs
export { default } from '/dx/prettier'
```
```js
// .prettierrc.js or .prettierrc.mjs
export { sveltePrettierConfig as default } from '/dx/prettier'
```
Using the configuration with some custom options:
```js
// .prettierrc.js or .prettierrc.mjs
import { defaultPrettierConfig } from '/dx/prettier'
export default {
...defaultPrettierConfig,
semi: false,
}
```
### ESLint
Principle is the same as for Prettier.
<!-- prettier-ignore-start -->
```json5
// package.json
{
"eslintConfig": "@zapal/dx/eslint"
}
```
<!-- prettier-ignore-end -->
```js
// eslint.config.js or eslint.config.mjs
export { default } from '/dx/eslint'
```
### TypeScript
Available exports:
- `/dx/typescript` - default configuration
- `/dx/typescript/next` - configuration for Next.js, extending the default configuration
- `/dx/typescript/svelte` - configuration for Svelte-based projects, extending the default configuration
Using the default configuration:
<!-- prettier-ignore-start -->
```json5
// tsconfig.json
{
"extends": "@zapal/dx/typescript"
}
```
Using the configuration for Next.js, for example:
```json5
// tsconfig.json
{
"extends": "@zapal/dx/typescript/next"
}
```
<!-- prettier-ignore-end -->
### Commitlint
**IMPORTANT**: Unfortunately, the `commitlint` requires you to install extended dependencies directly in your project. Use
`devDependencies` for that.
Here is the list of the required `devDependencies` for the configurations:
- Default - `/config-conventional`
- PNPM Workspace scopes - `/config-conventional` and `@commitlint/config-pnpm-scopes`
Using the default configuration:
<!-- prettier-ignore-start -->
```json5
// .commitlintrc.json
{
"extends": ["@zapal/dx/commitlint"]
}
```
<!-- prettier-ignore-end -->
```js
// commitlint.config.js or commitlint.config.mjs
export { default } from '/dx/commitlint'
```
Using the configuration with configuration for PNPM Workspace based scopes:
```js
// commitlint.config.js or commitlint.config.mjs
export { pnpmWorkspaceScopesCommitlintConfig as default } from '/dx/commitlint'
```