@siberiacancode/eslint 2.13.0 → 2.15.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
package/README.md CHANGED
@@ -1,3 +1,19 @@
1
- # 🔮 eslint configs
1
+ # 🔮 eslint
2
2
 
3
- Пакет содержит eslint конфиг
3
+ A shared ESLint configuration for consistent code linting across projects.
4
+
5
+ ## Installation
6
+
7
+ ```bash
8
+ npm install @siberiacancode/eslint
9
+ ```
10
+
11
+ ## Usage
12
+
13
+ ```javascript
14
+ import { eslint } from '@siberiacancode/eslint';
15
+
16
+ export default eslint({
17
+ typescript: true
18
+ });
19
+ ```
@@ -0,0 +1,195 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, Symbol.toStringTag, { value: "Module" });
3
+ const antfu = require("@antfu/eslint-config");
4
+ const pluginNext = require("@next/eslint-plugin-next");
5
+ const pluginJsxA11y = require("eslint-plugin-jsx-a11y");
6
+ const pluginReact = require("eslint-plugin-react");
7
+ const eslint = (inputOptions = {}, ...configs) => {
8
+ const { jsxA11y = false, next = false, ...options } = inputOptions;
9
+ const stylistic = options?.stylistic ?? false;
10
+ if (next) {
11
+ const nextRules = pluginNext.configs.recommended.rules ?? {};
12
+ configs.unshift({
13
+ name: "siberiacancode/next",
14
+ plugins: {
15
+ "siberiacancode-next": pluginNext
16
+ },
17
+ rules: {
18
+ ...Object.entries(nextRules).reduce((acc, [key, value]) => {
19
+ acc[key.replace("@next/next", "siberiacancode-next")] = value;
20
+ return acc;
21
+ }, {})
22
+ }
23
+ });
24
+ }
25
+ if (jsxA11y) {
26
+ const jsxA11yRules = pluginJsxA11y.flatConfigs.recommended.rules;
27
+ configs.unshift({
28
+ name: "siberiacancode/jsx-a11y",
29
+ plugins: {
30
+ "siberiacancode-jsx-a11y": pluginJsxA11y
31
+ },
32
+ rules: {
33
+ ...Object.entries(jsxA11yRules).reduce((acc, [key, value]) => {
34
+ acc[key.replace("jsx-a11y", "siberiacancode-jsx-a11y")] = value;
35
+ return acc;
36
+ }, {})
37
+ }
38
+ });
39
+ }
40
+ if (options.react) {
41
+ configs.unshift({
42
+ name: "siberiacancode/react",
43
+ plugins: {
44
+ "siberiacancode-react": pluginReact
45
+ },
46
+ rules: {
47
+ ...Object.entries(pluginReact.configs.recommended.rules).reduce(
48
+ (acc, [key, value]) => {
49
+ acc[key.replace("react", "siberiacancode-react")] = value;
50
+ return acc;
51
+ },
52
+ {}
53
+ ),
54
+ "siberiacancode-react/function-component-definition": [
55
+ "error",
56
+ {
57
+ namedComponents: ["arrow-function"],
58
+ unnamedComponents: "arrow-function"
59
+ }
60
+ ],
61
+ "siberiacancode-react/prop-types": "off",
62
+ "siberiacancode-react/react-in-jsx-scope": "off"
63
+ },
64
+ settings: {
65
+ react: {
66
+ version: "detect"
67
+ }
68
+ }
69
+ });
70
+ }
71
+ if (stylistic) {
72
+ configs.unshift({
73
+ name: "siberiacancode/formatter",
74
+ rules: {
75
+ "style/arrow-parens": ["error", "always"],
76
+ "style/brace-style": "off",
77
+ "style/comma-dangle": ["error", "never"],
78
+ "style/indent": ["error", 2, { SwitchCase: 1 }],
79
+ "style/jsx-curly-newline": "off",
80
+ "style/jsx-one-expression-per-line": "off",
81
+ "style/jsx-quotes": ["error", "prefer-single"],
82
+ "style/linebreak-style": ["error", "unix"],
83
+ "style/max-len": [
84
+ "error",
85
+ 100,
86
+ 2,
87
+ { ignoreComments: true, ignoreStrings: true, ignoreTemplateLiterals: true }
88
+ ],
89
+ "style/member-delimiter-style": "off",
90
+ "style/multiline-ternary": "off",
91
+ "style/no-tabs": "error",
92
+ "style/operator-linebreak": "off",
93
+ "style/quote-props": "off",
94
+ "style/quotes": ["error", "single", { allowTemplateLiterals: true }],
95
+ "style/semi": ["error", "always"]
96
+ }
97
+ });
98
+ }
99
+ return antfu(
100
+ { ...options, stylistic },
101
+ {
102
+ name: "siberiacancode/rewrite",
103
+ rules: {
104
+ "antfu/curly": "off",
105
+ "antfu/if-newline": "off",
106
+ "antfu/top-level-function": "off",
107
+ "no-console": "warn",
108
+ "react-hooks/exhaustive-deps": "off",
109
+ "test/prefer-lowercase-title": "off"
110
+ }
111
+ },
112
+ {
113
+ name: "siberiacancode/sort",
114
+ rules: {
115
+ "perfectionist/sort-array-includes": [
116
+ "error",
117
+ {
118
+ order: "asc",
119
+ type: "alphabetical"
120
+ }
121
+ ],
122
+ "perfectionist/sort-imports": [
123
+ "error",
124
+ {
125
+ groups: [
126
+ "type-import",
127
+ ["value-builtin", "value-external"],
128
+ "type-internal",
129
+ "value-internal",
130
+ ["type-parent", "type-sibling", "type-index"],
131
+ ["value-parent", "value-sibling", "value-index"],
132
+ "side-effect",
133
+ "side-effect-style",
134
+ "unknown"
135
+ ],
136
+ internalPattern: ["^~/.*", "^@/.*"],
137
+ newlinesBetween: 1,
138
+ order: "asc",
139
+ type: "natural"
140
+ }
141
+ ],
142
+ "perfectionist/sort-interfaces": [
143
+ "error",
144
+ {
145
+ groups: ["unknown", "method", "multiline"],
146
+ order: "asc",
147
+ type: "alphabetical"
148
+ }
149
+ ],
150
+ "perfectionist/sort-jsx-props": [
151
+ "error",
152
+ {
153
+ customGroups: [
154
+ {
155
+ groupName: "reserved",
156
+ elementNamePattern: "^(key|ref)$"
157
+ },
158
+ {
159
+ groupName: "callback",
160
+ elementNamePattern: "^on[A-Z].*"
161
+ }
162
+ ],
163
+ groups: ["shorthand", "reserved", "multiline", "unknown", "callback"],
164
+ order: "asc",
165
+ type: "alphabetical"
166
+ }
167
+ ],
168
+ "perfectionist/sort-union-types": [
169
+ "error",
170
+ {
171
+ groups: [
172
+ "conditional",
173
+ "function",
174
+ "import",
175
+ "intersection",
176
+ "keyword",
177
+ "literal",
178
+ "named",
179
+ "object",
180
+ "operator",
181
+ "tuple",
182
+ "union",
183
+ "nullish"
184
+ ],
185
+ order: "asc",
186
+ specialCharacters: "keep",
187
+ type: "alphabetical"
188
+ }
189
+ ]
190
+ }
191
+ },
192
+ ...configs
193
+ );
194
+ };
195
+ exports.eslint = eslint;
@@ -0,0 +1,195 @@
1
+ import antfu from "@antfu/eslint-config";
2
+ import pluginNext from "@next/eslint-plugin-next";
3
+ import pluginJsxA11y from "eslint-plugin-jsx-a11y";
4
+ import pluginReact from "eslint-plugin-react";
5
+ const eslint = (inputOptions = {}, ...configs) => {
6
+ const { jsxA11y = false, next = false, ...options } = inputOptions;
7
+ const stylistic = options?.stylistic ?? false;
8
+ if (next) {
9
+ const nextRules = pluginNext.configs.recommended.rules ?? {};
10
+ configs.unshift({
11
+ name: "siberiacancode/next",
12
+ plugins: {
13
+ "siberiacancode-next": pluginNext
14
+ },
15
+ rules: {
16
+ ...Object.entries(nextRules).reduce((acc, [key, value]) => {
17
+ acc[key.replace("@next/next", "siberiacancode-next")] = value;
18
+ return acc;
19
+ }, {})
20
+ }
21
+ });
22
+ }
23
+ if (jsxA11y) {
24
+ const jsxA11yRules = pluginJsxA11y.flatConfigs.recommended.rules;
25
+ configs.unshift({
26
+ name: "siberiacancode/jsx-a11y",
27
+ plugins: {
28
+ "siberiacancode-jsx-a11y": pluginJsxA11y
29
+ },
30
+ rules: {
31
+ ...Object.entries(jsxA11yRules).reduce((acc, [key, value]) => {
32
+ acc[key.replace("jsx-a11y", "siberiacancode-jsx-a11y")] = value;
33
+ return acc;
34
+ }, {})
35
+ }
36
+ });
37
+ }
38
+ if (options.react) {
39
+ configs.unshift({
40
+ name: "siberiacancode/react",
41
+ plugins: {
42
+ "siberiacancode-react": pluginReact
43
+ },
44
+ rules: {
45
+ ...Object.entries(pluginReact.configs.recommended.rules).reduce(
46
+ (acc, [key, value]) => {
47
+ acc[key.replace("react", "siberiacancode-react")] = value;
48
+ return acc;
49
+ },
50
+ {}
51
+ ),
52
+ "siberiacancode-react/function-component-definition": [
53
+ "error",
54
+ {
55
+ namedComponents: ["arrow-function"],
56
+ unnamedComponents: "arrow-function"
57
+ }
58
+ ],
59
+ "siberiacancode-react/prop-types": "off",
60
+ "siberiacancode-react/react-in-jsx-scope": "off"
61
+ },
62
+ settings: {
63
+ react: {
64
+ version: "detect"
65
+ }
66
+ }
67
+ });
68
+ }
69
+ if (stylistic) {
70
+ configs.unshift({
71
+ name: "siberiacancode/formatter",
72
+ rules: {
73
+ "style/arrow-parens": ["error", "always"],
74
+ "style/brace-style": "off",
75
+ "style/comma-dangle": ["error", "never"],
76
+ "style/indent": ["error", 2, { SwitchCase: 1 }],
77
+ "style/jsx-curly-newline": "off",
78
+ "style/jsx-one-expression-per-line": "off",
79
+ "style/jsx-quotes": ["error", "prefer-single"],
80
+ "style/linebreak-style": ["error", "unix"],
81
+ "style/max-len": [
82
+ "error",
83
+ 100,
84
+ 2,
85
+ { ignoreComments: true, ignoreStrings: true, ignoreTemplateLiterals: true }
86
+ ],
87
+ "style/member-delimiter-style": "off",
88
+ "style/multiline-ternary": "off",
89
+ "style/no-tabs": "error",
90
+ "style/operator-linebreak": "off",
91
+ "style/quote-props": "off",
92
+ "style/quotes": ["error", "single", { allowTemplateLiterals: true }],
93
+ "style/semi": ["error", "always"]
94
+ }
95
+ });
96
+ }
97
+ return antfu(
98
+ { ...options, stylistic },
99
+ {
100
+ name: "siberiacancode/rewrite",
101
+ rules: {
102
+ "antfu/curly": "off",
103
+ "antfu/if-newline": "off",
104
+ "antfu/top-level-function": "off",
105
+ "no-console": "warn",
106
+ "react-hooks/exhaustive-deps": "off",
107
+ "test/prefer-lowercase-title": "off"
108
+ }
109
+ },
110
+ {
111
+ name: "siberiacancode/sort",
112
+ rules: {
113
+ "perfectionist/sort-array-includes": [
114
+ "error",
115
+ {
116
+ order: "asc",
117
+ type: "alphabetical"
118
+ }
119
+ ],
120
+ "perfectionist/sort-imports": [
121
+ "error",
122
+ {
123
+ groups: [
124
+ "type-import",
125
+ ["value-builtin", "value-external"],
126
+ "type-internal",
127
+ "value-internal",
128
+ ["type-parent", "type-sibling", "type-index"],
129
+ ["value-parent", "value-sibling", "value-index"],
130
+ "side-effect",
131
+ "side-effect-style",
132
+ "unknown"
133
+ ],
134
+ internalPattern: ["^~/.*", "^@/.*"],
135
+ newlinesBetween: 1,
136
+ order: "asc",
137
+ type: "natural"
138
+ }
139
+ ],
140
+ "perfectionist/sort-interfaces": [
141
+ "error",
142
+ {
143
+ groups: ["unknown", "method", "multiline"],
144
+ order: "asc",
145
+ type: "alphabetical"
146
+ }
147
+ ],
148
+ "perfectionist/sort-jsx-props": [
149
+ "error",
150
+ {
151
+ customGroups: [
152
+ {
153
+ groupName: "reserved",
154
+ elementNamePattern: "^(key|ref)$"
155
+ },
156
+ {
157
+ groupName: "callback",
158
+ elementNamePattern: "^on[A-Z].*"
159
+ }
160
+ ],
161
+ groups: ["shorthand", "reserved", "multiline", "unknown", "callback"],
162
+ order: "asc",
163
+ type: "alphabetical"
164
+ }
165
+ ],
166
+ "perfectionist/sort-union-types": [
167
+ "error",
168
+ {
169
+ groups: [
170
+ "conditional",
171
+ "function",
172
+ "import",
173
+ "intersection",
174
+ "keyword",
175
+ "literal",
176
+ "named",
177
+ "object",
178
+ "operator",
179
+ "tuple",
180
+ "union",
181
+ "nullish"
182
+ ],
183
+ order: "asc",
184
+ specialCharacters: "keep",
185
+ type: "alphabetical"
186
+ }
187
+ ]
188
+ }
189
+ },
190
+ ...configs
191
+ );
192
+ };
193
+ export {
194
+ eslint
195
+ };
@@ -0,0 +1,10 @@
1
+ import { Awaitable, ConfigNames, OptionsConfig, TypedFlatConfigItem } from '@antfu/eslint-config';
2
+ import { Linter } from 'eslint';
3
+ import { FlatConfigComposer } from 'eslint-flat-config-utils';
4
+ type EslintOptions = OptionsConfig & TypedFlatConfigItem & {
5
+ jsxA11y?: boolean;
6
+ next?: boolean;
7
+ };
8
+ export type Eslint = (options?: EslintOptions, ...userConfigs: Awaitable<FlatConfigComposer<any, any> | Linter.Config[] | TypedFlatConfigItem | TypedFlatConfigItem[]>[]) => FlatConfigComposer<TypedFlatConfigItem, ConfigNames>;
9
+ export declare const eslint: Eslint;
10
+ export {};
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@siberiacancode/eslint",
3
3
  "type": "module",
4
- "version": "2.13.0",
4
+ "version": "2.15.0",
5
5
  "description": "eslint configs",
6
6
  "author": {
7
7
  "name": "SIBERIA CAN CODE 🧊",
@@ -26,35 +26,51 @@
26
26
  "publishConfig": {
27
27
  "access": "public"
28
28
  },
29
- "main": "index.js",
30
- "types": "index.d.ts",
29
+ "exports": {
30
+ ".": {
31
+ "types": "./dist/types/index.d.ts",
32
+ "import": "./dist/esm/index.mjs",
33
+ "require": "./dist/cjs/index.cjs",
34
+ "default": "./dist/cjs/index.cjs"
35
+ }
36
+ },
37
+ "main": "dist/cjs/index.cjs",
38
+ "module": "dist/esm/index.mjs",
39
+ "types": "dist/types/index.d.ts",
31
40
  "files": [
32
- "index.d.ts",
33
- "index.js"
41
+ "dist/**/*"
34
42
  ],
35
43
  "scripts": {
36
- "format": "prettier --write \"*.js\"",
44
+ "prepublishOnly": "yarn type && yarn build",
45
+ "build": "shx rm -rf dist && vite build",
37
46
  "lint": "eslint . --fix",
38
- "lint-inspector": "npx @eslint/config-inspector"
47
+ "lint-inspector": "npx @eslint/config-inspector",
48
+ "type": "tsc --noEmit",
49
+ "format": "prettier --write .",
50
+ "pretty": "yarn type && yarn lint && yarn format"
39
51
  },
40
52
  "dependencies": {
41
- "@antfu/eslint-config": "5.4.1",
42
- "@eslint-react/eslint-plugin": "2.0.6",
43
- "@next/eslint-plugin-next": "15.5.4",
44
- "@vue/compiler-sfc": "3.5.22",
45
- "eslint": "9.37.0",
53
+ "@antfu/eslint-config": "7.3.0",
54
+ "@eslint-react/eslint-plugin": "2.12.2",
55
+ "@next/eslint-plugin-next": "16.1.6",
56
+ "@types/eslint-plugin-jsx-a11y": "^6.10.1",
57
+ "@vue/compiler-sfc": "3.5.27",
58
+ "eslint": "10.0.0",
59
+ "eslint-flat-config-utils": "^3.0.1",
46
60
  "eslint-plugin-jsx-a11y": "6.10.2",
47
61
  "eslint-plugin-react": "7.37.5",
48
- "eslint-plugin-react-hooks": "6.1.1",
49
- "eslint-plugin-react-refresh": "0.4.23"
62
+ "eslint-plugin-react-hooks": "7.0.1",
63
+ "eslint-plugin-react-refresh": "0.5.0"
50
64
  },
51
65
  "devDependencies": {
52
- "@siberiacancode/prettier": "*"
66
+ "@siberiacancode/prettier": "*",
67
+ "vite": "^7.3.1",
68
+ "vite-plugin-dts": "^4.5.4"
53
69
  },
54
70
  "lint-staged": {
55
71
  "*.{js,ts}": [
56
- "prettier --write",
57
- "eslint --fix"
72
+ "eslint --fix",
73
+ "prettier --write"
58
74
  ]
59
75
  }
60
76
  }
package/index.d.ts DELETED
@@ -1,19 +0,0 @@
1
- declare module '@siberiacancode/eslint' {
2
- declare type Eslint = (
3
- options?: import('@antfu/eslint-config').OptionsConfig & {
4
- jsxA11y?: boolean;
5
- next?: boolean;
6
- } & import('@antfu/eslint-config').TypedFlatConfigItem,
7
- ...userConfigs: import('@antfu/eslint-config').Awaitable<
8
- | import('@antfu/eslint-config').FlatConfigComposer<any, any>
9
- | import('@antfu/eslint-config').TypedFlatConfigItem
10
- | import('@antfu/eslint-config').TypedFlatConfigItem[]
11
- | Linter.Config[]
12
- >[]
13
- ) => import('@antfu/eslint-config').FlatConfigComposer<
14
- import('@antfu/eslint-config').TypedFlatConfigItem,
15
- import('@antfu/eslint-config').ConfigNames
16
- >;
17
-
18
- export const eslint: Eslint;
19
- }
package/index.js DELETED
@@ -1,198 +0,0 @@
1
- import antfu from '@antfu/eslint-config';
2
- import pluginNext from '@next/eslint-plugin-next';
3
- import pluginJsxA11y from 'eslint-plugin-jsx-a11y';
4
- import pluginReact from 'eslint-plugin-react';
5
-
6
- /** @type {import('@siberiacancode/eslint').Eslint} */
7
- export const eslint = ({ jsxA11y = false, next = false, ...options }, ...configs) => {
8
- const stylistic = options?.stylistic ?? false;
9
-
10
- if (next) {
11
- configs.unshift({
12
- name: 'siberiacancode/next',
13
- plugins: {
14
- 'siberiacancode-next': pluginNext
15
- },
16
- rules: {
17
- ...Object.entries({ ...pluginNext.configs.recommended.rules }).reduce(
18
- (acc, [key, value]) => {
19
- acc[key.replace('@next/next', 'siberiacancode-next')] = value;
20
- return acc;
21
- },
22
- {}
23
- )
24
- }
25
- });
26
- }
27
-
28
- if (jsxA11y) {
29
- configs.unshift({
30
- name: 'siberiacancode/jsx-a11y',
31
- plugins: {
32
- 'siberiacancode-jsx-a11y': pluginJsxA11y
33
- },
34
- rules: {
35
- ...Object.entries(pluginJsxA11y.flatConfigs.recommended.rules).reduce(
36
- (acc, [key, value]) => {
37
- acc[key.replace('jsx-a11y', 'siberiacancode-jsx-a11y')] = value;
38
- return acc;
39
- },
40
- {}
41
- )
42
- }
43
- });
44
- }
45
-
46
- if (options.react) {
47
- configs.unshift({
48
- name: 'siberiacancode/react',
49
- plugins: {
50
- 'siberiacancode-react': pluginReact
51
- },
52
- rules: {
53
- ...Object.entries(pluginReact.configs.recommended.rules).reduce((acc, [key, value]) => {
54
- acc[key.replace('react', 'siberiacancode-react')] = value;
55
- return acc;
56
- }, {}),
57
- 'siberiacancode-react/function-component-definition': [
58
- 'error',
59
- {
60
- namedComponents: ['arrow-function'],
61
- unnamedComponents: 'arrow-function'
62
- }
63
- ],
64
- 'siberiacancode-react/prop-types': 'off',
65
- 'siberiacancode-react/react-in-jsx-scope': 'off'
66
- },
67
- settings: {
68
- react: {
69
- version: 'detect'
70
- }
71
- }
72
- });
73
- }
74
-
75
- if (stylistic) {
76
- configs.unshift({
77
- name: 'siberiacancode/formatter',
78
- rules: {
79
- 'style/arrow-parens': ['error', 'always'],
80
- 'style/brace-style': 'off',
81
- 'style/comma-dangle': ['error', 'never'],
82
- 'style/indent': ['error', 2, { SwitchCase: 1 }],
83
- 'style/jsx-curly-newline': 'off',
84
- 'style/jsx-one-expression-per-line': 'off',
85
- 'style/jsx-quotes': ['error', 'prefer-single'],
86
-
87
- 'style/linebreak-style': ['error', 'unix'],
88
- 'style/max-len': [
89
- 'error',
90
- 100,
91
- 2,
92
- { ignoreComments: true, ignoreStrings: true, ignoreTemplateLiterals: true }
93
- ],
94
- 'style/member-delimiter-style': 'off',
95
- 'style/multiline-ternary': 'off',
96
- 'style/no-tabs': 'error',
97
- 'style/operator-linebreak': 'off',
98
- 'style/quote-props': 'off',
99
- 'style/quotes': ['error', 'single', { allowTemplateLiterals: true }],
100
- 'style/semi': ['error', 'always']
101
- }
102
- });
103
- }
104
-
105
- return antfu(
106
- { ...options, stylistic },
107
- {
108
- name: 'siberiacancode/rewrite',
109
- rules: {
110
- 'antfu/curly': 'off',
111
- 'antfu/if-newline': 'off',
112
- 'antfu/top-level-function': 'off',
113
-
114
- 'no-console': 'warn',
115
-
116
- 'react-hooks/exhaustive-deps': 'off',
117
-
118
- 'test/prefer-lowercase-title': 'off'
119
- }
120
- },
121
- {
122
- name: 'siberiacancode/sort',
123
- rules: {
124
- 'perfectionist/sort-array-includes': [
125
- 'error',
126
- {
127
- order: 'asc',
128
- type: 'alphabetical'
129
- }
130
- ],
131
- 'perfectionist/sort-imports': [
132
- 'error',
133
- {
134
- groups: [
135
- 'type',
136
- ['builtin', 'external'],
137
- 'internal-type',
138
- ['internal'],
139
- ['parent-type', 'sibling-type', 'index-type'],
140
- ['parent', 'sibling', 'index'],
141
- 'object',
142
- 'style',
143
- 'side-effect-style',
144
- 'unknown'
145
- ],
146
- internalPattern: ['^~/.*', '^@/.*'],
147
- newlinesBetween: 'always',
148
- order: 'asc',
149
- type: 'natural'
150
- }
151
- ],
152
- 'perfectionist/sort-interfaces': [
153
- 'error',
154
- {
155
- groups: ['unknown', 'method', 'multiline'],
156
- order: 'asc',
157
- type: 'alphabetical'
158
- }
159
- ],
160
- 'perfectionist/sort-jsx-props': [
161
- 'error',
162
- {
163
- customGroups: {
164
- callback: 'on*',
165
- reserved: ['key', 'ref']
166
- },
167
- groups: ['shorthand', 'reserved', 'multiline', 'unknown', 'callback'],
168
- order: 'asc',
169
- type: 'alphabetical'
170
- }
171
- ],
172
- 'perfectionist/sort-union-types': [
173
- 'error',
174
- {
175
- groups: [
176
- 'conditional',
177
- 'function',
178
- 'import',
179
- 'intersection',
180
- 'keyword',
181
- 'literal',
182
- 'named',
183
- 'object',
184
- 'operator',
185
- 'tuple',
186
- 'union',
187
- 'nullish'
188
- ],
189
- order: 'asc',
190
- specialCharacters: 'keep',
191
- type: 'alphabetical'
192
- }
193
- ]
194
- }
195
- },
196
- ...configs
197
- );
198
- };