diff --git a/.eslintignore b/.eslintignore index 339061a4..c81502cc 100644 --- a/.eslintignore +++ b/.eslintignore @@ -1,5 +1,6 @@ # config .eslintrc.js +jest-setup.js **/*config.js # git @@ -13,3 +14,4 @@ # testing __tests__/e2e/cli.js +__tests__/e2e/out diff --git a/.eslintrc.js b/.eslintrc.js index 4acc0480..b26f0a37 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -4,7 +4,7 @@ module.exports = { node: true, 'jest/globals': true, }, - extends: ['eslint:recommended', 'plugin:@typescript-eslint/recommended', 'prettier'], + extends: ['eslint:recommended', 'plugin:@typescript-eslint/recommended', 'plugin:jest-dom/recommended', 'prettier'], parser: '@typescript-eslint/parser', parserOptions: { ecmaVersion: 2021, @@ -45,4 +45,10 @@ module.exports = { 'no-restricted-syntax': 'off', 'no-console': ['error', { allow: ['warn', 'error'] }], }, + overrides: [ + { + files: ['**/__tests__/**/*.[jt]s?(x)', '**/?(*.)+(spec|test).[jt]s?(x)'], + extends: ['plugin:testing-library/react', 'plugin:jest-dom/recommended'], + }, + ], } diff --git a/.gitignore b/.gitignore index 81a67351..b17ce996 100644 --- a/.gitignore +++ b/.gitignore @@ -16,7 +16,6 @@ dist /__tests__/cli/external-images/fixtures /__tests__/components/image/manifest/manifest.json /__tests__/components/image/external-images/manifest.json -/__tests__/e2e/out # benchmark /bench/fixtures/results diff --git a/__tests__/components/image/config/index.test.tsx b/__tests__/components/image/config/index.test.tsx index 75f4cc17..5a098247 100644 --- a/__tests__/components/image/config/index.test.tsx +++ b/__tests__/components/image/config/index.test.tsx @@ -12,6 +12,6 @@ describe('Apply config', () => { test('Set `imageDir` and `filenameGenerator` and `convetFormat`', () => { render() - expect(screen.getByRole('img').getAttribute('src')).toBe('/base-path/_custom-optimize/images-img.3840.75.webp') + expect(screen.getByRole('img')).toHaveAttribute('src', '/base-path/_custom-optimize/images-img.3840.75.webp') }) }) diff --git a/__tests__/components/image/external-images/index.test.tsx b/__tests__/components/image/external-images/index.test.tsx index c78f1ab0..d0826ba5 100644 --- a/__tests__/components/image/external-images/index.test.tsx +++ b/__tests__/components/image/external-images/index.test.tsx @@ -6,7 +6,7 @@ process.env['TEST_JSON_PATH'] = '__tests__/components/image/external-images/mani import path from 'path' -import { cleanup, render, screen } from '@testing-library/react' +import { render, screen } from '@testing-library/react' import fs from 'fs-extra' import React from 'react' @@ -16,13 +16,11 @@ import processManifest from '../../../../src/utils/processManifest' const manifestPath = path.resolve(__dirname, 'manifest.json') +beforeAll(async () => { + await fs.remove(manifestPath) +}) describe('External images', () => { - beforeAll(async () => { - await fs.remove(manifestPath) - }) - - beforeEach(() => { - cleanup() + test('Manifest.json is output correctly', () => { render( { priority /> ) - }) - test('Manifest.json is output correctly', () => { const manifest = uniqueItems(processManifest(fs.readFileSync(manifestPath, 'utf-8'))) expect(manifest).toEqual([ { @@ -56,10 +52,21 @@ describe('External images', () => { }) test('URLs of external images are set correctly', () => { - expect(screen.getByRole('img').getAttribute('src')).toBe( + render( + + ) + + expect(screen.getByRole('img')).toHaveAttribute( + 'src', '/base-path/_next/static/chunks/images/sub-path/og_3840_75.webp' ) - expect(screen.getByRole('img').getAttribute('srcset')).toBe( + expect(screen.getByRole('img')).toHaveAttribute( + 'srcset', '/base-path/_next/static/chunks/images/sub-path/og_1920_75.webp 1x, /base-path/_next/static/chunks/images/sub-path/og_3840_75.webp 2x' ) }) diff --git a/__tests__/components/image/index.test.tsx b/__tests__/components/image/index.test.tsx index e03436b6..932e6598 100644 --- a/__tests__/components/image/index.test.tsx +++ b/__tests__/components/image/index.test.tsx @@ -1,7 +1,7 @@ /** * @jest-environment jsdom */ -import { render, screen, cleanup } from '@testing-library/react' +import { render, screen } from '@testing-library/react' import React from 'react' import CustomImage from '../../../src/image' @@ -22,15 +22,12 @@ const staticRequireSrc = { describe('CustomImage', () => { describe('String src', () => { - beforeEach(() => { - cleanup() - }) - test('Src and srcset are set correctly', () => { render() - expect(screen.getByRole('img').getAttribute('src')).toBe('/_next/static/chunks/images/img_3840_75.png') - expect(screen.getByRole('img').getAttribute('srcSet')).toBe( + expect(screen.getByRole('img')).toHaveAttribute('src', '/_next/static/chunks/images/img_3840_75.png') + expect(screen.getByRole('img')).toHaveAttribute( + 'srcset', '/_next/static/chunks/images/img_1920_75.png 1x, /_next/static/chunks/images/img_3840_75.png 2x' ) }) @@ -38,22 +35,20 @@ describe('CustomImage', () => { test('BlurDataURL is set correctly', () => { render() - expect(screen.getByRole('img').style.backgroundImage).toBe('url(/_next/static/chunks/images/img_8_10.png)') + expect(screen.getByRole('img')).toHaveStyle({ backgroundImage: 'url(/_next/static/chunks/images/img_8_10.png)' }) }) }) describe('StaticRequire src', () => { - beforeEach(() => { - cleanup() - }) - test('Src and srcset are set correctly', () => { render() - expect(screen.getByRole('img').getAttribute('src')).toBe( + expect(screen.getByRole('img')).toHaveAttribute( + 'src', '/_next/static/chunks/images/_next/static/media/image.819f8209_3840_75.png' ) - expect(screen.getByRole('img').getAttribute('srcset')).toBe( + expect(screen.getByRole('img')).toHaveAttribute( + 'srcset', '/_next/static/chunks/images/_next/static/media/image.819f8209_1920_75.png 1x, /_next/static/chunks/images/_next/static/media/image.819f8209_3840_75.png 2x' ) }) @@ -61,22 +56,20 @@ describe('CustomImage', () => { test('BlurDataURL is set correctly', () => { render() - expect(screen.getByRole('img').style.backgroundImage).toBe(`url(${blurDataURL})`) + expect(screen.getByRole('img')).toHaveStyle({ backgroundImage: `url(${blurDataURL})` }) }) }) describe('StaticImageData src', () => { - beforeEach(() => { - cleanup() - }) - test('Src and srcset are set correctly', () => { render() - expect(screen.getByRole('img').getAttribute('src')).toBe( + expect(screen.getByRole('img')).toHaveAttribute( + 'src', '/_next/static/chunks/images/_next/static/media/image.819f8209_3840_75.png' ) - expect(screen.getByRole('img').getAttribute('srcset')).toBe( + expect(screen.getByRole('img')).toHaveAttribute( + 'srcset', '/_next/static/chunks/images/_next/static/media/image.819f8209_1920_75.png 1x, /_next/static/chunks/images/_next/static/media/image.819f8209_3840_75.png 2x' ) }) @@ -84,15 +77,11 @@ describe('CustomImage', () => { test('BlurDataURL is set correctly', () => { render() - expect(screen.getByRole('img').style.backgroundImage).toBe(`url(${blurDataURL})`) + expect(screen.getByRole('img')).toHaveStyle({ backgroundImage: `url(${blurDataURL})` }) }) }) describe('Override props.', () => { - beforeEach(() => { - cleanup() - }) - test('Loader is set correctly', () => { render( { /> ) - expect(screen.getByRole('img').getAttribute('src')).toBe('/_next/static/media/image.819f8209.png?w=3840&q=75') + expect(screen.getByRole('img')).toHaveAttribute('src', '/_next/static/media/image.819f8209.png?w=3840&q=75') }) test('BlurDataURL is set correctly', () => { render() - expect(screen.getByRole('img').style.backgroundImage).toBe('url(customBlurDataURL)') + expect(screen.getByRole('img')).toHaveStyle({ backgroundImage: 'url(customBlurDataURL)' }) }) }) }) diff --git a/__tests__/e2e/next-env.d.ts b/__tests__/e2e/next-env.d.ts new file mode 100644 index 00000000..4f11a03d --- /dev/null +++ b/__tests__/e2e/next-env.d.ts @@ -0,0 +1,5 @@ +/// +/// + +// NOTE: This file should not be edited +// see https://nextjs.org/docs/basic-features/typescript for more information. diff --git a/__tests__/e2e/pages/_app.jsx b/__tests__/e2e/pages/_app.jsx index 3ac920de..f499df8b 100644 --- a/__tests__/e2e/pages/_app.jsx +++ b/__tests__/e2e/pages/_app.jsx @@ -1,3 +1,9 @@ +import React from 'react' + +/** + * @param {import('next/app').AppProps} param0 + * @returns + */ function MyApp({ Component, pageProps }) { return } diff --git a/__tests__/e2e/pages/index.jsx b/__tests__/e2e/pages/index.jsx index 21859b85..87f9d49c 100644 --- a/__tests__/e2e/pages/index.jsx +++ b/__tests__/e2e/pages/index.jsx @@ -1,8 +1,8 @@ -import Image from '../../../dist/image' +import React, { useEffect, useState } from 'react' -import imgSrc from '../images/img.png' +import Image from '../../../dist/image' import clientOnlySrc from '../images/client-only.png' -import { useEffect, useState } from 'react' +import imgSrc from '../images/img.png' const IndexPage = () => { const [isClient, setIsClient] = useState(false) diff --git a/changelog.config.js b/changelog.config.js index b9c40cc7..540f43ac 100644 --- a/changelog.config.js +++ b/changelog.config.js @@ -23,11 +23,11 @@ module.exports = { /** * コミットメッセージ最大文字数 */ - // maxMessageLength: 64, + maxMessageLength: 64, /** * コミットメッセージ最小文字数 */ - // minMessageLength: 3, + minMessageLength: 3, /** * コミット時に入力する項目 */ diff --git a/jest-setup.ts b/jest-setup.ts new file mode 100644 index 00000000..c44951a6 --- /dev/null +++ b/jest-setup.ts @@ -0,0 +1 @@ +import '@testing-library/jest-dom' diff --git a/jest.config.js b/jest.config.js index 4d37cf28..1cf78e2b 100644 --- a/jest.config.js +++ b/jest.config.js @@ -2,4 +2,5 @@ module.exports = { preset: 'ts-jest', testMatch: ['**/__tests__/**/*.test.[jt]s?(x)'], + setupFilesAfterEnv: ['/jest-setup.ts'] } diff --git a/package.json b/package.json index 42ff7c28..a664ecdb 100644 --- a/package.json +++ b/package.json @@ -30,6 +30,7 @@ "prebuild": "rimraf dist", "build": "swc src -d dist && tsc --project ./tsconfig.build.json", "commitmsg": "commitlint -e $GIT_PARAMS", + "lint": "eslint {src,__tests__} --cache", "lint-staged": "lint-staged", "prepare": "husky install", "pretest": "rimraf {__tests__/e2e/.next,__tests__/e2e/out} && swc src -d dist && cross-env TEST_JSON_PATH=__tests__/e2e/.next/custom-optimized-images.nd.json next build __tests__/e2e && next export __tests__/e2e && node __tests__/e2e/cli.js", @@ -66,10 +67,11 @@ "@swc/cli": "0.1.57", "@swc/core": "1.2.203", "@testing-library/react": "13.3.0", + "@testing-library/jest-dom": "5.16.4", "@tsconfig/strictest": "1.0.1", "@types/benchmark": "2.1.1", "@types/cli-progress": "3.11.0", - "@types/fs-extra": "^9.0.13", + "@types/fs-extra": "9.0.13", "@types/jest": "27.5.2", "@types/lodash.uniqwith": "4.5.7", "@types/node": "16.11.41", @@ -85,6 +87,8 @@ "eslint-config-prettier": "8.5.0", "eslint-plugin-import": "2.26.0", "eslint-plugin-jest": "26.5.3", + "eslint-plugin-jest-dom": "^4.0.2", + "eslint-plugin-testing-library": "5.5.1", "git-cz": "4.9.0", "husky": "8.0.1", "jest": "28.1.1", diff --git a/tsconfig.json b/tsconfig.json index d2c0be6b..d94cb101 100644 --- a/tsconfig.json +++ b/tsconfig.json @@ -1,7 +1,10 @@ { "extends": "@tsconfig/strictest/tsconfig.json", "compilerOptions": { - "jsx": "react" + "allowJs": true, + "jsx": "react", + "baseUrl": "./", + "noEmit": true }, - "include": ["./src/**/*.ts", "./src/**/*.tsx", "./__tests__/**/*.test.ts", "./__tests__/**/*.test.tsx", "bench/index.ts"] + "include": ["src/**/*", "__tests__/**/*", "bench/index.ts", "jest-setup.ts"] } diff --git a/yarn.lock b/yarn.lock index 24c11976..170bedce 100644 --- a/yarn.lock +++ b/yarn.lock @@ -351,6 +351,13 @@ dependencies: regenerator-runtime "^0.13.4" +"@babel/runtime@^7.16.3", "@babel/runtime@^7.9.2": + version "7.18.3" + resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.18.3.tgz#c7b654b57f6f63cf7f8b418ac9ca04408c4579f4" + integrity sha512-38Y8f7YUhce/K7RMwTp7m0uCumpv9hZkitCbBClqQIow1qSbCvGkcegKOXpEWCQLfWmevgRiWokZ1GkpfhbZug== + dependencies: + regenerator-runtime "^0.13.4" + "@babel/template@^7.16.7", "@babel/template@^7.3.3": version "7.16.7" resolved "https://registry.yarnpkg.com/@babel/template/-/template-7.16.7.tgz#8d126c8701fde4d66b264b3eba3d96f07666d155" @@ -1465,7 +1472,7 @@ dependencies: defer-to-connect "^2.0.0" -"@testing-library/dom@^8.5.0": +"@testing-library/dom@^8.11.1", "@testing-library/dom@^8.5.0": version "8.13.0" resolved "https://registry.yarnpkg.com/@testing-library/dom/-/dom-8.13.0.tgz#bc00bdd64c7d8b40841e27a70211399ad3af46f5" integrity sha512-9VHgfIatKNXQNaZTtLnalIy0jNZzY35a4S3oi08YAt9Hv1VsfZ/DfA45lM8D/UhtHBGJ4/lGwp0PZkVndRkoOQ== @@ -1479,6 +1486,21 @@ lz-string "^1.4.4" pretty-format "^27.0.2" +"@testing-library/jest-dom@5.16.4": + version "5.16.4" + resolved "https://registry.yarnpkg.com/@testing-library/jest-dom/-/jest-dom-5.16.4.tgz#938302d7b8b483963a3ae821f1c0808f872245cd" + integrity sha512-Gy+IoFutbMQcky0k+bqqumXZ1cTGswLsFqmNLzNdSKkU9KGV2u9oXhukCbbJ9/LRPKiqwxEE8VpV/+YZlfkPUA== + dependencies: + "@babel/runtime" "^7.9.2" + "@types/testing-library__jest-dom" "^5.9.1" + aria-query "^5.0.0" + chalk "^3.0.0" + css "^3.0.0" + css.escape "^1.5.1" + dom-accessibility-api "^0.5.6" + lodash "^4.17.15" + redent "^3.0.0" + "@testing-library/react@13.3.0": version "13.3.0" resolved "https://registry.yarnpkg.com/@testing-library/react/-/react-13.3.0.tgz#bf298bfbc5589326bbcc8052b211f3bb097a97c5" @@ -1583,7 +1605,7 @@ dependencies: "@types/node" "*" -"@types/fs-extra@^9.0.13": +"@types/fs-extra@9.0.13": version "9.0.13" resolved "https://registry.yarnpkg.com/@types/fs-extra/-/fs-extra-9.0.13.tgz#7594fbae04fe7f1918ce8b3d213f74ff44ac1f45" integrity sha512-nEnwB++1u5lVDM2UI4c1+5R+FYaKfaAzS4OococimjVm3nQw3TuzH5UNsocrcTBbhnerblyHj4A49qXbIiZdpA== @@ -1621,6 +1643,14 @@ dependencies: "@types/istanbul-lib-report" "*" +"@types/jest@*": + version "28.1.2" + resolved "https://registry.yarnpkg.com/@types/jest/-/jest-28.1.2.tgz#c678569bb2d8e5474dd88f0851613611aeed9809" + integrity sha512-5dNM7mMuIrCtNJsFfvUO/5xCrG8swuT2c7ND+sl3XwlwxJf3k7e7o+PRvcFN/iIm8XhCqHqxLOj9yutDDOJoRg== + dependencies: + jest-matcher-utils "^28.0.0" + pretty-format "^28.0.0" + "@types/jest@27.5.2": version "27.5.2" resolved "https://registry.yarnpkg.com/@types/jest/-/jest-27.5.2.tgz#ec49d29d926500ffb9fd22b84262e862049c026c" @@ -1771,6 +1801,13 @@ resolved "https://registry.yarnpkg.com/@types/stack-utils/-/stack-utils-2.0.1.tgz#20f18294f797f2209b5f65c8e3b5c8e8261d127c" integrity sha512-Hl219/BT5fLAaz6NDkSuhzasy49dwQS/DSdu4MdggFB8zcXv7vflBI3xp7FEmkmdDkBUI2bPUNeMttp2knYdxw== +"@types/testing-library__jest-dom@^5.9.1": + version "5.14.4" + resolved "https://registry.yarnpkg.com/@types/testing-library__jest-dom/-/testing-library__jest-dom-5.14.4.tgz#21567ec845f4efee55923842c79728dc49c1650b" + integrity sha512-EUCs9PTBOEyfRtLKkKd31YrRCx/9Wxjy2Uqb6IH/KAOr7/vP0i8iClOyxQqjm/UxMGU5r5s2vOBM7vSPQVmabg== + dependencies: + "@types/jest" "*" + "@types/tough-cookie@*": version "4.0.2" resolved "https://registry.yarnpkg.com/@types/tough-cookie/-/tough-cookie-4.0.2.tgz#6286b4c7228d58ab7866d19716f3696e03a09397" @@ -1829,6 +1866,14 @@ "@typescript-eslint/types" "5.27.1" "@typescript-eslint/visitor-keys" "5.27.1" +"@typescript-eslint/scope-manager@5.28.0": + version "5.28.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.28.0.tgz#ef9a5c68fecde72fd2ff8a84b9c120324826c1b9" + integrity sha512-LeBLTqF/he1Z+boRhSqnso6YrzcKMTQ8bO/YKEe+6+O/JGof9M0g3IJlIsqfrK/6K03MlFIlycbf1uQR1IjE+w== + dependencies: + "@typescript-eslint/types" "5.28.0" + "@typescript-eslint/visitor-keys" "5.28.0" + "@typescript-eslint/type-utils@5.27.1": version "5.27.1" resolved "https://registry.yarnpkg.com/@typescript-eslint/type-utils/-/type-utils-5.27.1.tgz#369f695199f74c1876e395ebea202582eb1d4166" @@ -1848,6 +1893,11 @@ resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.27.1.tgz#34e3e629501349d38be6ae97841298c03a6ffbf1" integrity sha512-LgogNVkBhCTZU/m8XgEYIWICD6m4dmEDbKXESCbqOXfKZxRKeqpiJXQIErv66sdopRKZPo5l32ymNqibYEH/xg== +"@typescript-eslint/types@5.28.0": + version "5.28.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.28.0.tgz#cffd9bcdce28db6daaa146e48a0be4387a6f4e9d" + integrity sha512-2OOm8ZTOQxqkPbf+DAo8oc16sDlVR5owgJfKheBkxBKg1vAfw2JsSofH9+16VPlN9PWtv8Wzhklkqw3k/zCVxA== + "@typescript-eslint/typescript-estree@5.10.2": version "5.10.2" resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.10.2.tgz#810906056cd3ddcb35aa333fdbbef3713b0fe4a7" @@ -1874,6 +1924,19 @@ semver "^7.3.7" tsutils "^3.21.0" +"@typescript-eslint/typescript-estree@5.28.0": + version "5.28.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.28.0.tgz#3487d158d091ca2772b285e67412ff6d9797d863" + integrity sha512-9GX+GfpV+F4hdTtYc6OV9ZkyYilGXPmQpm6AThInpBmKJEyRSIjORJd1G9+bknb7OTFYL+Vd4FBJAO6T78OVqA== + dependencies: + "@typescript-eslint/types" "5.28.0" + "@typescript-eslint/visitor-keys" "5.28.0" + debug "^4.3.4" + globby "^11.1.0" + is-glob "^4.0.3" + semver "^7.3.7" + tsutils "^3.21.0" + "@typescript-eslint/utils@5.27.1": version "5.27.1" resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-5.27.1.tgz#b4678b68a94bc3b85bf08f243812a6868ac5128f" @@ -1898,6 +1961,18 @@ eslint-scope "^5.1.1" eslint-utils "^3.0.0" +"@typescript-eslint/utils@^5.13.0": + version "5.28.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-5.28.0.tgz#b27a136eac300a48160b36d2aad0da44a1341b99" + integrity sha512-E60N5L0fjv7iPJV3UGc4EC+A3Lcj4jle9zzR0gW7vXhflO7/J29kwiTGITA2RlrmPokKiZbBy2DgaclCaEUs6g== + dependencies: + "@types/json-schema" "^7.0.9" + "@typescript-eslint/scope-manager" "5.28.0" + "@typescript-eslint/types" "5.28.0" + "@typescript-eslint/typescript-estree" "5.28.0" + eslint-scope "^5.1.1" + eslint-utils "^3.0.0" + "@typescript-eslint/visitor-keys@5.10.2": version "5.10.2" resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.10.2.tgz#fdbf272d8e61c045d865bd6c8b41bea73d222f3d" @@ -1914,6 +1989,14 @@ "@typescript-eslint/types" "5.27.1" eslint-visitor-keys "^3.3.0" +"@typescript-eslint/visitor-keys@5.28.0": + version "5.28.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.28.0.tgz#982bb226b763c48fc1859a60de33fbf939d40a0f" + integrity sha512-BtfP1vCor8cWacovzzPFOoeW4kBQxzmhxGoOpt0v1SFvG+nJ0cWaVdJk7cky1ArTcFHHKNIxyo2LLr3oNkSuXA== + dependencies: + "@typescript-eslint/types" "5.28.0" + eslint-visitor-keys "^3.3.0" + JSONStream@^1.0.4: version "1.3.5" resolved "https://registry.yarnpkg.com/JSONStream/-/JSONStream-1.3.5.tgz#3208c1f08d3a4d99261ab64f92302bc15e111ca0" @@ -2193,6 +2276,11 @@ at-least-node@^1.0.0: resolved "https://registry.yarnpkg.com/at-least-node/-/at-least-node-1.0.0.tgz#602cd4b46e844ad4effc92a8011a3c46e0238dc2" integrity sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg== +atob@^2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/atob/-/atob-2.1.2.tgz#6d9517eb9e030d2436666651e86bd9f6f13533c9" + integrity sha512-Wm6ukoaOGJi/73p/cl2GvLjTI5JM1k/O14isD73YML8StrH/7/lRFgmg8nICZgD3bZZvjwCGxtMOD3wWNAu8cg== + babel-jest@^28.1.1: version "28.1.1" resolved "https://registry.yarnpkg.com/babel-jest/-/babel-jest-28.1.1.tgz#2a3a4ae50964695b2d694ccffe4bec537c5a3586" @@ -2515,6 +2603,14 @@ chalk@^2.0.0, chalk@^2.3.2, chalk@^2.4.1: escape-string-regexp "^1.0.5" supports-color "^5.3.0" +chalk@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/chalk/-/chalk-3.0.0.tgz#3f73c2bf526591f574cc492c51e2456349f844e4" + integrity sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg== + dependencies: + ansi-styles "^4.1.0" + supports-color "^7.1.0" + chalk@^4.0.0, chalk@^4.1.0, chalk@^4.1.2: version "4.1.2" resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" @@ -2901,6 +2997,20 @@ crypto-random-string@^2.0.0: resolved "https://registry.yarnpkg.com/crypto-random-string/-/crypto-random-string-2.0.0.tgz#ef2a7a966ec11083388369baa02ebead229b30d5" integrity sha512-v1plID3y9r/lPhviJ1wrXpLeyUIGAZ2SHNYTEapm7/8A9nLPoyvVp3RK/EPFqn5kEznyWgYZNsRtYYIWbuG8KA== +css.escape@^1.5.1: + version "1.5.1" + resolved "https://registry.yarnpkg.com/css.escape/-/css.escape-1.5.1.tgz#42e27d4fa04ae32f931a4b4d4191fa9cddee97cb" + integrity sha512-YUifsXXuknHlUsmlgyY0PKzgPOr7/FjCePfHNt0jxm83wHZi44VDMQ7/fGNkjY3/jV1MC+1CmZbaHzugyeRtpg== + +css@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/css/-/css-3.0.0.tgz#4447a4d58fdd03367c516ca9f64ae365cee4aa5d" + integrity sha512-DG9pFfwOrzc+hawpmqX/dHYHJG+Bsdb0klhyi1sDneOgGOXy9wQIC8hzyVp1e4NRYDBdxcylvywPkkXCHAzTyQ== + dependencies: + inherits "^2.0.4" + source-map "^0.6.1" + source-map-resolve "^0.6.0" + cssom@^0.5.0: version "0.5.0" resolved "https://registry.yarnpkg.com/cssom/-/cssom-0.5.0.tgz#d254fa92cd8b6fbd83811b9fbaed34663cc17c36" @@ -2993,6 +3103,11 @@ decimal.js@^10.3.1: resolved "https://registry.yarnpkg.com/decimal.js/-/decimal.js-10.3.1.tgz#d8c3a444a9c6774ba60ca6ad7261c3a94fd5e783" integrity sha512-V0pfhfr8suzyPGOx3nmq4aHqabehUZn6Ch9kyFpV79TGDTWFmHqUqXdabR7QHqxzrYolF4+tVmJhUG4OURg5dQ== +decode-uri-component@^0.2.0: + version "0.2.0" + resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545" + integrity sha512-hjf+xovcEn31w/EUYdTXQh/8smFL/dzYjohQGEIgjyNavaJfBY2p5F527Bo1VPATxv0VYTUC2bOcXvqFwk78Og== + decompress-response@^6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-6.0.0.tgz#ca387612ddb7e104bd16d85aab00d5ecf09c66fc" @@ -3137,7 +3252,7 @@ doctrine@^3.0.0: dependencies: esutils "^2.0.2" -dom-accessibility-api@^0.5.9: +dom-accessibility-api@^0.5.6, dom-accessibility-api@^0.5.9: version "0.5.14" resolved "https://registry.yarnpkg.com/dom-accessibility-api/-/dom-accessibility-api-0.5.14.tgz#56082f71b1dc7aac69d83c4285eef39c15d93f56" integrity sha512-NMt+m9zFMPZe0JcY9gN224Qvk6qLIdqex29clBvc/y75ZBX9YA9wNK3frsYvu2DI1xcCIwxwnX+TlsJ2DSOADg== @@ -3340,6 +3455,15 @@ eslint-plugin-import@2.26.0: resolve "^1.22.0" tsconfig-paths "^3.14.1" +eslint-plugin-jest-dom@^4.0.2: + version "4.0.2" + resolved "https://registry.yarnpkg.com/eslint-plugin-jest-dom/-/eslint-plugin-jest-dom-4.0.2.tgz#9d3e2f51055f74c74e745d89c4b1a9781e0ec7a9" + integrity sha512-Jo51Atwyo2TdcUncjmU+UQeSTKh3sc2LF/M5i/R3nTU0Djw9V65KGJisdm/RtuKhy2KH/r7eQ1n6kwYFPNdHlA== + dependencies: + "@babel/runtime" "^7.16.3" + "@testing-library/dom" "^8.11.1" + requireindex "^1.2.0" + eslint-plugin-jest@26.5.3: version "26.5.3" resolved "https://registry.yarnpkg.com/eslint-plugin-jest/-/eslint-plugin-jest-26.5.3.tgz#a3ceeaf4a757878342b8b00eca92379b246e5505" @@ -3347,6 +3471,13 @@ eslint-plugin-jest@26.5.3: dependencies: "@typescript-eslint/utils" "^5.10.0" +eslint-plugin-testing-library@5.5.1: + version "5.5.1" + resolved "https://registry.yarnpkg.com/eslint-plugin-testing-library/-/eslint-plugin-testing-library-5.5.1.tgz#6fe602f9082a421b471bbae8aed692e26fe981b3" + integrity sha512-plLEkkbAKBjPxsLj7x4jNapcHAg2ernkQlKKrN2I8NrQwPISZHyCUNvg5Hv3EDqOQReToQb5bnqXYbkijJPE/g== + dependencies: + "@typescript-eslint/utils" "^5.13.0" + eslint-scope@^5.1.1: version "5.1.1" resolved "https://registry.yarnpkg.com/eslint-scope/-/eslint-scope-5.1.1.tgz#e786e59a66cb92b3f6c1fb0d508aab174848f48c" @@ -4660,7 +4791,7 @@ jest-matcher-utils@^27.0.0: jest-get-type "^27.5.1" pretty-format "^27.5.1" -jest-matcher-utils@^28.1.1: +jest-matcher-utils@^28.0.0, jest-matcher-utils@^28.1.1: version "28.1.1" resolved "https://registry.yarnpkg.com/jest-matcher-utils/-/jest-matcher-utils-28.1.1.tgz#a7c4653c2b782ec96796eb3088060720f1e29304" integrity sha512-NPJPRWrbmR2nAJ+1nmnfcKKzSwgfaciCCrYZzVnNoxVoyusYWIjkBMNvu0RHJe7dNj4hH3uZOPZsQA+xAYWqsw== @@ -6472,7 +6603,7 @@ pretty-format@^27.0.2, pretty-format@^27.5.1: ansi-styles "^5.0.0" react-is "^17.0.1" -pretty-format@^28.1.1: +pretty-format@^28.0.0, pretty-format@^28.1.1: version "28.1.1" resolved "https://registry.yarnpkg.com/pretty-format/-/pretty-format-28.1.1.tgz#f731530394e0f7fcd95aba6b43c50e02d86b95cb" integrity sha512-wwJbVTGFHeucr5Jw2bQ9P+VYHyLdAqedFLEkdQUVaBF/eiidDwH5OpilINq4mEfhbCjLnirt6HTTDhv1HaTIQw== @@ -6742,6 +6873,11 @@ require-directory@^2.1.1: resolved "https://registry.yarnpkg.com/require-directory/-/require-directory-2.1.1.tgz#8c64ad5fd30dab1c976e2344ffe7f792a6a6df42" integrity sha1-jGStX9MNqxyXbiNE/+f3kqam30I= +requireindex@^1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/requireindex/-/requireindex-1.2.0.tgz#3463cdb22ee151902635aa6c9535d4de9c2ef1ef" + integrity sha512-L9jEkOi3ASd9PYit2cwRfyppc9NoABujTP8/5gFcbERmo5jUoAKovIC3fsF17pkTnGsrByysqX+Kxd2OTNI1ww== + resolve-alpn@^1.0.0: version "1.2.1" resolved "https://registry.yarnpkg.com/resolve-alpn/-/resolve-alpn-1.2.1.tgz#b7adbdac3546aaaec20b45e7d8265927072726f9" @@ -7110,6 +7246,14 @@ source-map-js@^1.0.1: resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.0.2.tgz#adbc361d9c62df380125e7f161f71c826f1e490c" integrity sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw== +source-map-resolve@^0.6.0: + version "0.6.0" + resolved "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.6.0.tgz#3d9df87e236b53f16d01e58150fc7711138e5ed2" + integrity sha512-KXBr9d/fO/bWo97NXsPIAW1bFSBOuCnjbNTBMO7N59hsv5i9yzRDfcYwwt0l04+VqnKC+EwzvJZIP/qkuMgR/w== + dependencies: + atob "^2.1.2" + decode-uri-component "^0.2.0" + source-map-support@0.5.13: version "0.5.13" resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.13.tgz#31b24a9c2e73c2de85066c0feb7d44767ed52932"