@tsfpp/eslint-config 1.1.0 → 2.1.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 +8 -1
- package/dist/base.d.ts +1 -1
- package/dist/base.d.ts.map +1 -1
- package/dist/base.js +21 -1
- package/dist/base.js.map +1 -1
- package/dist/plugin-compat.d.ts +11 -0
- package/dist/plugin-compat.d.ts.map +1 -1
- package/dist/plugin-compat.js +12 -0
- package/dist/plugin-compat.js.map +1 -1
- package/dist/react.d.ts.map +1 -1
- package/dist/react.js +4 -3
- package/dist/react.js.map +1 -1
- package/package.json +12 -9
package/README.md
CHANGED
|
@@ -6,7 +6,8 @@ Enforces the machine-checkable subset of TSF++ rules via `@typescript-eslint` an
|
|
|
6
6
|
|
|
7
7
|
## Requirements
|
|
8
8
|
|
|
9
|
-
- ESLint
|
|
9
|
+
- ESLint 9 or 10 (flat config format)
|
|
10
|
+
- Node.js `^20.19.0 || ^22.13.0 || >=24` — the range ESLint 10 itself supports
|
|
10
11
|
- TypeScript ≥ 5.3
|
|
11
12
|
- A `tsconfig.json` reachable from each linted file
|
|
12
13
|
|
|
@@ -130,6 +131,8 @@ export default [
|
|
|
130
131
|
| `no-restricted-syntax` → `TSModuleDeclaration[kind='namespace']` | 1.9 | MUST |
|
|
131
132
|
| `no-restricted-syntax` → `BinaryExpression[operator="instanceof"]` | 1.9 | MUST |
|
|
132
133
|
| `no-restricted-syntax` → `NewExpression` | 1.9 | MUST |
|
|
134
|
+
| `no-restricted-globals` → `isNaN`, `isFinite`, `parseInt`, `parseFloat` | 1.13 | MUST |
|
|
135
|
+
| `no-restricted-syntax` → `Date.now()`, `Math.random()`, `process.env` | 4.6 | MUST |
|
|
133
136
|
| `functional/no-classes` | 1.9 | MUST |
|
|
134
137
|
| `functional/no-this-expressions` | 1.9 | MUST |
|
|
135
138
|
| `functional/no-let` | 2.1 | MUST |
|
|
@@ -209,6 +212,10 @@ throw new Error('unreachable')
|
|
|
209
212
|
|
|
210
213
|
Several ESLint plugin packages ship types that lag behind the current `@eslint/core` `Plugin` interface. This package contains a single `coercePlugin` adapter (`plugin-compat.ts`) that isolates the necessary type cast at one auditable boundary per TSF++ DEVIATION(1.6). Consumers are unaffected — this is an internal concern of the config package itself.
|
|
211
214
|
|
|
215
|
+
### ESLint 10 and the React profile
|
|
216
|
+
|
|
217
|
+
`eslint-plugin-react` (7.37.5) and `eslint-plugin-jsx-a11y` (6.10.2) have not yet released ESLint 10 support: both call rule-context methods that ESLint 10 removed. The React profile registers them through `coerceLegacyPlugin`, which wraps them with `fixupPluginRules` from `@eslint/compat`, so the profile works on ESLint 9 and 10 alike. Your package manager will still report an unmet `eslint` peer for those two plugins under ESLint 10 — that warning comes from the plugins' own manifests and is expected until they publish a compatible release.
|
|
218
|
+
|
|
212
219
|
## See also
|
|
213
220
|
|
|
214
221
|
- [spec/standards/TSFPP_CODING_STANDARD.md §9](../../spec/standards/TSFPP_CODING_STANDARD.md#9--compiler-and-tooling-configuration) — normative rule reference
|
package/dist/base.d.ts
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* @tsfpp/eslint-config — base
|
|
3
3
|
*
|
|
4
4
|
* Shared ESLint flat configuration for TSF++ projects (pure TypeScript targets).
|
|
5
|
-
* Enforces Rules 1.2–1.9, 2.1–2.3, 3.1–3.2, 3.4, 4.1, 4.2, 4.5, 6.2, 6.4, 11.2
|
|
5
|
+
* Enforces Rules 1.2–1.9, 1.13, 2.1–2.3, 3.1–3.2, 3.4, 4.1, 4.2, 4.5, 4.6, 6.2, 6.4, 11.2
|
|
6
6
|
* from CODING_STANDARD.md via @typescript-eslint and eslint-plugin-functional.
|
|
7
7
|
*
|
|
8
8
|
* Usage (base only):
|
package/dist/base.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"base.d.ts","sourceRoot":"","sources":["../base.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAO,QAAQ,CAAA;AAMrC,QAAA,MAAM,MAAM,EAAE,MAAM,CAAC,MAAM,
|
|
1
|
+
{"version":3,"file":"base.d.ts","sourceRoot":"","sources":["../base.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;GAqBG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAO,QAAQ,CAAA;AAMrC,QAAA,MAAM,MAAM,EAAE,MAAM,CAAC,MAAM,EA+M1B,CAAA;AAED,eAAe,MAAM,CAAA"}
|
package/dist/base.js
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
* @tsfpp/eslint-config — base
|
|
3
3
|
*
|
|
4
4
|
* Shared ESLint flat configuration for TSF++ projects (pure TypeScript targets).
|
|
5
|
-
* Enforces Rules 1.2–1.9, 2.1–2.3, 3.1–3.2, 3.4, 4.1, 4.2, 4.5, 6.2, 6.4, 11.2
|
|
5
|
+
* Enforces Rules 1.2–1.9, 1.13, 2.1–2.3, 3.1–3.2, 3.4, 4.1, 4.2, 4.5, 4.6, 6.2, 6.4, 11.2
|
|
6
6
|
* from CODING_STANDARD.md via @typescript-eslint and eslint-plugin-functional.
|
|
7
7
|
*
|
|
8
8
|
* Usage (base only):
|
|
@@ -81,6 +81,26 @@ const config = [
|
|
|
81
81
|
selector: 'NewExpression',
|
|
82
82
|
message: 'TSF++ Rule 1.9: new is forbidden outside adapter boundaries. Add DEVIATION(1.9) and an eslint-disable comment.',
|
|
83
83
|
},
|
|
84
|
+
// Rule 4.6 — ambient nondeterminism is an effect (Appendix B); `new Date()` is already caught by Rule 1.9 above
|
|
85
|
+
{
|
|
86
|
+
selector: "CallExpression[callee.object.name='Date'][callee.property.name='now']",
|
|
87
|
+
message: 'TSF++ Rule 4.6: Date.now() is an effect; inject `now: () => Date` via Deps.',
|
|
88
|
+
},
|
|
89
|
+
{
|
|
90
|
+
selector: "CallExpression[callee.object.name='Math'][callee.property.name='random']",
|
|
91
|
+
message: 'TSF++ Rule 4.6: Math.random() is an effect; inject a seeded generator via Deps.',
|
|
92
|
+
},
|
|
93
|
+
{
|
|
94
|
+
selector: "MemberExpression[object.object.name='process'][object.property.name='env']",
|
|
95
|
+
message: 'TSF++ Rule 4.6: process.env is ambient input; load config at the boundary and inject it.',
|
|
96
|
+
},
|
|
97
|
+
],
|
|
98
|
+
// Rule 1.13 — numeric hazards: coercing globals (Appendix B)
|
|
99
|
+
'no-restricted-globals': ['error',
|
|
100
|
+
{ name: 'isNaN', message: 'TSF++ Rule 1.13: use Number.isNaN — the global coerces its argument.' },
|
|
101
|
+
{ name: 'isFinite', message: 'TSF++ Rule 1.13: use Number.isFinite — the global coerces its argument.' },
|
|
102
|
+
{ name: 'parseInt', message: 'TSF++ Rule 1.13: coercion parsing is forbidden in the core; parse at the boundary via a smart constructor.' },
|
|
103
|
+
{ name: 'parseFloat', message: 'TSF++ Rule 1.13: coercion parsing is forbidden in the core; parse at the boundary via a smart constructor.' },
|
|
84
104
|
],
|
|
85
105
|
// ── Immutability & functional style ──────────────────────────────────────
|
|
86
106
|
// Rule 2.1 — no `let`
|
package/dist/base.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"base.js","sourceRoot":"","sources":["../base.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"base.js","sourceRoot":"","sources":["../base.ts"],"names":[],"mappings":"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"}
|
package/dist/plugin-compat.d.ts
CHANGED
|
@@ -27,4 +27,15 @@ import type { ESLint } from 'eslint';
|
|
|
27
27
|
* type errors.
|
|
28
28
|
*/
|
|
29
29
|
export declare const coercePlugin: (plugin: unknown) => ESLint.Plugin;
|
|
30
|
+
/**
|
|
31
|
+
* Coerces a plugin and additionally restores the rule-context methods ESLint 10
|
|
32
|
+
* removed (`context.getFilename()`, `context.getSourceCode()`, …).
|
|
33
|
+
*
|
|
34
|
+
* Use for plugins that have not shipped ESLint 10 support — currently
|
|
35
|
+
* eslint-plugin-react and eslint-plugin-jsx-a11y. Without the fixup,
|
|
36
|
+
* eslint-plugin-react 7.37.5 throws `contextOrFilename.getFilename is not a
|
|
37
|
+
* function` on the first linted file. Harmless under ESLint 9; drop the call
|
|
38
|
+
* for a plugin once its own peer range includes ESLint 10.
|
|
39
|
+
*/
|
|
40
|
+
export declare const coerceLegacyPlugin: (plugin: unknown) => ESLint.Plugin;
|
|
30
41
|
//# sourceMappingURL=plugin-compat.d.ts.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plugin-compat.d.ts","sourceRoot":"","sources":["../plugin-compat.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAE,
|
|
1
|
+
{"version":3,"file":"plugin-compat.d.ts","sourceRoot":"","sources":["../plugin-compat.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAW,QAAQ,CAAA;AAGzC;;;;;;GAMG;AACH,eAAO,MAAM,YAAY,GAAI,QAAQ,OAAO,KAAG,MAAM,CAAC,MAE7B,CAAA;AAEzB;;;;;;;;;GASG;AACH,eAAO,MAAM,kBAAkB,GAAI,QAAQ,OAAO,KAAG,MAAM,CAAC,MACpB,CAAA"}
|
package/dist/plugin-compat.js
CHANGED
|
@@ -18,6 +18,7 @@
|
|
|
18
18
|
* no runtime effect — this is a pure type-level coercion with zero behavior.
|
|
19
19
|
* Reviewed and approved per TSF++ deviation procedure.
|
|
20
20
|
*/
|
|
21
|
+
import { fixupPluginRules } from '@eslint/compat';
|
|
21
22
|
/**
|
|
22
23
|
* Coerces a third-party ESLint plugin object to the canonical `ESLint.Plugin`
|
|
23
24
|
* type accepted by flat config `plugins` records.
|
|
@@ -28,4 +29,15 @@
|
|
|
28
29
|
export const coercePlugin = (plugin) =>
|
|
29
30
|
// eslint-disable-next-line @typescript-eslint/consistent-type-assertions -- DEVIATION(1.6): see module JSDoc above
|
|
30
31
|
plugin;
|
|
32
|
+
/**
|
|
33
|
+
* Coerces a plugin and additionally restores the rule-context methods ESLint 10
|
|
34
|
+
* removed (`context.getFilename()`, `context.getSourceCode()`, …).
|
|
35
|
+
*
|
|
36
|
+
* Use for plugins that have not shipped ESLint 10 support — currently
|
|
37
|
+
* eslint-plugin-react and eslint-plugin-jsx-a11y. Without the fixup,
|
|
38
|
+
* eslint-plugin-react 7.37.5 throws `contextOrFilename.getFilename is not a
|
|
39
|
+
* function` on the first linted file. Harmless under ESLint 9; drop the call
|
|
40
|
+
* for a plugin once its own peer range includes ESLint 10.
|
|
41
|
+
*/
|
|
42
|
+
export const coerceLegacyPlugin = (plugin) => fixupPluginRules(coercePlugin(plugin));
|
|
31
43
|
//# sourceMappingURL=plugin-compat.js.map
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"plugin-compat.js","sourceRoot":"","sources":["../plugin-compat.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;
|
|
1
|
+
{"version":3,"file":"plugin-compat.js","sourceRoot":"","sources":["../plugin-compat.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;GAmBG;AAGH,OAAO,EAAE,gBAAgB,EAAE,MAAM,gBAAgB,CAAA;AAEjD;;;;;;GAMG;AACH,MAAM,CAAC,MAAM,YAAY,GAAG,CAAC,MAAe,EAAiB,EAAE;AAC7D,mHAAmH;AACnH,MAAuB,CAAA;AAEzB;;;;;;;;;GASG;AACH,MAAM,CAAC,MAAM,kBAAkB,GAAG,CAAC,MAAe,EAAiB,EAAE,CACnE,gBAAgB,CAAC,YAAY,CAAC,MAAM,CAAC,CAAC,CAAA"}
|
package/dist/react.d.ts.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"react.d.ts","sourceRoot":"","sources":["../react.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAS,QAAQ,CAAA;AASvC,QAAA,MAAM,MAAM,EAAE,MAAM,CAAC,MAAM,
|
|
1
|
+
{"version":3,"file":"react.d.ts","sourceRoot":"","sources":["../react.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AAEH,OAAO,KAAK,EAAE,MAAM,EAAE,MAAS,QAAQ,CAAA;AASvC,QAAA,MAAM,MAAM,EAAE,MAAM,CAAC,MAAM,EAsG1B,CAAA;AAED,eAAe,MAAM,CAAA"}
|
package/dist/react.js
CHANGED
|
@@ -31,7 +31,7 @@ import reactHooksPlugin from 'eslint-plugin-react-hooks';
|
|
|
31
31
|
import jsxA11yPlugin from 'eslint-plugin-jsx-a11y';
|
|
32
32
|
import tanstackQueryPlugin from '@tanstack/eslint-plugin-query';
|
|
33
33
|
import base from './base.js';
|
|
34
|
-
import { coercePlugin } from './plugin-compat.js';
|
|
34
|
+
import { coerceLegacyPlugin, coercePlugin } from './plugin-compat.js';
|
|
35
35
|
const config = [
|
|
36
36
|
// ── Inherit all base TSF++ rules (applies to .ts and .tsx) ───────────────────
|
|
37
37
|
...base,
|
|
@@ -39,9 +39,10 @@ const config = [
|
|
|
39
39
|
{
|
|
40
40
|
files: ['**/*.tsx'],
|
|
41
41
|
plugins: {
|
|
42
|
-
|
|
42
|
+
// react and jsx-a11y predate ESLint 10 — see coerceLegacyPlugin
|
|
43
|
+
'react': coerceLegacyPlugin(reactPlugin),
|
|
43
44
|
'react-hooks': coercePlugin(reactHooksPlugin),
|
|
44
|
-
'jsx-a11y':
|
|
45
|
+
'jsx-a11y': coerceLegacyPlugin(jsxA11yPlugin),
|
|
45
46
|
'@tanstack/query': coercePlugin(tanstackQueryPlugin),
|
|
46
47
|
},
|
|
47
48
|
settings: {
|
package/dist/react.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"react.js","sourceRoot":"","sources":["../react.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AAGH,OAAO,WAAW,MAAa,qBAAqB,CAAA;AACpD,OAAO,gBAAgB,MAAQ,2BAA2B,CAAA;AAC1D,wEAAwE;AACxE,OAAO,aAAa,MAAW,wBAAwB,CAAA;AACvD,OAAO,mBAAmB,MAAM,+BAA+B,CAAA;AAC/D,OAAO,IAAI,MAAoB,WAAW,CAAA;AAC1C,OAAO,EAAE,YAAY,EAAE,
|
|
1
|
+
{"version":3,"file":"react.js","sourceRoot":"","sources":["../react.ts"],"names":[],"mappings":"AAAA;;;;;;;;;;;;;;;;;;;;;;;;;;GA0BG;AAGH,OAAO,WAAW,MAAa,qBAAqB,CAAA;AACpD,OAAO,gBAAgB,MAAQ,2BAA2B,CAAA;AAC1D,wEAAwE;AACxE,OAAO,aAAa,MAAW,wBAAwB,CAAA;AACvD,OAAO,mBAAmB,MAAM,+BAA+B,CAAA;AAC/D,OAAO,IAAI,MAAoB,WAAW,CAAA;AAC1C,OAAO,EAAE,kBAAkB,EAAE,YAAY,EAAE,MAAM,oBAAoB,CAAA;AAErE,MAAM,MAAM,GAAoB;IAE9B,gFAAgF;IAChF,GAAG,IAAI;IAEP,gFAAgF;IAChF;QACE,KAAK,EAAE,CAAC,UAAU,CAAC;QACnB,OAAO,EAAE;YACP,gEAAgE;YAChE,OAAO,EAAc,kBAAkB,CAAC,WAAW,CAAC;YACpD,aAAa,EAAQ,YAAY,CAAC,gBAAgB,CAAC;YACnD,UAAU,EAAW,kBAAkB,CAAC,aAAa,CAAC;YACtD,iBAAiB,EAAI,YAAY,CAAC,mBAAmB,CAAC;SACvD;QACD,QAAQ,EAAE;YACR,KAAK,EAAE,EAAE,OAAO,EAAE,QAAQ,EAAE;SAC7B;QACD,KAAK,EAAE;YAEL,0EAA0E;YAE1E,2EAA2E;YAC3E,4FAA4F;YAC5F,+CAA+C;YAC/C,qCAAqC,EAAE,CAAC,OAAO,EAAE;oBAC/C,eAAe,EAAK,gBAAgB;oBACpC,iBAAiB,EAAG,gBAAgB;iBACrC,CAAC;YAEF,gEAAgE;YAChE,sBAAsB,EAAO,KAAK;YAClC,0BAA0B,EAAG,KAAK;YAElC,0BAA0B;YAC1B,eAAe,EAAqB,CAAC,OAAO,EAAE,EAAE,sBAAsB,EAAE,IAAI,EAAE,CAAC;YAC/E,4BAA4B,EAAQ,OAAO,EAAI,2CAA2C;YAC1F,0BAA0B,EAAU,OAAO,EAAI,2BAA2B;YAC1E,qCAAqC,EAAE,OAAO,EAAE,oCAAoC;YACpF,yBAAyB,EAAW,OAAO;YAC3C,uBAAuB,EAAa,OAAO;YAC3C,+BAA+B,EAAK,OAAO;YAC3C,oBAAoB,EAAgB,OAAO;YAE3C,0EAA0E;YAE1E,8DAA8D;YAC9D,4BAA4B,EAAI,OAAO;YAEvC,2EAA2E;YAC3E,6BAA6B,EAAG,OAAO;YAEvC,2EAA2E;YAE3E,gEAAgE;YAChE,sFAAsF;YACtF,2EAA2E;YAE3E,2EAA2E;YAE3E,8DAA8D;YAC9D,uCAAuC,EAAG,OAAO;YACjD,yCAAyC,EAAE,OAAO;YAElD,0CAA0C;YAC1C,mBAAmB,EAAoB,OAAO;YAC9C,6BAA6B,EAAU,OAAO;YAC9C,uCAAuC,EAAE,OAAO;YAEhD,6BAA6B;YAC7B,qBAAqB,EAAG,OAAO;YAC/B,oBAAoB,EAAI,OAAO;YAE/B,sFAAsF;YACtF,uBAAuB,EAAE,MAAM;YAE/B,0EAA0E;YAE1E,+CAA+C;YAC/C,iCAAiC,EAAK,OAAO;YAE7C,uFAAuF;YACvF,uCAAuC,EAAE,OAAO;YAEhD,0EAA0E;YAC1E,qCAAqC,EAAE,OAAO;YAE9C,2EAA2E;YAE3E,yFAAyF;YACzF,kGAAkG;SACnG;KACF;IAED,gFAAgF;IAChF;QACE,KAAK,EAAE,CAAC,YAAY,EAAE,aAAa,CAAC;QACpC,KAAK,EAAE;YACL,4BAA4B,EAAG,OAAO;YACtC,6BAA6B,EAAE,OAAO;SACvC;KACF;CACF,CAAA;AAED,eAAe,MAAM,CAAA"}
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@tsfpp/eslint-config",
|
|
3
|
-
"version": "
|
|
3
|
+
"version": "2.1.0",
|
|
4
4
|
"description": "Shared ESLint flat configuration for TSF++ projects",
|
|
5
5
|
"keywords": [
|
|
6
6
|
"eslint",
|
|
@@ -36,14 +36,14 @@
|
|
|
36
36
|
"test": "node --input-type=module --eval \"import './dist/base.js'\""
|
|
37
37
|
},
|
|
38
38
|
"engines": {
|
|
39
|
-
"node": "
|
|
39
|
+
"node": "^20.19.0 || ^22.13.0 || >=24"
|
|
40
40
|
},
|
|
41
41
|
"peerDependencies": {
|
|
42
42
|
"@tanstack/eslint-plugin-query": ">=5.0.0",
|
|
43
43
|
"@typescript-eslint/eslint-plugin": ">=8.0.0",
|
|
44
44
|
"@typescript-eslint/parser": ">=8.0.0",
|
|
45
|
-
"eslint": "
|
|
46
|
-
"eslint-plugin-functional": "^9.0.0",
|
|
45
|
+
"eslint": "^9.0.0 || ^10.0.0",
|
|
46
|
+
"eslint-plugin-functional": "^9.0.0 || ^10.0.0",
|
|
47
47
|
"eslint-plugin-jsx-a11y": ">=6.0.0",
|
|
48
48
|
"eslint-plugin-react": ">=7.0.0",
|
|
49
49
|
"eslint-plugin-react-hooks": ">=5.0.0",
|
|
@@ -64,14 +64,17 @@
|
|
|
64
64
|
}
|
|
65
65
|
},
|
|
66
66
|
"devDependencies": {
|
|
67
|
-
"@tanstack/eslint-plugin-query": "^5.
|
|
68
|
-
"@typescript-eslint/eslint-plugin": "^8.
|
|
69
|
-
"@typescript-eslint/parser": "^8.
|
|
70
|
-
"eslint": "^
|
|
71
|
-
"eslint-plugin-functional": "^
|
|
67
|
+
"@tanstack/eslint-plugin-query": "^5.104.2",
|
|
68
|
+
"@typescript-eslint/eslint-plugin": "^8.71.2",
|
|
69
|
+
"@typescript-eslint/parser": "^8.71.2",
|
|
70
|
+
"eslint": "^10.12.0",
|
|
71
|
+
"eslint-plugin-functional": "^10.0.1",
|
|
72
72
|
"eslint-plugin-jsx-a11y": "^6.10.2",
|
|
73
73
|
"eslint-plugin-react": "^7.37.5",
|
|
74
74
|
"eslint-plugin-react-hooks": "^7.1.1",
|
|
75
75
|
"typescript": "^5.9.3"
|
|
76
|
+
},
|
|
77
|
+
"dependencies": {
|
|
78
|
+
"@eslint/compat": "^2.1.1"
|
|
76
79
|
}
|
|
77
80
|
}
|