diff --git a/.changeset/new-kings-breathe.md b/.changeset/new-kings-breathe.md new file mode 100644 index 00000000..b3cf1836 --- /dev/null +++ b/.changeset/new-kings-breathe.md @@ -0,0 +1,5 @@ +--- +'vite-plugin-checker': patch +--- + +support eslint flat config diff --git a/docs/checkers/eslint.md b/docs/checkers/eslint.md index b17d2cc9..1005fa8d 100644 --- a/docs/checkers/eslint.md +++ b/docs/checkers/eslint.md @@ -35,5 +35,6 @@ Advanced object configuration table of `options.eslint` | field | Type | Default value | Description | | :----------------- | ---------------------------------------------------------------------------------------------------------- | ---------------------- | ------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ | | lintCommand | `string` | This value is required | `lintCommand` will be executed at build mode, and will also be used as default config for dev mode when `eslint.dev.eslint` is nullable. | +| useFlatConfig | `boolean` | `false` | If `true`, the plugin will use the new [flat config](https://eslint.org/docs/latest/use/configure/configuration-files-new) of ESLint. | | dev.overrideConfig | [`ESLint.Options`](https://github.com/DefinitelyTyped/DefinitelyTyped/blob/master/types/eslint/index.d.ts) | `undefined` | **(Only in dev mode)** You can override the options of the translated from `lintCommand`. Config priority: `const eslint = new ESLint({cwd: root, ...translatedOptions, ...pluginConfig.eslint.dev?.overrideConfig, })`. | | dev.logLevel | `('error' \| 'warning')[]` | `['error', 'warning']` | **(Only in dev mode)** Which level of ESLint should be emitted to terminal and overlay in dev mode | diff --git a/package.json b/package.json index a8e92f0e..e0c34fb3 100644 --- a/package.json +++ b/package.json @@ -77,7 +77,7 @@ "@typescript-eslint/parser": "^5.59.0", "chalk": "^4.1.1", "cross-env": "^7.0.3", - "eslint": "^8.11.0", + "eslint": "^8.51.0", "eslint-config-alloy": "^4.5.1", "execa": "^5.1.1", "fast-glob": "^3.2.7", diff --git a/packages/vite-plugin-checker/src/checkers/eslint/main.ts b/packages/vite-plugin-checker/src/checkers/eslint/main.ts index 9c9dfcb4..72b87ac1 100644 --- a/packages/vite-plugin-checker/src/checkers/eslint/main.ts +++ b/packages/vite-plugin-checker/src/checkers/eslint/main.ts @@ -1,3 +1,4 @@ +import Module from 'node:module' import chokidar from 'chokidar' import { ESLint } from 'eslint' import path from 'path' @@ -21,6 +22,7 @@ import { translateOptions } from './cli.js' import { options as optionator } from './options.js' const __filename = fileURLToPath(import.meta.url) +const require = Module.createRequire(import.meta.url) const manager = new FileDiagnosticManager() let createServeAndBuild @@ -63,7 +65,20 @@ const createDiagnostic: CreateDiagnostic<'eslint'> = (pluginConfig) => { ...translatedOptions, ...pluginConfig.eslint.dev?.overrideConfig, } - const eslint = new ESLint(eslintOptions) + + let eslint: ESLint + if (pluginConfig.eslint.useFlatConfig) { + const { FlatESLint, shouldUseFlatConfig } = require('eslint/use-at-your-own-risk') + if (shouldUseFlatConfig?.()) { + eslint = new FlatESLint({ + cwd: root, + }) + } else { + throw Error('Please upgrade your eslint to latest version to use `useFlatConfig` option.') + } + } else { + eslint = new ESLint(eslintOptions) + } const dispatchDiagnostics = () => { const diagnostics = filterLogLevel(manager.getDiagnostics(), logLevel) diff --git a/packages/vite-plugin-checker/src/types.ts b/packages/vite-plugin-checker/src/types.ts index eae1ec46..37a2c346 100644 --- a/packages/vite-plugin-checker/src/types.ts +++ b/packages/vite-plugin-checker/src/types.ts @@ -52,6 +52,10 @@ export type EslintConfig = * default config for dev mode when options.eslint.dev.eslint is nullable. */ lintCommand: string + /** + * @default false + */ + useFlatConfig?: boolean dev?: Partial<{ /** You can override the options of translated from lintCommand. */ overrideConfig: ESLint.Options diff --git a/playground/eslint-flat/__tests__/__snapshots__/test.spec.ts.snap b/playground/eslint-flat/__tests__/__snapshots__/test.spec.ts.snap new file mode 100644 index 00000000..587a716c --- /dev/null +++ b/playground/eslint-flat/__tests__/__snapshots__/test.spec.ts.snap @@ -0,0 +1,27 @@ +// Vitest Snapshot v1, https://vitest.dev/guide/snapshot.html + +exports[`eslint > serve > get initial error and subsequent error 1`] = `"[{\\"checkerId\\":\\"ESLint\\",\\"frame\\":\\" > 1 | const a = /\\"hello/\\"/n | ^/n > 2 |/n | ^\\",\\"id\\":\\"/playground-temp/eslint-flat/src/index.js\\",\\"level\\":1,\\"loc\\":{\\"column\\":18,\\"file\\":\\"/playground-temp/eslint-flat/src/index.js\\",\\"line\\":1},\\"message\\":\\"Missing semicolon. (semi)\\",\\"stack\\":\\"\\"}]"`; + +exports[`eslint > serve > get initial error and subsequent error 2`] = ` +" ERROR(ESLint) Missing semicolon. (semi) + FILE /playground-temp/eslint-flat/src/index.js:1:18 + + > 1 | const a = \\"hello\\" + | ^ + > 2 | + | ^ +[ESLint] Found 1 error and 0 warning" +`; + +exports[`eslint > serve > get initial error and subsequent error 3`] = `"[{\\"checkerId\\":\\"ESLint\\",\\"frame\\":\\" > 1 | const a = /\\"hello/\\"/n | ^/n > 2 |/n | ^\\",\\"id\\":\\"/playground-temp/eslint-flat/src/index.js\\",\\"level\\":1,\\"loc\\":{\\"column\\":18,\\"file\\":\\"/playground-temp/eslint-flat/src/index.js\\",\\"line\\":1},\\"message\\":\\"Missing semicolon. (semi)\\",\\"stack\\":\\"\\"}]"`; + +exports[`eslint > serve > get initial error and subsequent error 4`] = ` +" ERROR(ESLint) Missing semicolon. (semi) + FILE /playground-temp/eslint-flat/src/index.js:1:18 + + > 1 | const a = \\"hello\\" + | ^ + > 2 | + | ^ +[ESLint] Found 1 error and 0 warning" +`; diff --git a/playground/eslint-flat/__tests__/test.spec.ts b/playground/eslint-flat/__tests__/test.spec.ts new file mode 100644 index 00000000..c9ff1d1e --- /dev/null +++ b/playground/eslint-flat/__tests__/test.spec.ts @@ -0,0 +1,39 @@ +import stringify from 'fast-json-stable-stringify' +import { describe, expect, it } from 'vitest' +import { + diagnostics, + editFile, + expectStderrContains, + isBuild, + isServe, + log, + resetReceivedLog, + sleepForEdit, + sleepForServerReady, + stripedLog, +} from '../../testUtils' + +describe('eslint', () => { + describe.runIf(isServe)('serve', () => { + it('get initial error and subsequent error', async () => { + await sleepForServerReady() + expect(stringify(diagnostics)).toMatchSnapshot() + expect(stripedLog).toMatchSnapshot() + + console.log('-- edit error file --') + resetReceivedLog() + editFile('src/index.js', (code) => code.replace(`Hello`, `Hello~`)) + await sleepForEdit() + expect(stringify(diagnostics)).toMatchSnapshot() + expect(stripedLog).toMatchSnapshot() + }) + }) + + describe.runIf(isBuild)('build', () => { + const expectedMsg = 'Missing semicolon' + + it('should fail', async () => { + expectStderrContains(log, expectedMsg) + }) + }) +}) diff --git a/playground/eslint-flat/eslint.config.js b/playground/eslint-flat/eslint.config.js new file mode 100644 index 00000000..15dc2254 --- /dev/null +++ b/playground/eslint-flat/eslint.config.js @@ -0,0 +1,8 @@ +export default [ + { + files: ["src/**/*"], + rules: { + semi: 'error', + }, + }, +] diff --git a/playground/eslint-flat/index.html b/playground/eslint-flat/index.html new file mode 100644 index 00000000..081c166a --- /dev/null +++ b/playground/eslint-flat/index.html @@ -0,0 +1,13 @@ + + + + + + + Vite App + + +
+ + + diff --git a/playground/eslint-flat/package.json b/playground/eslint-flat/package.json new file mode 100644 index 00000000..ee0dd7b4 --- /dev/null +++ b/playground/eslint-flat/package.json @@ -0,0 +1,17 @@ +{ + "private": true, + "name": "@playground/eslint-flat", + "type": "module", + "version": "0.0.0", + "scripts": { + "dev": "vite", + "build": "vite build", + "serve": "vite preview", + "lint": "eslint ." + }, + "devDependencies": { + "eslint": "^8.51.0", + "vite": "^4.3.0", + "vite-plugin-checker": "workspace:*" + } +} diff --git a/playground/eslint-flat/src/index.js b/playground/eslint-flat/src/index.js new file mode 100644 index 00000000..115fbd39 --- /dev/null +++ b/playground/eslint-flat/src/index.js @@ -0,0 +1 @@ +const a = "hello" diff --git a/playground/eslint-flat/tsconfig.json b/playground/eslint-flat/tsconfig.json new file mode 100644 index 00000000..36f84d9e --- /dev/null +++ b/playground/eslint-flat/tsconfig.json @@ -0,0 +1,19 @@ +{ + "compilerOptions": { + "target": "ESNext", + "lib": ["DOM", "DOM.Iterable", "ESNext"], + "types": ["vite/client"], + "allowJs": false, + "skipLibCheck": false, + "esModuleInterop": false, + "allowSyntheticDefaultImports": true, + "strict": true, + "forceConsistentCasingInFileNames": true, + "module": "ESNext", + "moduleResolution": "Node", + "resolveJsonModule": true, + "isolatedModules": true, + "noEmit": true + }, + "include": ["./src"] +} diff --git a/playground/eslint-flat/vite.config.js b/playground/eslint-flat/vite.config.js new file mode 100644 index 00000000..1c68840f --- /dev/null +++ b/playground/eslint-flat/vite.config.js @@ -0,0 +1,13 @@ +import { defineConfig } from 'vite' +import checker from 'vite-plugin-checker' + +export default defineConfig({ + plugins: [ + checker({ + eslint: { + lintCommand: 'eslint "./src/**/*.js"', + useFlatConfig: true, + }, + }), + ], +}) diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index 3b80fba1..84a5b90d 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -24,7 +24,7 @@ importers: '@typescript-eslint/parser': ^5.59.0 chalk: ^4.1.1 cross-env: ^7.0.3 - eslint: ^8.11.0 + eslint: ^8.51.0 eslint-config-alloy: ^4.5.1 execa: ^5.1.1 fast-glob: ^3.2.7 @@ -65,12 +65,12 @@ importers: '@types/rimraf': 3.0.2 '@types/semver': 7.3.12 '@types/ws': 8.5.3 - '@typescript-eslint/eslint-plugin': 5.59.0_7pjfh4zgwfx6xvatksnbmxnxiq - '@typescript-eslint/parser': 5.59.0_cy7zp3kcj75bmapcvvm43smuci + '@typescript-eslint/eslint-plugin': 5.59.0_jjdtkmusc3hz2emip5kqbxfzay + '@typescript-eslint/parser': 5.59.0_fl5f74muubgpcrrwb7cnwvznou chalk: 4.1.2 cross-env: 7.0.3 - eslint: 8.22.0 - eslint-config-alloy: 4.6.2_kk6dnwb65rv663hbkohj3tebve + eslint: 8.51.0 + eslint-config-alloy: 4.6.2_zfe3xsyyuvi43mzmzozawucuee execa: 5.1.1 fast-glob: 3.2.11 fast-json-stable-stringify: 2.1.0 @@ -541,6 +541,16 @@ importers: vite: 4.3.1 vite-plugin-checker: link:../../packages/vite-plugin-checker + playground/eslint-flat: + specifiers: + eslint: ^8.51.0 + vite: ^4.3.0 + vite-plugin-checker: workspace:* + devDependencies: + eslint: 8.51.0 + vite: 4.3.1 + vite-plugin-checker: link:../../packages/vite-plugin-checker + playground/multiple-hmr: specifiers: '@types/react': ^17.0.0 @@ -716,6 +726,11 @@ importers: packages: + /@aashutoshrathi/word-wrap/1.2.6: + resolution: {integrity: sha512-1Yjs2SvM8TflER/OD3cOjhWWOZb58A2t7wpE2S9XfBYTiIl+XFhQG2bjy4Pu1I+EAlCNUzRDYDdFwFYUKvXcIA==} + engines: {node: '>=0.10.0'} + dev: true + /@algolia/autocomplete-core/1.7.4: resolution: {integrity: sha512-daoLpQ3ps/VTMRZDEBfU8ixXd+amZcNJ4QSP3IERGyzqnL5Ch8uSRFt/4G8pUvW9c3o6GA4vtVv4I4lmnkdXyg==} dependencies: @@ -1743,11 +1758,26 @@ packages: eslint-visitor-keys: 3.4.0 dev: true + /@eslint-community/eslint-utils/4.4.0_eslint@8.51.0: + resolution: {integrity: sha512-1/sA4dwrzBAyeUoQ6oxahHKmrZvsnLCg4RfxW3ZFGGmQkSNQPFNLV9CUEFQP1x9EYXHTo5p6xdhZM1Ne9p/AfA==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 + dependencies: + eslint: 8.51.0 + eslint-visitor-keys: 3.4.0 + dev: true + /@eslint-community/regexpp/4.5.0: resolution: {integrity: sha512-vITaYzIcNmjn5tF5uxcZ/ft7/RXGrMUIS9HalWckEOF6ESiwXKoMzAQf2UW0aVd6rnOeExTJVd5hmWXucBKGXQ==} engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} dev: true + /@eslint-community/regexpp/4.9.1: + resolution: {integrity: sha512-Y27x+MBLjXa+0JWDhykM3+JE+il3kHKAEqabfEWq3SDhZjLYb6/BHL/JKFnH3fe207JaXkyDo685Oc2Glt6ifA==} + engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} + dev: true + /@eslint/eslintrc/0.4.3: resolution: {integrity: sha512-J6KFFz5QCYUJq3pf0mjEcCJVERbzv71PUIDczuh9JkwGEzced6CO5ADLHB1rbf/+oPBtoPfMYNOpGDzCANlbXw==} engines: {node: ^10.12.0 || >=12.0.0} @@ -1782,6 +1812,28 @@ packages: - supports-color dev: true + /@eslint/eslintrc/2.1.2: + resolution: {integrity: sha512-+wvgpDsrB1YqAMdEUCcnTlpfVBH7Vqn6A/NT3D8WVXFIaKMlErPIZT3oCIAVCOtarRpMtelZLqJeU3t7WY6X6g==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dependencies: + ajv: 6.12.6 + debug: 4.3.4 + espree: 9.6.1 + globals: 13.23.0 + ignore: 5.2.0 + import-fresh: 3.3.0 + js-yaml: 4.1.0 + minimatch: 3.1.2 + strip-json-comments: 3.1.1 + transitivePeerDependencies: + - supports-color + dev: true + + /@eslint/js/8.51.0: + resolution: {integrity: sha512-HxjQ8Qn+4SI3/AFv6sOrDB+g6PpUTDwSJiQqOrnneEk8L71161srI9gjzzZvYVbzHiVg/BvcH95+cK/zfIt4pg==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dev: true + /@humanwhocodes/config-array/0.10.4: resolution: {integrity: sha512-mXAIHxZT3Vcpg83opl1wGlVZ9xydbfZO3r5YfRSH6Gpp2J/PfdBP0wbDa2sO6/qRbcalpoevVyW6A/fI6LfeMw==} engines: {node: '>=10.10.0'} @@ -1793,6 +1845,17 @@ packages: - supports-color dev: true + /@humanwhocodes/config-array/0.11.11: + resolution: {integrity: sha512-N2brEuAadi0CcdeMXUkhbZB84eskAc8MEX1By6qEchoVywSgXPIjou4rYsl0V3Hj0ZnuGycGCjdNgockbzeWNA==} + engines: {node: '>=10.10.0'} + dependencies: + '@humanwhocodes/object-schema': 1.2.1 + debug: 4.3.4 + minimatch: 3.1.2 + transitivePeerDependencies: + - supports-color + dev: true + /@humanwhocodes/config-array/0.5.0: resolution: {integrity: sha512-FagtKFz74XrTl7y6HCzQpwDfXP0yhxe9lHLD1UZxjvZIcbyRz8zTFF/yYNfSfzU414eDwZ1SrO0Qvtyf+wFMQg==} engines: {node: '>=10.10.0'} @@ -1808,6 +1871,11 @@ packages: resolution: {integrity: sha512-rSqmMJDdLFUsyxR6FMtD00nfQKKLFb1kv+qBbOVKqErvloEIJLo5bDTJTQNTYgeyp78JsA7u/NPi5jT1GR/MuA==} dev: true + /@humanwhocodes/module-importer/1.0.1: + resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} + engines: {node: '>=12.22'} + dev: true + /@humanwhocodes/object-schema/1.2.1: resolution: {integrity: sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==} dev: true @@ -2191,6 +2259,34 @@ packages: - supports-color dev: true + /@typescript-eslint/eslint-plugin/5.59.0_jjdtkmusc3hz2emip5kqbxfzay: + resolution: {integrity: sha512-p0QgrEyrxAWBecR56gyn3wkG15TJdI//eetInP3zYRewDh0XS+DhB3VUAd3QqvziFsfaQIoIuZMxZRB7vXYaYw==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + '@typescript-eslint/parser': ^5.0.0 + eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@eslint-community/regexpp': 4.5.0 + '@typescript-eslint/parser': 5.59.0_fl5f74muubgpcrrwb7cnwvznou + '@typescript-eslint/scope-manager': 5.59.0 + '@typescript-eslint/type-utils': 5.59.0_fl5f74muubgpcrrwb7cnwvznou + '@typescript-eslint/utils': 5.59.0_fl5f74muubgpcrrwb7cnwvznou + debug: 4.3.4 + eslint: 8.51.0 + grapheme-splitter: 1.0.4 + ignore: 5.2.0 + natural-compare-lite: 1.4.0 + semver: 7.3.7 + tsutils: 3.21.0_typescript@5.0.4 + typescript: 5.0.4 + transitivePeerDependencies: + - supports-color + dev: true + /@typescript-eslint/experimental-utils/4.33.0_cl6qtdo3npn4kngw26aibg642e: resolution: {integrity: sha512-zeQjOoES5JFjTnAhI5QY7ZviczMzDptls15GFsI6jyUOq0kOf9+WonkhtlIhh0RgHRnqj5gdNxW5j1EvAyYg6Q==} engines: {node: ^10.12.0 || >=12.0.0} @@ -2249,6 +2345,26 @@ packages: - supports-color dev: true + /@typescript-eslint/parser/5.59.0_fl5f74muubgpcrrwb7cnwvznou: + resolution: {integrity: sha512-qK9TZ70eJtjojSUMrrEwA9ZDQ4N0e/AuoOIgXuNBorXYcBDk397D2r5MIe1B3cok/oCtdNC5j+lUUpVB+Dpb+w==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@typescript-eslint/scope-manager': 5.59.0 + '@typescript-eslint/types': 5.59.0 + '@typescript-eslint/typescript-estree': 5.59.0_typescript@5.0.4 + debug: 4.3.4 + eslint: 8.51.0 + typescript: 5.0.4 + transitivePeerDependencies: + - supports-color + dev: true + /@typescript-eslint/scope-manager/4.33.0: resolution: {integrity: sha512-5IfJHpgTsTZuONKbODctL4kKuQje/bzBRkwHE8UOZ4f89Zeddg+EGZs8PD8NcN4LdM3ygHWYB3ukPAYjvl/qbQ==} engines: {node: ^8.10.0 || ^10.13.0 || >=11.10.1} @@ -2285,6 +2401,26 @@ packages: - supports-color dev: true + /@typescript-eslint/type-utils/5.59.0_fl5f74muubgpcrrwb7cnwvznou: + resolution: {integrity: sha512-d/B6VSWnZwu70kcKQSCqjcXpVH+7ABKH8P1KNn4K7j5PXXuycZTPXF44Nui0TEm6rbWGi8kc78xRgOC4n7xFgA==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: '*' + typescript: '*' + peerDependenciesMeta: + typescript: + optional: true + dependencies: + '@typescript-eslint/typescript-estree': 5.59.0_typescript@5.0.4 + '@typescript-eslint/utils': 5.59.0_fl5f74muubgpcrrwb7cnwvznou + debug: 4.3.4 + eslint: 8.51.0 + tsutils: 3.21.0_typescript@5.0.4 + typescript: 5.0.4 + transitivePeerDependencies: + - supports-color + dev: true + /@typescript-eslint/types/4.33.0: resolution: {integrity: sha512-zKp7CjQzLQImXEpLt2BUw1tvOMPfNoTAfb8l51evhYbOEEzdWyQNmHWWGPR6hwKJDAi+1VXSBmnhL9kyVTTOuQ==} engines: {node: ^8.10.0 || ^10.13.0 || >=11.10.1} @@ -2357,6 +2493,26 @@ packages: - typescript dev: true + /@typescript-eslint/utils/5.59.0_fl5f74muubgpcrrwb7cnwvznou: + resolution: {integrity: sha512-GGLFd+86drlHSvPgN/el6dRQNYYGOvRSDVydsUaQluwIW3HvbXuxyuD5JETvBt/9qGYe+lOrDk6gRrWOHb/FvA==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || ^8.0.0 + dependencies: + '@eslint-community/eslint-utils': 4.4.0_eslint@8.51.0 + '@types/json-schema': 7.0.11 + '@types/semver': 7.3.13 + '@typescript-eslint/scope-manager': 5.59.0 + '@typescript-eslint/types': 5.59.0 + '@typescript-eslint/typescript-estree': 5.59.0_typescript@5.0.4 + eslint: 8.51.0 + eslint-scope: 5.1.1 + semver: 7.5.0 + transitivePeerDependencies: + - supports-color + - typescript + dev: true + /@typescript-eslint/visitor-keys/4.33.0: resolution: {integrity: sha512-uqi/2aSz9g2ftcHWf8uLPJA70rUv6yuMW5Bohw+bwcuzaxQIHaKFZCKGoGXIrc9vkTJ3+0txM73K0Hq3d5wgIg==} engines: {node: ^8.10.0 || ^10.13.0 || >=11.10.1} @@ -3160,6 +3316,14 @@ packages: acorn: 7.4.1 dev: true + /acorn-jsx/5.3.2_acorn@8.10.0: + resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} + peerDependencies: + acorn: ^6.0.0 || ^7.0.0 || ^8.0.0 + dependencies: + acorn: 8.10.0 + dev: true + /acorn-jsx/5.3.2_acorn@8.8.0: resolution: {integrity: sha512-rq9s+JNhf0IChjtDXxllJ7g41oZk5SlXtp0LHwyA5cejwn7vKmKp4pPri6YEePv2PU65sAsegbXtIinmDFDXgQ==} peerDependencies: @@ -4622,7 +4786,7 @@ packages: engines: {node: '>=10'} dev: true - /eslint-config-alloy/4.6.2_kk6dnwb65rv663hbkohj3tebve: + /eslint-config-alloy/4.6.2_zfe3xsyyuvi43mzmzozawucuee: resolution: {integrity: sha512-mntO/1jazNIJJCb3mwtaH4D9uLnEIzI0EM2aYnllYVBmET0t490yBSLdPz+5cWtJsHU2DkW7aPI/kFtal9Vopg==} peerDependencies: '@babel/eslint-parser': 7.x @@ -4652,9 +4816,9 @@ packages: vue-eslint-parser: optional: true dependencies: - '@typescript-eslint/eslint-plugin': 5.59.0_7pjfh4zgwfx6xvatksnbmxnxiq - '@typescript-eslint/parser': 5.59.0_cy7zp3kcj75bmapcvvm43smuci - eslint: 8.22.0 + '@typescript-eslint/eslint-plugin': 5.59.0_jjdtkmusc3hz2emip5kqbxfzay + '@typescript-eslint/parser': 5.59.0_fl5f74muubgpcrrwb7cnwvznou + eslint: 8.51.0 typescript: 5.0.4 dev: true @@ -4715,6 +4879,14 @@ packages: estraverse: 5.3.0 dev: true + /eslint-scope/7.2.2: + resolution: {integrity: sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dependencies: + esrecurse: 4.3.0 + estraverse: 5.3.0 + dev: true + /eslint-utils/2.1.0: resolution: {integrity: sha512-w94dQYoauyvlDc43XnGB8lU3Zt713vNChgt4EWwhXAP2XkBvndfxF0AgIqKOOasjPIPzj9JqgwkwbCYD0/V3Zg==} engines: {node: '>=6'} @@ -4762,6 +4934,11 @@ packages: engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} dev: true + /eslint-visitor-keys/3.4.3: + resolution: {integrity: sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dev: true + /eslint/7.32.0: resolution: {integrity: sha512-VHZ8gX+EDfz+97jGcgyGCyRia/dPOd6Xh9yPv8Bl1+SoaIwD+a/vlrOmGRUyOYu7MwUhc7CxqeaDZU13S4+EpA==} engines: {node: ^10.12.0 || >=12.0.0} @@ -4859,6 +5036,52 @@ packages: - supports-color dev: true + /eslint/8.51.0: + resolution: {integrity: sha512-2WuxRZBrlwnXi+/vFSJyjMqrNjtJqiasMzehF0shoLaW7DzS3/9Yvrmq5JiT66+pNjiX4UBnLDiKHcWAr/OInA==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + hasBin: true + dependencies: + '@eslint-community/eslint-utils': 4.4.0_eslint@8.51.0 + '@eslint-community/regexpp': 4.9.1 + '@eslint/eslintrc': 2.1.2 + '@eslint/js': 8.51.0 + '@humanwhocodes/config-array': 0.11.11 + '@humanwhocodes/module-importer': 1.0.1 + '@nodelib/fs.walk': 1.2.8 + ajv: 6.12.6 + chalk: 4.1.2 + cross-spawn: 7.0.3 + debug: 4.3.4 + doctrine: 3.0.0 + escape-string-regexp: 4.0.0 + eslint-scope: 7.2.2 + eslint-visitor-keys: 3.4.3 + espree: 9.6.1 + esquery: 1.5.0 + esutils: 2.0.3 + fast-deep-equal: 3.1.3 + file-entry-cache: 6.0.1 + find-up: 5.0.0 + glob-parent: 6.0.2 + globals: 13.23.0 + graphemer: 1.4.0 + ignore: 5.2.0 + imurmurhash: 0.1.4 + is-glob: 4.0.3 + is-path-inside: 3.0.3 + js-yaml: 4.1.0 + json-stable-stringify-without-jsonify: 1.0.1 + levn: 0.4.1 + lodash.merge: 4.6.2 + minimatch: 3.1.2 + natural-compare: 1.4.0 + optionator: 0.9.3 + strip-ansi: 6.0.1 + text-table: 0.2.0 + transitivePeerDependencies: + - supports-color + dev: true + /espree/6.2.1: resolution: {integrity: sha512-ysCxRQY3WaXJz9tdbWOwuWr5Y/XrPTGX9Kiz3yoUXwW0VZ4w30HTkQLaGx/+ttFjF8i+ACbArnB4ce68a9m5hw==} engines: {node: '>=6.0.0'} @@ -4886,6 +5109,15 @@ packages: eslint-visitor-keys: 3.3.0 dev: true + /espree/9.6.1: + resolution: {integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + dependencies: + acorn: 8.10.0 + acorn-jsx: 5.3.2_acorn@8.10.0 + eslint-visitor-keys: 3.4.3 + dev: true + /esprima/4.0.1: resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==} engines: {node: '>=4'} @@ -4899,6 +5131,13 @@ packages: estraverse: 5.3.0 dev: true + /esquery/1.5.0: + resolution: {integrity: sha512-YQLXUplAwJgCydQ78IMJywZCceoqk1oH01OERdSAJc/7U2AylwjhSCLDEtqwg811idIS/9fIU5GjG73IgjKMVg==} + engines: {node: '>=0.10'} + dependencies: + estraverse: 5.3.0 + dev: true + /esrecurse/4.3.0: resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} engines: {node: '>=4.0'} @@ -5355,6 +5594,13 @@ packages: type-fest: 0.20.2 dev: true + /globals/13.23.0: + resolution: {integrity: sha512-XAmF0RjlrjY23MA51q3HltdlGxUpXPvg0GioKiD9X6HD28iMjo2dKC8Vqwm7lne4GNr78+RHTfliktR6ZH09wA==} + engines: {node: '>=8'} + dependencies: + type-fest: 0.20.2 + dev: true + /globalthis/1.0.3: resolution: {integrity: sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA==} engines: {node: '>= 0.4'} @@ -5391,6 +5637,10 @@ packages: resolution: {integrity: sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==} dev: true + /graphemer/1.4.0: + resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} + dev: true + /hard-rejection/2.1.0: resolution: {integrity: sha512-VIZB+ibDhx7ObhAe7OVtoEbuP4h/MuOTHJ+J8h/eBXotJYl0fBgR72xDFCKgIh22OJZIOVNxBMWuhAr10r8HdA==} engines: {node: '>=6'} @@ -5716,6 +5966,11 @@ packages: engines: {node: '>=0.10.0'} dev: true + /is-path-inside/3.0.3: + resolution: {integrity: sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ==} + engines: {node: '>=8'} + dev: true + /is-plain-obj/1.1.0: resolution: {integrity: sha512-yvkRyxmFKEOQ4pNXCmJG5AEQNlXJS5LaONXo5/cLdTZdWvsZ1ioJEonLGAosKlMWE8lwUy/bJzMjcw8az73+Fg==} engines: {node: '>=0.10.0'} @@ -6481,6 +6736,18 @@ packages: word-wrap: 1.2.3 dev: true + /optionator/0.9.3: + resolution: {integrity: sha512-JjCoypp+jKn1ttEFExxhetCKeJt9zhAgAve5FXHixTvFDW/5aEktX9bufBKLRRMdU7bNtpLfcGu94B3cdEJgjg==} + engines: {node: '>= 0.8.0'} + dependencies: + '@aashutoshrathi/word-wrap': 1.2.6 + deep-is: 0.1.4 + fast-levenshtein: 2.0.6 + levn: 0.4.1 + prelude-ls: 1.2.1 + type-check: 0.4.0 + dev: true + /os-tmpdir/1.0.2: resolution: {integrity: sha512-D2FR03Vir7FIu45XBY20mTb+/ZSWB00sjU9jdQXt83gDrI4Ztz5Fs7/yy74g2N5SVQY4xY1qDr4rNddwYRVX0g==} engines: {node: '>=0.10.0'}