Enable import assertion syntax parsing (#33750)

## Feature

Enable import assertion syntax parsing for ecmascript/typescript. Since webpack has already supported it, enable import assertion parsing and leave them to webpack to handle

#### Upgration
* tooling: `@swc/core`, `@swc/cli`, prettier to support importAssertion related flags
* typescript related: `typescript` >= 4.5
* babel related: `@babel/plugin-syntax-import-assertions`
* lint parser: `@typescript-eslint/parser`


Co-authored-by: JJ Kasper <22380829+ijjk@users.noreply.github.com>
This commit is contained in:
Jiachi Liu 2022-03-06 21:41:22 +01:00 committed by GitHub
parent 3dfb66fc19
commit ff6b75027b
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
28 changed files with 341 additions and 171 deletions

View file

@ -15,7 +15,7 @@
"jsx": true
},
"babelOptions": {
"presets": ["@babel/preset-env", "@babel/preset-react"],
"presets": ["next/babel"],
"caller": {
// Eslint supports top level await when a parser for it is included. We enable the parser by default for Babel.
"supportsTopLevelAwait": true

View file

@ -6,10 +6,12 @@ export type InputMaybe<T> = Maybe<T>
export type Exact<T extends { [key: string]: unknown }> = {
[K in keyof T]: T[K]
}
export type MakeOptional<T, K extends keyof T> = Omit<T, K> &
{ [SubKey in K]?: Maybe<T[SubKey]> }
export type MakeMaybe<T, K extends keyof T> = Omit<T, K> &
{ [SubKey in K]: Maybe<T[SubKey]> }
export type MakeOptional<T, K extends keyof T> = Omit<T, K> & {
[SubKey in K]?: Maybe<T[SubKey]>
}
export type MakeMaybe<T, K extends keyof T> = Omit<T, K> & {
[SubKey in K]: Maybe<T[SubKey]>
}
/** All built-in and custom scalars, mapped to their actual values */
export type Scalars = {
ID: string

View file

@ -139,7 +139,7 @@
"postcss-short-size": "4.0.0",
"postcss-trolling": "0.1.7",
"pre-commit": "1.2.2",
"prettier": "2.3.2",
"prettier": "2.5.1",
"pretty-bytes": "5.3.0",
"pretty-ms": "7.0.0",
"random-seed": "0.3.0",
@ -165,7 +165,7 @@
"tree-kill": "1.2.2",
"tsec": "0.2.1",
"turbo": "1.0.28",
"typescript": "4.4.3",
"typescript": "4.5.5",
"wait-port": "0.2.2",
"web-streams-polyfill": "2.1.1",
"webpack": "link:./node_modules/webpack5",

View file

@ -11,7 +11,7 @@
"dependencies": {
"@next/eslint-plugin-next": "12.1.1-canary.6",
"@rushstack/eslint-patch": "1.0.8",
"@typescript-eslint/parser": "5.0.0",
"@typescript-eslint/parser": "5.10.1",
"eslint-import-resolver-node": "0.3.4",
"eslint-import-resolver-typescript": "2.4.0",
"eslint-plugin-import": "2.25.2",

View file

@ -158,6 +158,7 @@ export default (
},
],
require('next/dist/compiled/babel/plugin-syntax-dynamic-import'),
require('next/dist/compiled/babel/plugin-syntax-import-assertions'),
require('./plugins/react-loadable-plugin'),
[
require('next/dist/compiled/babel/plugin-proposal-class-properties'),

View file

@ -18,6 +18,7 @@ export function getParserOptions({ filename, jsConfig, ...rest }) {
decorators: enableDecorators,
// Exclude regular TypeScript files from React transformation to prevent e.g. generic parameters and angle-bracket type assertion from being interpreted as JSX tags.
[isTypeScript ? 'tsx' : 'jsx']: isTSFile ? false : true,
importAssertions: true,
}
}
@ -48,7 +49,9 @@ function getBaseSWCOptions({
}
: {}),
parser: parserConfig,
experimental: {
keepImportAssertions: true,
},
transform: {
// Enables https://github.com/swc-project/swc/blob/0359deb4841be743d73db4536d4a22ac797d7f65/crates/swc_ecma_ext_transforms/src/jest.rs
...(jest

View file

@ -40,6 +40,10 @@ function generator() {
return require('@babel/generator')
}
function parser() {
return require('@babel/parser')
}
function eslintParser() {
return require('next/dist/compiled/babel-packages').eslintParser()
}
@ -68,6 +72,10 @@ function pluginSyntaxDynamicImport() {
return require('next/dist/compiled/babel-packages').pluginSyntaxDynamicImport()
}
function pluginSyntaxImportAssertions() {
return require('next/dist/compiled/babel-packages').pluginSyntaxImportAssertions()
}
function pluginSyntaxJsx() {
return require('next/dist/compiled/babel-packages').pluginSyntaxJsx()
}
@ -112,12 +120,14 @@ module.exports = {
generator,
traverse,
eslintParser,
parser,
pluginProposalClassProperties,
pluginProposalExportNamespaceFrom,
pluginProposalNumericSeparator,
pluginProposalObjectRestSpread,
pluginSyntaxBigint,
pluginSyntaxDynamicImport,
pluginSyntaxImportAssertions,
pluginSyntaxJsx,
pluginTransformDefine,
pluginTransformModulesCommonjs,

View file

@ -28,6 +28,10 @@ function pluginSyntaxDynamicImport() {
return require('@babel/plugin-syntax-dynamic-import')
}
function pluginSyntaxImportAssertions() {
return require('@babel/plugin-syntax-import-assertions')
}
function pluginSyntaxJsx() {
return require('@babel/plugin-syntax-jsx')
}
@ -68,6 +72,7 @@ module.exports = {
pluginProposalObjectRestSpread,
pluginSyntaxBigint,
pluginSyntaxDynamicImport,
pluginSyntaxImportAssertions,
pluginSyntaxJsx,
pluginTransformDefine,
pluginTransformModulesCommonjs,

View file

@ -0,0 +1 @@
module.exports = require('./bundle').parser()

View file

@ -0,0 +1 @@
module.exports = require('./bundle').pluginSyntaxImportAssertions()

File diff suppressed because one or more lines are too long

File diff suppressed because one or more lines are too long

View file

@ -0,0 +1 @@
module.exports = require('./bundle').parser()

View file

@ -0,0 +1 @@
module.exports = require('./bundle').pluginSyntaxImportAssertions()

View file

@ -97,7 +97,7 @@
"@ampproject/toolbox-optimizer": "2.7.1-alpha.0",
"@babel/code-frame": "7.12.11",
"@babel/core": "7.15.0",
"@babel/eslint-parser": "7.13.14",
"@babel/eslint-parser": "7.15.0",
"@babel/generator": "7.15.0",
"@babel/plugin-proposal-class-properties": "7.14.5",
"@babel/plugin-proposal-export-namespace-from": "7.14.5",
@ -105,6 +105,7 @@
"@babel/plugin-proposal-object-rest-spread": "7.14.7",
"@babel/plugin-syntax-bigint": "7.8.3",
"@babel/plugin-syntax-dynamic-import": "7.8.3",
"@babel/plugin-syntax-import-assertions": "7.16.7",
"@babel/plugin-syntax-jsx": "7.14.5",
"@babel/plugin-transform-modules-commonjs": "7.15.0",
"@babel/plugin-transform-runtime": "7.15.0",

View file

@ -11,7 +11,11 @@ module.exports = function (task) {
task.plugin(
'swc',
{},
function* (file, serverOrClient, { stripExtension, dev } = {}) {
function* (
file,
serverOrClient,
{ stripExtension, keepImportAssertions = false } = {}
) {
// Don't compile .d.ts
if (file.base.endsWith('.d.ts')) return
@ -29,8 +33,12 @@ module.exports = function (task) {
parser: {
syntax: 'typescript',
dynamicImport: true,
importAssertions: true,
tsx: file.base.endsWith('.tsx'),
},
experimental: {
keepImportAssertions,
},
transform: {
react: {
pragma: 'React.createElement',
@ -59,8 +67,12 @@ module.exports = function (task) {
parser: {
syntax: 'typescript',
dynamicImport: true,
importAssertions: true,
tsx: file.base.endsWith('.tsx'),
},
experimental: {
keepImportAssertions,
},
transform: {
react: {
pragma: 'React.createElement',
@ -82,6 +94,7 @@ module.exports = function (task) {
const options = {
filename: path.join(file.dir, file.base),
sourceMaps: true,
inlineSourcesContent: false,
sourceFileName: path.relative(distFilePath, fullFilePath),
...swcOptions,

View file

@ -781,6 +781,7 @@ const babelCorePackages = {
'@babel/traverse': 'next/dist/compiled/babel/traverse',
'@babel/types': 'next/dist/compiled/babel/types',
'@babel/core': 'next/dist/compiled/babel/core',
'@babel/parser': 'next/dist/compiled/babel/parser',
'@babel/core/lib/config': 'next/dist/compiled/babel/core-lib-config',
'@babel/core/lib/transformation/normalize-file':
'next/dist/compiled/babel/core-lib-normalize-config',
@ -815,6 +816,20 @@ export async function ncc_babel_bundle(task, opts) {
// eslint-disable-next-line camelcase
export async function ncc_babel_bundle_packages(task, opts) {
const eslintParseFile = join(
dirname(require.resolve('@babel/eslint-parser')),
'./parse.cjs'
)
const content = fs.readFileSync(eslintParseFile, 'utf-8')
// Let parser.cjs require @babel/parser directly
const replacedContent = content
.replace(
`const babelParser = require((`,
`function noop(){};\nconst babelParser = require('@babel/parser');noop((`
)
.replace(/require.resolve/g, 'noop')
await fs.writeFile(eslintParseFile, replacedContent)
await task
.source(opts.src || 'bundles/babel/packages-bundle.js')
.ncc({
@ -1810,28 +1825,28 @@ export async function nextbuildstatic(task, opts) {
export async function pages_app(task, opts) {
await task
.source('pages/_app.tsx')
.swc('client', { dev: opts.dev })
.swc('client', { dev: opts.dev, keepImportAssertions: true })
.target('dist/pages')
}
export async function pages_error(task, opts) {
await task
.source('pages/_error.tsx')
.swc('client', { dev: opts.dev })
.swc('client', { dev: opts.dev, keepImportAssertions: true })
.target('dist/pages')
}
export async function pages_document(task, opts) {
await task
.source('pages/_document.tsx')
.swc('server', { dev: opts.dev })
.swc('server', { dev: opts.dev, keepImportAssertions: true })
.target('dist/pages')
}
export async function pages_document_server(task, opts) {
await task
.source('pages/_document-concurrent.tsx')
.swc('client', { dev: opts.dev })
.swc('client', { dev: opts.dev, keepImportAssertions: true })
.target('dist/pages')
}

View file

@ -0,0 +1,2 @@
build

View file

@ -0,0 +1 @@
{ "extends": "next", "root": true }

View file

@ -254,7 +254,7 @@ describe('ESLint', () => {
})
test('shows a successful message when completed', async () => {
const { stdout, eslintrcJson } = await nextLintTemp()
const { stdout } = await nextLintTemp()
expect(stdout).toContain(
'ESLint has successfully been configured. Run next lint again to view warnings and errors'
@ -332,7 +332,7 @@ describe('ESLint', () => {
test('success message when no warnings or errors', async () => {
const eslintrcJson = join(dirFirstTimeSetup, '.eslintrc.json')
await fs.writeFile(eslintrcJson, '{ "extends": "next", "root": true }')
await fs.writeFile(eslintrcJson, '{ "extends": "next", "root": true }\n')
const { stdout, stderr } = await nextLint(dirFirstTimeSetup, [], {
stdout: true,
@ -511,7 +511,9 @@ describe('ESLint', () => {
await fs.remove(cacheFile)
await nextLint(dirEslintCache, ['--cache-location', cacheFile])
expect(fs.existsSync(cacheFile)).toBe(true)
const hasCache = fs.existsSync(cacheFile)
await fs.remove(cacheFile) // remove after generate
expect(hasCache).toBe(true)
})
const getEslintCacheContent = async (cacheDir) => {

View file

@ -0,0 +1,3 @@
{
"foo": "foo"
}

View file

@ -0,0 +1,2 @@
declare const data: any
export default data

View file

@ -0,0 +1,5 @@
import data from '../data' assert { type: 'json' }
export default function Es() {
return data.foo
}

View file

@ -0,0 +1,5 @@
import data from '../data' assert { type: 'json' }
export default function Ts() {
return data.foo
}

View file

@ -0,0 +1,45 @@
import { join } from 'path'
import {
nextBuild,
nextStart,
launchApp,
killApp,
findPort,
renderViaHTTP,
} from 'next-test-utils'
const appDir = join(__dirname, '../')
function runSuite(suiteName, env, runTests) {
const context = { appDir }
describe(`${suiteName} ${env}`, () => {
if (env === 'prod') {
beforeAll(async () => {
context.appPort = await findPort()
await nextBuild(context.appDir)
context.server = await nextStart(context.appDir, context.appPort)
})
}
if (env === 'dev') {
beforeAll(async () => {
context.appPort = await findPort()
context.server = await launchApp(context.appDir, context.appPort)
})
}
afterAll(async () => await killApp(context.server))
runTests(context, env)
})
}
function basic(context) {
it('should handle json assertions', async () => {
const esHtml = await renderViaHTTP(context.appPort, '/es')
const tsHtml = await renderViaHTTP(context.appPort, '/ts')
expect(esHtml).toContain('foo')
expect(tsHtml).toContain('foo')
})
}
runSuite('import-assertion', 'dev', basic)
runSuite('import-assertion', 'prod', basic)

View file

@ -0,0 +1,20 @@
{
"compilerOptions": {
"target": "es5",
"lib": ["dom", "dom.iterable", "esnext"],
"allowJs": true,
"skipLibCheck": true,
"strict": false,
"forceConsistentCasingInFileNames": true,
"noEmit": true,
"incremental": true,
"esModuleInterop": true,
"module": "esnext",
"moduleResolution": "node",
"resolveJsonModule": true,
"isolatedModules": true,
"jsx": "preserve"
},
"exclude": ["node_modules"],
"include": ["**/*.d.ts", "**/*.ts", "**/*.tsx"]
}

View file

@ -20,16 +20,19 @@ export const getStaticPaths: GetStaticPaths<Params> = async () => {
}
}
export const getStaticProps: GetStaticProps<Props, Params, PreviewData> =
async ({ params, previewData }) => {
return {
props: {
data: params!.slug,
title: previewData?.title || 'default title',
},
revalidate: false,
}
export const getStaticProps: GetStaticProps<
Props,
Params,
PreviewData
> = async ({ params, previewData }) => {
return {
props: {
data: params!.slug,
title: previewData?.title || 'default title',
},
revalidate: false,
}
}
export default function Page({ data, title }: Props) {
return (

130
yarn.lock
View file

@ -199,15 +199,6 @@
json5 "^2.1.2"
semver "^6.3.0"
"@babel/eslint-parser@7.13.14":
version "7.13.14"
resolved "https://registry.yarnpkg.com/@babel/eslint-parser/-/eslint-parser-7.13.14.tgz#f80fd23bdd839537221914cb5d17720a5ea6ba3a"
integrity sha512-I0HweR36D73Ibn/FfrRDMKlMqJHFwidIUgYdMpH+aXYuQC+waq59YaJ6t9e9N36axJ82v1jR041wwqDrDXEwRA==
dependencies:
eslint-scope "^5.1.0"
eslint-visitor-keys "^1.3.0"
semver "^6.3.0"
"@babel/eslint-parser@7.15.0":
version "7.15.0"
resolved "https://registry.yarnpkg.com/@babel/eslint-parser/-/eslint-parser-7.15.0.tgz#b54f06e04d0e93aebcba99f89251e3bf0ee39f21"
@ -1404,6 +1395,13 @@
dependencies:
"@babel/helper-plugin-utils" "^7.16.7"
"@babel/plugin-syntax-import-assertions@7.16.7":
version "7.16.7"
resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-assertions/-/plugin-syntax-import-assertions-7.16.7.tgz#78288980e36f1614a4024d45937f4c8ca7185ac3"
integrity sha512-DoM/wsaMaDXpM2fa+QkZeqqfYs340WTY+boLRiZ7ckqt3PAFt1CdGmMXVniFCcN8RuStim2Z4Co3bIKdWjTXIQ==
dependencies:
"@babel/helper-plugin-utils" "^7.16.7"
"@babel/plugin-syntax-import-meta@^7.10.4", "@babel/plugin-syntax-import-meta@^7.8.3":
version "7.10.4"
resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-import-meta/-/plugin-syntax-import-meta-7.10.4.tgz#ee601348c370fa334d2207be158777496521fd51"
@ -5426,15 +5424,15 @@
"@typescript-eslint/typescript-estree" "4.29.1"
debug "^4.3.1"
"@typescript-eslint/parser@5.0.0":
version "5.0.0"
resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-5.0.0.tgz#50d1be2e0def82d73e863cceba74aeeac9973592"
integrity sha512-B6D5rmmQ14I1fdzs71eL3DAuvnPHTY/t7rQABrL9BLnx/H51Un8ox1xqYAchs0/V2trcoyxB1lMJLlrwrJCDgw==
"@typescript-eslint/parser@5.10.1":
version "5.10.1"
resolved "https://registry.yarnpkg.com/@typescript-eslint/parser/-/parser-5.10.1.tgz#4ce9633cc33fc70bc13786cb793c1a76fe5ad6bd"
integrity sha512-GReo3tjNBwR5RnRO0K2wDIDN31cM3MmDtgyQ85oAxAmC5K3j/g85IjP+cDfcqDsDDBf1HNKQAD0WqOYL8jXqUA==
dependencies:
"@typescript-eslint/scope-manager" "5.0.0"
"@typescript-eslint/types" "5.0.0"
"@typescript-eslint/typescript-estree" "5.0.0"
debug "^4.3.1"
"@typescript-eslint/scope-manager" "5.10.1"
"@typescript-eslint/types" "5.10.1"
"@typescript-eslint/typescript-estree" "5.10.1"
debug "^4.3.2"
"@typescript-eslint/scope-manager@4.22.0":
version "4.22.0"
@ -5452,13 +5450,13 @@
"@typescript-eslint/types" "4.29.1"
"@typescript-eslint/visitor-keys" "4.29.1"
"@typescript-eslint/scope-manager@5.0.0":
version "5.0.0"
resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.0.0.tgz#aea0fb0e2480c1169a02e89d9005ac3f2835713f"
integrity sha512-5RFjdA/ain/MDUHYXdF173btOKncIrLuBmA9s6FJhzDrRAyVSA+70BHg0/MW6TE+UiKVyRtX91XpVS0gVNwVDQ==
"@typescript-eslint/scope-manager@5.10.1":
version "5.10.1"
resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.10.1.tgz#f0539c73804d2423506db2475352a4dec36cd809"
integrity sha512-Lyvi559Gvpn94k7+ElXNMEnXu/iundV5uFmCUNnftbFrUbAJ1WBoaGgkbOBm07jVZa682oaBU37ao/NGGX4ZDg==
dependencies:
"@typescript-eslint/types" "5.0.0"
"@typescript-eslint/visitor-keys" "5.0.0"
"@typescript-eslint/types" "5.10.1"
"@typescript-eslint/visitor-keys" "5.10.1"
"@typescript-eslint/types@4.22.0":
version "4.22.0"
@ -5470,10 +5468,10 @@
resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-4.29.1.tgz#94cce6cf7cc83451df03339cda99d326be2feaf5"
integrity sha512-Jj2yu78IRfw4nlaLtKjVaGaxh/6FhofmQ/j8v3NXmAiKafbIqtAPnKYrf0sbGjKdj0hS316J8WhnGnErbJ4RCA==
"@typescript-eslint/types@5.0.0":
version "5.0.0"
resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.0.0.tgz#25d93f6d269b2d25fdc51a0407eb81ccba60eb0f"
integrity sha512-dU/pKBUpehdEqYuvkojmlv0FtHuZnLXFBn16zsDmlFF3LXkOpkAQ2vrKc3BidIIve9EMH2zfTlxqw9XM0fFN5w==
"@typescript-eslint/types@5.10.1":
version "5.10.1"
resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.10.1.tgz#dca9bd4cb8c067fc85304a31f38ec4766ba2d1ea"
integrity sha512-ZvxQ2QMy49bIIBpTqFiOenucqUyjTQ0WNLhBM6X1fh1NNlYAC6Kxsx8bRTY3jdYsYg44a0Z/uEgQkohbR0H87Q==
"@typescript-eslint/typescript-estree@4.22.0":
version "4.22.0"
@ -5501,16 +5499,16 @@
semver "^7.3.5"
tsutils "^3.21.0"
"@typescript-eslint/typescript-estree@5.0.0":
version "5.0.0"
resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.0.0.tgz#bc20f413c6e572c7309dbe5fa3be027984952af3"
integrity sha512-V/6w+PPQMhinWKSn+fCiX5jwvd1vRBm7AX7SJQXEGQtwtBvjMPjaU3YTQ1ik2UF1u96X7tsB96HMnulG3eLi9Q==
"@typescript-eslint/typescript-estree@5.10.1":
version "5.10.1"
resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.10.1.tgz#b268e67be0553f8790ba3fe87113282977adda15"
integrity sha512-PwIGnH7jIueXv4opcwEbVGDATjGPO1dx9RkUl5LlHDSe+FXxPwFL5W/qYd5/NHr7f6lo/vvTrAzd0KlQtRusJQ==
dependencies:
"@typescript-eslint/types" "5.0.0"
"@typescript-eslint/visitor-keys" "5.0.0"
debug "^4.3.1"
globby "^11.0.3"
is-glob "^4.0.1"
"@typescript-eslint/types" "5.10.1"
"@typescript-eslint/visitor-keys" "5.10.1"
debug "^4.3.2"
globby "^11.0.4"
is-glob "^4.0.3"
semver "^7.3.5"
tsutils "^3.21.0"
@ -5530,12 +5528,12 @@
"@typescript-eslint/types" "4.29.1"
eslint-visitor-keys "^2.0.0"
"@typescript-eslint/visitor-keys@5.0.0":
version "5.0.0"
resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.0.0.tgz#b789f7cd105e59bee5c0983a353942a5a48f56df"
integrity sha512-yRyd2++o/IrJdyHuYMxyFyBhU762MRHQ/bAGQeTnN3pGikfh+nEmM61XTqaDH1XDp53afZ+waXrk0ZvenoZ6xw==
"@typescript-eslint/visitor-keys@5.10.1":
version "5.10.1"
resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.10.1.tgz#29102de692f59d7d34ecc457ed59ab5fc558010b"
integrity sha512-NjQ0Xinhy9IL979tpoTRuLKxMc0zJC7QVSdeerXs2/QvOy2yRkzX5dRb10X5woNUdJgU8G3nYRDlI33sq1K4YQ==
dependencies:
"@typescript-eslint/types" "5.0.0"
"@typescript-eslint/types" "5.10.1"
eslint-visitor-keys "^3.0.0"
"@typescript/lib-dom@npm:@types/web":
@ -8714,6 +8712,13 @@ debug@^4.3.1:
dependencies:
ms "2.1.2"
debug@^4.3.2:
version "4.3.3"
resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.3.tgz#04266e0b70a98d4462e6e288e38259213332b664"
integrity sha512-/zxw5+vh1Tfv+4Qn7a5nsbcJKPaSvCDhojn6FEl9vupwK2VCSDtEiEtqr8DFtzYFOdz63LBkxec7DYuc2jon6Q==
dependencies:
ms "2.1.2"
debug@~0.8.1:
version "0.8.1"
resolved "https://registry.yarnpkg.com/debug/-/debug-0.8.1.tgz#20ff4d26f5e422cb68a1bacbbb61039ad8c1c130"
@ -9635,7 +9640,7 @@ eslint-plugin-react@7.29.1:
semver "^6.3.0"
string.prototype.matchall "^4.0.6"
eslint-scope@5.1.1, eslint-scope@^5.1.0, eslint-scope@^5.1.1:
eslint-scope@5.1.1, eslint-scope@^5.1.1:
version "5.1.1"
resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.1.1.tgz#e786e59a66cb92b3f6c1fb0d508aab174848f48c"
integrity sha512-2NxwbF/hZ0KpepYN0cNbo+FN6XoK7GaHlQhgx/hIZl6Va0bF45RQOOwhLIy8lQDbuCiadSLCBnH2CFYquit5bw==
@ -10174,6 +10179,17 @@ fast-glob@^3.2.5, fast-glob@^3.2.7:
merge2 "^1.3.0"
micromatch "^4.0.4"
fast-glob@^3.2.9:
version "3.2.11"
resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.2.11.tgz#a1172ad95ceb8a16e20caa5c5e56480e5129c1d9"
integrity sha512-xrO3+1bxSo3ZVHAnqzyuewYT6aMFHRAd4Kcs92MAonjwQZLsK9d0SF1IyQ3k5PoirxTW0Oe/RqFgMQ6TcNE5Ew==
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"
fast-json-stable-stringify@^2.0.0:
version "2.1.0"
resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633"
@ -11081,6 +11097,18 @@ globby@^11.0.3:
merge2 "^1.3.0"
slash "^3.0.0"
globby@^11.0.4:
version "11.1.0"
resolved "https://registry.yarnpkg.com/globby/-/globby-11.1.0.tgz#bd4be98bb042f83d796f7e3811991fbe82a0d34b"
integrity sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g==
dependencies:
array-union "^2.1.0"
dir-glob "^3.0.1"
fast-glob "^3.2.9"
ignore "^5.2.0"
merge2 "^1.4.1"
slash "^3.0.0"
globby@^12.0.2:
version "12.0.2"
resolved "https://registry.yarnpkg.com/globby/-/globby-12.0.2.tgz#53788b2adf235602ed4cabfea5c70a1139e1ab11"
@ -11763,7 +11791,7 @@ ignore@^5.0.0, ignore@^5.1.4:
resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.1.8.tgz#f150a8b50a34289b33e22f5889abd4d8016f0e57"
integrity sha512-BMpfD7PpiETpBl/A6S498BaIJ6Y/ABT93ETbby2fP00v4EbvPBXWEoaR1UBPKs3iR53pJY7EtZk5KACI57i1Uw==
ignore@^5.1.8:
ignore@^5.1.8, ignore@^5.2.0:
version "5.2.0"
resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.2.0.tgz#6d3bac8fa7fe0d45d9f9be7bac2fc279577e345a"
integrity sha512-CmxgYGiEPCLhfLnpPp1MoRmifwEIOgjcHXxOBjv7mY96c+eWScsOP9c112ZyLdWHi0FxHjI+4uVhKYp/gcdRmQ==
@ -17093,10 +17121,10 @@ preserve@^0.2.0:
version "0.2.0"
resolved "https://registry.yarnpkg.com/preserve/-/preserve-0.2.0.tgz#815ed1f6ebc65926f865b310c0713bcb3315ce4b"
prettier@2.3.2:
version "2.3.2"
resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.3.2.tgz#ef280a05ec253712e486233db5c6f23441e7342d"
integrity sha512-lnJzDfJ66zkMy58OL5/NY5zp70S7Nz6KqcKkXYzn2tMVrNxvbqaBpg7H3qHaLxCJ5lNMsGuM8+ohS7cZrthdLQ==
prettier@2.5.1:
version "2.5.1"
resolved "https://registry.yarnpkg.com/prettier/-/prettier-2.5.1.tgz#fff75fa9d519c54cf0fce328c1017d94546bc56a"
integrity sha512-vBZcPRUR5MZJwoyi3ZoyQlc1rXeEck8KgeC9AwwOn+exuxLxq5toTRDTSaVrXHxelDMHy9zlicw8u66yxoSUFg==
pretty-bytes@5.3.0:
version "5.3.0"
@ -20404,10 +20432,10 @@ typedarray@^0.0.6:
version "0.0.6"
resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777"
typescript@4.4.3:
version "4.4.3"
resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.4.3.tgz#bdc5407caa2b109efd4f82fe130656f977a29324"
integrity sha512-4xfscpisVgqqDfPaJo5vkd+Qd/ItkoagnHpufr+i2QCHBsNYp+G7UAoyFl8aPtx879u38wPV65rZ8qbGZijalA==
typescript@4.5.5:
version "4.5.5"
resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.5.5.tgz#d8c953832d28924a9e3d37c73d729c846c5896f3"
integrity sha512-TCTIul70LyWe6IJWT8QSYeA54WQe8EjQFU4wY52Fasj5UKx88LNYKCgBEHcOMOrFF1rKGbD8v/xcNWVUq9SymA==
typescript@^4.1.3:
version "4.1.3"