From c2223d68f610287ee79c8adff48a6dd378ec03d7 Mon Sep 17 00:00:00 2001 From: Jacob Williamson Date: Tue, 3 Dec 2024 13:32:13 -0800 Subject: [PATCH] Separate components for base, jest, playwright, react, and typescript into their own packages --- packages/eslint-config-widen-base/README.md | 28 ++ .../eslint-config-widen-base/package.json | 29 ++ packages/eslint-config-widen-base/src/base.ts | 96 +++++ .../src/sharedGlobals.ts | 14 + .../eslint-config-widen-base/src/types.d.ts | 3 + .../eslint-config-widen-base/tsconfig.json | 13 + packages/eslint-config-widen-jest/README.md | 30 ++ .../eslint-config-widen-jest/package.json | 27 ++ packages/eslint-config-widen-jest/src/jest.ts | 22 ++ .../eslint-config-widen-jest/src/types.d.ts | 1 + .../eslint-config-widen-jest/tsconfig.json | 13 + .../eslint-config-widen-playwright/README.md | 23 ++ .../package.json | 27 ++ .../src/playwright.ts | 43 +++ .../src/types.d.ts | 1 + .../tsconfig.json | 13 + packages/eslint-config-widen-react/README.md | 30 ++ .../eslint-config-widen-react/package.json | 29 ++ .../eslint-config-widen-react/src/react.ts | 115 ++++++ .../src/sharedGlobals.ts | 14 + .../eslint-config-widen-react/src/types.d.ts | 4 + .../eslint-config-widen-react/tsconfig.json | 13 + .../eslint-config-widen-typescript/README.md | 30 ++ .../package.json | 28 ++ .../src/types.d.ts | 1 + .../src/typescript.ts | 37 ++ .../tsconfig.json | 13 + tsconfig.json | 7 +- yarn.lock | 356 +++++++++++++++++- 29 files changed, 1057 insertions(+), 3 deletions(-) create mode 100644 packages/eslint-config-widen-base/README.md create mode 100644 packages/eslint-config-widen-base/package.json create mode 100644 packages/eslint-config-widen-base/src/base.ts create mode 100644 packages/eslint-config-widen-base/src/sharedGlobals.ts create mode 100644 packages/eslint-config-widen-base/src/types.d.ts create mode 100644 packages/eslint-config-widen-base/tsconfig.json create mode 100644 packages/eslint-config-widen-jest/README.md create mode 100644 packages/eslint-config-widen-jest/package.json create mode 100644 packages/eslint-config-widen-jest/src/jest.ts create mode 100644 packages/eslint-config-widen-jest/src/types.d.ts create mode 100644 packages/eslint-config-widen-jest/tsconfig.json create mode 100644 packages/eslint-config-widen-playwright/README.md create mode 100644 packages/eslint-config-widen-playwright/package.json create mode 100644 packages/eslint-config-widen-playwright/src/playwright.ts create mode 100644 packages/eslint-config-widen-playwright/src/types.d.ts create mode 100644 packages/eslint-config-widen-playwright/tsconfig.json create mode 100644 packages/eslint-config-widen-react/README.md create mode 100644 packages/eslint-config-widen-react/package.json create mode 100644 packages/eslint-config-widen-react/src/react.ts create mode 100644 packages/eslint-config-widen-react/src/sharedGlobals.ts create mode 100644 packages/eslint-config-widen-react/src/types.d.ts create mode 100644 packages/eslint-config-widen-react/tsconfig.json create mode 100644 packages/eslint-config-widen-typescript/README.md create mode 100644 packages/eslint-config-widen-typescript/package.json create mode 100644 packages/eslint-config-widen-typescript/src/types.d.ts create mode 100644 packages/eslint-config-widen-typescript/src/typescript.ts create mode 100644 packages/eslint-config-widen-typescript/tsconfig.json diff --git a/packages/eslint-config-widen-base/README.md b/packages/eslint-config-widen-base/README.md new file mode 100644 index 0000000..7aa2e17 --- /dev/null +++ b/packages/eslint-config-widen-base/README.md @@ -0,0 +1,28 @@ +# eslint-config-widen-base + +Widen's shared ESLint config base module + +## Installation +```bash +yarn add -D eslint eslint-plugin-widen eslint-config-widen-base eslint-plugin-sort @babel/{core,eslint-parser} +``` + +## Usage + +In your `eslint.config.mjs` file, add the following entries to your extends +list. + +```js +import base from 'eslint-config-widen-base' + +export default [ + ...base, + ...[ + // you can specify what to ignore by using the `ignores` key before any other rule + // this will filter out things we dont want this to run on + { ignores: ['*.test.*'] }, + // you can also override rules by specifying the rule and the new value + { files: ['*.spec.js'], rules: { 'no-unused-vars': 'off' } }, + ], +] +``` \ No newline at end of file diff --git a/packages/eslint-config-widen-base/package.json b/packages/eslint-config-widen-base/package.json new file mode 100644 index 0000000..9dc51f5 --- /dev/null +++ b/packages/eslint-config-widen-base/package.json @@ -0,0 +1,29 @@ +{ + "author": "Widen", + "dependencies": { + "eslint-config-prettier": "^9.1.0" + }, + "description": "Widen's shared ESLint base config.", + "exports": { + ".": "./lib/base.js" + }, + "files": [ + "lib" + ], + "type": "module", + "homepage": "https://github.com/Widen/eslint-config/tree/master/packages/eslint-config-widen-base#readme", + "license": "ISC", + "name": "eslint-config-widen-base", + "peerDependencies": { + "@babel/eslint-parser": "^7.22.15", + "eslint": ">= 9", + "eslint-plugin-sort": ">= 3", + "eslint-plugin-widen": ">=3.0.0" + }, + "repository": { + "directory": "packages/eslint-config-widen-base", + "type": "git", + "url": "https://github.com/Widen/eslint-config" + }, + "version": "1.0.0" +} diff --git a/packages/eslint-config-widen-base/src/base.ts b/packages/eslint-config-widen-base/src/base.ts new file mode 100644 index 0000000..e544d9e --- /dev/null +++ b/packages/eslint-config-widen-base/src/base.ts @@ -0,0 +1,96 @@ +import babelParser from '@babel/eslint-parser' +import js from '@eslint/js' +import prettier from 'eslint-plugin-prettier' +import sort from 'eslint-plugin-sort' +import widen from 'eslint-plugin-widen' +import sharedGlobals from './sharedGlobals.js' + +export default [ + { + languageOptions: { + globals: sharedGlobals, + parser: babelParser, + parserOptions: { + requireConfigFile: false, + }, + }, + plugins: { + prettier, + sort, + widen, + }, + rules: { + 'default-param-last': 'error', + 'dot-notation': 'error', + eqeqeq: [ + 'error', + 'always', + { + null: 'ignore', + }, + ], + 'no-console': ['error', { allow: ['error'] }], + 'no-dupe-args': 'error', + 'no-duplicate-imports': 'error', + 'no-else-return': 'error', + 'no-empty': ['error', { allowEmptyCatch: true }], + 'no-extra-bind': 'error', + 'no-param-reassign': 'error', + 'no-return-await': 'error', + 'no-template-curly-in-string': 'error', + 'no-unneeded-ternary': 'error', + 'no-unused-expressions': 'off', + 'no-unused-vars': [ + 'error', + { + ignoreRestSiblings: true, + varsIgnorePattern: '^_', + }, + ], + 'no-useless-computed-key': 'error', + 'no-var': 'error', + 'object-shorthand': 'error', + 'prefer-const': [ + 'error', + { + destructuring: 'all', + }, + ], + 'require-await': 'error', + 'sort/exports': [ + 'warn', + { + groups: [ + { order: 6, type: 'default' }, + { order: 5, type: 'sourceless' }, + { order: 2, regex: '^@widen\\/' }, + { order: 4, regex: '^\\.+' }, + { order: 1, type: 'dependency' }, + { order: 3, type: 'other' }, + ], + }, + ], + 'sort/imports': [ + 'warn', + { + groups: [ + { order: 1, type: 'side-effect' }, + { order: 3, regex: '^@widen\\/' }, + { order: 5, regex: '^\\.+' }, + { order: 2, type: 'dependency' }, + { order: 4, type: 'other' }, + ], + }, + ], + }, + }, + js.configs.recommended, + { + plugins: { + prettier, + }, + rules: { + ...prettier.configs.recommended.rules, + }, + }, +] diff --git a/packages/eslint-config-widen-base/src/sharedGlobals.ts b/packages/eslint-config-widen-base/src/sharedGlobals.ts new file mode 100644 index 0000000..41f3480 --- /dev/null +++ b/packages/eslint-config-widen-base/src/sharedGlobals.ts @@ -0,0 +1,14 @@ +import globals from 'globals' + +// delete an invalid global that causes error because of the trailing space +const browser = globals.browser +delete browser['AudioWorkletGlobalScope '] + +const sharedGlobals = { + ...browser, + ...globals.es6, + ...globals.node, + ...globals.jest, +} + +export default sharedGlobals diff --git a/packages/eslint-config-widen-base/src/types.d.ts b/packages/eslint-config-widen-base/src/types.d.ts new file mode 100644 index 0000000..67a6d29 --- /dev/null +++ b/packages/eslint-config-widen-base/src/types.d.ts @@ -0,0 +1,3 @@ +declare module 'globals' +declare module 'eslint-plugin-widen' +declare module 'eslint-plugin-prettier' diff --git a/packages/eslint-config-widen-base/tsconfig.json b/packages/eslint-config-widen-base/tsconfig.json new file mode 100644 index 0000000..aa05581 --- /dev/null +++ b/packages/eslint-config-widen-base/tsconfig.json @@ -0,0 +1,13 @@ +{ + "extends": "../../tsconfig.base.json", + "compilerOptions": { + "outDir": "lib", + "rootDir": "src", + "module": "esnext", + "esModuleInterop": true, + "target": "es2016" + }, + "paths": { + "@/*": ["./src/*"] + } +} \ No newline at end of file diff --git a/packages/eslint-config-widen-jest/README.md b/packages/eslint-config-widen-jest/README.md new file mode 100644 index 0000000..43c2815 --- /dev/null +++ b/packages/eslint-config-widen-jest/README.md @@ -0,0 +1,30 @@ +# eslint-config-widen-jest + +Widen's shared ESLint config for Jest. + +## Installation + +```bash +yarn add -D eslint eslint-config-widen-jest eslint-plugin-jest +``` + +## Usage + +In your `eslint.config.mjs` file, add the following four entries to your extends +list. If you don't need a specific configuration, simply remove it from the +list. + +```js +import jest from 'eslint-config-widen-jest' + +export default [ + ...[ + // you can specify what to ignore by using the `ignores` key before any other rule + // this will filter out things we dont want this to run on + { ignores: ['*.test.*'] }, + ...jest, + // you can also override rules by specifying the rule and the new value + { files: ['*.spec.js'], rules: { 'jest/expect-expect': 'off' } }, + ], +] +``` diff --git a/packages/eslint-config-widen-jest/package.json b/packages/eslint-config-widen-jest/package.json new file mode 100644 index 0000000..0550d5a --- /dev/null +++ b/packages/eslint-config-widen-jest/package.json @@ -0,0 +1,27 @@ +{ + "author": "Widen", + "dependencies": { + "eslint-config-prettier": "^9.1.0" + }, + "description": "Widen's shared ESLint config for Jest.", + "exports": { + ".": "./lib/jest.js" + }, + "files": [ + "lib" + ], + "type": "module", + "homepage": "https://github.com/Widen/eslint-config/tree/master/packages/eslint-config-widen-jest#readme", + "license": "ISC", + "name": "eslint-config-widen-jest", + "peerDependencies": { + "eslint": ">= 9", + "eslint-plugin-jest": ">= 28" + }, + "repository": { + "directory": "packages/eslint-config-widen-jest", + "type": "git", + "url": "https://github.com/Widen/eslint-config" + }, + "version": "1.0.0" +} diff --git a/packages/eslint-config-widen-jest/src/jest.ts b/packages/eslint-config-widen-jest/src/jest.ts new file mode 100644 index 0000000..97b38fb --- /dev/null +++ b/packages/eslint-config-widen-jest/src/jest.ts @@ -0,0 +1,22 @@ +import jest from 'eslint-plugin-jest' + +export default [ + { + files: [ + '*.spec.js', + '*.test.js', + '*.spec.jsx', + '*.test.jsx', + '*.spec.ts', + '*.test.ts', + '*.spec.tsx', + '*.test.tsx', + ], + plugins: { + jest, + }, + rules: { + ...jest.configs.recommended.rules, + }, + }, +] diff --git a/packages/eslint-config-widen-jest/src/types.d.ts b/packages/eslint-config-widen-jest/src/types.d.ts new file mode 100644 index 0000000..f59f520 --- /dev/null +++ b/packages/eslint-config-widen-jest/src/types.d.ts @@ -0,0 +1 @@ +declare module 'eslint-plugin-jest' \ No newline at end of file diff --git a/packages/eslint-config-widen-jest/tsconfig.json b/packages/eslint-config-widen-jest/tsconfig.json new file mode 100644 index 0000000..8206c63 --- /dev/null +++ b/packages/eslint-config-widen-jest/tsconfig.json @@ -0,0 +1,13 @@ +{ + "extends": "../../tsconfig.base.json", + "compilerOptions": { + "outDir": "lib", + "rootDir": "src", + "module": "esnext", + "esModuleInterop": true, + "target": "es2016" + }, + "paths": { + "@/*": ["./src/*"] + } +} diff --git a/packages/eslint-config-widen-playwright/README.md b/packages/eslint-config-widen-playwright/README.md new file mode 100644 index 0000000..8aa9456 --- /dev/null +++ b/packages/eslint-config-widen-playwright/README.md @@ -0,0 +1,23 @@ +# eslint-config-widen-playwright + +Widen's shared ESLint config for Playwright. + +## Installation + +```bash +yarn add -D eslint eslint-config-widen-playwright eslint-plugin-playwright +``` + +## Usage + +In your `eslint.config.mjs` file, add the following four entries to your extends +list. If you don't need a specific configuration, simply remove it from the +list. + +```js +import playwright from 'eslint-config-widen-playwright' + +export default [ + ...[{ files: ['e2e/**'] }, ...playwright], +] +``` diff --git a/packages/eslint-config-widen-playwright/package.json b/packages/eslint-config-widen-playwright/package.json new file mode 100644 index 0000000..1dcc3d4 --- /dev/null +++ b/packages/eslint-config-widen-playwright/package.json @@ -0,0 +1,27 @@ +{ + "author": "Widen", + "dependencies": { + "eslint-config-prettier": "^9.1.0" + }, + "description": "Widen's shared ESLint config for Playwright.", + "exports": { + ".": "./lib/playwright.js" + }, + "files": [ + "lib" + ], + "type": "module", + "homepage": "https://github.com/Widen/eslint-config/tree/master/packages/eslint-config-widen-playwright#readme", + "license": "ISC", + "name": "eslint-config-widen-playwright", + "peerDependencies": { + "eslint": ">= 9", + "eslint-plugin-playwright": ">= 1" + }, + "repository": { + "directory": "packages/eslint-config-widen-playwright", + "type": "git", + "url": "https://github.com/Widen/eslint-config" + }, + "version": "1.0.0" +} diff --git a/packages/eslint-config-widen-playwright/src/playwright.ts b/packages/eslint-config-widen-playwright/src/playwright.ts new file mode 100644 index 0000000..610c2ac --- /dev/null +++ b/packages/eslint-config-widen-playwright/src/playwright.ts @@ -0,0 +1,43 @@ +import playwright from 'eslint-plugin-playwright' + +delete playwright.configs['playwright-test'].env + +export default [ + { + plugins: { + playwright, + }, + rules: { + 'playwright/missing-playwright-await': [ + 'error', + { customMatchers: ['toBeAccessible', 'toPassAxe'] }, + ], + 'playwright/no-restricted-matchers': [ + 'warn', + { + toEqualValue: 'Use `toHaveValue` instead.', + toHaveSelector: 'Use `toBeVisible` instead.', + toHaveSelectorCount: 'Use `toHaveCount` instead.', + toMatchAttribute: 'Use `toHaveAttribute` instead.', + toMatchText: 'Use `toHaveText` instead.', + toMatchURL: 'Use `toHaveURL` instead.', + toMatchValue: 'Use `toHaveValue` instead.', + }, + ], + 'playwright/prefer-lowercase-title': [ + 'warn', + { ignoreTopLevelDescribe: true }, + ], + 'playwright/prefer-strict-equal': 'warn', + 'playwright/prefer-to-be': 'warn', + 'playwright/prefer-to-have-length': 'warn', + 'playwright/require-top-level-describe': 'warn', + }, + }, + { + ...playwright.configs['playwright-test'], + plugins: { + playwright, + }, + }, +] diff --git a/packages/eslint-config-widen-playwright/src/types.d.ts b/packages/eslint-config-widen-playwright/src/types.d.ts new file mode 100644 index 0000000..14c9ff4 --- /dev/null +++ b/packages/eslint-config-widen-playwright/src/types.d.ts @@ -0,0 +1 @@ +declare module 'eslint-plugin-playwright' diff --git a/packages/eslint-config-widen-playwright/tsconfig.json b/packages/eslint-config-widen-playwright/tsconfig.json new file mode 100644 index 0000000..8206c63 --- /dev/null +++ b/packages/eslint-config-widen-playwright/tsconfig.json @@ -0,0 +1,13 @@ +{ + "extends": "../../tsconfig.base.json", + "compilerOptions": { + "outDir": "lib", + "rootDir": "src", + "module": "esnext", + "esModuleInterop": true, + "target": "es2016" + }, + "paths": { + "@/*": ["./src/*"] + } +} diff --git a/packages/eslint-config-widen-react/README.md b/packages/eslint-config-widen-react/README.md new file mode 100644 index 0000000..c063b15 --- /dev/null +++ b/packages/eslint-config-widen-react/README.md @@ -0,0 +1,30 @@ +# eslint-config-widen-react + +Widen's shared ESLint config. + +## Installation + +```bash +yarn add -D eslint eslint-config-widen-react eslint-plugin-{react,react-hooks,jsx-a11y} +``` + +## Usage + +In your `eslint.config.mjs` file, add the following four entries to your extends +list. If you don't need a specific configuration, simply remove it from the +list. + +```js +import react from 'eslint-config-widen-react' + +export default [ + ...react, + ...[ + // you can specify what to ignore by using the `ignores` key before any other rule + // this will filter out things we dont want this to run on + { ignores: ['*.test.*'] }, + // you can also override rules by specifying the rule and the new value + { files: ['*.spec.js'], rules: { 'no-unused-vars': 'off' } }, + ], +] +``` diff --git a/packages/eslint-config-widen-react/package.json b/packages/eslint-config-widen-react/package.json new file mode 100644 index 0000000..23b5116 --- /dev/null +++ b/packages/eslint-config-widen-react/package.json @@ -0,0 +1,29 @@ +{ + "author": "Widen", + "dependencies": { + "eslint-config-prettier": "^9.1.0" + }, + "description": "Widen's shared ESLint config for React.", + "exports": { + ".": "./lib/react.js" + }, + "files": [ + "lib" + ], + "type": "module", + "homepage": "https://github.com/Widen/eslint-config/tree/master/packages/eslint-config-widen-react#readme", + "license": "ISC", + "name": "eslint-config-widen-react", + "peerDependencies": { + "eslint": ">= 9", + "eslint-plugin-jsx-a11y": ">= 6", + "eslint-plugin-react": ">= 7", + "eslint-plugin-react-hooks": ">= 4" + }, + "repository": { + "directory": "packages/eslint-config-widen-react", + "type": "git", + "url": "https://github.com/Widen/eslint-config" + }, + "version": "1.0.0" +} diff --git a/packages/eslint-config-widen-react/src/react.ts b/packages/eslint-config-widen-react/src/react.ts new file mode 100644 index 0000000..eb3a267 --- /dev/null +++ b/packages/eslint-config-widen-react/src/react.ts @@ -0,0 +1,115 @@ +import jsxA11y from 'eslint-plugin-jsx-a11y' +import react from 'eslint-plugin-react' +import reactHooks from 'eslint-plugin-react-hooks' +import sharedGlobals from './sharedGlobals.js' + +const languageOptions = { + globals: sharedGlobals, + parserOptions: { + ecmaFeatures: { + jsx: true, + }, + }, +} + +const reactVersion = { + settings: { + react: { + version: 'detect', + }, + }, +} + +export default [ + { + files: ['**/*.{js,jsx,mjs,cjs,ts,tsx}'], + languageOptions, + plugins: { + react, + }, + rules: { + ...react.configs.recommended.rules, + }, + ...reactVersion, + }, + { + files: ['**/*.{js,jsx,mjs,cjs,ts,tsx}'], + languageOptions, + plugins: { + 'react-hooks': reactHooks, + }, + rules: { + ...reactHooks.configs.recommended.rules, + }, + }, + { + files: ['**/*.{js,jsx,mjs,cjs,ts,tsx}'], + languageOptions, + plugins: { + 'jsx-a11y': jsxA11y, + }, + rules: { + ...jsxA11y.configs.recommended.rules, + }, + }, + { + files: ['*.tsx', '*.{spec,test}.{js,jsx}'], + languageOptions, + rules: { + 'react/prop-types': 'off', + }, + }, + { + files: ['*.{spec,test}.{tsx,js,jsx}'], + languageOptions, + rules: { + 'react/button-has-type': 'off', + 'react/display-name': 'off', + }, + }, + { + files: ['*.tsx', '*.{spec,test}.{js,jsx}'], + languageOptions, + rules: { + 'jsx-a11y/click-events-have-key-events': 'warn', + 'jsx-a11y/label-has-associated-control': [ + 'error', + { + controlComponents: ['TextInput'], + }, + ], + 'jsx-a11y/no-autofocus': [ + 'warn', + { + ignoreNonDOM: true, + }, + ], + 'react/button-has-type': 'warn', + // https://reactjs.org/docs/jsx-in-depth.html#props-default-to-true + 'react/jsx-boolean-value': ['warn', 'always'], + 'react/jsx-curly-brace-presence': ['warn', 'never'], + 'react/jsx-first-prop-new-line': ['error', 'multiline'], + 'react/jsx-no-duplicate-props': 'error', + 'react/jsx-no-useless-fragment': 'error', + 'react/jsx-sort-props': [ + 'error', + { + ignoreCase: true, + reservedFirst: true, + }, + ], + 'react/no-find-dom-node': 'warn', + 'react/no-unescaped-entities': 'off', + 'react/no-unknown-property': ['error', { ignore: ['css'] }], + 'react/self-closing-comp': 'warn', + 'react/sort-prop-types': [ + 'error', + { + ignoreCase: true, + }, + ], + 'widen/jsx-fragments': 'error', + 'widen/jsx-import': 'error', + }, + }, +] diff --git a/packages/eslint-config-widen-react/src/sharedGlobals.ts b/packages/eslint-config-widen-react/src/sharedGlobals.ts new file mode 100644 index 0000000..41f3480 --- /dev/null +++ b/packages/eslint-config-widen-react/src/sharedGlobals.ts @@ -0,0 +1,14 @@ +import globals from 'globals' + +// delete an invalid global that causes error because of the trailing space +const browser = globals.browser +delete browser['AudioWorkletGlobalScope '] + +const sharedGlobals = { + ...browser, + ...globals.es6, + ...globals.node, + ...globals.jest, +} + +export default sharedGlobals diff --git a/packages/eslint-config-widen-react/src/types.d.ts b/packages/eslint-config-widen-react/src/types.d.ts new file mode 100644 index 0000000..8a39c3f --- /dev/null +++ b/packages/eslint-config-widen-react/src/types.d.ts @@ -0,0 +1,4 @@ +declare module 'eslint-plugin-jsx-a11y' +declare module 'eslint-plugin-react' +declare module 'eslint-plugin-react-hooks' +declare module 'globals' diff --git a/packages/eslint-config-widen-react/tsconfig.json b/packages/eslint-config-widen-react/tsconfig.json new file mode 100644 index 0000000..8206c63 --- /dev/null +++ b/packages/eslint-config-widen-react/tsconfig.json @@ -0,0 +1,13 @@ +{ + "extends": "../../tsconfig.base.json", + "compilerOptions": { + "outDir": "lib", + "rootDir": "src", + "module": "esnext", + "esModuleInterop": true, + "target": "es2016" + }, + "paths": { + "@/*": ["./src/*"] + } +} diff --git a/packages/eslint-config-widen-typescript/README.md b/packages/eslint-config-widen-typescript/README.md new file mode 100644 index 0000000..399076e --- /dev/null +++ b/packages/eslint-config-widen-typescript/README.md @@ -0,0 +1,30 @@ +# eslint-config-widen + +Widen's shared ESLint config for Typescript. + +## Installation + +```bash +yarn add -D eslint eslint-config-widen-typescript eslint-plugin-sort @typescript-eslint/{eslint-plugin,parser} +``` + +## Usage + +In your `eslint.config.mjs` file, add the following four entries to your extends +list. If you don't need a specific configuration, simply remove it from the +list. + +```js +import typescript from 'eslint-config-widen-typescript' + +export default [ + ...typescript, + ...[ + // you can specify what to ignore by using the `ignores` key before any other rule + // this will filter out things we dont want this to run on + { ignores: ['*.test.*'] }, + // you can also override rules by specifying the rule and the new value + { files: ['*.spec.js'], rules: { 'no-unused-vars': 'off' } }, + ], +] +``` diff --git a/packages/eslint-config-widen-typescript/package.json b/packages/eslint-config-widen-typescript/package.json new file mode 100644 index 0000000..c4eb05f --- /dev/null +++ b/packages/eslint-config-widen-typescript/package.json @@ -0,0 +1,28 @@ +{ + "author": "Widen", + "dependencies": { + "eslint-config-prettier": "^9.1.0" + }, + "description": "Widen's shared ESLint config for Typescript.", + "exports": { + ".": "./lib/typescript.js" + }, + "files": [ + "lib" + ], + "type": "module", + "homepage": "https://github.com/Widen/eslint-config/tree/master/packages/eslint-config-widen-typescript#readme", + "license": "ISC", + "name": "eslint-config-widen-typescript", + "peerDependencies": { + "eslint": ">= 9", + "eslint-plugin-sort": ">= 3", + "typescript-eslint": ">= 7.16.0" + }, + "repository": { + "directory": "packages/eslint-config-widen-typescript", + "type": "git", + "url": "https://github.com/Widen/eslint-config" + }, + "version": "1.0.0" +} diff --git a/packages/eslint-config-widen-typescript/src/types.d.ts b/packages/eslint-config-widen-typescript/src/types.d.ts new file mode 100644 index 0000000..3d7f529 --- /dev/null +++ b/packages/eslint-config-widen-typescript/src/types.d.ts @@ -0,0 +1 @@ +declare module 'eslint-plugin-sort' diff --git a/packages/eslint-config-widen-typescript/src/typescript.ts b/packages/eslint-config-widen-typescript/src/typescript.ts new file mode 100644 index 0000000..1f3d2f8 --- /dev/null +++ b/packages/eslint-config-widen-typescript/src/typescript.ts @@ -0,0 +1,37 @@ +import sort from 'eslint-plugin-sort' +import { configs, parser, plugin } from 'typescript-eslint' + +export default [ + ...configs.recommended, + { + languageOptions: { + parser: parser, + }, + plugins: { + '@typescript-eslint': plugin, + sort, + }, + rules: { + '@typescript-eslint/camelcase': 'off', + '@typescript-eslint/explicit-function-return-type': 'off', + '@typescript-eslint/explicit-member-accessibility': 'off', + '@typescript-eslint/explicit-module-boundary-types': 'off', + '@typescript-eslint/no-empty-function': 'off', + '@typescript-eslint/no-empty-interface': 'off', + '@typescript-eslint/no-explicit-any': 'off', + '@typescript-eslint/no-extra-semi': 'off', + '@typescript-eslint/no-non-null-assertion': 'off', + '@typescript-eslint/no-object-literal-type-assertion': 'off', + '@typescript-eslint/no-unused-vars': [ + 'error', + { + ignoreRestSiblings: true, + varsIgnorePattern: '^_', + }, + ], + '@typescript-eslint/no-var-requires': 'off', + '@typescript-eslint/prefer-interface': 'off', + 'sort/type-properties': 'warn', + }, + }, +] diff --git a/packages/eslint-config-widen-typescript/tsconfig.json b/packages/eslint-config-widen-typescript/tsconfig.json new file mode 100644 index 0000000..8206c63 --- /dev/null +++ b/packages/eslint-config-widen-typescript/tsconfig.json @@ -0,0 +1,13 @@ +{ + "extends": "../../tsconfig.base.json", + "compilerOptions": { + "outDir": "lib", + "rootDir": "src", + "module": "esnext", + "esModuleInterop": true, + "target": "es2016" + }, + "paths": { + "@/*": ["./src/*"] + } +} diff --git a/tsconfig.json b/tsconfig.json index 53a897a..a061922 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -2,6 +2,11 @@ "files": [], "references": [ { "path": "packages/eslint-config-widen" }, - { "path": "packages/eslint-plugin-widen" } + { "path": "packages/eslint-config-widen-base" }, + { "path": "packages/eslint-config-widen-jest" }, + { "path": "packages/eslint-config-widen-playwright" }, + { "path": "packages/eslint-config-widen-react" }, + { "path": "packages/eslint-config-widen-typescript" }, + { "path": "packages/eslint-plugin-widen" }, ] } diff --git a/yarn.lock b/yarn.lock index 0656c1f..a35b513 100644 --- a/yarn.lock +++ b/yarn.lock @@ -62,6 +62,20 @@ __metadata: languageName: node linkType: hard +"@babel/eslint-parser@npm:^7.22.15": + version: 7.25.9 + resolution: "@babel/eslint-parser@npm:7.25.9" + dependencies: + "@nicolo-ribaudo/eslint-scope-5-internals": 5.1.1-v1 + eslint-visitor-keys: ^2.1.0 + semver: ^6.3.1 + peerDependencies: + "@babel/core": ^7.11.0 + eslint: ^7.5.0 || ^8.0.0 || ^9.0.0 + checksum: dd2afa122b62a5b07c1e71d1c23b2cd4d655d96609eb2ba1b1ae3ec6f415f4365b77d6669ff859aa7b75952fb63a1d29c5db6e5811fc4012841491cb2dee36e4 + languageName: node + linkType: hard + "@babel/eslint-parser@npm:^7.24.8": version: 7.24.8 resolution: "@babel/eslint-parser@npm:7.24.8" @@ -1695,6 +1709,13 @@ __metadata: languageName: node linkType: hard +"@eslint-community/regexpp@npm:^4.12.1": + version: 4.12.1 + resolution: "@eslint-community/regexpp@npm:4.12.1" + checksum: 0d628680e204bc316d545b4993d3658427ca404ae646ce541fcc65306b8c712c340e5e573e30fb9f85f4855c0c5f6dca9868931f2fcced06417fbe1a0c6cd2d6 + languageName: node + linkType: hard + "@eslint/config-array@npm:^0.17.0": version: 0.17.0 resolution: "@eslint/config-array@npm:0.17.0" @@ -1706,6 +1727,24 @@ __metadata: languageName: node linkType: hard +"@eslint/config-array@npm:^0.19.0": + version: 0.19.0 + resolution: "@eslint/config-array@npm:0.19.0" + dependencies: + "@eslint/object-schema": ^2.1.4 + debug: ^4.3.1 + minimatch: ^3.1.2 + checksum: ceeddd3733316cbc7f1e61fc2906fedeaefdf1b3cf363726714dea0e9dece378a2b233cb6429d7d87534707a1dd2e5efb0197749553834ee30aee817820a71aa + languageName: node + linkType: hard + +"@eslint/core@npm:^0.9.0": + version: 0.9.0 + resolution: "@eslint/core@npm:0.9.0" + checksum: ea8ded3eba82d9451eca7e989c4ebf1dca95bc705e70cd2f3e55cc576e851183778344632de410d8cd9f85e862fd88fb8fda510aad00698765aec3110533af82 + languageName: node + linkType: hard + "@eslint/eslintrc@npm:^3.1.0": version: 3.1.0 resolution: "@eslint/eslintrc@npm:3.1.0" @@ -1723,6 +1762,30 @@ __metadata: languageName: node linkType: hard +"@eslint/eslintrc@npm:^3.2.0": + version: 3.2.0 + resolution: "@eslint/eslintrc@npm:3.2.0" + dependencies: + ajv: ^6.12.4 + debug: ^4.3.2 + espree: ^10.0.1 + globals: ^14.0.0 + ignore: ^5.2.0 + import-fresh: ^3.2.1 + js-yaml: ^4.1.0 + minimatch: ^3.1.2 + strip-json-comments: ^3.1.1 + checksum: c898e4d12f4c9a79a61ee3c91e38eea5627a04e021cb749191e8537445858bfe32f810eca0cb2dc9902b8ad8b65ca07ef7221dc4bad52afe60cbbf50ec56c236 + languageName: node + linkType: hard + +"@eslint/js@npm:9.16.0": + version: 9.16.0 + resolution: "@eslint/js@npm:9.16.0" + checksum: ba2d7f7266df827df72cec069df9284ad5e7edb4894a8c58c41db0d489136b22815dc76cd34cf565284979feb4d3a8197b511e08529c03f30c80b5235d25030b + languageName: node + linkType: hard + "@eslint/js@npm:9.6.0, @eslint/js@npm:^9.6.0": version: 9.6.0 resolution: "@eslint/js@npm:9.6.0" @@ -1737,6 +1800,32 @@ __metadata: languageName: node linkType: hard +"@eslint/plugin-kit@npm:^0.2.3": + version: 0.2.3 + resolution: "@eslint/plugin-kit@npm:0.2.3" + dependencies: + levn: ^0.4.1 + checksum: b93b9c3f5b1722d09cc4e609abd4510130f659f70f6417b68ac7c4ad9fbf9e3d4f0ef5b6f2bad106eb8c1c1b2146bd0391e0a1c00ddeae46c917f175b8c0da4b + languageName: node + linkType: hard + +"@humanfs/core@npm:^0.19.1": + version: 0.19.1 + resolution: "@humanfs/core@npm:0.19.1" + checksum: 611e0545146f55ddfdd5c20239cfb7911f9d0e28258787c4fc1a1f6214250830c9367aaaeace0096ed90b6739bee1e9c52ad5ba8adaf74ab8b449119303babfe + languageName: node + linkType: hard + +"@humanfs/node@npm:^0.16.6": + version: 0.16.6 + resolution: "@humanfs/node@npm:0.16.6" + dependencies: + "@humanfs/core": ^0.19.1 + "@humanwhocodes/retry": ^0.3.0 + checksum: f9cb52bb235f8b9c6fcff43a7e500669a38f8d6ce26593404a9b56365a1644e0ed60c720dc65ff6a696b1f85f3563ab055bb554ec8674f2559085ba840e47710 + languageName: node + linkType: hard + "@humanwhocodes/module-importer@npm:^1.0.1": version: 1.0.1 resolution: "@humanwhocodes/module-importer@npm:1.0.1" @@ -1751,6 +1840,13 @@ __metadata: languageName: node linkType: hard +"@humanwhocodes/retry@npm:^0.4.1": + version: 0.4.1 + resolution: "@humanwhocodes/retry@npm:0.4.1" + checksum: f11167c28e8266faba470fd273cbaafe2827523492bc18c5623015adb7ed66f46b2e542e3d756fed9ca614300249267814220c2f5f03a59e07fdfa64fc14ad52 + languageName: node + linkType: hard + "@istanbuljs/load-nyc-config@npm:^1.0.0": version: 1.1.0 resolution: "@istanbuljs/load-nyc-config@npm:1.1.0" @@ -2204,6 +2300,13 @@ __metadata: languageName: node linkType: hard +"@types/estree@npm:^1.0.6": + version: 1.0.6 + resolution: "@types/estree@npm:1.0.6" + checksum: 8825d6e729e16445d9a1dd2fb1db2edc5ed400799064cd4d028150701031af012ba30d6d03fe9df40f4d7a437d0de6d2b256020152b7b09bde9f2e420afdffd9 + languageName: node + linkType: hard + "@types/graceful-fs@npm:^4.1.3": version: 4.1.5 resolution: "@types/graceful-fs@npm:4.1.5" @@ -2238,7 +2341,7 @@ __metadata: languageName: node linkType: hard -"@types/json-schema@npm:*, @types/json-schema@npm:^7.0.9": +"@types/json-schema@npm:*, @types/json-schema@npm:^7.0.15, @types/json-schema@npm:^7.0.9": version: 7.0.15 resolution: "@types/json-schema@npm:7.0.15" checksum: 97ed0cb44d4070aecea772b7b2e2ed971e10c81ec87dd4ecc160322ffa55ff330dace1793489540e3e318d90942064bb697cc0f8989391797792d919737b3b98 @@ -2361,6 +2464,16 @@ __metadata: languageName: node linkType: hard +"@typescript-eslint/scope-manager@npm:8.17.0": + version: 8.17.0 + resolution: "@typescript-eslint/scope-manager@npm:8.17.0" + dependencies: + "@typescript-eslint/types": 8.17.0 + "@typescript-eslint/visitor-keys": 8.17.0 + checksum: c5f628e5b4793181a219fc8be4dc2653b2a2a158c4add645b3ba063b9618f5892e5bbf6726c9e674731e698a3df4f2ddb671494482e0f59b6625c43810f78eeb + languageName: node + linkType: hard + "@typescript-eslint/type-utils@npm:7.16.0": version: 7.16.0 resolution: "@typescript-eslint/type-utils@npm:7.16.0" @@ -2392,6 +2505,13 @@ __metadata: languageName: node linkType: hard +"@typescript-eslint/types@npm:8.17.0": + version: 8.17.0 + resolution: "@typescript-eslint/types@npm:8.17.0" + checksum: 5f6933903ce4af536f180c9e326c18da715f6f400e6bc5b89828dcb5779ae5693bf95c59d253e105c9efe6ffd2046d0db868bcfb1c5288c5e194bae4ebaa9976 + languageName: node + linkType: hard + "@typescript-eslint/typescript-estree@npm:5.62.0": version: 5.62.0 resolution: "@typescript-eslint/typescript-estree@npm:5.62.0" @@ -2429,6 +2549,25 @@ __metadata: languageName: node linkType: hard +"@typescript-eslint/typescript-estree@npm:8.17.0": + version: 8.17.0 + resolution: "@typescript-eslint/typescript-estree@npm:8.17.0" + dependencies: + "@typescript-eslint/types": 8.17.0 + "@typescript-eslint/visitor-keys": 8.17.0 + debug: ^4.3.4 + fast-glob: ^3.3.2 + is-glob: ^4.0.3 + minimatch: ^9.0.4 + semver: ^7.6.0 + ts-api-utils: ^1.3.0 + peerDependenciesMeta: + typescript: + optional: true + checksum: 35d3dca3cde7a1f3a7a1e4e5a25a69b6151338cd329dceeb52880e6f05048d10c9ac472a07e558fdfb7acc10dd60cd106284e834cfe40ced3d2c4527e8727335 + languageName: node + linkType: hard + "@typescript-eslint/utils@npm:5.62.0": version: 5.62.0 resolution: "@typescript-eslint/utils@npm:5.62.0" @@ -2461,6 +2600,23 @@ __metadata: languageName: node linkType: hard +"@typescript-eslint/utils@npm:^8.11.0": + version: 8.17.0 + resolution: "@typescript-eslint/utils@npm:8.17.0" + dependencies: + "@eslint-community/eslint-utils": ^4.4.0 + "@typescript-eslint/scope-manager": 8.17.0 + "@typescript-eslint/types": 8.17.0 + "@typescript-eslint/typescript-estree": 8.17.0 + peerDependencies: + eslint: ^8.57.0 || ^9.0.0 + peerDependenciesMeta: + typescript: + optional: true + checksum: 67d8e390eb661e96b7782e6a900f7eb5825baae0b09e89e67159a576b157db4fd83f78887bbbb1778cd4097e0022f3ea2a9be12aab215320d47f13c03e1558d7 + languageName: node + linkType: hard + "@typescript-eslint/visitor-keys@npm:5.62.0": version: 5.62.0 resolution: "@typescript-eslint/visitor-keys@npm:5.62.0" @@ -2481,6 +2637,16 @@ __metadata: languageName: node linkType: hard +"@typescript-eslint/visitor-keys@npm:8.17.0": + version: 8.17.0 + resolution: "@typescript-eslint/visitor-keys@npm:8.17.0" + dependencies: + "@typescript-eslint/types": 8.17.0 + eslint-visitor-keys: ^4.2.0 + checksum: f92f659ec88a1ce34f5003722a133ced1ebf9b3dfc1c0ff18caa5362d4722307edb42fa606ebf80aada8525abe78b24143ef93864d38a1e359605096f1fe2f00 + languageName: node + linkType: hard + "abbrev@npm:1": version: 1.1.1 resolution: "abbrev@npm:1.1.1" @@ -2506,6 +2672,15 @@ __metadata: languageName: node linkType: hard +"acorn@npm:^8.14.0": + version: 8.14.0 + resolution: "acorn@npm:8.14.0" + bin: + acorn: bin/acorn + checksum: 8755074ba55fff94e84e81c72f1013c2d9c78e973c31231c8ae505a5f966859baf654bddd75046bffd73ce816b149298977fff5077a3033dedba0ae2aad152d4 + languageName: node + linkType: hard + "ajv@npm:^6.12.3, ajv@npm:^6.12.4": version: 6.12.6 resolution: "ajv@npm:6.12.6" @@ -3252,6 +3427,17 @@ __metadata: languageName: node linkType: hard +"cross-spawn@npm:^7.0.5": + version: 7.0.6 + resolution: "cross-spawn@npm:7.0.6" + dependencies: + path-key: ^3.1.0 + shebang-command: ^2.0.0 + which: ^2.0.1 + checksum: 8d306efacaf6f3f60e0224c287664093fa9185680b2d195852ba9a863f85d02dcc737094c6e512175f8ee0161f9b87c73c6826034c2422e39de7d6569cf4503b + languageName: node + linkType: hard + "damerau-levenshtein@npm:^1.0.8": version: 1.0.8 resolution: "damerau-levenshtein@npm:1.0.8" @@ -3691,6 +3877,69 @@ __metadata: languageName: node linkType: hard +"eslint-config-widen-base@workspace:packages/eslint-config-widen-base": + version: 0.0.0-use.local + resolution: "eslint-config-widen-base@workspace:packages/eslint-config-widen-base" + dependencies: + "@babel/eslint-parser": ^7.22.15 + eslint: ">= 9" + eslint-config-prettier: ^9.1.0 + eslint-plugin-sort: ">= 3" + eslint-plugin-widen: ">=3.0.0" + peerDependencies: + "@babel/eslint-parser": ^7.22.15 + eslint: ">= 9" + eslint-plugin-sort: ">= 3" + eslint-plugin-widen: ">=3.0.0" + languageName: unknown + linkType: soft + +"eslint-config-widen-jest@workspace:packages/eslint-config-widen-jest": + version: 0.0.0-use.local + resolution: "eslint-config-widen-jest@workspace:packages/eslint-config-widen-jest" + dependencies: + eslint-config-prettier: ^9.1.0 + peerDependencies: + eslint: ">= 9" + eslint-plugin-jest: ">= 28" + languageName: unknown + linkType: soft + +"eslint-config-widen-playwright@workspace:packages/eslint-config-widen-playwright": + version: 0.0.0-use.local + resolution: "eslint-config-widen-playwright@workspace:packages/eslint-config-widen-playwright" + dependencies: + eslint-config-prettier: ^9.1.0 + peerDependencies: + eslint: ">= 9" + eslint-plugin-playwright: ">= 1" + languageName: unknown + linkType: soft + +"eslint-config-widen-react@workspace:packages/eslint-config-widen-react": + version: 0.0.0-use.local + resolution: "eslint-config-widen-react@workspace:packages/eslint-config-widen-react" + dependencies: + eslint-config-prettier: ^9.1.0 + peerDependencies: + eslint: ">= 9" + eslint-plugin-jsx-a11y: ">= 6" + eslint-plugin-react: ">= 7" + eslint-plugin-react-hooks: ">= 4" + languageName: unknown + linkType: soft + +"eslint-config-widen-typescript@workspace:packages/eslint-config-widen-typescript": + version: 0.0.0-use.local + resolution: "eslint-config-widen-typescript@workspace:packages/eslint-config-widen-typescript" + dependencies: + eslint-config-prettier: ^9.1.0 + peerDependencies: + eslint: ">= 9" + typescript-eslint: ">= 7.16.0" + languageName: unknown + linkType: soft + "eslint-config-widen@workspace:^, eslint-config-widen@workspace:packages/eslint-config-widen": version: 0.0.0-use.local resolution: "eslint-config-widen@workspace:packages/eslint-config-widen" @@ -3880,6 +4129,19 @@ __metadata: languageName: node linkType: hard +"eslint-plugin-sort@npm:>= 3": + version: 4.0.0 + resolution: "eslint-plugin-sort@npm:4.0.0" + dependencies: + "@typescript-eslint/utils": ^8.11.0 + isomorphic-resolve: ^1.0.0 + natural-compare: ^1.4.0 + peerDependencies: + eslint: ">=8.56.0" + checksum: 94f280c49175eb6f639ad02c0f4cdbb3f2ca9edf6d59fdb9a5ef85abde1425e948b81da75868fc3b19da2c9d40d6904a51b7b965b0f3a722c6b77eb11a63f667 + languageName: node + linkType: hard + "eslint-plugin-sort@npm:^3.0.2": version: 3.0.2 resolution: "eslint-plugin-sort@npm:3.0.2" @@ -3893,7 +4155,7 @@ __metadata: languageName: node linkType: hard -"eslint-plugin-widen@workspace:^, eslint-plugin-widen@workspace:packages/eslint-plugin-widen": +"eslint-plugin-widen@>=3.0.0, eslint-plugin-widen@workspace:^, eslint-plugin-widen@workspace:packages/eslint-plugin-widen": version: 0.0.0-use.local resolution: "eslint-plugin-widen@workspace:packages/eslint-plugin-widen" dependencies: @@ -3926,6 +4188,16 @@ __metadata: languageName: node linkType: hard +"eslint-scope@npm:^8.2.0": + version: 8.2.0 + resolution: "eslint-scope@npm:8.2.0" + dependencies: + esrecurse: ^4.3.0 + estraverse: ^5.2.0 + checksum: 750eff4672ca2bf274ec0d1bbeae08aadd53c1907d5c6aff5564d8e047a5f49afa8ae6eee333cab637fd3ebcab2141659d8f2f040f6fdc982b0f61f8bf03136f + languageName: node + linkType: hard + "eslint-visitor-keys@npm:^2.1.0": version: 2.1.0 resolution: "eslint-visitor-keys@npm:2.1.0" @@ -3947,6 +4219,62 @@ __metadata: languageName: node linkType: hard +"eslint-visitor-keys@npm:^4.2.0": + version: 4.2.0 + resolution: "eslint-visitor-keys@npm:4.2.0" + checksum: 779c604672b570bb4da84cef32f6abb085ac78379779c1122d7879eade8bb38ae715645324597cf23232d03cef06032c9844d25c73625bc282a5bfd30247e5b5 + languageName: node + linkType: hard + +"eslint@npm:>= 9": + version: 9.16.0 + resolution: "eslint@npm:9.16.0" + dependencies: + "@eslint-community/eslint-utils": ^4.2.0 + "@eslint-community/regexpp": ^4.12.1 + "@eslint/config-array": ^0.19.0 + "@eslint/core": ^0.9.0 + "@eslint/eslintrc": ^3.2.0 + "@eslint/js": 9.16.0 + "@eslint/plugin-kit": ^0.2.3 + "@humanfs/node": ^0.16.6 + "@humanwhocodes/module-importer": ^1.0.1 + "@humanwhocodes/retry": ^0.4.1 + "@types/estree": ^1.0.6 + "@types/json-schema": ^7.0.15 + ajv: ^6.12.4 + chalk: ^4.0.0 + cross-spawn: ^7.0.5 + debug: ^4.3.2 + escape-string-regexp: ^4.0.0 + eslint-scope: ^8.2.0 + eslint-visitor-keys: ^4.2.0 + espree: ^10.3.0 + esquery: ^1.5.0 + esutils: ^2.0.2 + fast-deep-equal: ^3.1.3 + file-entry-cache: ^8.0.0 + find-up: ^5.0.0 + glob-parent: ^6.0.2 + ignore: ^5.2.0 + imurmurhash: ^0.1.4 + is-glob: ^4.0.0 + json-stable-stringify-without-jsonify: ^1.0.1 + lodash.merge: ^4.6.2 + minimatch: ^3.1.2 + natural-compare: ^1.4.0 + optionator: ^0.9.3 + peerDependencies: + jiti: "*" + peerDependenciesMeta: + jiti: + optional: true + bin: + eslint: bin/eslint.js + checksum: d7b77caed2e319dba9bdf5fd3275c643332e4c79fcfe62cf19031fc430c27fe691daa718474d29a1050b83348085f8df50e04f260e081e5b1fbee1d2ca9c5c74 + languageName: node + linkType: hard + "eslint@npm:^9.6.0": version: 9.6.0 resolution: "eslint@npm:9.6.0" @@ -4002,6 +4330,17 @@ __metadata: languageName: node linkType: hard +"espree@npm:^10.3.0": + version: 10.3.0 + resolution: "espree@npm:10.3.0" + dependencies: + acorn: ^8.14.0 + acorn-jsx: ^5.3.2 + eslint-visitor-keys: ^4.2.0 + checksum: 63e8030ff5a98cea7f8b3e3a1487c998665e28d674af08b9b3100ed991670eb3cbb0e308c4548c79e03762753838fbe530c783f17309450d6b47a889fee72bef + languageName: node + linkType: hard + "esprima@npm:^4.0.0": version: 4.0.1 resolution: "esprima@npm:4.0.1" @@ -4147,6 +4486,19 @@ __metadata: languageName: node linkType: hard +"fast-glob@npm:^3.3.2": + version: 3.3.2 + resolution: "fast-glob@npm:3.3.2" + dependencies: + "@nodelib/fs.stat": ^2.0.2 + "@nodelib/fs.walk": ^1.2.3 + glob-parent: ^5.1.2 + merge2: ^1.3.0 + micromatch: ^4.0.4 + checksum: 900e4979f4dbc3313840078419245621259f349950411ca2fa445a2f9a1a6d98c3b5e7e0660c5ccd563aa61abe133a21765c6c0dec8e57da1ba71d8000b05ec1 + languageName: node + linkType: hard + "fast-json-stable-stringify@npm:^2.0.0, fast-json-stable-stringify@npm:^2.1.0": version: 2.1.0 resolution: "fast-json-stable-stringify@npm:2.1.0"