diff --git a/.vscode/settings.json b/.vscode/settings.json
index b8142104e..e798012f9 100644
--- a/.vscode/settings.json
+++ b/.vscode/settings.json
@@ -3,7 +3,7 @@
// Formatting
"eslint.enable": true,
- "eslint.experimental.useFlatConfig": true,
+ "eslint.useFlatConfig": true,
"eslint.format.enable": true,
"eslint.nodePath": "../node_modules/.bin",
"prettier.configPath": "prettier.config.js",
@@ -28,11 +28,11 @@
"editor.defaultFormatter": "dbaeumer.vscode-eslint",
"editor.formatOnSave": true
},
+ "[xml]": {
+ "editor.defaultFormatter": "redhat.vscode-xml"
+ },
// This corresponds to the `lib` we're using everywhere. Setting it here
// helps to address editor-only type errors in tooling files, where VSCode
// doesn't pick up the top-level `tsconfig.tools.json`.
- "js/ts.implicitProjectConfig.target": "ES2022",
- "[xml]": {
- "editor.defaultFormatter": "redhat.vscode-xml"
- }
+ "js/ts.implicitProjectConfig.target": "ES2022"
}
diff --git a/eslint.config.js b/eslint.config.js
index b3da70733..f92ba0c3b 100644
--- a/eslint.config.js
+++ b/eslint.config.js
@@ -8,7 +8,6 @@
// annotating with a date, but it'd be nice if we could just derive that from
// git history or whatever.
-///
///
///
///
@@ -18,7 +17,6 @@
///
///
-import { FlatCompat } from '@eslint/eslintrc';
import eslint from '@eslint/js';
import eslintConfigPrettier from 'eslint-config-prettier';
import jsdoc from 'eslint-plugin-jsdoc';
@@ -30,19 +28,8 @@ import vue3Recommended from 'eslint-plugin-vue/lib/configs/vue3-recommended.js';
import vue3StronglyRecommended from 'eslint-plugin-vue/lib/configs/vue3-strongly-recommended.js';
import vueProcessor from 'eslint-plugin-vue/lib/processor.js';
import { builtinModules } from 'node:module';
-import path from 'node:path';
-import { fileURLToPath } from 'node:url';
import tseslint from 'typescript-eslint';
-
-const __filename = fileURLToPath(import.meta.url);
-const __dirname = path.dirname(__filename);
-
-const compat = new FlatCompat({
- baseDirectory: __dirname,
- resolvePluginsRelativeTo: __dirname,
- recommendedConfig: eslint.configs.recommended,
- allConfig: eslint.configs.all,
-});
+import vueESLintParser from 'vue-eslint-parser';
/**
* @param {string} pathSansExtension
@@ -147,14 +134,11 @@ export default tseslint.config(
* Note: Contrary to the defaults provided in a Vue template project, it
* was found that linting applies most consistently by applying
* Vue-specific parsing **after** TypeScript.
- *
- * TODO: after breaking up the parser and rule aspects, it seemed likely
- * that we could stop using `FlatCompat` for this. For reasons that are
- * unclear, I wasn't able to find a way to get that working.
*/
- ...compat
- .config({
- parser: 'vue-eslint-parser',
+ {
+ files: [vuePackageGlob],
+ languageOptions: {
+ parser: vueESLintParser,
parserOptions: {
/**
* @see {@link https://github.com/vuejs/vue-eslint-parser/issues/173#issuecomment-1367298274}
@@ -172,17 +156,13 @@ export default tseslint.config(
'': 'espree',
},
},
- })
- .map((vueConfig) => ({
- files: [vuePackageGlob],
- plugins: {
- vue: vuePlugin,
- '@typescript-eslint': tseslint.plugin,
- },
- processor: vueProcessor,
-
- ...vueConfig,
- })),
+ },
+ plugins: {
+ vue: vuePlugin,
+ '@typescript-eslint': tseslint.plugin,
+ },
+ processor: vueProcessor,
+ },
eslintConfigPrettier,
],
@@ -325,6 +305,7 @@ export default tseslint.config(
'@typescript-eslint/no-unsafe-call': 'error',
'@typescript-eslint/no-unsafe-member-access': 'error',
'@typescript-eslint/no-unsafe-return': 'error',
+ '@typescript-eslint/only-throw-error': 'warn',
'@typescript-eslint/prefer-nullish-coalescing': 'error',
'@typescript-eslint/prefer-optional-chain': 'error',
'@typescript-eslint/prefer-string-starts-ends-with': 'error',
@@ -341,6 +322,12 @@ export default tseslint.config(
allowSingleExtends: true,
},
],
+ '@typescript-eslint/no-empty-object-type': [
+ 'error',
+ {
+ allowInterfaces: 'with-single-extends',
+ },
+ ],
'prefer-const': 'error',
// Ensure Node built-ins aren't used by default
@@ -399,15 +386,6 @@ export default tseslint.config(
'packages/xforms-engine/vite.*.config.ts',
'packages/*/tools/**/*',
'packages/tree-sitter-xpath/scripts/build/*.mjs',
-
- // TODO: in theory, all e2e tests (if they continue to be run with
- // Playwright) are technically run in a "Node" environment, although
- // they will likely exercise non-Node code when calling into the
- // Playwright-managed browser process. I'm adding this special case
- // mainly to make note of this because it's unclear what the best
- // solution will be for mixed Node-/browser-API code in terms of type
- // safety and linting.
- 'packages/tree-sitter-xpath/e2e/sub-expression-queries.test.ts',
],
rules: {
'no-restricted-imports': 'off',
diff --git a/package.json b/package.json
index becd1549e..aa53a122a 100644
--- a/package.json
+++ b/package.json
@@ -35,7 +35,6 @@
"dependencies": {
"@changesets/changelog-github": "^0.5.0",
"@changesets/cli": "^2.27.8",
- "@eslint/eslintrc": "^3.1.0",
"@eslint/js": "^9.9.1",
"@tsconfig/node20": "^20.1.4",
"@types/eslint": "^9.6.1",
diff --git a/packages/common/src/test/assertions/typeofAssertion.ts b/packages/common/src/test/assertions/typeofAssertion.ts
index af361becb..5e8dce27e 100644
--- a/packages/common/src/test/assertions/typeofAssertion.ts
+++ b/packages/common/src/test/assertions/typeofAssertion.ts
@@ -3,6 +3,7 @@ import type { AnyConstructor, AnyFunction } from '../../../types/helpers.d.ts';
/**
* @see {@link Typeof}
*/
+// eslint-disable-next-line @typescript-eslint/no-unused-vars -- this is purposefully derived, as described in `Typeof` JSDoc.
const TYPEOF = typeof ('' as unknown);
/**
@@ -31,7 +32,7 @@ type Typeof = typeof TYPEOF;
* this more expanded type, but in many cases it would fail to do so if we only
* specify {@link Function}.
*/
-// eslint-disable-next-line @typescript-eslint/ban-types
+// eslint-disable-next-line @typescript-eslint/no-unsafe-function-type
type TypeofFunction = AnyConstructor | AnyFunction | Function;
/**
diff --git a/packages/scenario/src/assertion/extensions/answers.ts b/packages/scenario/src/assertion/extensions/answers.ts
index ff52281b5..9eab82684 100644
--- a/packages/scenario/src/assertion/extensions/answers.ts
+++ b/packages/scenario/src/assertion/extensions/answers.ts
@@ -60,7 +60,7 @@ const matchDefaultMessage = (condition: ValidationCondition) => {
};
};
-const answerExtensions = extendExpect(expect, {
+export const answerExtensions = extendExpect(expect, {
toEqualAnswer: new SymmetricTypedExpectExtension(assertComparableAnswer, (actual, expected) => {
const pass = actual.stringValue === expected.stringValue;
diff --git a/packages/scenario/src/assertion/extensions/appearances.ts b/packages/scenario/src/assertion/extensions/appearances.ts
index f6a1b1e18..e9a3855e6 100644
--- a/packages/scenario/src/assertion/extensions/appearances.ts
+++ b/packages/scenario/src/assertion/extensions/appearances.ts
@@ -11,7 +11,7 @@ const hasAppearance = (node: AnyNode, appearance: string): boolean => {
return node.appearances?.[appearance] === true;
};
-const appearanceExtensions = extendExpect(expect, {
+export const appearanceExtensions = extendExpect(expect, {
toHaveAppearance: new AsymmetricTypedExpectExtension(
assertEngineNode,
assertString,
diff --git a/packages/scenario/src/assertion/extensions/body-classes.ts b/packages/scenario/src/assertion/extensions/body-classes.ts
index 03bd2f8d9..1f7ce48e3 100644
--- a/packages/scenario/src/assertion/extensions/body-classes.ts
+++ b/packages/scenario/src/assertion/extensions/body-classes.ts
@@ -11,7 +11,7 @@ const hasClass = (node: RootNode, className: string): boolean => {
return node.classes?.[className] === true;
};
-const bodyClassesExtensions = extendExpect(expect, {
+export const bodyClassesExtensions = extendExpect(expect, {
toHaveClass: new AsymmetricTypedExpectExtension(
assertRootNode,
assertString,
diff --git a/packages/scenario/src/assertion/extensions/choices.ts b/packages/scenario/src/assertion/extensions/choices.ts
index 4d997eab7..4d3ef486f 100644
--- a/packages/scenario/src/assertion/extensions/choices.ts
+++ b/packages/scenario/src/assertion/extensions/choices.ts
@@ -102,7 +102,7 @@ const getContainsChoicesResult = (
return error == null || error;
};
-const choiceExtensions = extendExpect(expect, {
+export const choiceExtensions = extendExpect(expect, {
toContainChoices: new AsymmetricTypedExpectExtension(
assertSelectList,
assertExpectedChoicesArray,
diff --git a/packages/scenario/src/assertion/extensions/form-state.ts b/packages/scenario/src/assertion/extensions/form-state.ts
index c59bfecd5..6e81ddbfc 100644
--- a/packages/scenario/src/assertion/extensions/form-state.ts
+++ b/packages/scenario/src/assertion/extensions/form-state.ts
@@ -11,7 +11,7 @@ type AssertJRFormDef = (value: unknown) => asserts value is JRFormDef;
const assertJRFormDef: AssertJRFormDef = (value) => assertInstanceType(JRFormDef, value);
-const formStateExtensions = extendExpect(expect, {
+export const formStateExtensions = extendExpect(expect, {
/**
* **PORTING NOTES**
*
diff --git a/packages/scenario/src/assertion/extensions/node-state.ts b/packages/scenario/src/assertion/extensions/node-state.ts
index 21d9c6e62..39231ae4d 100644
--- a/packages/scenario/src/assertion/extensions/node-state.ts
+++ b/packages/scenario/src/assertion/extensions/node-state.ts
@@ -6,7 +6,7 @@ import {
import { expect } from 'vitest';
import { assertEngineNode } from './shared-type-assertions.ts';
-const nodeStateExtensions = extendExpect(expect, {
+export const nodeStateExtensions = extendExpect(expect, {
toBeRelevant: new StaticConditionExpectExtension(assertEngineNode, {
currentState: { relevant: true },
}),
diff --git a/packages/scenario/src/assertion/extensions/tree-reference.ts b/packages/scenario/src/assertion/extensions/tree-reference.ts
index e94a35b8d..3c40b90f6 100644
--- a/packages/scenario/src/assertion/extensions/tree-reference.ts
+++ b/packages/scenario/src/assertion/extensions/tree-reference.ts
@@ -15,7 +15,7 @@ import { JRTreeReference } from '../../jr/xpath/JRTreeReference.ts';
const assertJRTreeReference = instanceAssertion(JRTreeReference);
-const treeReferenceExtensions = extendExpect(expect, {
+export const treeReferenceExtensions = extendExpect(expect, {
/**
* **PORTING NOTES**
*
diff --git a/packages/scenario/src/jr/Scenario.ts b/packages/scenario/src/jr/Scenario.ts
index d95d982df..abc65ca05 100644
--- a/packages/scenario/src/jr/Scenario.ts
+++ b/packages/scenario/src/jr/Scenario.ts
@@ -693,7 +693,7 @@ export class Scenario {
}
const [, positionPredicatedReference, positionExpression] =
- reference.match(/^(.*\/[^/[]+)\[(\d+)\]\/[^[]+$/) ?? [];
+ /^(.*\/[^/[]+)\[(\d+)\]\/[^[]+$/.exec(reference) ?? [];
if (positionPredicatedReference == null || positionExpression == null) {
return;
diff --git a/packages/ui-solid/src/components/XForm/XFormDetails.tsx b/packages/ui-solid/src/components/XForm/XFormDetails.tsx
index 0b4712fee..800a36e10 100644
--- a/packages/ui-solid/src/components/XForm/XFormDetails.tsx
+++ b/packages/ui-solid/src/components/XForm/XFormDetails.tsx
@@ -65,6 +65,7 @@ const serializeNode = (node: AnyNode, depth = 0): string => {
if (children == null) {
// Just read it to make it reactive...
+ // eslint-disable-next-line @typescript-eslint/no-unused-expressions -- read == subscribe
currentState.value;
const serializedLeafNode = `<${nodeName}>${escapeXMLText((node as FakeSerializationInterface).contextNode.textContent ?? '')}${nodeName}>`;
diff --git a/packages/ui-solid/src/components/XForm/XFormRelevanceGuard.tsx b/packages/ui-solid/src/components/XForm/XFormRelevanceGuard.tsx
index b060797d0..54cfe0f7d 100644
--- a/packages/ui-solid/src/components/XForm/XFormRelevanceGuard.tsx
+++ b/packages/ui-solid/src/components/XForm/XFormRelevanceGuard.tsx
@@ -1,5 +1,5 @@
import { Box, styled } from '@suid/material';
-import type { JSX } from 'solid-js';
+import type { Component, JSX } from 'solid-js';
import { Show } from 'solid-js';
interface XFormRelevanceGuardProps {
@@ -8,9 +8,7 @@ interface XFormRelevanceGuardProps {
readonly children: JSX.Element;
}
-const BaseXFormRelevanceGuardBox = (props: XFormRelevanceGuardProps) => {props.children};
-
-const XFormRelevanceGuardBox = styled(Box)(({
+const XFormRelevanceGuardBox = styled>(Box)(({
props,
theme,
}) => {
diff --git a/packages/web-forms/src/components/appearances/ColumnarAppearance.vue b/packages/web-forms/src/components/appearances/ColumnarAppearance.vue
index 9150e77a3..d2f3c8c87 100644
--- a/packages/web-forms/src/components/appearances/ColumnarAppearance.vue
+++ b/packages/web-forms/src/components/appearances/ColumnarAppearance.vue
@@ -5,7 +5,7 @@ import { computed } from 'vue';
const props = defineProps<{ appearances: SelectNodeAppearances}>();
const nColumnstyle = computed(() => {
- const numberOfColumns = [...props.appearances].find(a => a.match(/columns-\d+/))?.match(/\d+/)?.[0];
+ const numberOfColumns = [...props.appearances].find(a => /columns-\d+/.exec(a))?.match(/\d+/)?.[0];
return numberOfColumns ? `grid-template-columns: repeat(${numberOfColumns}, 1fr);` : '';
});
@@ -23,7 +23,7 @@ const nColumnstyle = computed(() => {
display: flex;
flex-wrap: wrap;
gap: 10px 20px;
-
+
}
.columns {
@@ -41,4 +41,4 @@ const nColumnstyle = computed(() => {
grid-template-columns: repeat(5, 1fr);
}
}
-
\ No newline at end of file
+
diff --git a/packages/xforms-engine/src/XFormDataType.ts b/packages/xforms-engine/src/XFormDataType.ts
index 19c0a5b86..ca463fa3b 100644
--- a/packages/xforms-engine/src/XFormDataType.ts
+++ b/packages/xforms-engine/src/XFormDataType.ts
@@ -10,9 +10,7 @@ export type UnsupportedDataType = typeof UNSUPPORTED_DATA_TYPE;
/**
* Like JavaRosa. Presumably for e.g. groups with explicit binds (`relevant` etc)?
*/
-const NULL_DATA_TYPE = 'NULL';
-
-export type NullDataType = typeof NULL_DATA_TYPE;
+export type NullDataType = 'NULL';
/**
* As in ODK XForms Spec.
diff --git a/packages/xforms-engine/src/instance/Root.ts b/packages/xforms-engine/src/instance/Root.ts
index 127bb0676..e92bc1091 100644
--- a/packages/xforms-engine/src/instance/Root.ts
+++ b/packages/xforms-engine/src/instance/Root.ts
@@ -221,6 +221,10 @@ export class Root
override subscribe(): void {
super.subscribe();
+ // TODO: typescript-eslint is right to object to this! We should _at least_
+ // make internal reactive reads obvious, i.e. function calls.
+ //
+ // eslint-disable-next-line @typescript-eslint/no-unused-expressions -- read == subscribe
this.engineState.activeLanguage;
}
}
diff --git a/packages/xforms-engine/src/instance/abstract/InstanceNode.ts b/packages/xforms-engine/src/instance/abstract/InstanceNode.ts
index a0aa3c595..d7f189e6f 100644
--- a/packages/xforms-engine/src/instance/abstract/InstanceNode.ts
+++ b/packages/xforms-engine/src/instance/abstract/InstanceNode.ts
@@ -246,9 +246,17 @@ export abstract class InstanceNode<
// subscriptions would be established by evaluation of the expressions
// themselves (as they traverse instance state and access values), rather
// than this safer/less focused approach.
+
+ // TODO: typescript-eslint is right to object to these! We should _at least_
+ // make internal reactive reads obvious, i.e. function calls.
+
+ // eslint-disable-next-line @typescript-eslint/no-unused-expressions
engineState.reference;
+ // eslint-disable-next-line @typescript-eslint/no-unused-expressions
engineState.relevant;
+ // eslint-disable-next-line @typescript-eslint/no-unused-expressions
engineState.children;
+ // eslint-disable-next-line @typescript-eslint/no-unused-expressions
engineState.value;
}
}
diff --git a/packages/xforms-engine/src/lib/reactivity/node-state/createSpecifiedState.ts b/packages/xforms-engine/src/lib/reactivity/node-state/createSpecifiedState.ts
index 7072ede74..d6d6aec14 100644
--- a/packages/xforms-engine/src/lib/reactivity/node-state/createSpecifiedState.ts
+++ b/packages/xforms-engine/src/lib/reactivity/node-state/createSpecifiedState.ts
@@ -80,7 +80,7 @@ export type ComputedPropertySpec = Accessor;
/**
* @see {@link StaticPropertySpec}
*/
-// eslint-disable-next-line @typescript-eslint/ban-types, @typescript-eslint/no-explicit-any
+// eslint-disable-next-line @typescript-eslint/no-unsafe-function-type, @typescript-eslint/no-explicit-any
type NonStaticValue = Function | Signal | SimpleAtomicState;
/**
diff --git a/packages/xforms-engine/test/helpers/reactive/internal.test.ts b/packages/xforms-engine/test/helpers/reactive/internal.test.ts
index c50facbe1..3a7dd81e4 100644
--- a/packages/xforms-engine/test/helpers/reactive/internal.test.ts
+++ b/packages/xforms-engine/test/helpers/reactive/internal.test.ts
@@ -32,6 +32,7 @@ describe('Internal minimal reactivity implementation (itself currently for use i
effect(() => {
effectReactions += 1;
+ // eslint-disable-next-line @typescript-eslint/no-unused-expressions -- read == subscribe
object.a;
});
@@ -57,6 +58,7 @@ describe('Internal minimal reactivity implementation (itself currently for use i
effect(() => {
effectReactions += 1;
+ // eslint-disable-next-line @typescript-eslint/no-unused-expressions -- read == subscribe
object.a;
});
@@ -89,12 +91,14 @@ describe('Internal minimal reactivity implementation (itself currently for use i
effect(() => {
effectReactions.a += 1;
+ // eslint-disable-next-line @typescript-eslint/no-unused-expressions -- read == subscribe
object.a;
});
effect(() => {
effectReactions.b += 1;
+ // eslint-disable-next-line @typescript-eslint/no-unused-expressions -- read == subscribe
object.b;
});
@@ -186,6 +190,7 @@ describe('Internal minimal reactivity implementation (itself currently for use i
effect(() => {
effectReactions += 1;
+ // eslint-disable-next-line @typescript-eslint/no-unused-expressions -- read == subscribe
object.b;
});
diff --git a/packages/xpath/src/functions/xforms/datetime.ts b/packages/xpath/src/functions/xforms/datetime.ts
index e58a25092..aa5e5b6cc 100644
--- a/packages/xpath/src/functions/xforms/datetime.ts
+++ b/packages/xpath/src/functions/xforms/datetime.ts
@@ -268,7 +268,7 @@ export const date = new FunctionImplementation(
}
if (!DATE_OR_DATE_TIME_PATTERN.test(string)) {
- const unpaddedMatches = string.match(UNPADDED_MONTH_DAY_PATTERN);
+ const unpaddedMatches = UNPADDED_MONTH_DAY_PATTERN.exec(string);
if (unpaddedMatches == null) {
return new DateTimeLikeEvaluation(context, null);
diff --git a/packages/xpath/test/helpers.ts b/packages/xpath/test/helpers.ts
index 82f4f6296..133b09703 100644
--- a/packages/xpath/test/helpers.ts
+++ b/packages/xpath/test/helpers.ts
@@ -266,10 +266,6 @@ export class TestContext {
expect(stringValue, message).toMatch(pattern);
}
-
- assertThrows(): never {
- throw '';
- }
}
export const createTestContext = (xml?: string, options: TestContextOptions = {}): TestContext => {
diff --git a/packages/xpath/test/lib/iterators/Reiterable.test.ts b/packages/xpath/test/lib/iterators/Reiterable.test.ts
index 8cd621b60..a72e13c28 100644
--- a/packages/xpath/test/lib/iterators/Reiterable.test.ts
+++ b/packages/xpath/test/lib/iterators/Reiterable.test.ts
@@ -1,13 +1,8 @@
-import type { CollectionValues } from '@getodk/common/types/collections/CollectionValues.ts';
import { describe, expect, it } from 'vitest';
import { Reiterable } from '../../../src/lib/iterators/Reiterable.ts';
describe('Reiterable', () => {
- const sourceItems = ['a', 'b', 'c'] as const;
-
- type SourceItems = typeof sourceItems;
-
- type SourceItem = CollectionValues;
+ type SourceItem = 'a' | 'b' | 'c';
type Source = Iterable | Iterator | readonly SourceItem[];
@@ -144,19 +139,19 @@ describe('Reiterable', () => {
const cases = [
{
sourceType: 'array',
- source(): readonly SourceItem[] {
+ source: (): readonly SourceItem[] => {
return getSourceArray();
},
},
{
sourceType: 'iterable',
- source(): Iterable {
+ source: (): Iterable => {
return getSourceIterable();
},
},
{
sourceType: 'iterator',
- source(): Iterator {
+ source: (): Iterator => {
return getSourceIterator();
},
},
@@ -255,7 +250,7 @@ describe('Reiterable', () => {
interface BeforeCase {
readonly beforeDescription: string;
- before?(reiterable: Reiterable): void;
+ before?: (reiterable: Reiterable) => void;
}
const beforeCases: readonly BeforeCase[] = [
diff --git a/packages/xpath/test/native/number.test.ts b/packages/xpath/test/native/number.test.ts
index a4c55d189..f57f35293 100644
--- a/packages/xpath/test/native/number.test.ts
+++ b/packages/xpath/test/native/number.test.ts
@@ -15,8 +15,8 @@ describe('native number functions', () => {
testContext.assertNumberValue('number(1)', 1);
testContext.assertNumberValue('number(0.199999)', 0.199999);
testContext.assertNumberValue('number(-0.199999)', -0.199999);
- testContext.assertNumberValue('number(- 0.199999)', -0.199999),
- testContext.assertNumberValue('number(0.0)', 0);
+ testContext.assertNumberValue('number(- 0.199999)', -0.199999);
+ testContext.assertNumberValue('number(0.0)', 0);
testContext.assertNumberValue('number(.0)', 0);
testContext.assertNumberValue('number(0.)', 0);
diff --git a/tsconfig.tools.json b/tsconfig.tools.json
index fe502e1a6..3f10a062a 100644
--- a/tsconfig.tools.json
+++ b/tsconfig.tools.json
@@ -1,6 +1,5 @@
{
"extends": "./tsconfig.json",
- "files": ["./vendor-types/@eslint/eslintrc.d.ts"],
// TODO: probably good if tools includes just go in the root config, otherwise
// stuff starts getting conflicty and redundant fast
"include": [
diff --git a/tsconfig.vendor-types.json b/tsconfig.vendor-types.json
index e5f4ece2b..b05765d83 100644
--- a/tsconfig.vendor-types.json
+++ b/tsconfig.vendor-types.json
@@ -1,5 +1,4 @@
{
"extends": "./tsconfig.json",
- "files": ["./vendor-types/@eslint/eslintrc.d.ts"],
"include": ["vendor-types/**/*.d.ts"]
}
diff --git a/vendor-types/@eslint/eslintrc.d.ts b/vendor-types/@eslint/eslintrc.d.ts
deleted file mode 100644
index 474c3ca9e..000000000
--- a/vendor-types/@eslint/eslintrc.d.ts
+++ /dev/null
@@ -1,16 +0,0 @@
-declare module '@eslint/eslintrc' {
- import type { Linter } from 'eslint';
-
- interface FlatCompatOptions {
- readonly baseDirectory: string;
- readonly resolvePluginsRelativeTo?: string;
- readonly recommendedConfig?: Linter.BaseConfig;
- readonly allConfig?: Linter.BaseConfig;
- }
-
- export class FlatCompat {
- constructor(options: FlatCompatOptions);
-
- config(eslintrcConfig: Linter.Config): Linter.FlatConfig[];
- }
-}