This commit is contained in:
commit
14bec5c5cd
22 changed files with 969 additions and 0 deletions
147
eslint.config.ts
Normal file
147
eslint.config.ts
Normal file
|
|
@ -0,0 +1,147 @@
|
|||
import pluginPerfectionist from 'eslint-plugin-perfectionist';
|
||||
import pluginPrettier from 'eslint-plugin-prettier';
|
||||
import pluginPrettierRecommended from 'eslint-plugin-prettier/recommended';
|
||||
import pluginSecurity from 'eslint-plugin-security';
|
||||
import pluginSonarjs from 'eslint-plugin-sonarjs';
|
||||
import pluginUnicorn from 'eslint-plugin-unicorn';
|
||||
import { defineConfig } from 'eslint/config';
|
||||
import tseslint from 'typescript-eslint';
|
||||
|
||||
const topNamesOrder = [
|
||||
'type',
|
||||
'id',
|
||||
'name',
|
||||
'role',
|
||||
'description',
|
||||
'version',
|
||||
'priority',
|
||||
] satisfies string[];
|
||||
const bottomNamesOrder = [] satisfies string[];
|
||||
|
||||
const topSortGroups = topNamesOrder.map((name, index) => ({
|
||||
elementNamePattern: `^${RegExp.escape(name)}$`,
|
||||
groupName: `group_${index}`,
|
||||
}));
|
||||
const topSortGroupNames = topNamesOrder.map((_, index) => `group_${index}`);
|
||||
|
||||
const bottomSortGroups = bottomNamesOrder.map((name, index) => ({
|
||||
elementNamePattern: `^${RegExp.escape(name)}$`,
|
||||
groupName: `group_${index + topNamesOrder.length}`,
|
||||
}));
|
||||
const bottomSortGroupNames = bottomNamesOrder.map(
|
||||
(_, index) => `group_${index + topNamesOrder.length}`,
|
||||
);
|
||||
|
||||
const sortBaseRule = {
|
||||
type: 'natural',
|
||||
alphabet: 'custom',
|
||||
customGroups: [...topSortGroups, ...bottomSortGroups],
|
||||
groups: [
|
||||
...topSortGroupNames,
|
||||
'property',
|
||||
'method',
|
||||
'unknown',
|
||||
...bottomSortGroupNames,
|
||||
],
|
||||
order: 'asc',
|
||||
};
|
||||
|
||||
const sortDetailedRule = {
|
||||
type: 'natural',
|
||||
alphabet: 'custom',
|
||||
customGroups: [...topSortGroups, ...bottomSortGroups],
|
||||
groups: [
|
||||
...topSortGroupNames,
|
||||
// static public property
|
||||
['static-property', 'static-accessor-property'],
|
||||
['static-get-method', 'static-set-method'],
|
||||
// static protected property
|
||||
['protected-static-property', 'protected-static-accessor-property'],
|
||||
['protected-static-get-method', 'protected-static-set-method'],
|
||||
// private protected property
|
||||
['private-static-property', 'private-static-accessor-property'],
|
||||
['private-static-get-method', 'private-static-set-method'],
|
||||
// static block
|
||||
'static-block',
|
||||
// normal properties
|
||||
'property',
|
||||
'protected-property',
|
||||
'private-property',
|
||||
// constructor
|
||||
'constructor',
|
||||
// public callable
|
||||
'accessor-property',
|
||||
['get-method', 'set-method'],
|
||||
// protected callable
|
||||
'protected-accessor-property',
|
||||
['protected-get-method', 'protected-set-method'],
|
||||
// private callable
|
||||
'private-accessor-property',
|
||||
['private-get-method', 'private-set-method'],
|
||||
// static methods
|
||||
['static-method', 'static-function-property'],
|
||||
['protected-static-method', 'protected-static-function-property'],
|
||||
['private-static-method', 'private-static-function-property'],
|
||||
// methods
|
||||
['method', 'function-property'],
|
||||
['protected-method', 'protected-function-property'],
|
||||
['private-method', 'private-function-property'],
|
||||
// unknown
|
||||
'unknown',
|
||||
// bottom
|
||||
...bottomSortGroupNames,
|
||||
],
|
||||
order: 'asc',
|
||||
};
|
||||
|
||||
export default defineConfig([
|
||||
tseslint.configs.stylisticTypeChecked,
|
||||
tseslint.configs.eslintRecommended,
|
||||
pluginPrettierRecommended,
|
||||
pluginPerfectionist.configs['recommended-natural'],
|
||||
pluginUnicorn.configs.all,
|
||||
pluginSecurity.configs.recommended,
|
||||
pluginSonarjs.configs.recommended,
|
||||
{
|
||||
rules: {
|
||||
'@typescript-eslint/no-unsafe-call': 'off',
|
||||
},
|
||||
},
|
||||
{
|
||||
ignores: ['dist/**', '**/dist/**'],
|
||||
},
|
||||
{
|
||||
languageOptions: {
|
||||
parserOptions: {
|
||||
projectService: true,
|
||||
tsconfigRootDir: import.meta.dirname,
|
||||
},
|
||||
},
|
||||
},
|
||||
{
|
||||
rules: {
|
||||
'functional/no-classes': 'off',
|
||||
},
|
||||
},
|
||||
{
|
||||
rules: {
|
||||
'perfectionist/sort-classes': ['error', sortDetailedRule],
|
||||
'perfectionist/sort-interfaces': ['error', sortBaseRule],
|
||||
'perfectionist/sort-object-types': ['error', sortBaseRule],
|
||||
'perfectionist/sort-objects': ['error', sortBaseRule],
|
||||
},
|
||||
},
|
||||
{
|
||||
plugins: {
|
||||
prettier: pluginPrettier,
|
||||
},
|
||||
rules: {
|
||||
'prettier/prettier': [
|
||||
'error',
|
||||
{
|
||||
singleQuote: true,
|
||||
},
|
||||
],
|
||||
},
|
||||
},
|
||||
]);
|
||||
Loading…
Add table
Add a link
Reference in a new issue