ultracite 3.9.10 → 4.0.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,88 +1,50 @@
1
1
  # Ultracite
2
2
 
3
- Ultracite is a robust linting preset for modern TypeScript apps. It's comprised of configuration files for [ESLint](https://eslint.org/), [Prettier](https://prettier.io/) and [Stylelint](https://stylelint.io/). It is incredibly opinionated and strict, enforcing the maximum amount of type safety and code quality through ESLint rules and TypeScript compiler options. It is designed for [Next.js](https://nextjs.org/) apps, but can be used with any TypeScript project, such as [React Native](https://reactnative.dev/) or [Node.js](https://nodejs.org/).
3
+ Ultracite is a robust linting configuration for modern TypeScript apps, built on [Biome](https://biomejs.dev/). It is incredibly opinionated and strict, enforcing the maximum amount of type safety and code quality. Once Ultracite is set up, it will automatically lint, fix and format your code on save.
4
4
 
5
- <img src="https://img.shields.io/github/actions/workflow/status/haydenbleasel/ultracite/push.yaml" alt="" />
6
-
7
- <img src="https://img.shields.io/npm/dy/ultracite" alt="" />
8
-
9
- <img src="https://img.shields.io/npm/v/ultracite" alt="" />
10
-
11
- <img src="https://img.shields.io/github/license/haydenbleasel/ultracite" alt="" />
12
-
13
- ## Features
14
-
15
- ### ESLint
16
-
17
- Ultracite uses [ESLint](https://eslint.org/) to enforce code quality and type safety. It includes a wide range of rules to ensure your code is consistent and error-free. Ultracite combines with pre-defined rulesets for ESLint, as well as the following plugins: [Import](https://www.npmjs.com/package/eslint-plugin-import), [jsx-a11y](https://www.npmjs.com/package/eslint-plugin-jsx-a11y), [React](https://www.npmjs.com/package/eslint-plugin-react), [React Hooks](https://www.npmjs.com/package/eslint-plugin-react-hooks), [jest](https://www.npmjs.com/package/eslint-plugin-jest), [promise](https://www.npmjs.com/package/eslint-plugin-promise), [n](https://www.npmjs.com/package/eslint-plugin-n), [Typescript](https://www.npmjs.com/package/@typescript-eslint/eslint-plugin), [Prettier](https://www.npmjs.com/package/eslint-plugin-prettier), [Next.js](https://nextjs.org/docs/basic-features/eslint#eslint-plugin), [Cypress](https://www.npmjs.com/package/eslint-plugin-cypress), [HTML](https://www.npmjs.com/package/eslint-plugin-html), [SonarJS](https://www.npmjs.com/package/eslint-plugin-sonarjs), [Compat](https://www.npmjs.com/package/eslint-plugin-compat), [Unicorn](https://www.npmjs.com/package/eslint-plugin-unicorn), [GitHub](https://www.npmjs.com/package/eslint-plugin-github) and [TanStack Query](https://www.npmjs.com/package/@tanstack/eslint-plugin-query).
18
-
19
- ### Prettier
20
-
21
- Ultracite uses [Prettier](https://prettier.io/) to format your code. It's configured to work with ESLint, so you can use both tools together without conflicts. Ultracite includes a pre-defined Prettier configuration that ensures your code is formatted consistently, as well as the [Tailwind](https://github.com/tailwindlabs/prettier-plugin-tailwindcss) plugin for automatic class sorting.
22
-
23
- ### Stylelint
24
-
25
- Ultracite uses [Stylelint](https://stylelint.io/) to enforce CSS code quality. Ultracite combines with pre-defined rules for Stylelint, as well as the [Stylelint-Prettier](https://www.npmjs.com/package/stylelint-prettier) plugin to ensure Stylelint and Prettier work together without conflicts.
5
+ <div>
6
+ <img src="https://img.shields.io/github/actions/workflow/status/haydenbleasel/ultracite/push.yaml" alt="" />
7
+ <img src="https://img.shields.io/npm/dy/ultracite" alt="" />
8
+ <img src="https://img.shields.io/npm/v/ultracite" alt="" />
9
+ <img src="https://img.shields.io/github/license/haydenbleasel/ultracite" alt="" />
10
+ </div>
26
11
 
27
12
  ## Installation
28
13
 
29
- Run the command below to install Ultracite with peer dependencies:
14
+ Run the command below to install Ultracite:
30
15
 
31
16
  ```sh
32
- pnpm add -D ultracite eslint@8 prettier stylelint typescript jest
17
+ pnpm add -D --save-exact ultracite @biomejs/biome
33
18
  ```
34
19
 
35
20
  If you're running [VS Code](https://code.visualstudio.com/), ensure you have the following extensions installed:
36
21
 
37
22
  ```sh
38
- code --install-extension dbaeumer.vscode-eslint
39
- code --install-extension esbenp.prettier-vscode
23
+ code --install-extension biomejs.biome
40
24
  code --install-extension bradlc.vscode-tailwindcss
41
- code --install-extension stylelint.vscode-stylelint
42
25
  ```
43
26
 
44
27
  ## Setup
45
28
 
46
- Create an `eslint.config.mjs` with the following contents:
47
-
48
- ```js
49
- export { default } from 'ultracite';
50
- ```
29
+ Create an `biome.json` with the following contents:
51
30
 
52
- Create a `prettier.config.mjs` with the following contents:
53
-
54
- ```js
55
- export { default } from 'ultracite/prettier';
56
- ```
57
-
58
- Create a `stylelint.config.mjs` with the following contents:
59
-
60
- ```js
61
- export { default } from 'ultracite/stylelint';
31
+ ```json
32
+ { "extends": ["ultracite"] }
62
33
  ```
63
34
 
64
- Ultracite is designed to be used with [VS Code](https://code.visualstudio.com/), and includes a `.vscode/settings.json` file that enables full formatting on save. Create a `.vscode/settings.json` file with the following contents:
35
+ Ultracite is designed to be used with [VS Code](https://code.visualstudio.com/). Create a `.vscode/settings.json` file with the following contents to enable full formatting and fixing on save:
65
36
 
66
37
  ```json
67
38
  {
68
39
  "typescript.tsdk": "node_modules/typescript/lib",
69
- "editor.defaultFormatter": "esbenp.prettier-vscode",
40
+ "editor.defaultFormatter": "biomejs.biome",
70
41
  "editor.formatOnSave": true,
71
42
  "editor.formatOnPaste": true,
72
43
  "emmet.showExpandedAbbreviation": "never",
73
44
  "editor.codeActionsOnSave": {
74
- "source.fixAll.esbenp.prettier-vscode": "explicit",
75
- "source.fixAll.eslint": "explicit",
76
- "source.fixAll.stylelint": "explicit"
77
- },
78
- "[typescriptreact]": {
79
- "editor.defaultFormatter": "esbenp.prettier-vscode"
80
- },
81
- "eslint.useFlatConfig": true,
82
- "eslint.options": {
83
- "overrideConfigFile": "eslint.config.mjs"
84
- },
85
- "eslint.runtime": "node"
45
+ "quickfix.biome": "explicit",
46
+ "source.organizeImports.biome": "explicit"
47
+ }
86
48
  }
87
49
  ```
88
50
 
@@ -92,88 +54,38 @@ Lastly, ensure your `tsconfig.json` (if it exists) includes your new ESLint conf
92
54
  {
93
55
  "compilerOptions": {
94
56
  "strictNullChecks": true
95
- },
96
- "include": ["eslint.config.mjs"]
57
+ }
97
58
  }
98
59
  ```
99
60
 
100
- ## Usage
101
-
102
- Once Ultracite is set up, it will automatically format your code on save.
103
-
104
61
  ## Configuration
105
62
 
106
- You can opt-out of certain rules by modifying your `eslint.config.mjs` file. For example, here's a common exception I use to avoid linting [shadcn/ui](https://ui.shadcn.com/) components:
63
+ While Ultracite is designed to be zero-config, you can modify anything you'd like in your `biome.json` file. For example, to enable the `noAutofocus` rule, you can do the following:
107
64
 
108
- ```js
109
- import ultracite from 'ultracite';
110
-
111
- for (const config of ultracite) {
112
- if (config.ignores) {
113
- config.ignores.push('./components/ui/**/*');
65
+ ```json
66
+ {
67
+ "extends": ["ultracite"],
68
+ "linter": {
69
+ "rules": {
70
+ "a11y": {
71
+ "noAutofocus": "off"
72
+ }
73
+ }
114
74
  }
115
75
  }
116
-
117
- export { default } from 'ultracite';
118
76
  ```
119
77
 
120
- Ultracite also lints the browser compatibility of your code. You can specify which polyfills exist in your project by modifying your `eslint.config.mjs` file. For example, here's how you can add polyfills for Next.js:
121
-
122
- ```ts
123
- import ultracite from 'ultracite';
124
-
125
- for (const config of ultracite) {
126
- config.settings ||= {};
127
- config.settings.polyfills ||= [];
128
-
129
- config.settings.polyfills.push(
130
- // These are from Next.js - https://nextjs.org/docs/architecture/supported-browsers#polyfills
131
- 'fetch',
132
- 'URL',
133
- 'Object.assign',
78
+ You can also disable rules on a per-line basis by adding a comment to the end of the line:
134
79
 
135
- // This one is running on the server
136
- 'URLSearchParams'
137
- );
138
- }
139
-
140
- export { default } from 'ultracite';
80
+ ```tsx
81
+ // biome-ignore lint/security/noDangerouslySetInnerHtml: I do what I want mate.
82
+ <div dangerouslySetInnerHTML={{ ... }} />
141
83
  ```
142
84
 
143
- ## Debugging
144
-
145
- If you're having issues with Ultracite, you can open the ESLint Output panel in VS Code to see what's going on. Optimally, it should look something like this:
146
-
147
- ```
148
- [Info - 10:42:49 PM] ESLint server is starting.
149
- [Info - 10:42:49 PM] ESLint server running in node v18.15.0
150
- [Info - 10:42:49 PM] ESLint server is running.
151
- [Info - 10:42:50 PM] ESLint library loaded from: /Users/haydenbleasel/GitHub/ultracite/node_modules/.pnpm/eslint@8.51.0/node_modules/eslint/lib/unsupported-api.js
152
- ```
85
+ ## Notes
153
86
 
154
- If you see any errors, it could be related to peer dependencies or changes in dependency versions. Feel free to report these as issues.
87
+ Ultracite was previously built on [ESLint](https://eslint.org/), [Prettier](https://prettier.io/) and [Stylelint](https://stylelint.io/). If you'd like to use stack, you can install it with the following command:
155
88
 
156
- ## Usage in Monorepos
157
-
158
- If you're using Ultracite in a monorepo, you will need to do two things:
159
-
160
- 1. Place the files above in every package and application, as well as the root.
161
- 2. Add the following to your `.vscode/settings.json` file:
162
-
163
- ```json
164
- {
165
- "eslint.workingDirectories": [
166
- {
167
- "mode": "auto"
168
- }
169
- ]
170
- }
89
+ ```sh
90
+ pnpm add -D ultracite@3 eslint@8 prettier stylelint typescript jest
171
91
  ```
172
-
173
- This will ensure ESLint works correctly in all packages and applications by automatically detecting the working directory based on the nearest `package.json` and `eslint.config.mjs`, thus limiting the scope of ESLint to the current package or application and improving performance.
174
-
175
- ## Roadmap
176
-
177
- - https://github.com/ota-meshi/eslint-plugin-yml
178
- - https://github.com/mdx-js/eslint-mdx/tree/master/packages/eslint-plugin-mdx
179
- - https://github.com/eslint/eslint-plugin-markdown
package/biome.json ADDED
@@ -0,0 +1,102 @@
1
+ {
2
+ "$schema": "https://biomejs.dev/schemas/1.8.3/schema.json",
3
+ "formatter": {
4
+ "enabled": true,
5
+ "formatWithErrors": true,
6
+ "indentStyle": "space",
7
+ "indentWidth": 2,
8
+ "lineEnding": "lf",
9
+ "lineWidth": 80,
10
+ "attributePosition": "auto"
11
+ },
12
+ "organizeImports": { "enabled": true },
13
+ "linter": {
14
+ "enabled": true,
15
+ "rules": {
16
+ "all": true,
17
+ "a11y": {
18
+ "noAutofocus": "off"
19
+ },
20
+ "nursery": {
21
+ "all": true,
22
+ "useImportRestrictions": "off",
23
+ "noUndeclaredDependencies": "off",
24
+ "noReactSpecificProps": "off",
25
+ "useImportExtensions": "off"
26
+ },
27
+ "style": {
28
+ "noDefaultExport": "off",
29
+ "noImplicitBoolean": "off",
30
+ "useFilenamingConvention": {
31
+ "level": "error",
32
+ "options": {
33
+ "requireAscii": true,
34
+ "filenameCases": ["kebab-case"]
35
+ }
36
+ },
37
+ "useSingleVarDeclarator": "off"
38
+ }
39
+ }
40
+ },
41
+ "javascript": {
42
+ "formatter": {
43
+ "arrowParentheses": "always",
44
+ "attributePosition": "auto",
45
+ "bracketSameLine": false,
46
+ "bracketSpacing": true,
47
+ "enabled": true,
48
+ "indentStyle": "space",
49
+ "indentWidth": 2,
50
+ "jsxQuoteStyle": "double",
51
+ "lineEnding": "lf",
52
+ "lineWidth": 80,
53
+ "quoteProperties": "asNeeded",
54
+ "quoteStyle": "single",
55
+ "semicolons": "always",
56
+ "trailingCommas": "es5"
57
+ }
58
+ },
59
+ "css": {
60
+ "formatter": {
61
+ "enabled": true,
62
+ "indentStyle": "space",
63
+ "indentWidth": 2,
64
+ "lineEnding": "lf",
65
+ "lineWidth": 80,
66
+ "quoteStyle": "double"
67
+ },
68
+ "linter": {
69
+ "enabled": true
70
+ },
71
+ "parser": {
72
+ "allowWrongLineComments": false,
73
+ "cssModules": false
74
+ }
75
+ },
76
+ "json": {
77
+ "formatter": {
78
+ "enabled": true,
79
+ "indentStyle": "space",
80
+ "indentWidth": 2,
81
+ "lineEnding": "lf",
82
+ "lineWidth": 80,
83
+ "trailingCommas": "none"
84
+ },
85
+ "linter": {
86
+ "enabled": true
87
+ },
88
+ "parser": {
89
+ "allowComments": false,
90
+ "allowTrailingCommas": false
91
+ }
92
+ },
93
+ "vcs": {
94
+ "enabled": true,
95
+ "clientKind": "git",
96
+ "useIgnoreFile": true,
97
+ "defaultBranch": "main"
98
+ },
99
+ "files": {
100
+ "ignore": ["**/components/ui/**"]
101
+ }
102
+ }
package/package.json CHANGED
@@ -1,60 +1,35 @@
1
1
  {
2
- "browserslist": [
3
- "defaults"
4
- ],
5
- "dependencies": {
6
- "@eslint/js": "^8.56.0",
7
- "@next/eslint-plugin-next": "^14.2.3",
8
- "@tanstack/eslint-plugin-query": "^5.35.6",
9
- "@typescript-eslint/eslint-plugin": "^7.11.0",
10
- "@typescript-eslint/parser": "^7.11.0",
11
- "eslint-config-prettier": "^9.1.0",
12
- "eslint-import-resolver-typescript": "^3.6.1",
13
- "eslint-plugin-compat": "^4.2.0",
14
- "eslint-plugin-cypress": "^3.2.0",
15
- "eslint-plugin-github": "5.0.0-2",
16
- "eslint-plugin-html": "^8.1.1",
17
- "eslint-plugin-import": "^2.29.1",
18
- "eslint-plugin-jest": "^28.5.0",
19
- "eslint-plugin-jsx-a11y": "^6.8.0",
20
- "eslint-plugin-n": "^17.7.0",
21
- "eslint-plugin-prettier": "^5.1.3",
22
- "eslint-plugin-promise": "^6.2.0",
23
- "eslint-plugin-react": "^7.34.1",
24
- "eslint-plugin-react-hooks": "^4.6.2",
25
- "eslint-plugin-sonarjs": "^1.0.3",
26
- "eslint-plugin-storybook": "^0.8.0",
27
- "eslint-plugin-tailwindcss": "^3.17.0",
28
- "eslint-plugin-unicorn": "^53.0.0",
29
- "eslint-plugin-unused-imports": "^3.2.0",
30
- "globals": "^15.3.0",
31
- "prettier-plugin-tailwindcss": "^0.5.14",
32
- "stylelint-config-idiomatic-order": "^10.0.0",
33
- "stylelint-config-standard": "^36.0.0",
34
- "stylelint-prettier": "^5.0.0",
35
- "tsup": "^8.0.2"
2
+ "author": "Hayden Bleasel <hello@haydenbleasel.com>",
3
+ "auto": {
4
+ "plugins": [
5
+ "npm",
6
+ "all-contributors",
7
+ "conventional-commits",
8
+ "first-time-contributor",
9
+ "released"
10
+ ]
36
11
  },
37
- "peerDependencies": {
38
- "eslint": "8.56.0",
39
- "jest": "^29.7.0",
40
- "prettier": "^3.1.1",
41
- "stylelint": "^16.0.2",
42
- "typescript": "^5.3.3"
12
+ "bugs": {
13
+ "url": "https://github.com/haydenbleasel/ultracite/issues"
43
14
  },
15
+ "description": "Strict, opinionated linting config for modern TypeScript apps.",
44
16
  "devDependencies": {
45
- "@types/react": "^18.3.3",
46
- "@types/react-dom": "^18.3.0",
47
- "eslint": "8.56.0",
48
- "jest": "^29.7.0",
49
- "prettier": "^3.2.5",
50
- "react": "^18.3.1",
51
- "react-dom": "^18.3.1",
52
- "stylelint": "^16.6.0",
53
- "typescript": "^5.4.5"
17
+ "@biomejs/biome": "1.8.3"
54
18
  },
19
+ "files": [
20
+ "biome.json"
21
+ ],
22
+ "homepage": "https://github.com/haydenbleasel/ultracite#readme",
23
+ "keywords": [
24
+ "ultracite",
25
+ "biome",
26
+ "linter",
27
+ "formatter",
28
+ "fixer"
29
+ ],
30
+ "license": "ISC",
31
+ "main": "./biome.json",
55
32
  "name": "ultracite",
56
- "description": "Strict, opinionated ESLint config for modern TypeScript apps.",
57
- "version": "3.9.10",
58
33
  "publishConfig": {
59
34
  "access": "public",
60
35
  "registry": "https://registry.npmjs.org/"
@@ -63,40 +38,5 @@
63
38
  "type": "git",
64
39
  "url": "git+https://github.com/haydenbleasel/ultracite.git"
65
40
  },
66
- "main": "./dist/eslint.config.mjs",
67
- "keywords": [
68
- "ultracite",
69
- "eslint",
70
- "prettier",
71
- "stylelint",
72
- "typescript"
73
- ],
74
- "scripts": {
75
- "prepublishOnly": "pnpm build",
76
- "build": "tsup",
77
- "dev": "tsup --watch"
78
- },
79
- "files": [
80
- "dist"
81
- ],
82
- "exports": {
83
- ".": "./dist/eslint.config.mjs",
84
- "./prettier": "./dist/prettier.config.mjs",
85
- "./stylelint": "./dist/stylelint.config.mjs"
86
- },
87
- "author": "Hayden Bleasel <hello@haydenbleasel.com>",
88
- "license": "ISC",
89
- "bugs": {
90
- "url": "https://github.com/haydenbleasel/ultracite/issues"
91
- },
92
- "homepage": "https://github.com/haydenbleasel/ultracite#readme",
93
- "auto": {
94
- "plugins": [
95
- "npm",
96
- "all-contributors",
97
- "conventional-commits",
98
- "first-time-contributor",
99
- "released"
100
- ]
101
- }
41
+ "version": "4.0.0"
102
42
  }
@@ -1,621 +0,0 @@
1
- import plugin$1 from 'eslint-plugin-react';
2
- import reactHooks, { rules as rules$d } from 'eslint-plugin-react-hooks';
3
- import typescript from '@typescript-eslint/eslint-plugin';
4
- import plugin$2 from 'eslint-plugin-jsx-a11y';
5
- import * as importPlugin from 'eslint-plugin-import';
6
- import { rules as rules$e } from 'eslint-plugin-import';
7
- import plugin$3 from 'eslint-plugin-jest';
8
- import plugin$4 from 'eslint-plugin-promise';
9
- import plugin$5 from 'eslint-plugin-n';
10
- import plugin$6 from '@next/eslint-plugin-next';
11
- import globals from 'globals';
12
- import prettier from 'eslint-plugin-prettier';
13
- import plugin$7 from 'eslint-plugin-cypress';
14
- import plugin$8 from 'eslint-plugin-storybook';
15
- import plugin$9 from 'eslint-plugin-unused-imports';
16
- import * as importTypescriptResolver from 'eslint-import-resolver-typescript';
17
- import html from 'eslint-plugin-html';
18
- import compat from 'eslint-plugin-compat';
19
- import eslintPrettier from 'eslint-config-prettier';
20
- import * as typescriptParser from '@typescript-eslint/parser';
21
- import plugin$a from 'eslint-plugin-sonarjs';
22
- import plugin$b from 'eslint-plugin-unicorn';
23
- import plugin$c from 'eslint-plugin-github';
24
- import * as query from '@tanstack/eslint-plugin-query';
25
- import { rules as rules$f } from '@tanstack/eslint-plugin-query';
26
- import plugin from '@eslint/js';
27
-
28
- const overrideRules$g = {
29
- 'no-unused-private-class-members': 'off',
30
- 'capitalized-comments': 'off',
31
- complexity: 'off',
32
- 'id-length': ['error', { exceptions: ['x', 'y', 'z'] }],
33
- 'max-lines': 'off',
34
- 'max-lines-per-function': 'off',
35
- 'max-params': 'off',
36
- 'max-statements': 'off',
37
- 'no-ternary': 'off',
38
- 'no-undefined': 'off',
39
- 'one-var': 'off',
40
- 'prefer-destructuring': [
41
- 'error',
42
- {
43
- array: false,
44
- object: true,
45
- },
46
- ],
47
- // https://github.com/eslint/eslint/issues/11542
48
- 'sort-imports': 'off',
49
- 'sort-keys': 'off',
50
- 'sort-vars': 'off',
51
- };
52
-
53
- const config$k = Object.assign(plugin.configs.all.rules, overrideRules$g);
54
-
55
- const { rules: rules$c } = plugin$1;
56
-
57
- const availableKeys$f = Object.keys(rules$c).filter(
58
- (key) => !rules$c[key].meta.deprecated
59
- );
60
-
61
- const baseRules$f = Object.fromEntries(
62
- availableKeys$f.map((key) => [`react/${key}`, 'error'])
63
- );
64
-
65
- const overrideRules$f = {
66
- 'react/forbid-component-props': 'off',
67
- 'react/function-component-definition': [
68
- 'error',
69
- {
70
- namedComponents: 'arrow-function',
71
- },
72
- ],
73
- 'react/no-array-index-key': 'off',
74
- 'react/no-arrow-function-lifecycle': 'off',
75
- 'react/no-invalid-html-attribute': 'off',
76
- 'react/no-multi-comp': 'off',
77
- 'react/no-unused-class-component-methods': 'off',
78
- 'react/react-in-jsx-scope': 'off',
79
- 'react/require-default-props': 'off',
80
- 'react/jsx-filename-extension': [
81
- 'error',
82
- {
83
- extensions: ['.tsx'],
84
- },
85
- ],
86
- 'react/jsx-max-depth': 'off',
87
- 'react/jsx-max-props-per-line': 'off',
88
- 'react/jsx-newline': 'off',
89
- 'react/jsx-no-bind': 'off',
90
- 'react/jsx-no-literals': 'off',
91
- 'react/jsx-one-expression-per-line': 'off',
92
- 'react/jsx-props-no-spreading': 'off',
93
- 'react/jsx-sort-props': 'off',
94
- };
95
-
96
- const config$j = Object.assign(baseRules$f, overrideRules$f);
97
-
98
- const availableKeys$e = Object.keys(rules$d).filter(
99
- (key) => !rules$d[key].meta.deprecated
100
- );
101
-
102
- const baseRules$e = Object.fromEntries(
103
- availableKeys$e.map((key) => [`react-hooks/${key}`, 'error'])
104
- );
105
-
106
- const overrideRules$e = {
107
- 'react-hooks/exhaustive-deps': 'error',
108
- };
109
-
110
- const config$i = Object.assign(baseRules$e, overrideRules$e);
111
-
112
- const { rules: rules$b } = typescript;
113
-
114
- const availableKeys$d = Object.keys(rules$b).filter(
115
- (key) => !rules$b[key].meta.deprecated
116
- );
117
-
118
- const baseRules$d = Object.fromEntries(
119
- availableKeys$d.map((key) => [`@typescript-eslint/${key}`, 'error'])
120
- );
121
-
122
- const overrideRules$d = {
123
- '@typescript-eslint/consistent-type-definitions': ['error', 'type'],
124
- '@typescript-eslint/explicit-function-return-type': 'off',
125
- '@typescript-eslint/naming-convention': [
126
- 'error',
127
- {
128
- selector: 'default',
129
- format: ['camelCase', 'PascalCase', 'snake_case'],
130
- },
131
- {
132
- selector: 'objectLiteralProperty',
133
- format: null,
134
- modifiers: ['requiresQuotes'],
135
- },
136
- ],
137
- '@typescript-eslint/no-confusing-void-expression': 'off',
138
- '@typescript-eslint/no-misused-promises': 'off',
139
- '@typescript-eslint/no-type-alias': 'off',
140
- '@typescript-eslint/prefer-readonly': 'off',
141
- '@typescript-eslint/prefer-readonly-parameter-types': 'off',
142
- '@typescript-eslint/sort-type-union-intersection-members': 'off',
143
- '@typescript-eslint/strict-boolean-expressions': 'off',
144
- '@typescript-eslint/no-magic-numbers': 'off',
145
-
146
- // Disabled for Prettier
147
- '@typescript-eslint/block-spacing': 'off',
148
- '@typescript-eslint/brace-style': 'off',
149
- '@typescript-eslint/comma-dangle': 'off',
150
- '@typescript-eslint/comma-spacing': 'off',
151
- '@typescript-eslint/func-call-spacing': 'off',
152
- '@typescript-eslint/indent': 'off',
153
- '@typescript-eslint/key-spacing': 'off',
154
- '@typescript-eslint/keyword-spacing': 'off',
155
- '@typescript-eslint/lines-around-comment': 'off',
156
- '@typescript-eslint/lines-between-class-members': 'off',
157
- '@typescript-eslint/member-delimiter-style': 'off',
158
- '@typescript-eslint/no-extra-parens': 'off',
159
- '@typescript-eslint/object-curly-spacing': 'off',
160
- '@typescript-eslint/padding-line-between-statements': 'off',
161
- '@typescript-eslint/quotes': 'off',
162
- '@typescript-eslint/semi': 'off',
163
- '@typescript-eslint/space-before-blocks': 'off',
164
- '@typescript-eslint/space-before-function-paren': 'off',
165
- '@typescript-eslint/space-infix-ops': 'off',
166
- '@typescript-eslint/type-annotation-spacing': 'off',
167
- };
168
-
169
- const config$h = Object.assign(baseRules$d, overrideRules$d);
170
-
171
- const { rules: rules$a } = plugin$2;
172
-
173
- const availableKeys$c = Object.keys(rules$a).filter(
174
- (key) => !rules$a[key].meta.deprecated
175
- );
176
-
177
- const baseRules$c = Object.fromEntries(
178
- availableKeys$c.map((key) => [`jsx-a11y/${key}`, 'error'])
179
- );
180
-
181
- const overrideRules$c = {
182
- 'jsx-a11y/no-autofocus': 'off',
183
- 'jsx-a11y/label-has-associated-control': [
184
- 'error',
185
- {
186
- labelComponents: ['Label'],
187
- controlComponents: ['Input', 'Select', 'Textarea', 'Checkbox', 'Radio'],
188
- depth: 3,
189
- },
190
- ],
191
- };
192
-
193
- const config$g = Object.assign(baseRules$c, overrideRules$c);
194
-
195
- const availableKeys$b = Object.keys(rules$e).filter(
196
- (key) => !rules$e[key].meta.deprecated
197
- );
198
-
199
- const baseRules$b = Object.fromEntries(
200
- availableKeys$b.map((key) => [`import/${key}`, 'error'])
201
- );
202
-
203
- const overrideRules$b = {
204
- 'import/no-unresolved': 'off',
205
- 'import/no-internal-modules': 'off',
206
- 'import/no-relative-parent-imports': 'off',
207
- 'import/no-named-as-default': 'off',
208
- 'import/exports-last': 'off',
209
- 'import/no-namespace': 'off',
210
- 'import/extensions': 'off',
211
- 'import/order': [
212
- 'error',
213
- {
214
- groups: [
215
- 'builtin',
216
- 'external',
217
- 'internal',
218
- 'parent',
219
- 'sibling',
220
- 'index',
221
- 'object',
222
- 'type',
223
- ],
224
- },
225
- ],
226
- 'import/prefer-default-export': 'off',
227
- 'import/max-dependencies': 'off',
228
- 'import/no-unassigned-import': 'off',
229
- 'import/no-default-export': 'off',
230
- 'import/no-named-export': 'off',
231
- 'import/group-exports': 'off',
232
- };
233
-
234
- const config$f = Object.assign(baseRules$b, overrideRules$b);
235
-
236
- const { rules: rules$9 } = plugin$3;
237
-
238
- const availableKeys$a = Object.keys(rules$9).filter(
239
- (key) => !rules$9[key].meta.deprecated
240
- );
241
-
242
- const baseRules$a = Object.fromEntries(
243
- availableKeys$a.map((key) => [`jest/${key}`, 'error'])
244
- );
245
-
246
- const overrideRules$a = {};
247
-
248
- const config$e = Object.assign(baseRules$a, overrideRules$a);
249
-
250
- const { rules: rules$8 } = plugin$4;
251
-
252
- const availableKeys$9 = Object.keys(rules$8).filter(
253
- (key) => !rules$8[key].meta.deprecated
254
- );
255
-
256
- const baseRules$9 = Object.fromEntries(
257
- availableKeys$9.map((key) => [`promise/${key}`, 'error'])
258
- );
259
-
260
- const overrideRules$9 = {
261
- 'promise/catch-or-return': ['error', { allowFinally: true }],
262
- 'promise/no-native': 'off',
263
- };
264
-
265
- const config$d = Object.assign(baseRules$9, overrideRules$9);
266
-
267
- const { rules: rules$7 } = plugin$5;
268
-
269
- const availableKeys$8 = Object.keys(rules$7).filter(
270
- (key) => !rules$7[key].meta.deprecated
271
- );
272
-
273
- const baseRules$8 = Object.fromEntries(
274
- availableKeys$8.map((key) => [`n/${key}`, 'error'])
275
- );
276
-
277
- const overrideRules$8 = {
278
- 'n/no-missing-import': 'off',
279
- 'n/no-unsupported-features/es-builtins': 'off',
280
- 'n/no-unsupported-features/es-syntax': 'off',
281
- 'n/no-unsupported-features/node-builtins': 'off',
282
- 'n/file-extension-in-import': 'off',
283
- 'n/no-process-env': 'off',
284
- };
285
-
286
- const config$c = Object.assign(baseRules$8, overrideRules$8);
287
-
288
- const { rules: rules$6 } = plugin$6;
289
-
290
- const availableKeys$7 = Object.keys(rules$6).filter(
291
- (key) => !rules$6[key].meta.deprecated
292
- );
293
-
294
- const baseRules$7 = Object.fromEntries(
295
- availableKeys$7.map((key) => [`@next/next/${key}`, 'error'])
296
- );
297
-
298
- const overrideRules$7 = {};
299
-
300
- const config$b = Object.assign(baseRules$7, overrideRules$7);
301
-
302
- const config$a = {
303
- 'prettier/prettier': 'error',
304
- };
305
-
306
- const config$9 = {
307
- // ESLint Disabled for Typescript-ESLint
308
- 'brace-style': 'off',
309
- camelcase: 'off',
310
- 'comma-dangle': 'off',
311
- 'comma-spacing': 'off',
312
- 'default-param-last': 'off',
313
- 'dot-notation': 'off',
314
- 'func-call-spacing': 'off',
315
- indent: 'off',
316
- 'init-declarations': 'off',
317
- 'keyword-spacing': 'off',
318
- 'lines-between-class-members': 'off',
319
- 'no-array-constructor': 'off',
320
- 'no-dupe-class-members': 'off',
321
- 'no-duplicate-imports': 'off',
322
- 'no-empty-function': 'off',
323
- 'no-extra-parens': 'off',
324
- 'no-extra-semi': 'off',
325
- 'no-implied-eval': 'off',
326
- 'no-invalid-this': 'off',
327
- 'no-loop-func': 'off',
328
- 'no-loss-of-precision': 'off',
329
- 'no-magic-numbers': 'off',
330
- 'no-redeclare': 'off',
331
- 'no-restricted-imports': 'off',
332
- 'no-shadow': 'off',
333
- 'no-throw-literal': 'off',
334
- 'no-unused-expressions': 'off',
335
- 'no-unused-vars': 'off',
336
- 'no-use-before-define': 'off',
337
- 'no-useless-constructor': 'off',
338
- 'object-curly-spacing': 'off',
339
- 'padding-line-between-statements': 'off',
340
- quotes: 'off',
341
- 'require-await': 'off',
342
- 'no-return-await': 'off',
343
- semi: 'off',
344
- 'space-before-function-paren': 'off',
345
- 'space-infix-ops': 'off',
346
- };
347
-
348
- const { rules: rules$5 } = plugin$7;
349
-
350
- const availableKeys$6 = Object.keys(rules$5).filter(
351
- (key) => !rules$5[key].meta.deprecated
352
- );
353
-
354
- const baseRules$6 = Object.fromEntries(
355
- availableKeys$6.map((key) => [`cypress/${key}`, 'error'])
356
- );
357
-
358
- const overrideRules$6 = {};
359
-
360
- const config$8 = Object.assign(baseRules$6, overrideRules$6);
361
-
362
- const { rules: rules$4 } = plugin$8;
363
-
364
- const availableKeys$5 = Object.keys(rules$4).filter(
365
- (key) => !rules$4[key].meta.deprecated
366
- );
367
-
368
- const baseRules$5 = Object.fromEntries(
369
- availableKeys$5.map((key) => [`storybook/${key}`, 'error'])
370
- );
371
-
372
- const overrideRules$5 = {};
373
-
374
- const config$7 = Object.assign(baseRules$5, overrideRules$5);
375
-
376
- const { rules: rules$3 } = plugin$9;
377
-
378
- const availableKeys$4 = Object.keys(rules$3).filter(
379
- (key) => !rules$3[key].meta.deprecated
380
- );
381
-
382
- const baseRules$4 = Object.fromEntries(
383
- availableKeys$4.map((key) => [`unused-imports/${key}`, 'error'])
384
- );
385
-
386
- const overrideRules$4 = {};
387
-
388
- const config$6 = Object.assign(baseRules$4, overrideRules$4);
389
-
390
- const { rules: rules$2 } = plugin$a;
391
-
392
- const availableKeys$3 = Object.keys(rules$2).filter(
393
- (key) => !rules$2[key].meta.deprecated
394
- );
395
-
396
- const baseRules$3 = Object.fromEntries(
397
- availableKeys$3.map((key) => [`sonarjs/${key}`, 'error'])
398
- );
399
-
400
- const overrideRules$3 = {
401
- 'sonarjs/elseif-without-else': 'off',
402
- };
403
-
404
- const config$5 = Object.assign(baseRules$3, overrideRules$3);
405
-
406
- const config$4 = {
407
- 'compat/compat': 'warn',
408
- };
409
-
410
- const { rules: rules$1 } = plugin$b;
411
-
412
- const availableKeys$2 = Object.keys(rules$1).filter(
413
- (key) => !rules$1[key].meta.deprecated
414
- );
415
-
416
- const baseRules$2 = Object.fromEntries(
417
- availableKeys$2.map((key) => [`unicorn/${key}`, 'error'])
418
- );
419
-
420
- const overrideRules$2 = {
421
- 'unicorn/no-keyword-prefix': 'off',
422
- 'unicorn/no-null': 'off',
423
- 'unicorn/no-array-callback-reference': 'off',
424
- 'unicorn/prevent-abbreviations': [
425
- 'error',
426
- {
427
- allowList: {
428
- getInitialProps: true,
429
- getServerSideProps: true,
430
- getStaticPaths: true,
431
- getStaticProps: true,
432
- generateStaticParams: true,
433
- },
434
- },
435
- ],
436
- };
437
-
438
- const config$3 = Object.assign(baseRules$2, overrideRules$2);
439
-
440
- const { rules } = plugin$c;
441
-
442
- const availableKeys$1 = Object.keys(rules).filter(
443
- (key) => !rules[key].meta.deprecated
444
- );
445
-
446
- const baseRules$1 = Object.fromEntries(
447
- availableKeys$1.map((key) => [`github/${key}`, 'error'])
448
- );
449
-
450
- const overrideRules$1 = {};
451
-
452
- const config$2 = Object.assign(baseRules$1, overrideRules$1);
453
-
454
- const availableKeys = Object.keys(rules$f).filter(
455
- (key) => !rules$f[key].meta.deprecated
456
- );
457
-
458
- const baseRules = Object.fromEntries(
459
- availableKeys.map((key) => [`@tanstack/eslint-plugin-query/${key}`, 'error'])
460
- );
461
-
462
- const overrideRules = {};
463
-
464
- const config$1 = Object.assign(baseRules, overrideRules);
465
-
466
- /* eslint-disable n/no-unpublished-import, n/no-extraneous-import, import/no-extraneous-dependencies, id-length */
467
-
468
-
469
- const config = [
470
- importPlugin.configs.typescript,
471
- {
472
- ignores: ['**/dist/', '**/build/', '**/.next/', '**/.turbo/'],
473
- },
474
- {
475
- languageOptions: {
476
- sourceType: 'module',
477
- globals: {
478
- ...globals.browser,
479
- ...globals.node,
480
- },
481
- parserOptions: {
482
- ecmaVersion: 'latest',
483
- sourceType: 'module',
484
- ecmaFeatures: {
485
- jsx: true,
486
- },
487
- },
488
- },
489
- files: [
490
- '**/*.js',
491
- '**/*.jsx',
492
- '**/*.ts',
493
- '**/*.tsx',
494
- '**/*.json',
495
- '**/*.mjs',
496
- '**/*.cjs',
497
- '**/*.html',
498
- ],
499
- plugins: {
500
- prettier,
501
- react: plugin$1,
502
- 'react-hooks': reactHooks,
503
- 'jsx-a11y': plugin$2,
504
- import: importPlugin,
505
- promise: plugin$4,
506
- n: plugin$5,
507
- '@next/next': plugin$6,
508
- 'unused-imports': plugin$9,
509
- // tailwindcss,
510
- sonarjs: plugin$a,
511
- compat,
512
- unicorn: plugin$b,
513
- github: plugin$c,
514
- '@tanstack/eslint-plugin-query': query,
515
- },
516
- rules: {
517
- ...config$k,
518
- ...config$j,
519
- ...config$i,
520
- ...config$g,
521
- ...config$f,
522
- ...config$d,
523
- ...config$c,
524
- ...config$b,
525
- ...config$a,
526
- ...eslintPrettier.rules,
527
- ...config$6,
528
- // ...tailwindcssRules,
529
- ...config$5,
530
- ...config$4,
531
- ...config$3,
532
- ...config$2,
533
- ...config$1,
534
- },
535
-
536
- settings: {
537
- react: {
538
- version: 'detect',
539
- },
540
-
541
- // https://github.com/import-js/eslint-plugin-import/issues/2556#issuecomment-1419518561
542
- 'import/parsers': {
543
- espree: ['.js', '.cjs', '.mjs', '.jsx', '.ts', '.tsx'],
544
- },
545
- 'import/resolver': {
546
- typescript: true,
547
- node: true,
548
- },
549
- },
550
- },
551
- {
552
- files: ['**/*.ts', '**/*.tsx'],
553
- languageOptions: {
554
- parser: typescriptParser,
555
- parserOptions: {
556
- project: './tsconfig.json',
557
- },
558
- },
559
- plugins: {
560
- '@typescript-eslint': typescript,
561
- 'import/typescript': importTypescriptResolver,
562
- },
563
- rules: {
564
- ...config$9,
565
- ...config$h,
566
- },
567
- },
568
- {
569
- files: ['**/*.test.js', '**/*.test.jsx', 'tests/**/*.js', 'tests/**/*.jsx'],
570
- languageOptions: {
571
- globals: {
572
- ...globals.jest,
573
- },
574
- },
575
- plugins: {
576
- jest: plugin$3,
577
- },
578
- rules: {
579
- ...config$e,
580
- },
581
- },
582
- {
583
- files: ['**/*.cy.js', '**/*.cy.jsx'],
584
- languageOptions: {
585
- globals: {
586
- ...globals.cypress,
587
- },
588
- },
589
- plugins: {
590
- cypress: plugin$7,
591
- },
592
- rules: {
593
- ...config$8,
594
- },
595
- },
596
- {
597
- files: [
598
- '**/*.stories.js',
599
- '**/*.stories.jsx',
600
- '**/*.stories.ts',
601
- '**/*.stories.tsx',
602
- ],
603
- plugins: {
604
- storybook: plugin$8,
605
- },
606
- rules: {
607
- ...config$7,
608
- },
609
- },
610
- {
611
- files: ['**/*.html'],
612
- plugins: {
613
- html,
614
- },
615
- settings: {
616
- 'html/javascript-tag-names': ['script', 'Script'],
617
- },
618
- },
619
- ];
620
-
621
- export { config as default };
@@ -1 +0,0 @@
1
- import dt from"eslint-plugin-react";import bt from"eslint-plugin-react-hooks";import yt from"@typescript-eslint/eslint-plugin";import gt from"eslint-plugin-jsx-a11y";import*as o from"eslint-plugin-import";import jt from"eslint-plugin-jest";import xt from"eslint-plugin-promise";import Ot from"eslint-plugin-n";import Rt from"@next/eslint-plugin-next";import t from"globals";import vt from"eslint-plugin-prettier";import kt from"eslint-plugin-cypress";import ht from"eslint-plugin-storybook";import wt from"eslint-plugin-unused-imports";import*as Et from"eslint-import-resolver-typescript";import Kt from"eslint-plugin-html";import $t from"eslint-plugin-compat";import Pt from"eslint-config-prettier";import*as qt from"@typescript-eslint/parser";import St from"eslint-plugin-sonarjs";import Ct from"eslint-plugin-unicorn";import Tt from"eslint-plugin-github";import*as It from"@tanstack/eslint-plugin-query";import H from"@eslint/js";var Q={"no-unused-private-class-members":"off","capitalized-comments":"off",complexity:"off","id-length":["error",{exceptions:["x","y","z"]}],"max-lines":"off","max-lines-per-function":"off","max-params":"off","max-statements":"off","no-ternary":"off","no-undefined":"off","one-var":"off","prefer-destructuring":["error",{array:!1,object:!0}],"sort-imports":"off","sort-keys":"off","sort-vars":"off"},V=Object.assign(H.configs.all.rules,Q),r=V;import _ from"eslint-plugin-react";var{rules:s}=_,B=Object.keys(s).filter(e=>!s[e].meta.deprecated),D=Object.fromEntries(B.map(e=>[`react/${e}`,"error"])),G={"react/forbid-component-props":"off","react/function-component-definition":["error",{namedComponents:"arrow-function"}],"react/no-array-index-key":"off","react/no-arrow-function-lifecycle":"off","react/no-invalid-html-attribute":"off","react/no-multi-comp":"off","react/no-unused-class-component-methods":"off","react/react-in-jsx-scope":"off","react/require-default-props":"off","react/jsx-filename-extension":["error",{extensions:[".tsx"]}],"react/jsx-max-depth":"off","react/jsx-max-props-per-line":"off","react/jsx-newline":"off","react/jsx-no-bind":"off","react/jsx-no-literals":"off","react/jsx-one-expression-per-line":"off","react/jsx-props-no-spreading":"off","react/jsx-sort-props":"off"},J=Object.assign(D,G),n=J;import{rules as i}from"eslint-plugin-react-hooks";var M=Object.keys(i).filter(e=>!i[e].meta.deprecated),N=Object.fromEntries(M.map(e=>[`react-hooks/${e}`,"error"])),U={"react-hooks/exhaustive-deps":"error"},W=Object.assign(N,U),f=W;import X from"@typescript-eslint/eslint-plugin";var{rules:a}=X,Y=Object.keys(a).filter(e=>!a[e].meta.deprecated),Z=Object.fromEntries(Y.map(e=>[`@typescript-eslint/${e}`,"error"])),ee={"@typescript-eslint/consistent-type-definitions":["error","type"],"@typescript-eslint/explicit-function-return-type":"off","@typescript-eslint/naming-convention":["error",{selector:"default",format:["camelCase","PascalCase","snake_case"]},{selector:"objectLiteralProperty",format:null,modifiers:["requiresQuotes"]}],"@typescript-eslint/no-confusing-void-expression":"off","@typescript-eslint/no-misused-promises":"off","@typescript-eslint/no-type-alias":"off","@typescript-eslint/prefer-readonly":"off","@typescript-eslint/prefer-readonly-parameter-types":"off","@typescript-eslint/sort-type-union-intersection-members":"off","@typescript-eslint/strict-boolean-expressions":"off","@typescript-eslint/no-magic-numbers":"off","@typescript-eslint/block-spacing":"off","@typescript-eslint/brace-style":"off","@typescript-eslint/comma-dangle":"off","@typescript-eslint/comma-spacing":"off","@typescript-eslint/func-call-spacing":"off","@typescript-eslint/indent":"off","@typescript-eslint/key-spacing":"off","@typescript-eslint/keyword-spacing":"off","@typescript-eslint/lines-around-comment":"off","@typescript-eslint/lines-between-class-members":"off","@typescript-eslint/member-delimiter-style":"off","@typescript-eslint/no-extra-parens":"off","@typescript-eslint/object-curly-spacing":"off","@typescript-eslint/padding-line-between-statements":"off","@typescript-eslint/quotes":"off","@typescript-eslint/semi":"off","@typescript-eslint/space-before-blocks":"off","@typescript-eslint/space-before-function-paren":"off","@typescript-eslint/space-infix-ops":"off","@typescript-eslint/type-annotation-spacing":"off"},te=Object.assign(Z,ee),p=te;import oe from"eslint-plugin-jsx-a11y";var{rules:c}=oe,re=Object.keys(c).filter(e=>!c[e].meta.deprecated),se=Object.fromEntries(re.map(e=>[`jsx-a11y/${e}`,"error"])),ne={"jsx-a11y/no-autofocus":"off","jsx-a11y/label-has-associated-control":["error",{labelComponents:["Label"],controlComponents:["Input","Select","Textarea","Checkbox","Radio"],depth:3}]},ie=Object.assign(se,ne),l=ie;import{rules as m}from"eslint-plugin-import";var fe=Object.keys(m).filter(e=>!m[e].meta.deprecated),ae=Object.fromEntries(fe.map(e=>[`import/${e}`,"error"])),pe={"import/no-unresolved":"off","import/no-internal-modules":"off","import/no-relative-parent-imports":"off","import/no-named-as-default":"off","import/exports-last":"off","import/no-namespace":"off","import/extensions":"off","import/order":["error",{groups:["builtin","external","internal","parent","sibling","index","object","type"]}],"import/prefer-default-export":"off","import/max-dependencies":"off","import/no-unassigned-import":"off","import/no-default-export":"off","import/no-named-export":"off","import/group-exports":"off"},ce=Object.assign(ae,pe),u=ce;import le from"eslint-plugin-jest";var{rules:d}=le,me=Object.keys(d).filter(e=>!d[e].meta.deprecated),ue=Object.fromEntries(me.map(e=>[`jest/${e}`,"error"])),de={},be=Object.assign(ue,de),b=be;import ye from"eslint-plugin-promise";var{rules:y}=ye,ge=Object.keys(y).filter(e=>!y[e].meta.deprecated),je=Object.fromEntries(ge.map(e=>[`promise/${e}`,"error"])),xe={"promise/catch-or-return":["error",{allowFinally:!0}],"promise/no-native":"off"},Oe=Object.assign(je,xe),g=Oe;import Re from"eslint-plugin-n";var{rules:j}=Re,ve=Object.keys(j).filter(e=>!j[e].meta.deprecated),ke=Object.fromEntries(ve.map(e=>[`n/${e}`,"error"])),he={"n/no-missing-import":"off","n/no-unsupported-features/es-builtins":"off","n/no-unsupported-features/es-syntax":"off","n/no-unsupported-features/node-builtins":"off","n/file-extension-in-import":"off","n/no-process-env":"off"},we=Object.assign(ke,he),x=we;import Ee from"@next/eslint-plugin-next";var{rules:O}=Ee,Ke=Object.keys(O).filter(e=>!O[e].meta.deprecated),$e=Object.fromEntries(Ke.map(e=>[`@next/next/${e}`,"error"])),Pe={},qe=Object.assign($e,Pe),R=qe;var Se={"prettier/prettier":"error"},v=Se;var Ce={"brace-style":"off",camelcase:"off","comma-dangle":"off","comma-spacing":"off","default-param-last":"off","dot-notation":"off","func-call-spacing":"off",indent:"off","init-declarations":"off","keyword-spacing":"off","lines-between-class-members":"off","no-array-constructor":"off","no-dupe-class-members":"off","no-duplicate-imports":"off","no-empty-function":"off","no-extra-parens":"off","no-extra-semi":"off","no-implied-eval":"off","no-invalid-this":"off","no-loop-func":"off","no-loss-of-precision":"off","no-magic-numbers":"off","no-redeclare":"off","no-restricted-imports":"off","no-shadow":"off","no-throw-literal":"off","no-unused-expressions":"off","no-unused-vars":"off","no-use-before-define":"off","no-useless-constructor":"off","object-curly-spacing":"off","padding-line-between-statements":"off",quotes:"off","require-await":"off","no-return-await":"off",semi:"off","space-before-function-paren":"off","space-infix-ops":"off"},k=Ce;import Te from"eslint-plugin-cypress";var{rules:h}=Te,Ie=Object.keys(h).filter(e=>!h[e].meta.deprecated),Le=Object.fromEntries(Ie.map(e=>[`cypress/${e}`,"error"])),ze={},Ae=Object.assign(Le,ze),w=Ae;import Fe from"eslint-plugin-storybook";var{rules:E}=Fe,He=Object.keys(E).filter(e=>!E[e].meta.deprecated),Qe=Object.fromEntries(He.map(e=>[`storybook/${e}`,"error"])),Ve={},_e=Object.assign(Qe,Ve),K=_e;import Be from"eslint-plugin-unused-imports";var{rules:$}=Be,De=Object.keys($).filter(e=>!$[e].meta.deprecated),Ge=Object.fromEntries(De.map(e=>[`unused-imports/${e}`,"error"])),Je={},Me=Object.assign(Ge,Je),P=Me;import Ne from"eslint-plugin-sonarjs";var{rules:q}=Ne,Ue=Object.keys(q).filter(e=>!q[e].meta.deprecated),We=Object.fromEntries(Ue.map(e=>[`sonarjs/${e}`,"error"])),Xe={"sonarjs/elseif-without-else":"off"},Ye=Object.assign(We,Xe),S=Ye;var Ze={"compat/compat":"warn"},C=Ze;import et from"eslint-plugin-unicorn";var{rules:T}=et,tt=Object.keys(T).filter(e=>!T[e].meta.deprecated),ot=Object.fromEntries(tt.map(e=>[`unicorn/${e}`,"error"])),rt={"unicorn/no-keyword-prefix":"off","unicorn/no-null":"off","unicorn/no-array-callback-reference":"off","unicorn/prevent-abbreviations":["error",{allowList:{getInitialProps:!0,getServerSideProps:!0,getStaticPaths:!0,getStaticProps:!0,generateStaticParams:!0}}]},st=Object.assign(ot,rt),I=st;import nt from"eslint-plugin-github";var{rules:L}=nt,it=Object.keys(L).filter(e=>!L[e].meta.deprecated),ft=Object.fromEntries(it.map(e=>[`github/${e}`,"error"])),at={},pt=Object.assign(ft,at),z=pt;import{rules as A}from"@tanstack/eslint-plugin-query";var ct=Object.keys(A).filter(e=>!A[e].meta.deprecated),lt=Object.fromEntries(ct.map(e=>[`@tanstack/eslint-plugin-query/${e}`,"error"])),mt={},ut=Object.assign(lt,mt),F=ut;var Lt=[o.configs.typescript,{ignores:["**/dist/","**/build/","**/.next/","**/.turbo/"]},{languageOptions:{sourceType:"module",globals:{...t.browser,...t.node},parserOptions:{ecmaVersion:"latest",sourceType:"module",ecmaFeatures:{jsx:!0}}},files:["**/*.js","**/*.jsx","**/*.ts","**/*.tsx","**/*.json","**/*.mjs","**/*.cjs","**/*.html"],plugins:{prettier:vt,react:dt,"react-hooks":bt,"jsx-a11y":gt,import:o,promise:xt,n:Ot,"@next/next":Rt,"unused-imports":wt,sonarjs:St,compat:$t,unicorn:Ct,github:Tt,"@tanstack/eslint-plugin-query":It},rules:{...r,...n,...f,...l,...u,...g,...x,...R,...v,...Pt.rules,...P,...S,...C,...I,...z,...F},settings:{react:{version:"detect"},"import/parsers":{espree:[".js",".cjs",".mjs",".jsx",".ts",".tsx"]},"import/resolver":{typescript:!0,node:!0}}},{files:["**/*.ts","**/*.tsx"],languageOptions:{parser:qt,parserOptions:{project:"./tsconfig.json"}},plugins:{"@typescript-eslint":yt,"import/typescript":Et},rules:{...k,...p}},{files:["**/*.test.js","**/*.test.jsx","tests/**/*.js","tests/**/*.jsx"],languageOptions:{globals:{...t.jest}},plugins:{jest:jt},rules:{...b}},{files:["**/*.cy.js","**/*.cy.jsx"],languageOptions:{globals:{...t.cypress}},plugins:{cypress:kt},rules:{...w}},{files:["**/*.stories.js","**/*.stories.jsx","**/*.stories.ts","**/*.stories.tsx"],plugins:{storybook:ht},rules:{...K}},{files:["**/*.html"],plugins:{html:Kt},settings:{"html/javascript-tag-names":["script","Script"]}}],nr=Lt;export{nr as default};
@@ -1,14 +0,0 @@
1
- /** @type {import('prettier').Config} */
2
- const config = {
3
- tabWidth: 2,
4
- useTabs: false,
5
- semi: true,
6
- singleQuote: true,
7
- trailingComma: 'es5',
8
- bracketSpacing: true,
9
- arrowParens: 'always',
10
- proseWrap: 'never',
11
- printWidth: 80,
12
- };
13
-
14
- export { config as default };
@@ -1 +0,0 @@
1
- var e={tabWidth:2,useTabs:!1,semi:!0,singleQuote:!0,trailingComma:"es5",bracketSpacing:!0,arrowParens:"always",proseWrap:"never",printWidth:80},a=e;export{a as default};
@@ -1,36 +0,0 @@
1
- /** @type {import('stylelint').Config} */
2
- const config = {
3
- plugins: ['stylelint-prettier'],
4
- extends: ['stylelint-config-standard', 'stylelint-config-idiomatic-order'],
5
- rules: {
6
- 'at-rule-no-unknown': [
7
- true,
8
- {
9
- ignoreAtRules: [
10
- 'tailwind',
11
- 'apply',
12
- 'layer',
13
- 'variants',
14
- 'responsive',
15
- 'screen',
16
- ],
17
- },
18
- ],
19
- 'declaration-property-value-no-unknown': true,
20
- 'no-descending-specificity': null,
21
- 'declaration-block-no-redundant-longhand-properties': [
22
- true,
23
- {
24
- ignoreShorthands: ['/flex/'],
25
- },
26
- ],
27
- 'selector-pseudo-class-no-unknown': [
28
- true,
29
- {
30
- ignorePseudoClasses: ['global'],
31
- },
32
- ],
33
- },
34
- };
35
-
36
- export { config as default };
@@ -1 +0,0 @@
1
- var e={plugins:["stylelint-prettier"],extends:["stylelint-config-standard","stylelint-config-idiomatic-order"],rules:{"at-rule-no-unknown":[!0,{ignoreAtRules:["tailwind","apply","layer","variants","responsive","screen"]}],"declaration-property-value-no-unknown":!0,"no-descending-specificity":null,"declaration-block-no-redundant-longhand-properties":[!0,{ignoreShorthands:["/flex/"]}],"selector-pseudo-class-no-unknown":[!0,{ignorePseudoClasses:["global"]}]}},n=e;export{n as default};