diff --git a/.eslintignore b/.eslintignore index 957e4a275..53540c3d8 100644 --- a/.eslintignore +++ b/.eslintignore @@ -4,6 +4,7 @@ **/test/**/output packages/commonjs/test/fixtures packages/typescript/test/fixtures/syntax-error +packages/eslint/test/fixtures/flat-config # temporary workaround for eslint bug where package.json is a directory packages/node-resolve/test/fixtures/package-json-in-path diff --git a/packages/eslint/.eslintignore b/packages/eslint/.eslintignore index 4051dc28f..a61b07316 100755 --- a/packages/eslint/.eslintignore +++ b/packages/eslint/.eslintignore @@ -1 +1 @@ -test/fixtures/ignored.js +test/fixtures/legacy-config/ignored.js diff --git a/packages/eslint/package.json b/packages/eslint/package.json index 7681a688c..b77266983 100755 --- a/packages/eslint/package.json +++ b/packages/eslint/package.json @@ -63,12 +63,12 @@ }, "dependencies": { "@rollup/pluginutils": "^5.0.1", - "eslint": "^8.24.0" + "eslint": "^8.57.1" }, "devDependencies": { "@rollup/plugin-node-resolve": "^15.0.0", "@rollup/plugin-typescript": "^9.0.1", - "@types/eslint": "^8.4.6", + "@types/eslint": "^8.56.12", "rollup": "^4.0.0-24", "typescript": "^4.8.3" }, diff --git a/packages/eslint/src/index.ts b/packages/eslint/src/index.ts index c8b14ebe9..7653615e6 100755 --- a/packages/eslint/src/index.ts +++ b/packages/eslint/src/index.ts @@ -2,10 +2,15 @@ import { relative, resolve, sep } from 'path'; import type { Plugin } from 'rollup'; import { createFilter } from '@rollup/pluginutils'; -import { ESLint } from 'eslint'; +import { ESLint, loadESLint } from 'eslint'; import type { RollupEslintOptions } from '../types'; +// New API introduced in v8.57 missing from @types/eslint +declare module 'eslint' { + function loadESLint(): Promise; +} + function normalizePath(id: string) { return relative(process.cwd(), id).split(sep).join('/'); } @@ -29,12 +34,17 @@ export default function eslint(options = {} as RollupEslintOptions): Plugin { ...eslintOptions } = options; - const eslintInstance = new ESLint(eslintOptions); + let eslintInstance: ESLint | null = null; const filter = createFilter(include, exclude); return { name: 'eslint', async transform(_, id: string) { + if (!eslintInstance) { + const DefaultESLint = await loadESLint(); + eslintInstance = new DefaultESLint(eslintOptions); + } + const file = normalizePath(id); if (!filter(id) || (await eslintInstance.isPathIgnored(file))) { return null; diff --git a/packages/eslint/test/fixtures/flat-config/eslint.config.js b/packages/eslint/test/fixtures/flat-config/eslint.config.js new file mode 100644 index 000000000..dcb770c8e --- /dev/null +++ b/packages/eslint/test/fixtures/flat-config/eslint.config.js @@ -0,0 +1,34 @@ +export default [ + { + files: ["**/*.js"], + rules: { + "no-alert": 2, + "no-bitwise": 1, + "camelcase": 1, + "curly": 1, + "eqeqeq": 0, + "no-eq-null": 0, + "guard-for-in": 1, + "no-empty": 1, + "no-use-before-define": 0, + "object-curly-spacing": 0, + "no-obj-calls": 2, + "no-unused-vars": 0, + "new-cap": 1, + "no-shadow": 0, + "strict": 2, + "global-strict": 0, + "no-invalid-regexp": 2, + "comma-dangle": 2, + "no-undef": 1, + "no-new": 1, + "no-extra-semi": 1, + "no-debugger": 2, + "no-caller": 1, + "semi": 1, + "quotes": 0, + "no-unreachable": 2, + "eol-last": 0, + }, + }, +]; diff --git a/packages/eslint/test/fixtures/flat-config/undeclared.js b/packages/eslint/test/fixtures/flat-config/undeclared.js new file mode 100755 index 000000000..6882fe5e9 --- /dev/null +++ b/packages/eslint/test/fixtures/flat-config/undeclared.js @@ -0,0 +1 @@ +x = 0; diff --git a/packages/eslint/test/fixtures/.eslintrc-babel b/packages/eslint/test/fixtures/legacy-config/.eslintrc-babel similarity index 100% rename from packages/eslint/test/fixtures/.eslintrc-babel rename to packages/eslint/test/fixtures/legacy-config/.eslintrc-babel diff --git a/packages/eslint/test/fixtures/.eslintrc.js b/packages/eslint/test/fixtures/legacy-config/.eslintrc.js similarity index 100% rename from packages/eslint/test/fixtures/.eslintrc.js rename to packages/eslint/test/fixtures/legacy-config/.eslintrc.js diff --git a/packages/eslint/test/fixtures/fixable.js b/packages/eslint/test/fixtures/legacy-config/fixable.js similarity index 100% rename from packages/eslint/test/fixtures/fixable.js rename to packages/eslint/test/fixtures/legacy-config/fixable.js diff --git a/packages/eslint/test/fixtures/fixed.js b/packages/eslint/test/fixtures/legacy-config/fixed.js similarity index 100% rename from packages/eslint/test/fixtures/fixed.js rename to packages/eslint/test/fixtures/legacy-config/fixed.js diff --git a/packages/eslint/test/fixtures/ignored.js b/packages/eslint/test/fixtures/legacy-config/ignored.js similarity index 100% rename from packages/eslint/test/fixtures/ignored.js rename to packages/eslint/test/fixtures/legacy-config/ignored.js diff --git a/packages/eslint/test/fixtures/modules.js b/packages/eslint/test/fixtures/legacy-config/modules.js similarity index 100% rename from packages/eslint/test/fixtures/modules.js rename to packages/eslint/test/fixtures/legacy-config/modules.js diff --git a/packages/eslint/test/fixtures/node_modules/mod/index.js b/packages/eslint/test/fixtures/legacy-config/node_modules/mod/index.js similarity index 100% rename from packages/eslint/test/fixtures/node_modules/mod/index.js rename to packages/eslint/test/fixtures/legacy-config/node_modules/mod/index.js diff --git a/packages/eslint/test/fixtures/undeclared.js b/packages/eslint/test/fixtures/legacy-config/undeclared.js similarity index 100% rename from packages/eslint/test/fixtures/undeclared.js rename to packages/eslint/test/fixtures/legacy-config/undeclared.js diff --git a/packages/eslint/test/fixtures/use-strict.js b/packages/eslint/test/fixtures/legacy-config/use-strict.js similarity index 100% rename from packages/eslint/test/fixtures/use-strict.js rename to packages/eslint/test/fixtures/legacy-config/use-strict.js diff --git a/packages/eslint/test/test.mjs b/packages/eslint/test/test.mjs index 51aaf13cd..99ff377de 100755 --- a/packages/eslint/test/test.mjs +++ b/packages/eslint/test/test.mjs @@ -11,7 +11,7 @@ import eslint from 'current-package'; test('should lint files', async (t) => { let count = 0; await rollup({ - input: './test/fixtures/undeclared.js', + input: './test/fixtures/legacy-config/undeclared.js', plugins: [ eslint({ formatter: (results) => { @@ -29,7 +29,7 @@ test('should lint files', async (t) => { test('should not fail with default options', async (t) => { await rollup({ - input: './test/fixtures/undeclared.js', + input: './test/fixtures/legacy-config/undeclared.js', plugins: [eslint()] }); @@ -39,11 +39,11 @@ test('should not fail with default options', async (t) => { test('should ignore node_modules with exclude option', async (t) => { let count = 0; await rollup({ - input: './test/fixtures/modules.js', + input: './test/fixtures/legacy-config/modules.js', plugins: [ nodeResolve({ jsnext: true }), eslint({ - overrideConfigFile: './test/fixtures/.eslintrc-babel', + overrideConfigFile: './test/fixtures/legacy-config/.eslintrc-babel', formatter: () => { count += 1; } @@ -57,7 +57,7 @@ test('should ignore node_modules with exclude option', async (t) => { test('should ignore files according .eslintignore', async (t) => { let count = 0; await rollup({ - input: './test/fixtures/ignored.js', + input: './test/fixtures/legacy-config/ignored.js', plugins: [ eslint({ formatter: () => { @@ -74,7 +74,7 @@ test('should fail with enabled throwOnWarning and throwOnError options', async ( await t.throwsAsync( async () => { await rollup({ - input: './test/fixtures/use-strict.js', + input: './test/fixtures/legacy-config/use-strict.js', plugins: [ eslint({ throwOnWarning: true, @@ -92,7 +92,7 @@ test('should fail with enabled throwOnError option', async (t) => { await t.throwsAsync( async () => { await rollup({ - input: './test/fixtures/use-strict.js', + input: './test/fixtures/legacy-config/use-strict.js', plugins: [ eslint({ throwOnError: true, @@ -109,7 +109,7 @@ test('should fail with enabled throwOnWarning option', async (t) => { await t.throwsAsync( async () => { await rollup({ - input: './test/fixtures/use-strict.js', + input: './test/fixtures/legacy-config/use-strict.js', plugins: [ eslint({ throwOnWarning: true, @@ -124,7 +124,7 @@ test('should fail with enabled throwOnWarning option', async (t) => { test('should not fail with throwOnError and throwOnWarning disabled', async (t) => { await rollup({ - input: './test/fixtures/use-strict.js', + input: './test/fixtures/legacy-config/use-strict.js', plugins: [ eslint({ throwOnError: false, @@ -141,7 +141,7 @@ test('should fail with not found formatter', async (t) => { await t.throwsAsync( async () => { await rollup({ - input: './test/fixtures/use-strict.js', + input: './test/fixtures/legacy-config/use-strict.js', plugins: [ eslint({ formatter: 'not-found-formatter' @@ -155,7 +155,7 @@ test('should fail with not found formatter', async (t) => { test('should not fail with found formatter', async (t) => { rollup({ - input: './test/fixtures/use-strict.js', + input: './test/fixtures/legacy-config/use-strict.js', plugins: [ eslint({ formatter: 'stylish' @@ -168,7 +168,7 @@ test('should not fail with found formatter', async (t) => { test('should not fail with asynchronous formatter function', async (t) => { await rollup({ - input: './test/fixtures/use-strict.js', + input: './test/fixtures/legacy-config/use-strict.js', plugins: [ eslint({ formatter: async () => 'json' @@ -181,12 +181,12 @@ test('should not fail with asynchronous formatter function', async (t) => { test('should fix source code', async (t) => { fs.writeFileSync( - './test/fixtures/fixable-clone.js', - fs.readFileSync('./test/fixtures/fixable.js') + './test/fixtures/legacy-config/fixable-clone.js', + fs.readFileSync('./test/fixtures/legacy-config/fixable.js') ); await rollup({ - input: './test/fixtures/fixable-clone.js', + input: './test/fixtures/legacy-config/fixable-clone.js', plugins: [ eslint({ fix: true @@ -195,11 +195,11 @@ test('should fix source code', async (t) => { }); t.is( - fs.readFileSync('./test/fixtures/fixable-clone.js').toString(), - fs.readFileSync('./test/fixtures/fixed.js').toString() + fs.readFileSync('./test/fixtures/legacy-config/fixable-clone.js').toString(), + fs.readFileSync('./test/fixtures/legacy-config/fixed.js').toString() ); - fs.unlinkSync('./test/fixtures/fixable-clone.js'); + fs.unlinkSync('./test/fixtures/legacy-config/fixable-clone.js'); }); test('works with cjs plugin', async (t) => { @@ -207,7 +207,7 @@ test('works with cjs plugin', async (t) => { const eslintPluginCjs = require('current-package'); let count = 0; await rollup({ - input: './test/fixtures/undeclared.js', + input: './test/fixtures/legacy-config/undeclared.js', plugins: [ eslintPluginCjs({ formatter: (results) => { @@ -222,3 +222,22 @@ test('works with cjs plugin', async (t) => { t.is(count, 1); }); + +test('works with flat config', async (t) => { + let count = 0; + await rollup({ + input: './test/fixtures/flat-config/undeclared.js', + plugins: [ + eslint({ + formatter: (results) => { + count += results[0].messages.length; + // eslint-disable-next-line prefer-destructuring + const { message } = results[0].messages[0]; + t.is(message, "'x' is not defined."); + } + }) + ] + }); + + t.is(count, 1); +}); diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index ab26baa04..0692e1247 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -316,10 +316,10 @@ importers: dependencies: '@rollup/pluginutils': specifier: ^5.0.1 - version: 5.0.1(rollup@4.0.0-24) + version: 5.1.0(rollup@4.0.0-24) eslint: - specifier: ^8.24.0 - version: 8.25.0 + specifier: ^8.57.1 + version: 8.57.1 devDependencies: '@rollup/plugin-node-resolve': specifier: ^15.0.0 @@ -328,8 +328,8 @@ importers: specifier: ^9.0.1 version: 9.0.1(rollup@4.0.0-24)(tslib@2.4.0)(typescript@4.8.4) '@types/eslint': - specifier: ^8.4.6 - version: 8.4.6 + specifier: ^8.56.12 + version: 8.56.12 rollup: specifier: ^4.0.0-24 version: 4.0.0-24 @@ -1404,20 +1404,38 @@ packages: engines: {node: '>=18'} hasBin: true + '@eslint-community/eslint-utils@4.9.0': + resolution: {integrity: sha512-ayVFHdtZ+hsq1t2Dy24wCmGXGe4q9Gu3smhLYALJrr473ZH27MsnSL+LKUlimp4BWJqMDMLmPpx/Q9R3OAlL4g==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + peerDependencies: + eslint: ^6.0.0 || ^7.0.0 || >=8.0.0 + + '@eslint-community/regexpp@4.12.1': + resolution: {integrity: sha512-CCZCDJuduB9OUkFkY2IgppNZMi2lBQgD2qzwXkEia16cge2pijY/aXi96CJMquDMn3nJdlPV1A5KrJEXwfLNzQ==} + engines: {node: ^12.0.0 || ^14.0.0 || >=16.0.0} + '@eslint/eslintrc@1.3.3': resolution: {integrity: sha512-uj3pT6Mg+3t39fvLrj8iuCIJ38zKO9FpGtJ4BBJebJhEwjoT+KLVNCcHT5QC9NGRIEi7fZ0ZR8YRb884auB4Lg==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - '@humanwhocodes/config-array@0.10.7': - resolution: {integrity: sha512-MDl6D6sBsaV452/QSdX+4CXIjZhIcI0PELsxUjk4U828yd58vk3bTIvk/6w5FY+4hIy9sLW0sfrV7K7Kc++j/w==} - engines: {node: '>=10.10.0'} - deprecated: Use @eslint/config-array instead + '@eslint/eslintrc@2.1.4': + resolution: {integrity: sha512-269Z39MS6wVJtsoUl10L60WdkhJVdPG24Q4eZTH3nnF6lpvSShEK3wQjDX9JRWAUPvPh7COouPpU9IrqaZFvtQ==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + + '@eslint/js@8.57.1': + resolution: {integrity: sha512-d9zaMRSTIKDLhctzH12MtXvJKSSUhaHcjV+2Z+GK+EEY7XKpP5yR4x+N3TAcHTcu963nIr+TMcCb4DBCYX1z6Q==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} '@humanwhocodes/config-array@0.11.7': resolution: {integrity: sha512-kBbPWzN8oVMLb0hOUYXhmxggL/1cJE6ydvjDIGi9EnAGUyA7cLVKQg+d/Dsm+KZwx2czGHrCmMVLiyg8s5JPKw==} engines: {node: '>=10.10.0'} deprecated: Use @eslint/config-array instead + '@humanwhocodes/config-array@0.13.0': + resolution: {integrity: sha512-DZLEEqFWQFiyK6h5YIeynKx7JlvCYWL0cImfSRXZ9l4Sg2efkFGTuFf6vzXjK1cq6IYkU+Eg/JizXw+TD2vRNw==} + engines: {node: '>=10.10.0'} + deprecated: Use @eslint/config-array instead + '@humanwhocodes/module-importer@1.0.1': resolution: {integrity: sha512-bxveV4V8v5Yb4ncFTT3rPSgZBOpCkjfK0y4oVVVJwIuDVBRMDXrPyXRL988i5ap9m9bnyEEjWfm5WkBmtffLfA==} engines: {node: '>=12.22'} @@ -1426,6 +1444,10 @@ packages: resolution: {integrity: sha512-ZnQMnLV4e7hDlUvw8H+U8ASL02SS2Gn6+9Ac3wGGLIe7+je2AeAOxPY+izIPJDfFDb7eDjev0Us8MO1iFRN8hA==} deprecated: Use @eslint/object-schema instead + '@humanwhocodes/object-schema@2.0.3': + resolution: {integrity: sha512-93zYdMES/c1D69yZiKDBj0V24vqNzB/koF26KPaagAfd3P/4gUlh3Dys5ogAK+Exi9QyzlD8x/08Zt7wIKcDcA==} + deprecated: Use @eslint/object-schema instead + '@istanbuljs/load-nyc-config@1.1.0': resolution: {integrity: sha512-VjeHSlIzpv/NyD3N0YuHfXOPDIixcA1q2ZV98wsMqcYlPmv2n3Yb2lYP9XMElnaFVXg5A7YLTeLu6V84uQDjmQ==} engines: {node: '>=8'} @@ -1769,8 +1791,8 @@ packages: '@types/d3-dsv@3.0.0': resolution: {integrity: sha512-o0/7RlMl9p5n6FQDptuJVMxDf/7EDEv2SYEO/CwdG2tr1hTfUVi0Iavkk2ax+VpaQ/1jVhpnj5rq1nj8vwhn2A==} - '@types/eslint@8.4.6': - resolution: {integrity: sha512-/fqTbjxyFUaYNO7VcW5g+4npmqVACz1bB7RTHYuLj+PRjw9hrCwrUXVQFpChUS0JsyEFvMZ7U/PfmvWgxJhI9g==} + '@types/eslint@8.56.12': + resolution: {integrity: sha512-03ruubjWyOHlmljCVoxSuNDdmfZDzsrrz0P2LeJsOXr+ZwFQ+0yQIwNCwt/GYhV7Z31fgtXJTAEs+FYlEL851g==} '@types/estree@1.0.0': resolution: {integrity: sha512-WulqXMDUTYAXCjZnk6JtIHPigp55cVtDgDrO2gHRwhyJto21+1zbVCtOYB2L1F9w4qCQ0rOGWBnBe0FNTiEJIQ==} @@ -1942,6 +1964,9 @@ packages: resolution: {integrity: sha512-a48tLG8/4m62gPFbJ27FxwCOqPKxsb8KC3HkmYoq2As/4YyjQl1jDbRr1s63+g4FS/iIehjmN3L5UjmKva1HzQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + '@ungap/structured-clone@1.3.0': + resolution: {integrity: sha512-WmoN8qaIAo7WTYWbAZuG8PYEhn5fkz7dZrqTBZ7dtt//lL2Gwms1IcnQ5yHqjDfX8Ft5j4YzDM23f87zBfDe9g==} + JSONStream@1.3.5: resolution: {integrity: sha512-E+iruNOY8VV9s4JEbe1aNEm6MiszPRr/UfcHMz0TQh1BXSxHK+ASV1R6W4HpjBhSeS+54PIsAMCBmwD06LLsqQ==} hasBin: true @@ -2642,6 +2667,10 @@ packages: resolution: {integrity: sha512-QKQM/UXpIiHcLqJ5AOyIW7XZmzjkzQXYE54n1++wb0u9V/abW3l9uQnxX8Z5Xd18xyKIMTUAyQ0k1e8pz6LUrw==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + eslint-scope@7.2.2: + resolution: {integrity: sha512-dOt21O7lTMhDM+X9mB4GX+DZrZtCUJPL/wlcTqxyrx5IvO0IYtILdtrQGQp+8n5S0gwSVmOf9NQrjMOgfQZlIg==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + eslint-utils@3.0.0: resolution: {integrity: sha512-uuQC43IGctw68pJA1RgbQS8/NP7rch6Cwd4j3ZBtgo4/8Flj4eGE7ZYSZRN3iq5pVUv6GPdW5Z1RFleo84uLDA==} engines: {node: ^10.0.0 || ^12.0.0 || >= 14.0.0} @@ -2656,14 +2685,20 @@ packages: resolution: {integrity: sha512-mQ+suqKJVyeuwGYHAdjMFqjCyfl8+Ldnxuyp3ldiMBFKkvytrXUZWaiPCEav8qDHKty44bD+qV1IP4T+w+xXRA==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} - eslint@8.25.0: - resolution: {integrity: sha512-DVlJOZ4Pn50zcKW5bYH7GQK/9MsoQG2d5eDH0ebEkE8PbgzTTmtt/VTH9GGJ4BfeZCpBLqFfvsjX35UacUL83A==} + 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} - hasBin: true eslint@8.28.0: resolution: {integrity: sha512-S27Di+EVyMxcHiwDrFzk8dJYAaD+/5SoWKxL1ri/71CRHsnJnRDPNt2Kzj24+MT9FDupf4aqqyqPrvI8MvQ4VQ==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + deprecated: This version is no longer supported. Please see https://eslint.org/version-support for other options. + hasBin: true + + eslint@8.57.1: + resolution: {integrity: sha512-ypowyDxpVSYpkXr9WPv2PAZCtNip1Mv5KTW0SCurXv/9iOpcrH9PaqUElksqEB6pChqHGDRCFTyrZlGhnLNGiA==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + deprecated: This version is no longer supported. Please see https://eslint.org/version-support for other options. hasBin: true esm@3.2.25: @@ -2674,6 +2709,10 @@ packages: resolution: {integrity: sha512-DQmnRpLj7f6TgN/NYb0MTzJXL+vJF9h3pHy4JhCIs3zwcgez8xmGg3sXHcEO97BrmO2OSvCwMdfdlyl+E9KjOw==} engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + espree@9.6.1: + resolution: {integrity: sha512-oruZaFkjorTpF32kDSI5/75ViwGeZginGGy2NoOSg3Q9bnwlnmDm4HLnkl0RE3n+njDXR037aY1+x58Z/zFdwQ==} + engines: {node: ^12.22.0 || ^14.17.0 || >=16.0.0} + esprima@4.0.1: resolution: {integrity: sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A==} engines: {node: '>=4'} @@ -2683,6 +2722,10 @@ packages: resolution: {integrity: sha512-cCDispWt5vHHtwMY2YrAQ4ibFkAL8RbH5YGBnZBc90MolvvfkkQcJro/aZiAQUlQ3qgrYS6D6v8Gc5G5CQsc9w==} engines: {node: '>=0.10'} + esquery@1.6.0: + resolution: {integrity: sha512-ca9pw9fomFcKPvFLXhBKUK90ZvGibiGOvRJNbjljY7s7uq/5YO4BOzcYtJqExdx99rF6aAcnRxHmcUHcz6sQsg==} + engines: {node: '>=0.10'} + esrecurse@4.3.0: resolution: {integrity: sha512-KmfKL3b6G+RXvP8N1vr3Tq1kL/oCFgn2NYXEtqP8/L3pKapUA4G8cFVaoF3SU323CD4XypR/ffioHmkti6/Tag==} engines: {node: '>=4.0'} @@ -2864,6 +2907,10 @@ packages: resolution: {integrity: sha512-1C+6nQRb1GwGMKm2dH/E7enFAMxGTmGI7/dEdhy/DNelv85w9B72t3uc5frtMNXIbzrarJJ/lTCjcaZwbLJmyw==} engines: {node: '>=8'} + globals@13.24.0: + resolution: {integrity: sha512-AhO5QUcj8llrbG09iWhPU2B204J1xnPeL8kQmVorSsy+Sjj1sk8gIyh6cUocGmH4L0UuhAJy+hJMRA4mgA4mFQ==} + engines: {node: '>=8'} + globby@11.1.0: resolution: {integrity: sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==} engines: {node: '>=10'} @@ -2882,6 +2929,9 @@ packages: grapheme-splitter@1.0.4: resolution: {integrity: sha512-bzh50DW9kTPM00T8y4o8vQg89Di9oLJVLW/KaOGIXJWP/iqCN6WKYkbNOF04vFLJhwcpYUh9ydh/+5vpOqV4YQ==} + graphemer@1.4.0: + resolution: {integrity: sha512-EtKwoO6kxCL9WO5xipiHTZlSzBm7WLT627TqC/uVRd0HKmq8NXyebnNYxDoBi7wt8eTWrUrKXCOVaFq9x1kgag==} + graphql-tag@2.12.6: resolution: {integrity: sha512-FdSNcu2QQcWnM2VNvSCCDCVS5PpPqpzgFT8+GXzqJuoDd0CBncxCY278u4mhRO7tMgo2JjgJA5aZ+nWSQ/Z+xg==} engines: {node: '>=10'} @@ -3562,6 +3612,10 @@ packages: resolution: {integrity: sha512-74RlY5FCnhq4jRxVUPKDaRwrVNXMqsGsiW6AJw4XK8hmtm10wC0ypZBLw5IIp85NZMr91+qd1RvvENwg7jjRFw==} engines: {node: '>= 0.8.0'} + optionator@0.9.4: + resolution: {integrity: sha512-6IpQ7mKUxRcZNLIObR0hz7lxsapSSIYNZJwXPGeF0mTVqGKFIXj1DQcMoT22S3ROcLyY/rz0PWaWZ9ayWmad9g==} + engines: {node: '>= 0.8.0'} + p-cancelable@2.1.1: resolution: {integrity: sha512-BZOr3nRQHOntUjTrH8+Lh54smKHoHyur8We1V8DSMVrl5A2malOOwuJRnKRDjSnkoeBh4at6BwEnb5I7Jl31wg==} engines: {node: '>=8'} @@ -4612,6 +4666,10 @@ packages: resolution: {integrity: sha512-Hz/mrNwitNRh/HUAtM/VT/5VH+ygD6DV7mYKZAtHOrbs8U7lvPS6xf7EJKMF0uW1KJCl0H701g3ZGus+muE5vQ==} engines: {node: '>=0.10.0'} + word-wrap@1.2.5: + resolution: {integrity: sha512-BN22B5eaMMI9UMtjrGd5g5eCYPpCPDUy0FJXbYsaT5zYxjFOckS53SQDE3pWkVoWpHXVb3BrYcEN4Twa55B5cA==} + engines: {node: '>=0.10.0'} + wrap-ansi@6.2.0: resolution: {integrity: sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA==} engines: {node: '>=8'} @@ -5469,6 +5527,13 @@ snapshots: write-pkg: 4.0.0 yargs-parser: 21.1.1 + '@eslint-community/eslint-utils@4.9.0(eslint@8.57.1)': + dependencies: + eslint: 8.57.1 + eslint-visitor-keys: 3.4.3 + + '@eslint-community/regexpp@4.12.1': {} + '@eslint/eslintrc@1.3.3': dependencies: ajv: 6.12.6 @@ -5483,14 +5548,22 @@ snapshots: transitivePeerDependencies: - supports-color - '@humanwhocodes/config-array@0.10.7': + '@eslint/eslintrc@2.1.4': dependencies: - '@humanwhocodes/object-schema': 1.2.1 + ajv: 6.12.6 debug: 4.3.4 + espree: 9.6.1 + globals: 13.24.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 + '@eslint/js@8.57.1': {} + '@humanwhocodes/config-array@0.11.7': dependencies: '@humanwhocodes/object-schema': 1.2.1 @@ -5499,10 +5572,20 @@ snapshots: transitivePeerDependencies: - supports-color + '@humanwhocodes/config-array@0.13.0': + dependencies: + '@humanwhocodes/object-schema': 2.0.3 + debug: 4.3.4 + minimatch: 3.1.2 + transitivePeerDependencies: + - supports-color + '@humanwhocodes/module-importer@1.0.1': {} '@humanwhocodes/object-schema@1.2.1': {} + '@humanwhocodes/object-schema@2.0.3': {} + '@istanbuljs/load-nyc-config@1.1.0': dependencies: camelcase: 5.3.1 @@ -5794,7 +5877,7 @@ snapshots: '@types/d3-dsv@3.0.0': {} - '@types/eslint@8.4.6': + '@types/eslint@8.56.12': dependencies: '@types/estree': 1.0.0 '@types/json-schema': 7.0.11 @@ -6008,6 +6091,8 @@ snapshots: '@typescript-eslint/types': 5.44.0 eslint-visitor-keys: 3.3.0 + '@ungap/structured-clone@1.3.0': {} + JSONStream@1.3.5: dependencies: jsonparse: 1.3.1 @@ -6021,9 +6106,9 @@ snapshots: dependencies: acorn: 6.4.2 - acorn-jsx@5.3.2(acorn@8.8.0): + acorn-jsx@5.3.2(acorn@8.14.0): dependencies: - acorn: 8.8.0 + acorn: 8.14.0 acorn-walk@8.2.0: {} @@ -6823,10 +6908,10 @@ snapshots: esrecurse: 4.3.0 estraverse: 5.3.0 - eslint-utils@3.0.0(eslint@8.25.0): + eslint-scope@7.2.2: dependencies: - eslint: 8.25.0 - eslint-visitor-keys: 2.1.0 + esrecurse: 4.3.0 + estraverse: 5.3.0 eslint-utils@3.0.0(eslint@8.28.0): dependencies: @@ -6837,11 +6922,14 @@ snapshots: eslint-visitor-keys@3.3.0: {} - eslint@8.25.0: + eslint-visitor-keys@3.4.3: {} + + eslint@8.28.0: dependencies: '@eslint/eslintrc': 1.3.3 - '@humanwhocodes/config-array': 0.10.7 + '@humanwhocodes/config-array': 0.11.7 '@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 @@ -6849,7 +6937,7 @@ snapshots: doctrine: 3.0.0 escape-string-regexp: 4.0.0 eslint-scope: 7.1.1 - eslint-utils: 3.0.0(eslint@8.25.0) + eslint-utils: 3.0.0(eslint@8.28.0) eslint-visitor-keys: 3.3.0 espree: 9.4.0 esquery: 1.4.0 @@ -6859,12 +6947,12 @@ snapshots: find-up: 5.0.0 glob-parent: 6.0.2 globals: 13.17.0 - globby: 11.1.0 grapheme-splitter: 1.0.4 ignore: 5.2.0 import-fresh: 3.3.0 imurmurhash: 0.1.4 is-glob: 4.0.3 + is-path-inside: 3.0.3 js-sdsl: 4.1.5 js-yaml: 4.1.0 json-stable-stringify-without-jsonify: 1.0.1 @@ -6880,46 +6968,45 @@ snapshots: transitivePeerDependencies: - supports-color - eslint@8.28.0: + eslint@8.57.1: dependencies: - '@eslint/eslintrc': 1.3.3 - '@humanwhocodes/config-array': 0.11.7 + '@eslint-community/eslint-utils': 4.9.0(eslint@8.57.1) + '@eslint-community/regexpp': 4.12.1 + '@eslint/eslintrc': 2.1.4 + '@eslint/js': 8.57.1 + '@humanwhocodes/config-array': 0.13.0 '@humanwhocodes/module-importer': 1.0.1 '@nodelib/fs.walk': 1.2.8 + '@ungap/structured-clone': 1.3.0 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.1.1 - eslint-utils: 3.0.0(eslint@8.28.0) - eslint-visitor-keys: 3.3.0 - espree: 9.4.0 - esquery: 1.4.0 + eslint-scope: 7.2.2 + eslint-visitor-keys: 3.4.3 + espree: 9.6.1 + esquery: 1.6.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.17.0 - grapheme-splitter: 1.0.4 + globals: 13.24.0 + graphemer: 1.4.0 ignore: 5.2.0 - import-fresh: 3.3.0 imurmurhash: 0.1.4 is-glob: 4.0.3 is-path-inside: 3.0.3 - js-sdsl: 4.1.5 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.1 - regexpp: 3.2.0 + optionator: 0.9.4 strip-ansi: 6.0.1 - strip-json-comments: 3.1.1 text-table: 0.2.0 transitivePeerDependencies: - supports-color @@ -6928,16 +7015,26 @@ snapshots: espree@9.4.0: dependencies: - acorn: 8.8.0 - acorn-jsx: 5.3.2(acorn@8.8.0) + acorn: 8.14.0 + acorn-jsx: 5.3.2(acorn@8.14.0) eslint-visitor-keys: 3.3.0 + espree@9.6.1: + dependencies: + acorn: 8.14.0 + acorn-jsx: 5.3.2(acorn@8.14.0) + eslint-visitor-keys: 3.4.3 + esprima@4.0.1: {} esquery@1.4.0: dependencies: estraverse: 5.3.0 + esquery@1.6.0: + dependencies: + estraverse: 5.3.0 + esrecurse@4.3.0: dependencies: estraverse: 5.3.0 @@ -7127,6 +7224,10 @@ snapshots: dependencies: type-fest: 0.20.2 + globals@13.24.0: + dependencies: + type-fest: 0.20.2 + globby@11.1.0: dependencies: array-union: 2.1.0 @@ -7162,6 +7263,8 @@ snapshots: grapheme-splitter@1.0.4: {} + graphemer@1.4.0: {} + graphql-tag@2.12.6(graphql@16.6.0): dependencies: graphql: 16.6.0 @@ -7817,6 +7920,15 @@ snapshots: type-check: 0.4.0 word-wrap: 1.2.3 + optionator@0.9.4: + dependencies: + deep-is: 0.1.4 + fast-levenshtein: 2.0.6 + levn: 0.4.1 + prelude-ls: 1.2.1 + type-check: 0.4.0 + word-wrap: 1.2.5 + p-cancelable@2.1.1: {} p-defer@1.0.0: {} @@ -8820,6 +8932,8 @@ snapshots: word-wrap@1.2.3: {} + word-wrap@1.2.5: {} + wrap-ansi@6.2.0: dependencies: ansi-styles: 4.3.0