diff --git a/e2e/next/src/next.test.ts b/e2e/next/src/next.test.ts index 99d12ae461..2e6b61c356 100644 --- a/e2e/next/src/next.test.ts +++ b/e2e/next/src/next.test.ts @@ -146,6 +146,7 @@ describe('Next.js Applications', () => { updateFile( mainPath, ` + /* eslint-disable */ import dynamic from 'next/dynamic'; const DynamicComponent = dynamic( () => import('@${proj}/${libName}').then(d => d.${stringUtils.capitalize( @@ -358,9 +359,6 @@ describe('Next.js Applications', () => { `apps/${appName}/next.config.js`, ` module.exports = { - future: { - webpack5: false, - }, webpack: (c) => { console.log('NODE_ENV is', process.env.NODE_ENV); return c; @@ -459,7 +457,7 @@ describe('Next.js Applications', () => { }); }, 120000); - it('webpack5 - should be able to consume a react libs (buildable and non-buildable)', async () => { + it('webpack4 - should be able to consume a react libs (buildable and non-buildable)', async () => { if (isNotWindows()) { const appName = uniq('app'); const buildableLibName = uniq('lib'); @@ -488,16 +486,13 @@ describe('Next.js Applications', () => { ` // eslint-disable-next-line @typescript-eslint/no-var-requires const withNx = require('@nrwl/next/plugins/with-nx'); - module.exports = withNx({ nx: { // Set this to false if you do not want to use SVGR // See: https://github.com/gregberge/svgr svgr: true, }, - future: { - webpack5: true - } + webpack5: false }); ` ); @@ -524,12 +519,12 @@ describe('Next.js Applications', () => { checkUnitTest: true, checkLint: true, checkE2E: true, - checkWebpack5: true, + checkWebpack4: true, }); } }, 300000); - it('webpack5 - should build with a next.config.js file in the dist folder', async () => { + it('webpack4 - should build with a next.config.js file in the dist folder', async () => { const appName = uniq('app'); runCLI(`generate @nrwl/next:app ${appName} --no-interactive --style=css`); @@ -538,9 +533,7 @@ describe('Next.js Applications', () => { `apps/${appName}/next.config.js`, ` module.exports = { - future: { - webpack5: true, - }, + webpack5: false, webpack: (c) => { console.log('NODE_ENV is', process.env.NODE_ENV); return c; @@ -556,7 +549,6 @@ describe('Next.js Applications', () => { checkFilesExist(`dist/apps/${appName}/next.config.js`); expect(result).toContain('NODE_ENV is production'); - expect(result).toContain('Using webpack 5'); }, 120000); it('should allow using a custom server implementation in TypeScript', async () => { @@ -644,12 +636,12 @@ async function checkApp( checkUnitTest: boolean; checkLint: boolean; checkE2E: boolean; - checkWebpack5?: boolean; + checkWebpack4?: boolean; } ) { const buildResult = runCLI(`build ${appName} --withDeps`); - if (opts.checkWebpack5) { - expect(buildResult).toContain('Using webpack 5'); + if (opts.checkWebpack4) { + expect(buildResult).toContain('Using webpack 4'); } expect(buildResult).toContain(`Compiled successfully`); checkFilesExist(`dist/apps/${appName}/.next/build-manifest.json`); diff --git a/package.json b/package.json index c658de082f..ac26a6ea12 100644 --- a/package.json +++ b/package.json @@ -46,6 +46,7 @@ "@angular/router": "^12.0.0", "@angular/service-worker": "^12.0.0", "@angular/upgrade": "^12.0.0", + "@babel/helper-create-regexp-features-plugin": "^7.14.5", "@cypress/webpack-preprocessor": "4.1.5", "@nestjs/common": "^7.0.0", "@nestjs/core": "^7.0.0", @@ -131,6 +132,7 @@ "dotenv": "8.2.0", "ejs": "^3.1.5", "eslint": "7.10.0", + "eslint-config-next": "^11.0.1", "eslint-config-prettier": "^8.1.0", "eslint-plugin-cypress": "^2.10.3", "eslint-plugin-import": "2.22.1", diff --git a/packages/next/migrations.json b/packages/next/migrations.json index fc36c507ed..e999df628b 100644 --- a/packages/next/migrations.json +++ b/packages/next/migrations.json @@ -42,6 +42,12 @@ "version": "11.6.0-beta.0", "description": "Add js patterns to tsconfig.json", "factory": "./src/migrations/update-11-6-0/add-js-include-11-6-0" + }, + "add-next-eslint-12.6.0": { + "cli": "nx", + "version": "12.6.0-beta.0", + "description": "Add 'next' eslint config", + "factory": "./src/migrations/update-12-6-0/add-next-eslint" } }, "packageJsonUpdates": { @@ -119,6 +125,15 @@ "alwaysAddToPackageJson": false } } + }, + "12.6.0": { + "version": "12.6.0-beta.0", + "packages": { + "next": { + "version": "11.0.1", + "alwaysAddToPackageJson": false + } + } } } } diff --git a/packages/next/package.json b/packages/next/package.json index 5f2e5d75ea..7d240e52d4 100644 --- a/packages/next/package.json +++ b/packages/next/package.json @@ -29,7 +29,7 @@ "migrations": "./migrations.json" }, "peerDependencies": { - "next": "^10.2.0" + "next": "^11.0.1" }, "dependencies": { "@babel/plugin-proposal-decorators": "7.12.13", @@ -41,6 +41,7 @@ "@nrwl/workspace": "*", "@svgr/webpack": "^5.5.0", "chalk": "4.1.0", + "eslint-config-next": "^11.0.1", "fs-extra": "^9.1.0", "url-loader": "^3.0.0", "tsconfig-paths": "^3.9.0", diff --git a/packages/next/src/generators/application/application.spec.ts b/packages/next/src/generators/application/application.spec.ts index f0597a9e46..5bd9025b19 100644 --- a/packages/next/src/generators/application/application.spec.ts +++ b/packages/next/src/generators/application/application.spec.ts @@ -310,9 +310,14 @@ describe('app', () => { const eslintJson = readJson(tree, '/apps/my-app/.eslintrc.json'); expect(eslintJson).toMatchInlineSnapshot(` Object { + "env": Object { + "jest": true, + }, "extends": Array [ - "plugin:@nrwl/nx/react", + "plugin:@nrwl/nx/react-typescript", "../../.eslintrc.json", + "next", + "next/core-web-vitals", ], "ignorePatterns": Array [ "!**/*", diff --git a/packages/next/src/generators/application/files/index.d.ts__tmpl__ b/packages/next/src/generators/application/files/index.d.ts__tmpl__ index 7ba08fa17c..090fbbce20 100644 --- a/packages/next/src/generators/application/files/index.d.ts__tmpl__ +++ b/packages/next/src/generators/application/files/index.d.ts__tmpl__ @@ -4,3 +4,15 @@ declare module '*.svg' { export const ReactComponent: any; export default content; } + +<% if (style === 'less') { %> +declare module '*.module.less' { + const classes: { readonly [key: string]: string }; + export default classes; +} +<% } else if (style === 'styl') { %> +declare module '*.module.styl' { + const classes: { readonly [key: string]: string }; + export default classes; +} +<% } %> diff --git a/packages/next/src/generators/application/files/next-env.d.ts__tmpl__ b/packages/next/src/generators/application/files/next-env.d.ts__tmpl__ index 76a5070588..c6643fda12 100644 --- a/packages/next/src/generators/application/files/next-env.d.ts__tmpl__ +++ b/packages/next/src/generators/application/files/next-env.d.ts__tmpl__ @@ -1,13 +1,3 @@ /// /// -<% if (style === 'less') { %> -declare module '*.module.less' { - const classes: { readonly [key: string]: string }; - export default classes; -} -<% } else if (style === 'styl') { %> -declare module '*.module.styl' { - const classes: { readonly [key: string]: string }; - export default classes; -} -<% } %> \ No newline at end of file +/// diff --git a/packages/next/src/generators/application/files/next.config.js__tmpl__ b/packages/next/src/generators/application/files/next.config.js__tmpl__ index bb2be45f09..bc471a5559 100644 --- a/packages/next/src/generators/application/files/next.config.js__tmpl__ +++ b/packages/next/src/generators/application/files/next.config.js__tmpl__ @@ -15,7 +15,9 @@ const nextConfig = { }, // Set this to true if you use CSS modules. // See: https://github.com/css-modules/css-modules - cssModules: false + cssModules: false, + // @zeit/next-less does not support webpack 5 + webpack5: false, }; module.exports = withLess(withNx(nextConfig)); @@ -33,7 +35,9 @@ const nextConfig = { }, // Set this to true if you use CSS modules. // See: https://github.com/css-modules/css-modules - cssModules: false + cssModules: false, + // @zeit/next-stylus does not support webpack 5 + webpack5: false, }; module.exports = withStylus(withNx(nextConfig)); diff --git a/packages/next/src/generators/application/lib/add-linting.ts b/packages/next/src/generators/application/lib/add-linting.ts index c799f08249..d20caae596 100644 --- a/packages/next/src/generators/application/lib/add-linting.ts +++ b/packages/next/src/generators/application/lib/add-linting.ts @@ -39,6 +39,23 @@ export async function addLinting( `${options.appProjectRoot}/tsconfig(.*)?.json`, ]; } + if (!reactEslintJson.extends) { + reactEslintJson.extends = []; + } + if (typeof reactEslintJson.extends === 'string') { + reactEslintJson.extends = [reactEslintJson.extends]; + } + // add next.js configuration + reactEslintJson.extends.push(...['next', 'next/core-web-vitals']); + // remove nx/react plugin, as it conflicts with the next.js one + reactEslintJson.extends = reactEslintJson.extends.filter( + (name) => name !== 'plugin:@nrwl/nx/react' + ); + reactEslintJson.extends.unshift('plugin:@nrwl/nx/react-typescript'); + if (!reactEslintJson.env) { + reactEslintJson.env = {}; + } + reactEslintJson.env.jest = true; return reactEslintJson; } ); diff --git a/packages/next/src/generators/application/lib/create-application-files.helpers.ts b/packages/next/src/generators/application/lib/create-application-files.helpers.ts index 65159c6830..19e60995ee 100644 --- a/packages/next/src/generators/application/lib/create-application-files.helpers.ts +++ b/packages/next/src/generators/application/lib/create-application-files.helpers.ts @@ -7,6 +7,7 @@ export function createAppJsx(name: string) {
If you like Nx, please give it a star:
+ {/* eslint-disable-next-line @next/next/no-img-element */} Star
diff --git a/packages/next/src/generators/init/init.ts b/packages/next/src/generators/init/init.ts index 2703bceb91..92c26f83f0 100644 --- a/packages/next/src/generators/init/init.ts +++ b/packages/next/src/generators/init/init.ts @@ -11,7 +11,11 @@ import { jestInitGenerator } from '@nrwl/jest'; import { cypressInitGenerator } from '@nrwl/cypress'; import { reactDomVersion, reactInitGenerator, reactVersion } from '@nrwl/react'; -import { nextVersion, nxVersion } from '../../utils/versions'; +import { + eslintConfigNextVersion, + nextVersion, + nxVersion, +} from '../../utils/versions'; import { InitSchema } from './schema'; function updateDependencies(host: Tree) { @@ -31,7 +35,9 @@ function updateDependencies(host: Tree) { 'react-dom': reactDomVersion, tslib: '^2.0.0', }, - {} + { + 'eslint-config-next': eslintConfigNextVersion, + } ); } diff --git a/packages/next/src/migrations/update-12-6-0/add-next-eslint.spec.ts b/packages/next/src/migrations/update-12-6-0/add-next-eslint.spec.ts new file mode 100644 index 0000000000..2dcd9a60c2 --- /dev/null +++ b/packages/next/src/migrations/update-12-6-0/add-next-eslint.spec.ts @@ -0,0 +1,214 @@ +import { readJson, Tree } from '@nrwl/devkit'; +import { createTreeWithEmptyWorkspace } from '@nrwl/devkit/testing'; +import addNextEslint from './add-next-eslint'; + +describe('Add next eslint 12.6.0', () => { + let tree: Tree; + + beforeEach(async () => { + tree = createTreeWithEmptyWorkspace(); + }); + + it('should add "next" config options', async () => { + tree.write( + 'workspace.json', + JSON.stringify({ + projects: { + app1: { + root: 'apps/app1', + targets: { + build: { + executor: '@nrwl/next:build', + }, + }, + }, + }, + }) + ); + tree.write( + 'nx.json', + JSON.stringify({ + projects: { + app1: {}, + }, + }) + ); + tree.write( + 'apps/app1/.eslintrc.json', + JSON.stringify({ + extends: ['../../.eslintrc.json'], + ignorePatterns: ['!**/*'], + }) + ); + + await addNextEslint(tree); + + const result = readJson(tree, 'apps/app1/.eslintrc.json'); + expect(result.extends).toContain('next'); + expect(result.extends).toContain('next/core-web-vitals'); + }); + + it('should add "next" config options when no "extends" property is present', async () => { + tree.write( + 'workspace.json', + JSON.stringify({ + projects: { + app1: { + root: 'apps/app1', + targets: { + build: { + executor: '@nrwl/next:build', + }, + }, + }, + }, + }) + ); + tree.write( + 'nx.json', + JSON.stringify({ + projects: { + app1: {}, + }, + }) + ); + tree.write( + 'apps/app1/.eslintrc.json', + JSON.stringify({ + ignorePatterns: ['!**/*'], + }) + ); + + await addNextEslint(tree); + + const result = readJson(tree, 'apps/app1/.eslintrc.json'); + expect(result.extends).toContain('next'); + expect(result.extends).toContain('next/core-web-vitals'); + }); + + it('should add "next" config options when "extends" property is a string', async () => { + tree.write( + 'workspace.json', + JSON.stringify({ + projects: { + app1: { + root: 'apps/app1', + targets: { + build: { + executor: '@nrwl/next:build', + }, + }, + }, + }, + }) + ); + tree.write( + 'nx.json', + JSON.stringify({ + projects: { + app1: {}, + }, + }) + ); + tree.write( + 'apps/app1/.eslintrc.json', + JSON.stringify({ + extends: '../../.eslintrc.json', + ignorePatterns: ['!**/*'], + }) + ); + + await addNextEslint(tree); + + const result = readJson(tree, 'apps/app1/.eslintrc.json'); + expect(result.extends).toContain('next'); + expect(result.extends).toContain('next/core-web-vitals'); + expect(result.extends).toContain('../../.eslintrc.json'); + }); + + it('should not change projects that are not next.js', async () => { + tree.write( + 'workspace.json', + JSON.stringify({ + projects: { + app1: { + root: 'apps/app1', + targets: { + build: { + executor: '@nrwl/web:build', + }, + }, + }, + }, + }) + ); + tree.write( + 'nx.json', + JSON.stringify({ + projects: { + app1: {}, + }, + }) + ); + tree.write( + 'apps/app1/.eslintrc.json', + JSON.stringify({ + extends: '../../.eslintrc.json', + ignorePatterns: ['!**/*'], + }) + ); + + await addNextEslint(tree); + + expect(readJson(tree, 'apps/app1/.eslintrc.json')).toMatchObject({ + extends: '../../.eslintrc.json', + ignorePatterns: ['!**/*'], + }); + }); + + it('should remove nx/react eslint plugin', async () => { + tree.write( + 'workspace.json', + JSON.stringify({ + projects: { + app1: { + root: 'apps/app1', + targets: { + build: { + executor: '@nrwl/next:build', + }, + }, + }, + }, + }) + ); + tree.write( + 'nx.json', + JSON.stringify({ + projects: { + app1: {}, + }, + }) + ); + tree.write( + 'apps/app1/.eslintrc.json', + JSON.stringify({ + extends: ['plugin:@nrwl/nx/react', '../../.eslintrc.json'], + }) + ); + + await addNextEslint(tree); + + expect(readJson(tree, 'apps/app1/.eslintrc.json').extends).not.toContain( + 'plugin:@nrwl/nx/react' + ); + }); + + it('should add eslint-config-next to dev dependencies', async () => { + await addNextEslint(tree); + + expect( + readJson(tree, 'package.json').devDependencies['eslint-config-next'] + ).toBeTruthy(); + }); +}); diff --git a/packages/next/src/migrations/update-12-6-0/add-next-eslint.ts b/packages/next/src/migrations/update-12-6-0/add-next-eslint.ts new file mode 100644 index 0000000000..cb25853a37 --- /dev/null +++ b/packages/next/src/migrations/update-12-6-0/add-next-eslint.ts @@ -0,0 +1,47 @@ +import { formatFiles, getProjects, Tree, updateJson } from '@nrwl/devkit'; +import { eslintConfigNextVersion } from '../../utils/versions'; + +export async function addNextEslint(host: Tree) { + const projects = getProjects(host); + + projects.forEach((project) => { + if (project.targets?.build?.executor !== '@nrwl/next:build') return; + + const eslintPath = `${project.root}/.eslintrc.json`; + if (!host.exists(eslintPath)) return; + + updateJson(host, eslintPath, (eslintConfig) => { + if (!eslintConfig.extends) { + eslintConfig.extends = []; + } + if (typeof eslintConfig.extends === 'string') { + eslintConfig.extends = [eslintConfig.extends]; + } + // add next.js configuration + eslintConfig.extends.push(...['next', 'next/core-web-vitals']); + // remove nx/react plugin, as it conflicts with the next.js one + eslintConfig.extends = eslintConfig.extends.filter( + (name) => name !== 'plugin:@nrwl/nx/react' + ); + eslintConfig.extends.unshift('plugin:@nrwl/nx/react-typescript'); + if (!eslintConfig.env) { + eslintConfig.env = {}; + } + eslintConfig.env.jest = true; + return eslintConfig; + }); + }); + + updateJson(host, 'package.json', (packageJsonContents) => { + if (!packageJsonContents.devDependencies) { + packageJsonContents.devDependencies = {}; + } + packageJsonContents.devDependencies['eslint-config-next'] = + eslintConfigNextVersion; + return packageJsonContents; + }); + + await formatFiles(host); +} + +export default addNextEslint; diff --git a/packages/next/src/utils/versions.ts b/packages/next/src/utils/versions.ts index 7b69acbb03..1624189e25 100644 --- a/packages/next/src/utils/versions.ts +++ b/packages/next/src/utils/versions.ts @@ -1,6 +1,7 @@ export const nxVersion = '*'; -export const nextVersion = '10.2.0'; +export const nextVersion = '11.0.1'; +export const eslintConfigNextVersion = '11.0.1'; export const nodeSass = '5.0.0'; export const zeitNextLess = '1.0.1'; export const zeitNextStylus = '1.0.1'; diff --git a/packages/web/src/webpack/entry.ts b/packages/web/src/webpack/entry.ts index 4f899b364c..311fa5d151 100644 --- a/packages/web/src/webpack/entry.ts +++ b/packages/web/src/webpack/entry.ts @@ -1,7 +1,8 @@ import { logger } from '@nrwl/devkit'; import { requireShim } from './require-shim'; -const { version } = requireShim('webpack/package.json'); +const result = requireShim('webpack/package.json'); +const version = result?.version; exports.default = undefined; diff --git a/yarn.lock b/yarn.lock index 5bd7c81cd2..abce180928 100644 --- a/yarn.lock +++ b/yarn.lock @@ -714,6 +714,14 @@ "@babel/helper-annotate-as-pure" "^7.12.13" regexpu-core "^4.7.1" +"@babel/helper-create-regexp-features-plugin@^7.14.5": + version "7.14.5" + resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.14.5.tgz#c7d5ac5e9cf621c26057722fb7a8a4c5889358c4" + integrity sha512-TLawwqpOErY2HhWbGJ2nZT5wSkR192QpN+nBg1THfBfftrlvOh+WbhrxXCH4q4xJ9Gl16BGPR/48JA+Ryiho/A== + dependencies: + "@babel/helper-annotate-as-pure" "^7.14.5" + regexpu-core "^4.7.1" + "@babel/helper-define-polyfill-provider@^0.1.5": version "0.1.5" resolved "https://registry.yarnpkg.com/@babel/helper-define-polyfill-provider/-/helper-define-polyfill-provider-0.1.5.tgz#3c2f91b7971b9fc11fe779c945c014065dea340e" @@ -3194,6 +3202,11 @@ resolved "https://registry.yarnpkg.com/@next/env/-/env-10.2.0.tgz#154dbce2efa3ad067ebd20b7d0aa9aed775e7c97" integrity sha512-tsWBsn1Rb6hXRaHc/pWMCpZ4Ipkf3OCbZ54ef5ukgIyEvzzGdGFXQshPP2AF7yb+8yMpunWs7vOMZW3e8oPF6A== +"@next/eslint-plugin-next@11.0.1": + version "11.0.1" + resolved "https://registry.yarnpkg.com/@next/eslint-plugin-next/-/eslint-plugin-next-11.0.1.tgz#5dd3264a40fadcf28eba00d914d69103422bb7e6" + integrity sha512-UzdX3y6XSrj9YuASUb/p4sRvfjP2klj2YgIOfMwrWoLTTPJQMh00hREB9Ftr7m7RIxjVSAaaLXIRLdxvq948GA== + "@next/polyfill-module@10.2.0": version "10.2.0" resolved "https://registry.yarnpkg.com/@next/polyfill-module/-/polyfill-module-10.2.0.tgz#61f41110c4b465cc26d113e2054e205df61c3594" @@ -3819,6 +3832,11 @@ estree-walker "^2.0.1" picomatch "^2.2.2" +"@rushstack/eslint-patch@^1.0.6": + version "1.0.6" + resolved "https://registry.yarnpkg.com/@rushstack/eslint-patch/-/eslint-patch-1.0.6.tgz#023d72a5c4531b4ce204528971700a78a85a0c50" + integrity sha512-Myxw//kzromB9yWgS8qYGuGVf91oBUUJpNvy5eM50sqvmKLbKjwLxohJnkWGTeeI9v9IBMtPLxz5Gc60FIfvCA== + "@samverschueren/stream-to-observable@^0.3.0": version "0.3.1" resolved "https://registry.yarnpkg.com/@samverschueren/stream-to-observable/-/stream-to-observable-0.3.1.tgz#a21117b19ee9be70c379ec1877537ef2e1c63301" @@ -5480,6 +5498,16 @@ eslint-scope "^5.0.0" eslint-utils "^2.0.0" +"@typescript-eslint/parser@^4.20.0": + version "4.28.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-4.28.0.tgz#2404c16751a28616ef3abab77c8e51d680a12caa" + integrity sha512-7x4D22oPY8fDaOCvkuXtYYTQ6mTMmkivwEzS+7iml9F9VkHGbbZ3x4fHRwxAb5KeuSkLqfnYjs46tGx2Nour4A== + dependencies: + "@typescript-eslint/scope-manager" "4.28.0" + "@typescript-eslint/types" "4.28.0" + "@typescript-eslint/typescript-estree" "4.28.0" + debug "^4.3.1" + "@typescript-eslint/parser@^4.3.0": version "4.17.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-4.17.0.tgz#141b647ffc72ebebcbf9b0fe6087f65b706d3215" @@ -5506,6 +5534,14 @@ "@typescript-eslint/types" "4.23.0" "@typescript-eslint/visitor-keys" "4.23.0" +"@typescript-eslint/scope-manager@4.28.0": + version "4.28.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-4.28.0.tgz#6a3009d2ab64a30fc8a1e257a1a320067f36a0ce" + integrity sha512-eCALCeScs5P/EYjwo6se9bdjtrh8ByWjtHzOkC4Tia6QQWtQr3PHovxh3TdYTuFcurkYI4rmFsRFpucADIkseg== + dependencies: + "@typescript-eslint/types" "4.28.0" + "@typescript-eslint/visitor-keys" "4.28.0" + "@typescript-eslint/types@4.17.0": version "4.17.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-4.17.0.tgz#f57d8fc7f31b348db946498a43050083d25f40ad" @@ -5516,6 +5552,11 @@ resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-4.23.0.tgz#da1654c8a5332f4d1645b2d9a1c64193cae3aa3b" integrity sha512-oqkNWyG2SLS7uTWLZf6Sr7Dm02gA5yxiz1RP87tvsmDsguVATdpVguHr4HoGOcFOpCvx9vtCSCyQUGfzq28YCw== +"@typescript-eslint/types@4.28.0": + version "4.28.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-4.28.0.tgz#a33504e1ce7ac51fc39035f5fe6f15079d4dafb0" + integrity sha512-p16xMNKKoiJCVZY5PW/AfILw2xe1LfruTcfAKBj3a+wgNYP5I9ZEKNDOItoRt53p4EiPV6iRSICy8EPanG9ZVA== + "@typescript-eslint/typescript-estree@4.17.0": version "4.17.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-4.17.0.tgz#b835d152804f0972b80dbda92477f9070a72ded1" @@ -5542,6 +5583,19 @@ semver "^7.3.2" tsutils "^3.17.1" +"@typescript-eslint/typescript-estree@4.28.0": + version "4.28.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-4.28.0.tgz#e66d4e5aa2ede66fec8af434898fe61af10c71cf" + integrity sha512-m19UQTRtxMzKAm8QxfKpvh6OwQSXaW1CdZPoCaQuLwAq7VZMNuhJmZR4g5281s2ECt658sldnJfdpSZZaxUGMQ== + dependencies: + "@typescript-eslint/types" "4.28.0" + "@typescript-eslint/visitor-keys" "4.28.0" + debug "^4.3.1" + globby "^11.0.3" + is-glob "^4.0.1" + semver "^7.3.5" + tsutils "^3.21.0" + "@typescript-eslint/visitor-keys@4.17.0": version "4.17.0" resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-4.17.0.tgz#9c304cfd20287c14a31d573195a709111849b14d" @@ -5558,6 +5612,14 @@ "@typescript-eslint/types" "4.23.0" eslint-visitor-keys "^2.0.0" +"@typescript-eslint/visitor-keys@4.28.0": + version "4.28.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-4.28.0.tgz#255c67c966ec294104169a6939d96f91c8a89434" + integrity sha512-PjJyTWwrlrvM5jazxYF5ZPs/nl0kHDZMVbuIcbpawVXaDPelp3+S9zpOz5RmVUfS/fD5l5+ZXNKnWhNYjPzCvw== + dependencies: + "@typescript-eslint/types" "4.28.0" + eslint-visitor-keys "^2.0.0" + "@verdaccio/commons-api@10.0.0", "@verdaccio/commons-api@^10.0.0": version "10.0.0" resolved "https://registry.yarnpkg.com/@verdaccio/commons-api/-/commons-api-10.0.0.tgz#2d7de8722f94181f1a71891fe91198a7c14e6dea" @@ -11580,6 +11642,21 @@ escodegen@^2.0.0: optionalDependencies: source-map "~0.6.1" +eslint-config-next@^11.0.1: + version "11.0.1" + resolved "https://registry.yarnpkg.com/eslint-config-next/-/eslint-config-next-11.0.1.tgz#abdd2565a6fa5841556a89ba935f044bec173d0b" + integrity sha512-yy63K4Bmy8amE6VMb26CZK6G99cfVX3JaMTvuvmq/LL8/b8vKHcauUZREBTAQ+2DrIvlH4YrFXrkQ1vpYDL9Eg== + dependencies: + "@next/eslint-plugin-next" "11.0.1" + "@rushstack/eslint-patch" "^1.0.6" + "@typescript-eslint/parser" "^4.20.0" + eslint-import-resolver-node "^0.3.4" + eslint-import-resolver-typescript "^2.4.0" + eslint-plugin-import "^2.22.1" + eslint-plugin-jsx-a11y "^6.4.1" + eslint-plugin-react "^7.23.1" + eslint-plugin-react-hooks "^4.2.0" + eslint-config-prettier@8.3.0: version "8.3.0" resolved "https://registry.yarnpkg.com/eslint-config-prettier/-/eslint-config-prettier-8.3.0.tgz#f7471b20b6fe8a9a9254cc684454202886a2dd7a" @@ -11598,6 +11675,17 @@ eslint-import-resolver-node@^0.3.4: debug "^2.6.9" resolve "^1.13.1" +eslint-import-resolver-typescript@^2.4.0: + version "2.4.0" + resolved "https://registry.yarnpkg.com/eslint-import-resolver-typescript/-/eslint-import-resolver-typescript-2.4.0.tgz#ec1e7063ebe807f0362a7320543aaed6fe1100e1" + integrity sha512-useJKURidCcldRLCNKWemr1fFQL1SzB3G4a0li6lFGvlc5xGe1hY343bvG07cbpCzPuM/lK19FIJB3XGFSkplA== + dependencies: + debug "^4.1.1" + glob "^7.1.6" + is-glob "^4.0.1" + resolve "^1.17.0" + tsconfig-paths "^3.9.0" + eslint-module-utils@^2.6.0: version "2.6.0" resolved "https://registry.yarnpkg.com/eslint-module-utils/-/eslint-module-utils-2.6.0.tgz#579ebd094f56af7797d19c9866c9c9486629bfa6" @@ -24615,7 +24703,7 @@ tsutils@^2.29.0: dependencies: tslib "^1.8.1" -tsutils@^3.17.1: +tsutils@^3.17.1, tsutils@^3.21.0: version "3.21.0" resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-3.21.0.tgz#b48717d394cea6c1e096983eed58e9d61715b623" integrity sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA==