diff --git a/.eslintrc.js b/.eslintrc.js index 3f9549cc..db945094 100644 --- a/.eslintrc.js +++ b/.eslintrc.js @@ -13,10 +13,23 @@ module.exports = { overrides: [ { files: ["test/**"], - // todo: these should be sourced from eslint-plugin-jest - env: { jest: true }, + extends: ["plugin:jest/recommended", "plugin:jest/style"], rules: { - "global-require": "off" + "global-require": "off", + "jest/prefer-called-with": "error", + "jest/no-conditional-in-test": "error", + "jest/no-test-return-statement": "error", + "jest/prefer-expect-resolves": "error", + "jest/require-to-throw-message": "error", + "jest/require-top-level-describe": "error", + "jest/prefer-hooks-on-top": "error", + "jest/prefer-lowercase-title": [ + "error", + { ignoreTopLevelDescribe: true } + ], + "jest/prefer-spy-on": "error", + "jest/prefer-strict-equal": "error", + "jest/prefer-todo": "error" } } ] diff --git a/package.json b/package.json index f03381b3..d5830ce2 100644 --- a/package.json +++ b/package.json @@ -34,6 +34,7 @@ "eslint-config-airbnb": "^19.0.0", "eslint-config-prettier": "^9.0.0", "eslint-plugin-import": "^2.24.2", + "eslint-plugin-jest": "^27.9.0", "eslint-plugin-jsx-a11y": "^6.4.1", "eslint-plugin-prettier": "^5.1.3", "eslint-plugin-react": "^7.26.0", diff --git a/test/package/config.test.js b/test/package/config.test.js index bc1d37b0..ba1a78f7 100644 --- a/test/package/config.test.js +++ b/test/package/config.test.js @@ -11,20 +11,20 @@ describe("Config", () => { test("public path", () => { process.env.RAILS_ENV = "development" const config = require("../../package/config") - expect(config.publicPath).toEqual("/packs/") + expect(config.publicPath).toBe("/packs/") }) test("public path with asset host", () => { process.env.RAILS_ENV = "development" process.env.SHAKAPACKER_ASSET_HOST = "http://foo.com/" const config = require("../../package/config") - expect(config.publicPath).toEqual("http://foo.com/packs/") + expect(config.publicPath).toBe("http://foo.com/packs/") }) test("should return additional paths as listed in app config, with resolved paths", () => { const config = require("../../package/config") - expect(config.additional_paths).toEqual([ + expect(config.additional_paths).toStrictEqual([ "app/assets", "/etc/yarn", "some.config.js", @@ -35,12 +35,16 @@ describe("Config", () => { test("should default manifestPath to the public dir", () => { const config = require("../../package/config") - expect(config.manifestPath).toEqual(resolve("public/packs/manifest.json")) + expect(config.manifestPath).toStrictEqual( + resolve("public/packs/manifest.json") + ) }) test("should allow overriding manifestPath", () => { process.env.SHAKAPACKER_CONFIG = "config/shakapacker_manifest_path.yml" const config = require("../../package/config") - expect(config.manifestPath).toEqual(resolve("app/javascript/manifest.json")) + expect(config.manifestPath).toStrictEqual( + resolve("app/javascript/manifest.json") + ) }) }) diff --git a/test/package/dev_server.test.js b/test/package/dev_server.test.js index 7c94e2ae..a24e65f0 100644 --- a/test/package/dev_server.test.js +++ b/test/package/dev_server.test.js @@ -16,8 +16,8 @@ describe("DevServer", () => { const devServer = require("../../package/dev_server") expect(devServer).toBeDefined() - expect(devServer.host).toEqual("0.0.0.0") - expect(devServer.port).toEqual("5000") + expect(devServer.host).toBe("0.0.0.0") + expect(devServer.port).toBe("5000") expect(devServer.disable_host_check).toBe(false) }) @@ -32,13 +32,13 @@ describe("DevServer", () => { const devServer = require("../../package/dev_server") expect(devServer).toBeDefined() - expect(devServer.host).toEqual("0.0.0.0") - expect(devServer.port).toEqual("5000") + expect(devServer.host).toBe("0.0.0.0") + expect(devServer.port).toBe("5000") }) test("with NODE_ENV and RAILS_ENV set to production", () => { process.env.RAILS_ENV = "production" process.env.NODE_ENV = "production" - expect(require("../../package/dev_server")).toEqual({}) + expect(require("../../package/dev_server")).toStrictEqual({}) }) }) diff --git a/test/package/development.test.js b/test/package/development.test.js index 2dff9d9c..9df9db75 100644 --- a/test/package/development.test.js +++ b/test/package/development.test.js @@ -19,8 +19,10 @@ describe("Development environment", () => { const webpackConfig = generateWebpackConfig() - expect(webpackConfig.output.path).toEqual(resolve("public", "packs")) - expect(webpackConfig.output.publicPath).toEqual("/packs/") + expect(webpackConfig.output.path).toStrictEqual( + resolve("public", "packs") + ) + expect(webpackConfig.output.publicPath).toBe("/packs/") }) test("should use development config and environment if WEBPACK_SERVE", () => { @@ -31,9 +33,11 @@ describe("Development environment", () => { const webpackConfig = generateWebpackConfig() - expect(webpackConfig.output.path).toEqual(resolve("public", "packs")) - expect(webpackConfig.output.publicPath).toEqual("/packs/") - expect(webpackConfig.devServer).toEqual(undefined) + expect(webpackConfig.output.path).toStrictEqual( + resolve("public", "packs") + ) + expect(webpackConfig.output.publicPath).toBe("/packs/") + expect(webpackConfig.devServer).toBeUndefined() }) }) }) diff --git a/test/package/env.test.js b/test/package/env.test.js index 6ea02143..473fc02d 100644 --- a/test/package/env.test.js +++ b/test/package/env.test.js @@ -10,7 +10,7 @@ describe("Env", () => { test("with NODE_ENV and RAILS_ENV set to development", () => { process.env.RAILS_ENV = "development" process.env.NODE_ENV = "development" - expect(require("../../package/env")).toEqual({ + expect(require("../../package/env")).toStrictEqual({ railsEnv: "development", nodeEnv: "development", isProduction: false, @@ -22,7 +22,7 @@ describe("Env", () => { test("with undefined NODE_ENV and RAILS_ENV set to development", () => { process.env.RAILS_ENV = "development" delete process.env.NODE_ENV - expect(require("../../package/env")).toEqual({ + expect(require("../../package/env")).toStrictEqual({ railsEnv: "development", nodeEnv: "production", isProduction: true, @@ -34,7 +34,7 @@ describe("Env", () => { test("with undefined NODE_ENV and RAILS_ENV", () => { delete process.env.NODE_ENV delete process.env.RAILS_ENV - expect(require("../../package/env")).toEqual({ + expect(require("../../package/env")).toStrictEqual({ railsEnv: "production", nodeEnv: "production", isProduction: true, @@ -46,7 +46,7 @@ describe("Env", () => { test("with a non-standard environment", () => { process.env.RAILS_ENV = "staging" process.env.NODE_ENV = "staging" - expect(require("../../package/env")).toEqual({ + expect(require("../../package/env")).toStrictEqual({ railsEnv: "staging", nodeEnv: "production", isProduction: true, diff --git a/test/package/environments/base.test.js b/test/package/environments/base.test.js index b94485eb..585cf30c 100644 --- a/test/package/environments/base.test.js +++ b/test/package/environments/base.test.js @@ -16,13 +16,13 @@ describe("Base config", () => { describe("config", () => { test("should return entry", () => { - expect(baseConfig.entry.application).toEqual( + expect(baseConfig.entry.application).toStrictEqual( resolve("app", "javascript", "entrypoints", "application.js") ) }) test("should return false for css_extract_ignore_order_warnings when using default config", () => { - expect(config.css_extract_ignore_order_warnings).toEqual(false) + expect(config.css_extract_ignore_order_warnings).toBe(false) }) test("should return true for css_extract_ignore_order_warnings when configured", () => { @@ -30,17 +30,17 @@ describe("Base config", () => { "config/shakapacker_css_extract_ignore_order_warnings.yml" const config2 = require("../../../package/config") - expect(config2.css_extract_ignore_order_warnings).toEqual(true) + expect(config2.css_extract_ignore_order_warnings).toBe(true) }) test("should return only 2 entry points with config.nested_entries == false", () => { - expect(config.nested_entries).toEqual(false) + expect(config.nested_entries).toBe(false) - expect(baseConfig.entry.multi_entry.sort()).toEqual([ + expect(baseConfig.entry.multi_entry.sort()).toStrictEqual([ resolve("app", "javascript", "entrypoints", "multi_entry.css"), resolve("app", "javascript", "entrypoints", "multi_entry.js") ]) - expect(baseConfig.entry["generated/something"]).toEqual(undefined) + expect(baseConfig.entry["generated/something"]).toBeUndefined() }) test("should returns top level and nested entry points with config.nested_entries == true", () => { @@ -48,23 +48,23 @@ describe("Base config", () => { const config2 = require("../../../package/config") const baseConfig2 = require("../../../package/environments/base") - expect(config2.nested_entries).toEqual(true) + expect(config2.nested_entries).toBe(true) - expect(baseConfig2.entry.application).toEqual( + expect(baseConfig2.entry.application).toStrictEqual( resolve("app", "javascript", "entrypoints", "application.js") ) - expect(baseConfig2.entry.multi_entry.sort()).toEqual([ + expect(baseConfig2.entry.multi_entry.sort()).toStrictEqual([ resolve("app", "javascript", "entrypoints", "multi_entry.css"), resolve("app", "javascript", "entrypoints", "multi_entry.js") ]) - expect(baseConfig2.entry["generated/something"]).toEqual( + expect(baseConfig2.entry["generated/something"]).toStrictEqual( resolve("app", "javascript", "entrypoints", "generated", "something.js") ) }) test("should return output", () => { - expect(baseConfig.output.filename).toEqual("js/[name]-[contenthash].js") - expect(baseConfig.output.chunkFilename).toEqual( + expect(baseConfig.output.filename).toBe("js/[name]-[contenthash].js") + expect(baseConfig.output.chunkFilename).toBe( "js/[name]-[contenthash].chunk.js" ) }) @@ -75,20 +75,20 @@ describe("Base config", () => { const defaultRules = Object.keys(rules) const configRules = baseConfig.module.rules - expect(defaultRules.length).toEqual(3) - expect(configRules.length).toEqual(3) + expect(defaultRules).toHaveLength(3) + expect(configRules).toHaveLength(3) }) test("should return default plugins", () => { - expect(baseConfig.plugins.length).toEqual(2) + expect(baseConfig.plugins).toHaveLength(2) }) test("should return default resolveLoader", () => { - expect(baseConfig.resolveLoader.modules).toEqual(["node_modules"]) + expect(baseConfig.resolveLoader.modules).toStrictEqual(["node_modules"]) }) test("should return default resolve.modules with additions", () => { - expect(baseConfig.resolve.modules).toEqual([ + expect(baseConfig.resolve.modules).toStrictEqual([ resolve("app", "javascript"), resolve("app/assets"), resolve("/etc/yarn"), diff --git a/test/package/environments/development.test.js b/test/package/environments/development.test.js index eec7b9bd..db1da737 100644 --- a/test/package/environments/development.test.js +++ b/test/package/environments/development.test.js @@ -17,10 +17,10 @@ describe("Development specific config", () => { config.useContentHash = true const environmentConfig = require("../../../package/environments/development") - expect(environmentConfig.output.filename).toEqual( + expect(environmentConfig.output.filename).toBe( "js/[name]-[contenthash].js" ) - expect(environmentConfig.output.chunkFilename).toEqual( + expect(environmentConfig.output.chunkFilename).toBe( "js/[name]-[contenthash].chunk.js" ) }) @@ -32,10 +32,8 @@ describe("Development specific config", () => { config.useContentHash = false const environmentConfig = require("../../../package/environments/development") - expect(environmentConfig.output.filename).toEqual("js/[name].js") - expect(environmentConfig.output.chunkFilename).toEqual( - "js/[name].chunk.js" - ) + expect(environmentConfig.output.filename).toBe("js/[name].js") + expect(environmentConfig.output.chunkFilename).toBe("js/[name].chunk.js") }) }) @@ -45,10 +43,8 @@ describe("Development specific config", () => { delete config.useContentHash const environmentConfig = require("../../../package/environments/development") - expect(environmentConfig.output.filename).toEqual("js/[name].js") - expect(environmentConfig.output.chunkFilename).toEqual( - "js/[name].chunk.js" - ) + expect(environmentConfig.output.filename).toBe("js/[name].js") + expect(environmentConfig.output.chunkFilename).toBe("js/[name].chunk.js") }) }) }) diff --git a/test/package/environments/production.test.js b/test/package/environments/production.test.js index f1eee212..dc1d8cfa 100644 --- a/test/package/environments/production.test.js +++ b/test/package/environments/production.test.js @@ -17,10 +17,10 @@ describe("Production specific config", () => { config.useContentHash = true const environmentConfig = require("../../../package/environments/production") - expect(environmentConfig.output.filename).toEqual( + expect(environmentConfig.output.filename).toBe( "js/[name]-[contenthash].js" ) - expect(environmentConfig.output.chunkFilename).toEqual( + expect(environmentConfig.output.chunkFilename).toBe( "js/[name]-[contenthash].chunk.js" ) }) @@ -48,10 +48,10 @@ describe("Production specific config", () => { config.useContentHash = false const environmentConfig = require("../../../package/environments/production") - expect(environmentConfig.output.filename).toEqual( + expect(environmentConfig.output.filename).toBe( "js/[name]-[contenthash].js" ) - expect(environmentConfig.output.chunkFilename).toEqual( + expect(environmentConfig.output.chunkFilename).toBe( "js/[name]-[contenthash].chunk.js" ) }) @@ -79,10 +79,10 @@ describe("Production specific config", () => { delete config.useContentHash const environmentConfig = require("../../../package/environments/production") - expect(environmentConfig.output.filename).toEqual( + expect(environmentConfig.output.filename).toBe( "js/[name]-[contenthash].js" ) - expect(environmentConfig.output.chunkFilename).toEqual( + expect(environmentConfig.output.chunkFilename).toBe( "js/[name]-[contenthash].chunk.js" ) }) diff --git a/test/package/index.test.js b/test/package/index.test.js index bcf79988..b12efb4a 100644 --- a/test/package/index.test.js +++ b/test/package/index.test.js @@ -17,7 +17,7 @@ describe("index", () => { webpackConfig1.output.path = "new path" expect(webpackConfig2).not.toHaveProperty("newKey") - expect(webpackConfig2.output.path).not.toEqual("new value") + expect(webpackConfig2.output.path).not.toBe("new value") }) test("webpackConfig merges extra config", () => { diff --git a/test/package/production.test.js b/test/package/production.test.js index 8da01bdf..0db1c753 100644 --- a/test/package/production.test.js +++ b/test/package/production.test.js @@ -18,8 +18,10 @@ describe("Production environment", () => { const webpackConfig = generateWebpackConfig() - expect(webpackConfig.output.path).toEqual(resolve("public", "packs")) - expect(webpackConfig.output.publicPath).toEqual("/packs/") + expect(webpackConfig.output.path).toStrictEqual( + resolve("public", "packs") + ) + expect(webpackConfig.output.publicPath).toBe("/packs/") expect(webpackConfig).toMatchObject({ devtool: "source-map", diff --git a/test/package/rules/file.test.js b/test/package/rules/file.test.js index add6d0c1..4d06953d 100644 --- a/test/package/rules/file.test.js +++ b/test/package/rules/file.test.js @@ -9,7 +9,7 @@ jest.mock("../../../package/config", () => { }) describe("file", () => { - test("test expected file types", () => { + test("expected file types", () => { const types = [ ".bmp", ".gif", @@ -39,7 +39,7 @@ describe("file", () => { const pathData = { filename: "app/javascript/image.svg" } - expect(file.generator.filename(pathData)).toEqual( + expect(file.generator.filename(pathData)).toBe( "static/[name]-[hash][ext][query]" ) }) @@ -48,7 +48,7 @@ describe("file", () => { const pathData = { filename: "app/javascript/images/image.svg" } - expect(file.generator.filename(pathData)).toEqual( + expect(file.generator.filename(pathData)).toBe( "static/images/[name]-[hash][ext][query]" ) }) @@ -57,7 +57,7 @@ describe("file", () => { const pathData = { filename: "app/javascript/images/nested/deeply/image.svg" } - expect(file.generator.filename(pathData)).toEqual( + expect(file.generator.filename(pathData)).toBe( "static/images/nested/deeply/[name]-[hash][ext][query]" ) }) @@ -67,14 +67,14 @@ describe("file", () => { filename: "app/assets/images/image.svg" } - expect(file.generator.filename(pathData)).toEqual( + expect(file.generator.filename(pathData)).toBe( "static/images/[name]-[hash][ext][query]" ) const pathData2 = { filename: "app/javascript/app/assets/image.svg" } - expect(file.generator.filename(pathData2)).toEqual( + expect(file.generator.filename(pathData2)).toBe( "static/app/assets/[name]-[hash][ext][query]" ) }) diff --git a/test/package/rules/raw.test.js b/test/package/rules/raw.test.js index b1d09ba7..667e8eb4 100644 --- a/test/package/rules/raw.test.js +++ b/test/package/rules/raw.test.js @@ -1,7 +1,7 @@ const raw = require("../../../package/rules/raw") describe("raw", () => { - test("test expected file types", () => { + test("expected file types", () => { expect(raw.test.test(".html")).toBe(true) }) diff --git a/test/package/staging.test.js b/test/package/staging.test.js index b37db76c..55dd1936 100644 --- a/test/package/staging.test.js +++ b/test/package/staging.test.js @@ -18,10 +18,10 @@ describe("Custom environment", () => { const webpackConfig = generateWebpackConfig() - expect(webpackConfig.output.path).toEqual( + expect(webpackConfig.output.path).toStrictEqual( resolve("public", "packs-staging") ) - expect(webpackConfig.output.publicPath).toEqual("/packs-staging/") + expect(webpackConfig.output.publicPath).toBe("/packs-staging/") expect(webpackConfig).toMatchObject({ devtool: "source-map", stats: "normal" diff --git a/test/package/test.test.js b/test/package/test.test.js index 9bf1be09..2ddfe75d 100644 --- a/test/package/test.test.js +++ b/test/package/test.test.js @@ -18,9 +18,11 @@ describe("Test environment", () => { const webpackConfig = generateWebpackConfig() - expect(webpackConfig.output.path).toEqual(resolve("public", "packs-test")) - expect(webpackConfig.output.publicPath).toEqual("/packs-test/") - expect(webpackConfig.devServer).toEqual(undefined) + expect(webpackConfig.output.path).toStrictEqual( + resolve("public", "packs-test") + ) + expect(webpackConfig.output.publicPath).toBe("/packs-test/") + expect(webpackConfig.devServer).toBeUndefined() }) }) }) diff --git a/yarn.lock b/yarn.lock index b6824842..80381a19 100644 --- a/yarn.lock +++ b/yarn.lock @@ -803,12 +803,12 @@ "@nodelib/fs.stat" "2.0.5" run-parallel "^1.1.9" -"@nodelib/fs.stat@2.0.5": +"@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2": version "2.0.5" resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz#5bd262af94e9d25bd1e71b05deed44876a222e8b" integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== -"@nodelib/fs.walk@^1.2.8": +"@nodelib/fs.walk@^1.2.3", "@nodelib/fs.walk@^1.2.8": version "1.2.8" resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz#e95737e8bb6746ddedf69c556953494f196fe69a" integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg== @@ -940,6 +940,11 @@ resolved "https://registry.yarnpkg.com/@types/prettier/-/prettier-2.6.0.tgz#efcbd41937f9ae7434c714ab698604822d890759" integrity sha512-G/AdOadiZhnJp0jXCaBQU449W2h716OW/EoXeYkCytxKL06X1WCXB4DZpp8TpZ8eyIJVS1cw4lrlkkSYU21cDw== +"@types/semver@^7.3.12": + version "7.5.8" + resolved "https://registry.yarnpkg.com/@types/semver/-/semver-7.5.8.tgz#8268a8c57a3e4abd25c165ecd36237db7948a55e" + integrity sha512-I8EUhyrgfLrcTkzV3TSsGyl1tSuPrEDzr0yd5m90UgNxQkyDXULk3b6MlQqTCpZpNtWe1K0hzclnZkTcLBe2UQ== + "@types/stack-utils@^2.0.0": version "2.0.1" resolved "https://registry.yarnpkg.com/@types/stack-utils/-/stack-utils-2.0.1.tgz#20f18294f797f2209b5f65c8e3b5c8e8261d127c" @@ -957,6 +962,54 @@ dependencies: "@types/yargs-parser" "*" +"@typescript-eslint/scope-manager@5.62.0": + version "5.62.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/scope-manager/-/scope-manager-5.62.0.tgz#d9457ccc6a0b8d6b37d0eb252a23022478c5460c" + integrity sha512-VXuvVvZeQCQb5Zgf4HAxc04q5j+WrNAtNh9OwCsCgpKqESMTu3tF/jhZ3xG6T4NZwWl65Bg8KuS2uEvhSfLl0w== + dependencies: + "@typescript-eslint/types" "5.62.0" + "@typescript-eslint/visitor-keys" "5.62.0" + +"@typescript-eslint/types@5.62.0": + version "5.62.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.62.0.tgz#258607e60effa309f067608931c3df6fed41fd2f" + integrity sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ== + +"@typescript-eslint/typescript-estree@5.62.0": + version "5.62.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.62.0.tgz#7d17794b77fabcac615d6a48fb143330d962eb9b" + integrity sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA== + dependencies: + "@typescript-eslint/types" "5.62.0" + "@typescript-eslint/visitor-keys" "5.62.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.10.0": + version "5.62.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/utils/-/utils-5.62.0.tgz#141e809c71636e4a75daa39faed2fb5f4b10df86" + integrity sha512-n8oxjeb5aIbPFEtmQxQYOLI0i9n5ySBEY/ZEHHZqKQSFnxio1rv6dthascc9dLuwrL0RC5mPCxB7vnAVGAYWAQ== + dependencies: + "@eslint-community/eslint-utils" "^4.2.0" + "@types/json-schema" "^7.0.9" + "@types/semver" "^7.3.12" + "@typescript-eslint/scope-manager" "5.62.0" + "@typescript-eslint/types" "5.62.0" + "@typescript-eslint/typescript-estree" "5.62.0" + eslint-scope "^5.1.1" + semver "^7.3.7" + +"@typescript-eslint/visitor-keys@5.62.0": + version "5.62.0" + resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.62.0.tgz#2174011917ce582875954ffe2f6912d5931e353e" + integrity sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw== + dependencies: + "@typescript-eslint/types" "5.62.0" + eslint-visitor-keys "^3.3.0" + "@ungap/structured-clone@^1.2.0": version "1.2.0" resolved "https://registry.yarnpkg.com/@ungap/structured-clone/-/structured-clone-1.2.0.tgz#756641adb587851b5ccb3e095daf27ae581c8406" @@ -1246,6 +1299,11 @@ array-includes@^3.1.6, array-includes@^3.1.7: get-intrinsic "^1.2.4" is-string "^1.0.7" +array-union@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" + integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== + array.prototype.findlast@^1.2.4: version "1.2.5" resolved "https://registry.yarnpkg.com/array.prototype.findlast/-/array.prototype.findlast-1.2.5.tgz#3e4fbcb30a15a7f5bf64cf2faae22d139c2e4904" @@ -1698,7 +1756,7 @@ debug@^3.2.7: dependencies: ms "^2.1.1" -debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.2: +debug@^4.1.0, debug@^4.1.1, debug@^4.3.1, debug@^4.3.2, debug@^4.3.4: version "4.3.4" resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== @@ -1761,6 +1819,13 @@ diff-sequences@^28.1.1: resolved "https://registry.yarnpkg.com/diff-sequences/-/diff-sequences-28.1.1.tgz#9989dc731266dc2903457a70e996f3a041913ac6" integrity sha512-FU0iFaH/E23a+a718l8Qa/19bF9p06kgE0KipMOMadwa3SjnaElKzPaUC0vnibs6/B/9ni97s61mcejk8W1fQw== +dir-glob@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f" + integrity sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA== + dependencies: + path-type "^4.0.0" + doctrine@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/doctrine/-/doctrine-2.1.0.tgz#5cd01fc101621b42c4cd7f5d1a66243716d3f39d" @@ -2202,6 +2267,13 @@ eslint-plugin-import@^2.24.2: semver "^6.3.1" tsconfig-paths "^3.15.0" +eslint-plugin-jest@^27.9.0: + version "27.9.0" + resolved "https://registry.yarnpkg.com/eslint-plugin-jest/-/eslint-plugin-jest-27.9.0.tgz#7c98a33605e1d8b8442ace092b60e9919730000b" + integrity sha512-QIT7FH7fNmd9n4se7FFKHbsLKGQiw885Ds6Y/sxKgCZ6natwCsXdgPOADnYVxN2QrRweF0FZWbJ6S7Rsn7llug== + dependencies: + "@typescript-eslint/utils" "^5.10.0" + eslint-plugin-jsx-a11y@^6.4.1: version "6.8.0" resolved "https://registry.yarnpkg.com/eslint-plugin-jsx-a11y/-/eslint-plugin-jsx-a11y-6.8.0.tgz#2fa9c701d44fcd722b7c771ec322432857fcbad2" @@ -2261,7 +2333,7 @@ eslint-plugin-react@^7.26.0: semver "^6.3.1" string.prototype.matchall "^4.0.10" -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== @@ -2415,6 +2487,17 @@ fast-diff@^1.1.2: resolved "https://registry.yarnpkg.com/fast-diff/-/fast-diff-1.3.0.tgz#ece407fa550a64d638536cd727e129c61616e0f0" integrity sha512-VxPP4NqbUjj6MaAOafWeUn2cXWLcCtljklUtZf0Ind4XQ+QPtmA0b18zZy0jIQx+ExRVCR/ZQpBmik5lXshNsw== +fast-glob@^3.2.9: + version "3.3.2" + resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.3.2.tgz#a904501e57cfdd2ffcded45e99a54fef55e46129" + integrity sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow== + 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" @@ -2590,6 +2673,13 @@ get-symbol-description@^1.0.2: es-errors "^1.3.0" get-intrinsic "^1.2.4" +glob-parent@^5.1.2: + version "5.1.2" + resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" + integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== + dependencies: + is-glob "^4.0.1" + glob-parent@^6.0.2: version "6.0.2" resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-6.0.2.tgz#6d237d99083950c79290f24c7642a3de9a28f9e3" @@ -2633,6 +2723,18 @@ globalthis@^1.0.3: dependencies: define-properties "^1.1.3" +globby@^11.1.0: + 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" + gopd@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/gopd/-/gopd-1.0.1.tgz#29ff76de69dac7489b7c0918a5788e56477c332c" @@ -2886,7 +2988,7 @@ is-generator-function@^1.0.10: dependencies: has-tostringtag "^1.0.0" -is-glob@^4.0.0, is-glob@^4.0.3: +is-glob@^4.0.0, is-glob@^4.0.1, is-glob@^4.0.3: version "4.0.3" resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== @@ -3668,6 +3770,11 @@ merge-stream@^2.0.0: resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== +merge2@^1.3.0, merge2@^1.4.1: + version "1.4.1" + resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" + integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== + micromatch@^4.0.4: version "4.0.5" resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.5.tgz#bc8999a7cbbf77cdc89f132f6e467051b49090c6" @@ -3948,6 +4055,11 @@ path-parse@^1.0.7: resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== +path-type@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" + integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== + picocolors@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c" @@ -4249,6 +4361,13 @@ semver@^7.3.5: dependencies: lru-cache "^6.0.0" +semver@^7.3.7: + version "7.6.0" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.6.0.tgz#1a46a4db4bffcccd97b743b5005c8325f23d4e2d" + integrity sha512-EnwXhrlwXMk9gKu5/flx5sv/an57AkRplG3hTK68W7FRDN+k+OWBj65M7719OkA82XLBxrcX0KSHj+X5COhOVg== + dependencies: + lru-cache "^6.0.0" + serialize-javascript@^6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/serialize-javascript/-/serialize-javascript-6.0.0.tgz#efae5d88f45d7924141da8b5c3a7a7e663fefeb8" @@ -4616,11 +4735,23 @@ tsconfig-paths@^3.15.0: minimist "^1.2.6" strip-bom "^3.0.0" +tslib@^1.8.1: + version "1.14.1" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" + integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== + tslib@^2.6.2: version "2.6.2" resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.6.2.tgz#703ac29425e7b37cd6fd456e92404d46d1f3e4ae" integrity sha512-AEYxH93jGFPn/a2iVAwW87VuUIkR1FVUKB77NwMF7nBTDkDrrT/Hpt/IrCJ0QXhW27jTBDcf5ZY7w6RiqTMw2Q== +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== + dependencies: + tslib "^1.8.1" + type-check@^0.4.0, type-check@~0.4.0: version "0.4.0" resolved "https://registry.yarnpkg.com/type-check/-/type-check-0.4.0.tgz#07b8203bfa7056c0657050e3ccd2c37730bab8f1"