UNPKG

@vue-storefront/eslint-config

Version:

> Common ESLint configuration used in Alokai projects. These configurations are compatible with ESLint 9.

252 lines (185 loc) 6.98 kB
# @vue-storefront/eslint-config > Common ESLint configuration used in Alokai projects. These configurations are compatible with ESLint 9. ## Usage ### Install ```bash yarn add -D eslint prettier @vue-storefront/eslint-config ``` ### Building Blocks This ESLint configuration is composed of several building blocks, each tailored for specific use cases: - `ecma`: For ECMAScript projects. - `typescript`: For TypeScript projects. - `style`: For Prettier and Perfectionist plugins. - `nextjs`: For Next.js projects. - `playwright`: For Playwright projects. - `architecture`: For enforcing architectural rules. - `multistore`: For enforcing rules required by [Alokai Multistore](https://docs.alokai.com/guides/multistore) solution ### Options All options are optional. You don't have to set these options if you are okay with the default configuration. #### `ecma` - `files` (default: `"**/*.{mjs,cjs,js,jsx}"`): The glob pattern for files to lint. - `isStrict` (default: `true`): Enables extra rules for stricter checking. - `withImport` (default: `true`): Enables `eslint-plugin-import`. #### `typescript` - `files` (default: `"**/*.{ts,tsx,mts,cts,mtsx,ctsx}"`): The glob pattern for files to lint. - `isStrict` (default: `true`): Enables extra rules for stricter checking. - `withImport` (default: `true`): Enables `eslint-plugin-import`. ### `style` - `files` (default: `"**/*.{mjs,cjs,js,jsx,ts,tsx,mts,cts,mtsx,ctsx}"`): The glob pattern for files to lint. ### `nextjs` - `files` (default: `"**/*.{mjs,cjs,js,jsx,ts,tsx,mts,cts,mtsx,ctsx}"`): The glob pattern for files to lint. Here you can pass the general file glob pattern for all directories with Next.js/React code. But for better results please pass the glob for the components folders and hooks. Those two are passed to the special rules just for them. ```ts files: { general: "**/*.{js,jsx,ts,tsx}", components: "src/components/**/*.{js,jsx,ts,tsx}", hooks: "src/hooks/**/*.{js,jsx,ts,tsx}" } ``` - `isStrict` (default: `true`): Enables extra rules for stricter checking. ### `playwright` - `files` (default: `"**/*.test.ts"`): The glob pattern for files to lint. ### `architecture` - `files` (default: `"**/*.{mjs,cjs,js,jsx,ts,tsx,mts,cts,mtsx,ctsx}"`): The glob pattern for files to lint. - `maxComplexity` (default: `6`): The maximum cyclomatic complexity allowed in a program. - `maxDepth` (default: `4`): The maximum depth that blocks can be nested. - `maxStatementsPerLine` (default: `1`): The maximum number of statements allowed per line. - `maxLines` (default: `300`): The maximum number of lines per file. - `maxLinesPerFunction` (default: `60`): The maximum number of lines of code in a function. - `maxStatements` (default: `10`): The maximum number of statements allowed in function blocks. - `maxNestedCallbacks` (default: `5`): The maximum depth that callbacks can be nested. - `maxParams` (default: `3`): The maximum number of parameters in function definitions. ### `multistore` - `files` (default: `"**/*.{mjs,cjs,js,jsx,ts,tsx,mts,cts,mtsx,ctsx,vue}"`): The glob pattern for files to lint. - `noRelativeImportPaths` - Configures relative import path restrictions with the following options: - `allowedDepth` (number): Maximum allowed depth for relative imports - `allowSameFolder` (boolean): Whether imports from the same folder are allowed - `prefix` (string): Prefix to use for import paths - `rootDir` (string): Root directory for import path resolution ## Example configurations ### Config `eslint.config.js` ```javascript import { ecma, typescript, style } from "@vue-storefront/eslint-config"; export default [ ecma(), typescript(), style() ]; ``` ### Usage with Next.js `eslint.config.js` Vue Storefront `Next.js` specific linting rules. ```javascript import { ecma, nextjs } from "@vue-storefront/eslint-config"; export default [ ecma(), nextjs({ files: { general: "**/*.{js,jsx,ts,tsx}", components: "src/components/**/*.{js,jsx,ts,tsx}", hooks: "src/hooks/**/*.{js,jsx,ts,tsx}" }, isStrict: true }) ]; ``` ### Usage with Nuxt 3 For projects using Nuxt 3, we recommend using the Nuxt ESLint module and adding styling and architecture configurations to it. Here is a basic config using the ESLint Nuxt module: ```javascript import withNuxt from './.nuxt/eslint.config.mjs'; import { ecma, typescript, style, architecture } from "@vue-storefront/eslint-config"; export default withNuxt( ecma(), typescript(), style(), architecture({ maxComplexity: 10, maxDepth: 5, maxStatementsPerLine: 1, maxLines: 500, maxLinesPerFunction: 100, maxStatements: 15, maxNestedCallbacks: 3, maxParams: 4 }) ); ``` ### Usage with Node.js `eslint.config.js` Vue Storefront `Node.js` specific linting rules. ```javascript import { ecma } from "@vue-storefront/eslint-config"; export default [ ecma() ]; ``` ### Usage with Playwright `eslint.config.js` Vue Storefront `Playwright` specific linting rules. ```javascript import { ecma, playwright } from "@vue-storefront/eslint-config"; export default [ ecma(), playwright({ files: "**/*.test.ts", isStrict: true }) ]; ``` ### Usage with TypeScript `eslint.config.js` Vue Storefront `TypeScript` specific linting rules. ```javascript import { ecma, typescript } from "@vue-storefront/eslint-config"; export default [ ecma(), typescript() ]; ``` ### Usage with Architectural Rules `eslint.config.js` Vue Storefront `Architectural` specific linting rules. ```javascript import { ecma, architecture } from "@vue-storefront/eslint-config"; export default [ ecma(), architecture({ maxComplexity: 10, maxDepth: 5, maxStatementsPerLine: 1, maxLines: 500, maxLinesPerFunction: 100, maxStatements: 15, maxNestedCallbacks: 3, maxParams: 4 }) ]; ``` ### Using `concat` function You can use the `concat` function to combine configurations from different sources. ```javascript import { ecma, typescript, concat } from "@vue-storefront/eslint-config"; import customConfig from "./custom-eslint-config"; export default concat( ecma(), typescript(), customConfig ); ``` ### Overriding rules in a factory You can override rules in one of our factories by passing a custom rules object. ```javascript import { ecma, typescript } from "@vue-storefront/eslint-config"; export default [ ecma(), typescript({}, { name: 'custom-config', files: ['**/*.ts'], rules: { "@typescript-eslint/no-unused-vars": ["error", { argsIgnorePattern: "^_" }] } }) ]; ``` ## Used rulesets & plugins - [unicorn](https://github.com/sindresorhus/eslint-plugin-unicorn) - [no-secrets](https://github.com/nickdeis/eslint-plugin-no-secrets) - [promise](https://github.com/eslint-community/eslint-plugin-promise) - [unused-imports](https://www.npmjs.com/package/eslint-plugin-unused-imports) - [prettier](https://github.com/prettier/eslint-plugin-prettier)