From 8188cbf7b6c17cbb3ba9e0458ed1a993a189ad81 Mon Sep 17 00:00:00 2001 From: Syed Ali Abbas Zaidi <88369802+Syed-Ali-Abbas-Zaidi@users.noreply.github.com> Date: Mon, 11 Mar 2024 15:51:23 +0500 Subject: [PATCH] feat: migrate enzyme to RTL (#844) * feat: migrate enzyme to RTL * fix: snapshots * fix: updated paragon to fix issues --------- Co-authored-by: Muhammad Abdullah Waheed --- jest.config.js | 2 +- package-lock.json | 1252 +- package.json | 6 +- src/feedback/AlertList.test.jsx | 8 +- src/feedback/AlertMessage.test.jsx | 14 +- .../__snapshots__/AlertList.test.jsx.snap | 111 +- .../__snapshots__/AlertMessage.test.jsx.snap | 148 +- src/payment/AlertCodeMessages.test.jsx | 8 +- src/payment/PaymentPage.test.jsx | 50 +- .../AlertCodeMessages.test.jsx.snap | 33 +- .../__snapshots__/PaymentPage.test.jsx.snap | 15301 ++++++++-------- src/payment/cart/Cart.test.jsx | 30 +- src/payment/cart/CouponForm.jsx | 2 +- src/payment/cart/CouponForm.test.jsx | 33 +- src/payment/cart/LocalizedPrice.test.jsx | 10 +- src/payment/cart/Offers.test.jsx | 20 +- src/payment/cart/ProductLineItem.test.jsx | 44 +- .../cart/__snapshots__/Cart.test.jsx.snap | 1340 +- .../__snapshots__/CouponForm.test.jsx.snap | 151 +- .../LocalizedPrice.test.jsx.snap | 16 +- .../cart/__snapshots__/Offers.test.jsx.snap | 120 +- .../ProductLineItem.test.jsx.snap | 360 +- .../cart/order-details/OrderDetails.test.jsx | 24 +- .../__snapshots__/OrderDetails.test.jsx.snap | 156 +- src/payment/checkout/Checkout.jsx | 1 + src/payment/checkout/Checkout.test.jsx | 55 +- .../payment-form/CardDetails.test.jsx | 22 +- .../CardHolderInformation.test.jsx | 31 +- .../checkout/payment-form/PaymentForm.jsx | 1 + .../payment-form/PaymentForm.test.jsx | 32 +- .../payment-form/StripePaymentForm.test.jsx | 20 +- .../apple-pay/ApplePayButton.jsx | 1 + .../apple-pay/ApplePayButton.test.jsx | 27 +- .../ApplePayButton.test.jsx.snap | 18 +- .../paypal/PayPalButton.test.jsx | 6 +- .../__snapshots__/PayPalButton.test.jsx.snap | 42 +- src/setupTest.js | 5 +- 37 files changed, 9438 insertions(+), 10062 deletions(-) diff --git a/jest.config.js b/jest.config.js index 05303f805..f1653261f 100644 --- a/jest.config.js +++ b/jest.config.js @@ -1,7 +1,7 @@ const { createConfig } = require('@openedx/frontend-build'); module.exports = createConfig('jest', { - setupFiles: [ + setupFilesAfterEnv: [ '/src/setupTest.js', ], coveragePathIgnorePatterns: [ diff --git a/package-lock.json b/package-lock.json index 4d1027de5..6d2b0fec2 100644 --- a/package-lock.json +++ b/package-lock.json @@ -19,7 +19,7 @@ "@fortawesome/free-regular-svg-icons": "^6.1.1", "@fortawesome/free-solid-svg-icons": "^6.1.1", "@fortawesome/react-fontawesome": "^0.2.0", - "@openedx/paragon": "^22.0.0", + "@openedx/paragon": "22.1.1", "@stripe/react-stripe-js": "^1.10.0", "@stripe/stripe-js": "^1.36.0", "axios": "^0.27.2", @@ -54,17 +54,13 @@ "@openedx/frontend-build": "13.0.27", "@testing-library/jest-dom": "^5.14.1", "@testing-library/react": "^12.1.5", - "@wojtekmaj/enzyme-adapter-react-17": "^0.8.0", "audit-ci": "^6.3.0", "axios-mock-adapter": "^1.21.1", "chance": "^1.1.8", - "enzyme": "^3.11.0", - "enzyme-to-json": "^3.6.2", "html-webpack-plugin": "^5.5.0", "husky": "^8.0.1", "lodash.defaultsdeep": "^4.6.1", "qs": "^6.11.0", - "react-test-renderer": "^17.0.2", "redux-mock-store": "^1.5.4", "rosie": "^2.1.0", "webpack-merge": "^5.8.0" @@ -85,12 +81,12 @@ "dev": true }, "node_modules/@ampproject/remapping": { - "version": "2.2.1", - "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.2.1.tgz", - "integrity": "sha512-lFMjJTrFL3j7L9yBxwYfCq2k6qqwHyzuUl/XBnif78PWTJYyL/dfowQHWE3sp6U6ZzqWiiIZnpTMO96zhkjwtg==", + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/@ampproject/remapping/-/remapping-2.3.0.tgz", + "integrity": "sha512-30iZtAPgz+LTIYoeivqYo853f02jBYSd5uGnGpkFV0M3xOt9aN73erkgYAmZU43x4VfqcnLxW9Kpg3R5LC4YYw==", "dependencies": { - "@jridgewell/gen-mapping": "^0.3.0", - "@jridgewell/trace-mapping": "^0.3.9" + "@jridgewell/gen-mapping": "^0.3.5", + "@jridgewell/trace-mapping": "^0.3.24" }, "engines": { "node": ">=6.0.0" @@ -306,9 +302,9 @@ } }, "node_modules/@babel/helper-create-class-features-plugin": { - "version": "7.23.10", - "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.23.10.tgz", - "integrity": "sha512-2XpP2XhkXzgxecPNEEK8Vz8Asj9aRxt08oKOqtiZoqV2UGZ5T+EkyP9sXQ9nwMxBIG34a7jmasVqoMop7VdPUw==", + "version": "7.24.0", + "resolved": "https://registry.npmjs.org/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.24.0.tgz", + "integrity": "sha512-QAH+vfvts51BCsNZ2PhY6HAggnlS6omLLFTsIpeqZk/MmJ6cW7tgz5yRv0fMJThcr6FmbMrENh1RgrWPTYA76g==", "dependencies": { "@babel/helper-annotate-as-pure": "^7.22.5", "@babel/helper-environment-visitor": "^7.22.20", @@ -441,9 +437,9 @@ } }, "node_modules/@babel/helper-plugin-utils": { - "version": "7.22.5", - "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz", - "integrity": "sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg==", + "version": "7.24.0", + "resolved": "https://registry.npmjs.org/@babel/helper-plugin-utils/-/helper-plugin-utils-7.24.0.tgz", + "integrity": "sha512-9cUznXMG0+FxRuJfvL82QlTqIzhVW9sL0KjMPHhAOOvpQGL8QtdxnBKILjBqxlHyliz0yCa1G903ZXI/FuHy2w==", "engines": { "node": ">=6.9.0" } @@ -551,13 +547,13 @@ } }, "node_modules/@babel/helpers": { - "version": "7.23.9", - "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.23.9.tgz", - "integrity": "sha512-87ICKgU5t5SzOT7sBMfCOZQ2rHjRU+Pcb9BoILMYz600W6DkVRLFBPwQ18gwUVvggqXivaUakpnxWQGbpywbBQ==", + "version": "7.24.0", + "resolved": "https://registry.npmjs.org/@babel/helpers/-/helpers-7.24.0.tgz", + "integrity": "sha512-ulDZdc0Aj5uLc5nETsa7EPx2L7rM0YJM8r7ck7U73AXi7qOV44IHHRAYZHY6iU1rr3C5N4NtTmMRUJP6kwCWeA==", "dependencies": { - "@babel/template": "^7.23.9", - "@babel/traverse": "^7.23.9", - "@babel/types": "^7.23.9" + "@babel/template": "^7.24.0", + "@babel/traverse": "^7.24.0", + "@babel/types": "^7.24.0" }, "engines": { "node": ">=6.9.0" @@ -641,9 +637,9 @@ } }, "node_modules/@babel/parser": { - "version": "7.23.9", - "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.23.9.tgz", - "integrity": "sha512-9tcKgqKbs3xGJ+NtKF2ndOBBLVwPjl1SHxPQkd36r3Dlirw3xWUeGaTbqr7uGZcTaxkVNwc+03SVP7aCdWrTlA==", + "version": "7.24.0", + "resolved": "https://registry.npmjs.org/@babel/parser/-/parser-7.24.0.tgz", + "integrity": "sha512-QuP/FxEAzMSjXygs8v4N9dvdXzEHN4W1oF3PxuWAtPo08UdM17u89RDMgjLn/mlc56iM0HlLmVkO/wgR+rDgHg==", "bin": { "parser": "bin/babel-parser.js" }, @@ -1441,13 +1437,13 @@ } }, "node_modules/@babel/plugin-transform-object-rest-spread": { - "version": "7.23.4", - "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.23.4.tgz", - "integrity": "sha512-9x9K1YyeQVw0iOXJlIzwm8ltobIIv7j2iLyP2jIhEbqPRQ7ScNgwQufU2I0Gq11VjyG4gI4yMXt2VFags+1N3g==", + "version": "7.24.0", + "resolved": "https://registry.npmjs.org/@babel/plugin-transform-object-rest-spread/-/plugin-transform-object-rest-spread-7.24.0.tgz", + "integrity": "sha512-y/yKMm7buHpFFXfxVFS4Vk1ToRJDilIa6fKRioB9Vjichv58TDGXTvqV0dN7plobAmTW5eSEGXDngE+Mm+uO+w==", "dependencies": { - "@babel/compat-data": "^7.23.3", - "@babel/helper-compilation-targets": "^7.22.15", - "@babel/helper-plugin-utils": "^7.22.5", + "@babel/compat-data": "^7.23.5", + "@babel/helper-compilation-targets": "^7.23.6", + "@babel/helper-plugin-utils": "^7.24.0", "@babel/plugin-syntax-object-rest-spread": "^7.8.3", "@babel/plugin-transform-parameters": "^7.23.3" }, @@ -1966,9 +1962,9 @@ "integrity": "sha512-x/rqGMdzj+fWZvCOYForTghzbtqPDZ5gPwaoNGHdgDfF2QA/XZbCBp4Moo5scrkAMPhB7z26XM/AaHuIJdgauA==" }, "node_modules/@babel/runtime": { - "version": "7.23.9", - "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.23.9.tgz", - "integrity": "sha512-0CX6F+BI2s9dkUqr08KFrAIZgNFj75rdBU/DjCyYLIaV/quFjkk6T+EJ2LkZHyZTbEV4L5p97mNkUsHl2wLFAw==", + "version": "7.24.0", + "resolved": "https://registry.npmjs.org/@babel/runtime/-/runtime-7.24.0.tgz", + "integrity": "sha512-Chk32uHMg6TnQdvw2e9IlqPpFX/6NLuK0Ys2PqLb7/gL5uFn9mXvK715FGLlOLQrcO4qIkNHkvPGktzzXexsFw==", "dependencies": { "regenerator-runtime": "^0.14.0" }, @@ -1977,9 +1973,9 @@ } }, "node_modules/@babel/runtime-corejs3": { - "version": "7.23.9", - "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.23.9.tgz", - "integrity": "sha512-oeOFTrYWdWXCvXGB5orvMTJ6gCZ9I6FBjR+M38iKNXCsPxr4xT0RTdg5uz1H7QP8pp74IzPtwritEr+JscqHXQ==", + "version": "7.24.0", + "resolved": "https://registry.npmjs.org/@babel/runtime-corejs3/-/runtime-corejs3-7.24.0.tgz", + "integrity": "sha512-HxiRMOncx3ly6f3fcZ1GVKf+/EROcI9qwPgmij8Czqy6Okm/0T37T4y2ZIlLUuEUFjtM7NRsfdCO8Y3tAiJZew==", "dependencies": { "core-js-pure": "^3.30.2", "regenerator-runtime": "^0.14.0" @@ -1999,22 +1995,22 @@ "integrity": "sha512-dYnhHh0nJoMfnkZs6GmmhFknAGRrLznOu5nc9ML+EJxGvrx6H7teuevqVqCuPcPK//3eDrrjQhehXVx9cnkGdw==" }, "node_modules/@babel/template": { - "version": "7.23.9", - "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.23.9.tgz", - "integrity": "sha512-+xrD2BWLpvHKNmX2QbpdpsBaWnRxahMwJjO+KZk2JOElj5nSmKezyS1B4u+QbHMTX69t4ukm6hh9lsYQ7GHCKA==", + "version": "7.24.0", + "resolved": "https://registry.npmjs.org/@babel/template/-/template-7.24.0.tgz", + "integrity": "sha512-Bkf2q8lMB0AFpX0NFEqSbx1OkTHf0f+0j82mkw+ZpzBnkk7e9Ql0891vlfgi+kHwOk8tQjiQHpqh4LaSa0fKEA==", "dependencies": { "@babel/code-frame": "^7.23.5", - "@babel/parser": "^7.23.9", - "@babel/types": "^7.23.9" + "@babel/parser": "^7.24.0", + "@babel/types": "^7.24.0" }, "engines": { "node": ">=6.9.0" } }, "node_modules/@babel/traverse": { - "version": "7.23.9", - "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.23.9.tgz", - "integrity": "sha512-I/4UJ9vs90OkBtY6iiiTORVMyIhJ4kAVmsKo9KFc8UOxMeUfi2hvtIBsET5u9GizXE6/GFSuKCTNfgCswuEjRg==", + "version": "7.24.0", + "resolved": "https://registry.npmjs.org/@babel/traverse/-/traverse-7.24.0.tgz", + "integrity": "sha512-HfuJlI8qq3dEDmNU5ChzzpZRWq+oxCZQyMzIMEqLho+AQnhMnKQUzH6ydo3RBl/YjPCuk68Y6s0Gx0AeyULiWw==", "dependencies": { "@babel/code-frame": "^7.23.5", "@babel/generator": "^7.23.6", @@ -2022,8 +2018,8 @@ "@babel/helper-function-name": "^7.23.0", "@babel/helper-hoist-variables": "^7.22.5", "@babel/helper-split-export-declaration": "^7.22.6", - "@babel/parser": "^7.23.9", - "@babel/types": "^7.23.9", + "@babel/parser": "^7.24.0", + "@babel/types": "^7.24.0", "debug": "^4.3.1", "globals": "^11.1.0" }, @@ -2032,9 +2028,9 @@ } }, "node_modules/@babel/types": { - "version": "7.23.9", - "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.23.9.tgz", - "integrity": "sha512-dQjSq/7HaSjRM43FFGnv5keM2HsxpmyV1PfaSVm0nzzjwwTmjOe6J4bC8e3+pTEIgHaHj+1ZlLThRJ2auc/w1Q==", + "version": "7.24.0", + "resolved": "https://registry.npmjs.org/@babel/types/-/types-7.24.0.tgz", + "integrity": "sha512-+j7a5c253RfKh8iABBhywc8NSfP5LURe7Uh4qpsh6jc+aLJguvmIUBdjSdEMQv2bENrCR5MfRdjGo7vzS/ob7w==", "dependencies": { "@babel/helper-string-parser": "^7.23.4", "@babel/helper-validator-identifier": "^7.22.20", @@ -2073,9 +2069,9 @@ } }, "node_modules/@csstools/cascade-layer-name-parser": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/@csstools/cascade-layer-name-parser/-/cascade-layer-name-parser-1.0.7.tgz", - "integrity": "sha512-9J4aMRJ7A2WRjaRLvsMeWrL69FmEuijtiW1XlK/sG+V0UJiHVYUyvj9mY4WAXfU/hGIiGOgL8e0jJcRyaZTjDQ==", + "version": "1.0.8", + "resolved": "https://registry.npmjs.org/@csstools/cascade-layer-name-parser/-/cascade-layer-name-parser-1.0.8.tgz", + "integrity": "sha512-xHxXavWvXB5nAA9IvZtjEzkONM3hPXpxqYK4cEw60LcqPiFjq7ZlEFxOyYFPrG4UdANKtnucNtRVDy7frjq6AA==", "funding": [ { "type": "github", @@ -2090,14 +2086,14 @@ "node": "^14 || ^16 || >=18" }, "peerDependencies": { - "@csstools/css-parser-algorithms": "^2.5.0", + "@csstools/css-parser-algorithms": "^2.6.0", "@csstools/css-tokenizer": "^2.2.3" } }, "node_modules/@csstools/css-parser-algorithms": { - "version": "2.5.0", - "resolved": "https://registry.npmjs.org/@csstools/css-parser-algorithms/-/css-parser-algorithms-2.5.0.tgz", - "integrity": "sha512-abypo6m9re3clXA00eu5syw+oaPHbJTPapu9C4pzNsJ4hdZDzushT50Zhu+iIYXgEe1CxnRMn7ngsbV+MLrlpQ==", + "version": "2.6.0", + "resolved": "https://registry.npmjs.org/@csstools/css-parser-algorithms/-/css-parser-algorithms-2.6.0.tgz", + "integrity": "sha512-YfEHq0eRH98ffb5/EsrrDspVWAuph6gDggAE74ZtjecsmyyWpW768hOyiONa8zwWGbIWYfa2Xp4tRTrpQQ00CQ==", "funding": [ { "type": "github", @@ -2134,9 +2130,9 @@ } }, "node_modules/@csstools/media-query-list-parser": { - "version": "2.1.7", - "resolved": "https://registry.npmjs.org/@csstools/media-query-list-parser/-/media-query-list-parser-2.1.7.tgz", - "integrity": "sha512-lHPKJDkPUECsyAvD60joYfDmp8UERYxHGkFfyLJFTVK/ERJe0sVlIFLXU5XFxdjNDTerp5L4KeaKG+Z5S94qxQ==", + "version": "2.1.8", + "resolved": "https://registry.npmjs.org/@csstools/media-query-list-parser/-/media-query-list-parser-2.1.8.tgz", + "integrity": "sha512-DiD3vG5ciNzeuTEoh74S+JMjQDs50R3zlxHnBnfd04YYfA/kh2KiBCGhzqLxlJcNq+7yNQ3stuZZYLX6wK/U2g==", "funding": [ { "type": "github", @@ -2151,7 +2147,7 @@ "node": "^14 || ^16 || >=18" }, "peerDependencies": { - "@csstools/css-parser-algorithms": "^2.5.0", + "@csstools/css-parser-algorithms": "^2.6.0", "@csstools/css-tokenizer": "^2.2.3" } }, @@ -3914,30 +3910,30 @@ } }, "node_modules/@jridgewell/gen-mapping": { - "version": "0.3.3", - "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.3.tgz", - "integrity": "sha512-HLhSWOLRi875zjjMG/r+Nv0oCW8umGb0BgEhyX3dDX3egwZtB8PqLnjz3yedt8R5StBrzcg4aBpnh8UA9D1BoQ==", + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz", + "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==", "dependencies": { - "@jridgewell/set-array": "^1.0.1", + "@jridgewell/set-array": "^1.2.1", "@jridgewell/sourcemap-codec": "^1.4.10", - "@jridgewell/trace-mapping": "^0.3.9" + "@jridgewell/trace-mapping": "^0.3.24" }, "engines": { "node": ">=6.0.0" } }, "node_modules/@jridgewell/resolve-uri": { - "version": "3.1.1", - "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz", - "integrity": "sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA==", + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", "engines": { "node": ">=6.0.0" } }, "node_modules/@jridgewell/set-array": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.1.2.tgz", - "integrity": "sha512-xnkseuNADM0gt2bs+BvhO0p78Mk762YnZdsuzFV018NoG1Sj1SCQvpSqa7XUaTam5vAGasABV9qXASMKnFMwMw==", + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", + "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", "engines": { "node": ">=6.0.0" } @@ -3957,9 +3953,9 @@ "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==" }, "node_modules/@jridgewell/trace-mapping": { - "version": "0.3.22", - "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.22.tgz", - "integrity": "sha512-Wf963MzWtA2sjrNt+g18IAln9lKnlRp+K2eH4jjIoF1wYeq3aMREpG09xhlhdzS0EjwU7qmUJYangWa+151vZw==", + "version": "0.3.24", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.24.tgz", + "integrity": "sha512-+VaWXDa6+l6MhflBvVXjIEAzb59nQ2JUK3bwRp2zRpPtU+8TFRy9Gg/5oIcNlkEL5PGlBFGfemUVvIgLnTzq7Q==", "dependencies": { "@jridgewell/resolve-uri": "^3.1.0", "@jridgewell/sourcemap-codec": "^1.4.14" @@ -4152,9 +4148,9 @@ } }, "node_modules/@openedx/paragon": { - "version": "22.0.0", - "resolved": "https://registry.npmjs.org/@openedx/paragon/-/paragon-22.0.0.tgz", - "integrity": "sha512-2tD5SEu6kNf2Llop/FylqTI87mlG0jaeAhGiX57bABcHZ/cDParCxX/unPiui6LCfdrDhghjVBKD3U2+Qn6Wag==", + "version": "22.1.1", + "resolved": "https://registry.npmjs.org/@openedx/paragon/-/paragon-22.1.1.tgz", + "integrity": "sha512-XPRuV9zn7BeCIYfU5kE2XZ4YevjA0wfS/fuydB8Ta/aNY1dw9fQ7CjHOIfkZqDic4Jygusj/uhE/1WYJD8kvyw==", "dependencies": { "@fortawesome/fontawesome-svg-core": "^6.1.1", "@fortawesome/react-fontawesome": "^0.1.18", @@ -4377,9 +4373,9 @@ "integrity": "sha512-1dgmkh+3so0+LlBWRhGA33ua4MYr7tUOj+a9Si28vUi0IUFNbff1T3sgpeDJI/LaC75bBYnQ0A3wXjn0OrRNBA==" }, "node_modules/@remix-run/router": { - "version": "1.15.0", - "resolved": "https://registry.npmjs.org/@remix-run/router/-/router-1.15.0.tgz", - "integrity": "sha512-HOil5aFtme37dVQTB6M34G95kPM3MMuqSmIRVCC52eKV+Y/tGSqw9P3rWhlAx6A+mz+MoX+XxsGsNJbaI5qCgQ==", + "version": "1.15.2", + "resolved": "https://registry.npmjs.org/@remix-run/router/-/router-1.15.2.tgz", + "integrity": "sha512-+Rnav+CaoTE5QJc4Jcwh5toUpnVLKYbpU6Ys0zqbakqbaLQHeglLVHPfxOiQqdNmUy5C2lXz5dwC6tQNX2JW2Q==", "engines": { "node": ">=14.0.0" } @@ -4851,15 +4847,6 @@ "@types/node": "*" } }, - "node_modules/@types/cheerio": { - "version": "0.22.35", - "resolved": "https://registry.npmjs.org/@types/cheerio/-/cheerio-0.22.35.tgz", - "integrity": "sha512-yD57BchKRvTV+JD53UZ6PD8KWY5g5rvvMLRnZR3EQBCZXiDT/HR+pKpMzFGlWNhFrXlo7VPZXtKvIEwZkAWOIA==", - "dev": true, - "dependencies": { - "@types/node": "*" - } - }, "node_modules/@types/connect": { "version": "3.4.38", "resolved": "https://registry.npmjs.org/@types/connect/-/connect-3.4.38.tgz", @@ -4883,9 +4870,9 @@ "integrity": "sha512-LKVP3cgXBT9RYj+t+9FDKwS5tdI+rPBXaNSkma7hvqy35lc7mAokC2zsqWJH0LaqIt3B962nuYI77hsJoT1gow==" }, "node_modules/@types/eslint": { - "version": "8.56.2", - "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.56.2.tgz", - "integrity": "sha512-uQDwm1wFHmbBbCZCqAlq6Do9LYwByNZHWzXppSnay9SuwJ+VRbjkbLABer54kcPnMSlG6Fdiy2yaFXm/z9Z5gw==", + "version": "8.56.5", + "resolved": "https://registry.npmjs.org/@types/eslint/-/eslint-8.56.5.tgz", + "integrity": "sha512-u5/YPJHo1tvkSF2CE0USEkxon82Z5DBy2xR+qfyYNszpX9qcs4sT6uq2kBbj4BXY1+DBGDPnrhMZV3pKWGNukw==", "dependencies": { "@types/estree": "*", "@types/json-schema": "*" @@ -5065,9 +5052,9 @@ "integrity": "sha512-K0VQKziLUWkVKiRVrx4a40iPaxTUefQmjtkQofBkYRcoaaL/8rhwDWww9qWbrgicNOgnpIsMxyNIUM4+n6dUIA==" }, "node_modules/@types/node": { - "version": "20.11.17", - "resolved": "https://registry.npmjs.org/@types/node/-/node-20.11.17.tgz", - "integrity": "sha512-QmgQZGWu1Yw9TDyAP9ZzpFJKynYNeOvwMJmaxABfieQoVoiVOS6MN1WSpqpRcbeA5+RW82kraAVxCCJg+780Qw==", + "version": "20.11.24", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.11.24.tgz", + "integrity": "sha512-Kza43ewS3xoLgCEpQrsT+xRo/EJej1y0kVYGiLFE1NEODXGzTfwiC6tXTLMQskn1X4/Rjlh0MQUvx9W+L9long==", "dependencies": { "undici-types": "~5.26.4" } @@ -5101,9 +5088,9 @@ "integrity": "sha512-ga8y9v9uyeiLdpKddhxYQkxNDrfvuPrlFb0N1qnZZByvcElJaXthF1UhvCh9TLWJBEHeNtdnbysW7Y6Uq8CVng==" }, "node_modules/@types/qs": { - "version": "6.9.11", - "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.11.tgz", - "integrity": "sha512-oGk0gmhnEJK4Yyk+oI7EfXsLayXatCWPHary1MtcmbAifkobT9cM9yutG/hZKIseOU0MqbIwQ/u2nn/Gb+ltuQ==" + "version": "6.9.12", + "resolved": "https://registry.npmjs.org/@types/qs/-/qs-6.9.12.tgz", + "integrity": "sha512-bZcOkJ6uWrL0Qb2NAWKa7TBU+mJHPzhx9jjLL1KHF+XpzEcR7EXHvjbHlGtR/IsP1vyPrehuS6XqkmaePy//mg==" }, "node_modules/@types/range-parser": { "version": "1.2.7", @@ -5111,9 +5098,9 @@ "integrity": "sha512-hKormJbkJqzQGhziax5PItDUTMAM9uE2XXQmM37dyd4hVM+5aVl7oVxMVUiVQn2oCQFN/LKCZdvSM0pFRqbSmQ==" }, "node_modules/@types/react": { - "version": "17.0.75", - "resolved": "https://registry.npmjs.org/@types/react/-/react-17.0.75.tgz", - "integrity": "sha512-MSA+NzEzXnQKrqpO63CYqNstFjsESgvJAdAyyJ1n6ZQq/GLgf6nOfIKwk+Twuz0L1N6xPe+qz5xRCJrbhMaLsw==", + "version": "17.0.76", + "resolved": "https://registry.npmjs.org/@types/react/-/react-17.0.76.tgz", + "integrity": "sha512-w9Aq+qeszGYoQM0hgFcdsAODGJdogadBDiitPm+zjBFJ0mLymvn2qSXsDaLJUndFRqqXk1FQfa9avHUBk1JhJQ==", "dependencies": { "@types/prop-types": "*", "@types/scheduler": "*", @@ -5405,46 +5392,6 @@ } } }, - "node_modules/@wojtekmaj/enzyme-adapter-react-17": { - "version": "0.8.0", - "resolved": "https://registry.npmjs.org/@wojtekmaj/enzyme-adapter-react-17/-/enzyme-adapter-react-17-0.8.0.tgz", - "integrity": "sha512-zeUGfQRziXW7R7skzNuJyi01ZwuKCH8WiBNnTgUJwdS/CURrJwAhWsfW7nG7E30ak8Pu3ZwD9PlK9skBfAoOBw==", - "dev": true, - "dependencies": { - "@wojtekmaj/enzyme-adapter-utils": "^0.2.0", - "enzyme-shallow-equal": "^1.0.0", - "has": "^1.0.0", - "prop-types": "^15.7.0", - "react-is": "^17.0.0", - "react-test-renderer": "^17.0.0" - }, - "funding": { - "url": "https://github.com/wojtekmaj/enzyme-adapter-react-17?sponsor=1" - }, - "peerDependencies": { - "enzyme": "^3.0.0", - "react": "^17.0.0-0", - "react-dom": "^17.0.0-0" - } - }, - "node_modules/@wojtekmaj/enzyme-adapter-utils": { - "version": "0.2.0", - "resolved": "https://registry.npmjs.org/@wojtekmaj/enzyme-adapter-utils/-/enzyme-adapter-utils-0.2.0.tgz", - "integrity": "sha512-ZvZm9kZxZEKAbw+M1/Q3iDuqQndVoN8uLnxZ8bzxm7KgGTBejrGRoJAp8f1EN8eoO3iAjBNEQnTDW/H4Ekb0FQ==", - "dev": true, - "dependencies": { - "function.prototype.name": "^1.1.0", - "has": "^1.0.0", - "object.fromentries": "^2.0.0", - "prop-types": "^15.7.0" - }, - "funding": { - "url": "https://github.com/wojtekmaj/enzyme-adapter-utils?sponsor=1" - }, - "peerDependencies": { - "react": "^17.0.0-0" - } - }, "node_modules/@xtuc/ieee754": { "version": "1.2.0", "resolved": "https://registry.npmjs.org/@xtuc/ieee754/-/ieee754-1.2.0.tgz", @@ -5793,25 +5740,6 @@ "node": ">=0.10.0" } }, - "node_modules/array.prototype.filter": { - "version": "1.0.3", - "resolved": "https://registry.npmjs.org/array.prototype.filter/-/array.prototype.filter-1.0.3.tgz", - "integrity": "sha512-VizNcj/RGJiUyQBgzwxzE5oHdeuXY5hSbbmKMlphj1cy1Vl7Pn2asCGbSrru6hSQjmCzqTBPVWAF/whmEOVHbw==", - "dev": true, - "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.2.0", - "es-abstract": "^1.22.1", - "es-array-method-boxes-properly": "^1.0.0", - "is-string": "^1.0.7" - }, - "engines": { - "node": ">= 0.4" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/array.prototype.flat": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/array.prototype.flat/-/array.prototype.flat-1.3.2.tgz", @@ -6021,9 +5949,12 @@ } }, "node_modules/available-typed-arrays": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.6.tgz", - "integrity": "sha512-j1QzY8iPNPG4o4xmO3ptzpRxTciqD3MgEHtifP/YnJpIo58Xu+ne4BejlbkuaLfXn/nz6HFiw29bLpj2PNMdGg==", + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/available-typed-arrays/-/available-typed-arrays-1.0.7.tgz", + "integrity": "sha512-wvUjBtSGN7+7SjNpq/9M2Tg350UZD3q62IFZLbRAR1bSMlCo1ZaeW+BJ+D090e4hIIZLBcTDWe4Mh4jvUDajzQ==", + "dependencies": { + "possible-typed-array-names": "^1.0.0" + }, "engines": { "node": ">= 0.4" }, @@ -6575,9 +6506,9 @@ "integrity": "sha512-9o5UecI3GhkpM6DrXr69PblIuWxPKk9Y0jHBRhdocZ2y7YECBFCsHm79Pr3OyR2AvjhDkabFJaDJMYRazHgsow==" }, "node_modules/browserslist": { - "version": "4.22.3", - "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.22.3.tgz", - "integrity": "sha512-UAp55yfwNv0klWNapjs/ktHoguxuQNGnOzxYmfnXIS+8AsRDZkSDxg7R1AX3GKzn078SBI5dzwzj/Yx0Or0e3A==", + "version": "4.23.0", + "resolved": "https://registry.npmjs.org/browserslist/-/browserslist-4.23.0.tgz", + "integrity": "sha512-QW8HiM1shhT2GuzkvklfjcKDiWFXHOeFCIA/huJPwHsslwcydgk7X+z2zXpEijP98UCY7HbubZt5J2Zgvf0CaQ==", "funding": [ { "type": "opencollective", @@ -6593,8 +6524,8 @@ } ], "dependencies": { - "caniuse-lite": "^1.0.30001580", - "electron-to-chromium": "^1.4.648", + "caniuse-lite": "^1.0.30001587", + "electron-to-chromium": "^1.4.668", "node-releases": "^2.0.14", "update-browserslist-db": "^1.0.13" }, @@ -6674,14 +6605,15 @@ "integrity": "sha512-O0KwuHuJnbHUrghHi2kGp0SxnWSIBXTYt7M8WVhW0kbPRUNUKoE/Of6e1rRD6AAxmfxFunKnt90yEK09D+sc5g==" }, "node_modules/call-bind": { - "version": "1.0.6", - "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.6.tgz", - "integrity": "sha512-Mj50FLHtlsoVfRfnHaZvyrooHcrlceNZdL/QBvJJVd9Ta55qCQK0gs4ss2oZDeV9zFCs6ewzYgVE5yfVmfFpVg==", + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", + "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", "dependencies": { + "es-define-property": "^1.0.0", "es-errors": "^1.3.0", "function-bind": "^1.1.2", - "get-intrinsic": "^1.2.3", - "set-function-length": "^1.2.0" + "get-intrinsic": "^1.2.4", + "set-function-length": "^1.2.1" }, "engines": { "node": ">= 0.4" @@ -6730,9 +6662,9 @@ } }, "node_modules/caniuse-lite": { - "version": "1.0.30001587", - "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001587.tgz", - "integrity": "sha512-HMFNotUmLXn71BQxg8cijvqxnIAofforZOwGsxyXJ0qugTdspUF4sPSJ2vhgprHCB996tIDzEq1ubumPDV8ULA==", + "version": "1.0.30001591", + "resolved": "https://registry.npmjs.org/caniuse-lite/-/caniuse-lite-1.0.30001591.tgz", + "integrity": "sha512-PCzRMei/vXjJyL5mJtzNiUCKP59dm8Apqc3PH8gJkMnMXZGox93RbE76jHsmLwmIo6/3nsYIpJtx0O7u5PqFuQ==", "funding": [ { "type": "opencollective", @@ -6801,44 +6733,6 @@ "resolved": "https://registry.npmjs.org/chardet/-/chardet-0.7.0.tgz", "integrity": "sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA==" }, - "node_modules/cheerio": { - "version": "1.0.0-rc.12", - "resolved": "https://registry.npmjs.org/cheerio/-/cheerio-1.0.0-rc.12.tgz", - "integrity": "sha512-VqR8m68vM46BNnuZ5NtnGBKIE/DfN0cRIzg9n40EIq9NOv90ayxLBXA8fXC5gquFRGJSTRqBq25Jt2ECLR431Q==", - "dev": true, - "dependencies": { - "cheerio-select": "^2.1.0", - "dom-serializer": "^2.0.0", - "domhandler": "^5.0.3", - "domutils": "^3.0.1", - "htmlparser2": "^8.0.1", - "parse5": "^7.0.0", - "parse5-htmlparser2-tree-adapter": "^7.0.0" - }, - "engines": { - "node": ">= 6" - }, - "funding": { - "url": "https://github.com/cheeriojs/cheerio?sponsor=1" - } - }, - "node_modules/cheerio-select": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/cheerio-select/-/cheerio-select-2.1.0.tgz", - "integrity": "sha512-9v9kG0LvzrlcungtnJtpGNxY+fzECQKhK4EGJX2vByejiMX84MFNQw4UxPJl3bFbTMw+Dfs37XaIkCwTZfLh4g==", - "dev": true, - "dependencies": { - "boolbase": "^1.0.0", - "css-select": "^5.1.0", - "css-what": "^6.1.0", - "domelementtype": "^2.3.0", - "domhandler": "^5.0.3", - "domutils": "^3.0.1" - }, - "funding": { - "url": "https://github.com/sponsors/fb55" - } - }, "node_modules/child_process": { "version": "1.0.2", "resolved": "https://registry.npmjs.org/child_process/-/child_process-1.0.2.tgz", @@ -7281,9 +7175,9 @@ } }, "node_modules/core-js": { - "version": "3.35.1", - "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.35.1.tgz", - "integrity": "sha512-IgdsbxNyMskrTFxa9lWHyMwAJU5gXOPP+1yO+K59d50VLVAIDAbs7gIv705KzALModfK3ZrSZTPNpC0PQgIZuw==", + "version": "3.36.0", + "resolved": "https://registry.npmjs.org/core-js/-/core-js-3.36.0.tgz", + "integrity": "sha512-mt7+TUBbTFg5+GngsAxeKBTl5/VS0guFeJacYge9OmHb+m058UwwIm41SE9T4Den7ClatV57B6TYTuJ0CX1MAw==", "hasInstallScript": true, "funding": { "type": "opencollective", @@ -7291,11 +7185,11 @@ } }, "node_modules/core-js-compat": { - "version": "3.35.1", - "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.35.1.tgz", - "integrity": "sha512-sftHa5qUJY3rs9Zht1WEnmkvXputCyDBczPnr7QDgL8n3qrF3CMXY4VPSYtOLLiOUJcah2WNXREd48iOl6mQIw==", + "version": "3.36.0", + "resolved": "https://registry.npmjs.org/core-js-compat/-/core-js-compat-3.36.0.tgz", + "integrity": "sha512-iV9Pd/PsgjNWBXeq8XRtWVSgz2tKAfhfvBs7qxYty+RlRd+OCksaWmOnc4JKrTc1cToXL1N0s3l/vwlxPtdElw==", "dependencies": { - "browserslist": "^4.22.2" + "browserslist": "^4.22.3" }, "funding": { "type": "opencollective", @@ -7303,9 +7197,9 @@ } }, "node_modules/core-js-pure": { - "version": "3.35.1", - "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.35.1.tgz", - "integrity": "sha512-zcIdi/CL3MWbBJYo5YCeVAAx+Sy9yJE9I3/u9LkFABwbeaPhTMRWraM8mYFp9jW5Z50hOy7FVzCc8dCrpZqtIQ==", + "version": "3.36.0", + "resolved": "https://registry.npmjs.org/core-js-pure/-/core-js-pure-3.36.0.tgz", + "integrity": "sha512-cN28qmhRNgbMZZMc/RFu5w8pK9VJzpb2rJVR/lHuZJKwmXnoWOpXmMkxqBB514igkp1Hu8WGROsiOAzUcKdHOQ==", "hasInstallScript": true, "funding": { "type": "opencollective", @@ -7445,14 +7339,14 @@ "integrity": "sha512-COtn4EROW5dBGlE/4PiKnh6rZpAPxDeFLaEEwt4i10jpDMFt2EhQGS79QmmrO+iKCHv0PU/HrOWEhijFd1x99Q==" }, "node_modules/css-select": { - "version": "5.1.0", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-5.1.0.tgz", - "integrity": "sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==", + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.3.0.tgz", + "integrity": "sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==", "dependencies": { "boolbase": "^1.0.0", - "css-what": "^6.1.0", - "domhandler": "^5.0.2", - "domutils": "^3.0.1", + "css-what": "^6.0.1", + "domhandler": "^4.3.1", + "domutils": "^2.8.0", "nth-check": "^2.0.1" }, "funding": { @@ -7519,24 +7413,24 @@ } }, "node_modules/cssnano-preset-default": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-6.0.3.tgz", - "integrity": "sha512-4y3H370aZCkT9Ev8P4SO4bZbt+AExeKhh8wTbms/X7OLDo5E7AYUUy6YPxa/uF5Grf+AJwNcCnxKhZynJ6luBA==", + "version": "6.0.5", + "resolved": "https://registry.npmjs.org/cssnano-preset-default/-/cssnano-preset-default-6.0.5.tgz", + "integrity": "sha512-M+qRDEr5QZrfNl0B2ySdbTLGyNb8kBcSjuwR7WBamYBOEREH9t2efnB/nblekqhdGLZdkf4oZNetykG2JWRdZQ==", "dependencies": { "css-declaration-sorter": "^7.1.1", "cssnano-utils": "^4.0.1", "postcss-calc": "^9.0.1", - "postcss-colormin": "^6.0.2", - "postcss-convert-values": "^6.0.2", + "postcss-colormin": "^6.0.3", + "postcss-convert-values": "^6.0.4", "postcss-discard-comments": "^6.0.1", - "postcss-discard-duplicates": "^6.0.1", - "postcss-discard-empty": "^6.0.1", + "postcss-discard-duplicates": "^6.0.2", + "postcss-discard-empty": "^6.0.2", "postcss-discard-overridden": "^6.0.1", - "postcss-merge-longhand": "^6.0.2", - "postcss-merge-rules": "^6.0.3", - "postcss-minify-font-values": "^6.0.1", - "postcss-minify-gradients": "^6.0.1", - "postcss-minify-params": "^6.0.2", + "postcss-merge-longhand": "^6.0.3", + "postcss-merge-rules": "^6.0.4", + "postcss-minify-font-values": "^6.0.2", + "postcss-minify-gradients": "^6.0.2", + "postcss-minify-params": "^6.0.3", "postcss-minify-selectors": "^6.0.2", "postcss-normalize-charset": "^6.0.1", "postcss-normalize-display-values": "^6.0.1", @@ -7544,11 +7438,11 @@ "postcss-normalize-repeat-style": "^6.0.1", "postcss-normalize-string": "^6.0.1", "postcss-normalize-timing-functions": "^6.0.1", - "postcss-normalize-unicode": "^6.0.2", + "postcss-normalize-unicode": "^6.0.3", "postcss-normalize-url": "^6.0.1", "postcss-normalize-whitespace": "^6.0.1", "postcss-ordered-values": "^6.0.1", - "postcss-reduce-initial": "^6.0.2", + "postcss-reduce-initial": "^6.0.3", "postcss-reduce-transforms": "^6.0.1", "postcss-svgo": "^6.0.2", "postcss-unique-selectors": "^6.0.2" @@ -7807,17 +7701,19 @@ } }, "node_modules/define-data-property": { - "version": "1.1.2", - "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.2.tgz", - "integrity": "sha512-SRtsSqsDbgpJBbW3pABMCOt6rQyeM8s8RiyeSN8jYG8sYmt/kGJejbydttUsnDs1tadr19tvhT4ShwMyoqAm4g==", + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", + "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", "dependencies": { + "es-define-property": "^1.0.0", "es-errors": "^1.3.0", - "get-intrinsic": "^1.2.2", - "gopd": "^1.0.1", - "has-property-descriptors": "^1.0.1" + "gopd": "^1.0.1" }, "engines": { "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" } }, "node_modules/define-lazy-prop": { @@ -7986,12 +7882,6 @@ "node": ">=8" } }, - "node_modules/discontinuous-range": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/discontinuous-range/-/discontinuous-range-1.0.0.tgz", - "integrity": "sha512-c68LpLbO+7kP/b1Hr1qs8/BJ09F5khZGTxqxZuhzxpmwJKOgRFHJWIb9/KmqnqHhLdO55aOxFH/EGBvUQbL/RQ==", - "dev": true - }, "node_modules/dns-packet": { "version": "5.6.1", "resolved": "https://registry.npmjs.org/dns-packet/-/dns-packet-5.6.1.tgz", @@ -8038,18 +7928,26 @@ } }, "node_modules/dom-serializer": { - "version": "2.0.0", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", - "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz", + "integrity": "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==", "dependencies": { - "domelementtype": "^2.3.0", - "domhandler": "^5.0.2", - "entities": "^4.2.0" + "domelementtype": "^2.0.1", + "domhandler": "^4.2.0", + "entities": "^2.0.0" }, "funding": { "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" } }, + "node_modules/dom-serializer/node_modules/entities": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", + "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, "node_modules/domelementtype": { "version": "2.3.0", "resolved": "https://registry.npmjs.org/domelementtype/-/domelementtype-2.3.0.tgz", @@ -8082,11 +7980,11 @@ } }, "node_modules/domhandler": { - "version": "5.0.3", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", - "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", + "version": "4.3.1", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz", + "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==", "dependencies": { - "domelementtype": "^2.3.0" + "domelementtype": "^2.2.0" }, "engines": { "node": ">= 4" @@ -8096,13 +7994,13 @@ } }, "node_modules/domutils": { - "version": "3.1.0", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.1.0.tgz", - "integrity": "sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA==", + "version": "2.8.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", + "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", "dependencies": { - "dom-serializer": "^2.0.0", - "domelementtype": "^2.3.0", - "domhandler": "^5.0.3" + "dom-serializer": "^1.0.1", + "domelementtype": "^2.2.0", + "domhandler": "^4.2.0" }, "funding": { "url": "https://github.com/fb55/domutils?sponsor=1" @@ -8158,9 +8056,9 @@ "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" }, "node_modules/electron-to-chromium": { - "version": "1.4.665", - "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.665.tgz", - "integrity": "sha512-UpyCWObBoD+nSZgOC2ToaIdZB0r9GhqT2WahPKiSki6ckkSuKhQNso8V2PrFcHBMleI/eqbKgVQgVC4Wni4ilw==" + "version": "1.4.689", + "resolved": "https://registry.npmjs.org/electron-to-chromium/-/electron-to-chromium-1.4.689.tgz", + "integrity": "sha512-GatzRKnGPS1go29ep25reM94xxd1Wj8ritU0yRhCJ/tr1Bg8gKnm6R9O/yPOhGQBoLMZ9ezfrpghNaTw97C/PQ==" }, "node_modules/email-prop-type": { "version": "3.0.1", @@ -8219,9 +8117,9 @@ } }, "node_modules/enhanced-resolve": { - "version": "5.15.0", - "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.15.0.tgz", - "integrity": "sha512-LXYT42KJ7lpIKECr2mAXIaMldcNCh/7E0KBKOu4KSfkHmP+mZmSs+8V5gBAqisWBy0OO4W5Oyys0GO1Y8KtdKg==", + "version": "5.15.1", + "resolved": "https://registry.npmjs.org/enhanced-resolve/-/enhanced-resolve-5.15.1.tgz", + "integrity": "sha512-3d3JRbwsCLJsYgvb6NuWEG44jjPSOMuS73L/6+7BZuoKm3W+qXnSoIYVHi8dG7Qcg4inAY4jbzkZ7MnskePeDg==", "dependencies": { "graceful-fs": "^4.2.4", "tapable": "^2.2.0" @@ -8252,75 +8150,6 @@ "node": ">=4" } }, - "node_modules/enzyme": { - "version": "3.11.0", - "resolved": "https://registry.npmjs.org/enzyme/-/enzyme-3.11.0.tgz", - "integrity": "sha512-Dw8/Gs4vRjxY6/6i9wU0V+utmQO9kvh9XLnz3LIudviOnVYDEe2ec+0k+NQoMamn1VrjKgCUOWj5jG/5M5M0Qw==", - "dev": true, - "dependencies": { - "array.prototype.flat": "^1.2.3", - "cheerio": "^1.0.0-rc.3", - "enzyme-shallow-equal": "^1.0.1", - "function.prototype.name": "^1.1.2", - "has": "^1.0.3", - "html-element-map": "^1.2.0", - "is-boolean-object": "^1.0.1", - "is-callable": "^1.1.5", - "is-number-object": "^1.0.4", - "is-regex": "^1.0.5", - "is-string": "^1.0.5", - "is-subset": "^0.1.1", - "lodash.escape": "^4.0.1", - "lodash.isequal": "^4.5.0", - "object-inspect": "^1.7.0", - "object-is": "^1.0.2", - "object.assign": "^4.1.0", - "object.entries": "^1.1.1", - "object.values": "^1.1.1", - "raf": "^3.4.1", - "rst-selector-parser": "^2.2.3", - "string.prototype.trim": "^1.2.1" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/enzyme-shallow-equal": { - "version": "1.0.7", - "resolved": "https://registry.npmjs.org/enzyme-shallow-equal/-/enzyme-shallow-equal-1.0.7.tgz", - "integrity": "sha512-/um0GFqUXnpM9SvKtje+9Tjoz3f1fpBC3eXRFrNs8kpYn69JljciYP7KZTqM/YQbUY9KUjvKB4jo/q+L6WGGvg==", - "dev": true, - "dependencies": { - "hasown": "^2.0.0", - "object-is": "^1.1.5" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, - "node_modules/enzyme-to-json": { - "version": "3.6.2", - "resolved": "https://registry.npmjs.org/enzyme-to-json/-/enzyme-to-json-3.6.2.tgz", - "integrity": "sha512-Ynm6Z6R6iwQ0g2g1YToz6DWhxVnt8Dy1ijR2zynRKxTyBGA8rCDXU3rs2Qc4OKvUvc2Qoe1bcFK6bnPs20TrTg==", - "dev": true, - "dependencies": { - "@types/cheerio": "^0.22.22", - "lodash": "^4.17.21", - "react-is": "^16.12.0" - }, - "engines": { - "node": ">=6.0.0" - }, - "peerDependencies": { - "enzyme": "^3.4.0" - } - }, - "node_modules/enzyme-to-json/node_modules/react-is": { - "version": "16.13.1", - "resolved": "https://registry.npmjs.org/react-is/-/react-is-16.13.1.tgz", - "integrity": "sha512-24e6ynE2H+OKt4kqsOvNd8kBpV65zoxbA4BVsEOB3ARVWQki/DHzaUoC5KuON/BiccDaCCTZBuOcfZs70kR8bQ==", - "dev": true - }, "node_modules/error-ex": { "version": "1.3.2", "resolved": "https://registry.npmjs.org/error-ex/-/error-ex-1.3.2.tgz", @@ -8338,49 +8167,51 @@ } }, "node_modules/es-abstract": { - "version": "1.22.3", - "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.22.3.tgz", - "integrity": "sha512-eiiY8HQeYfYH2Con2berK+To6GrK2RxbPawDkGq4UiCQQfZHb6wX9qQqkbpPqaxQFcl8d9QzZqo0tGE0VcrdwA==", + "version": "1.22.5", + "resolved": "https://registry.npmjs.org/es-abstract/-/es-abstract-1.22.5.tgz", + "integrity": "sha512-oW69R+4q2wG+Hc3KZePPZxOiisRIqfKBVo/HLx94QcJeWGU/8sZhCvc829rd1kS366vlJbzBfXf9yWwf0+Ko7w==", "dependencies": { - "array-buffer-byte-length": "^1.0.0", - "arraybuffer.prototype.slice": "^1.0.2", - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.5", - "es-set-tostringtag": "^2.0.1", + "array-buffer-byte-length": "^1.0.1", + "arraybuffer.prototype.slice": "^1.0.3", + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.7", + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "es-set-tostringtag": "^2.0.3", "es-to-primitive": "^1.2.1", "function.prototype.name": "^1.1.6", - "get-intrinsic": "^1.2.2", - "get-symbol-description": "^1.0.0", + "get-intrinsic": "^1.2.4", + "get-symbol-description": "^1.0.2", "globalthis": "^1.0.3", "gopd": "^1.0.1", - "has-property-descriptors": "^1.0.0", - "has-proto": "^1.0.1", + "has-property-descriptors": "^1.0.2", + "has-proto": "^1.0.3", "has-symbols": "^1.0.3", - "hasown": "^2.0.0", - "internal-slot": "^1.0.5", - "is-array-buffer": "^3.0.2", + "hasown": "^2.0.1", + "internal-slot": "^1.0.7", + "is-array-buffer": "^3.0.4", "is-callable": "^1.2.7", - "is-negative-zero": "^2.0.2", + "is-negative-zero": "^2.0.3", "is-regex": "^1.1.4", - "is-shared-array-buffer": "^1.0.2", + "is-shared-array-buffer": "^1.0.3", "is-string": "^1.0.7", - "is-typed-array": "^1.1.12", + "is-typed-array": "^1.1.13", "is-weakref": "^1.0.2", "object-inspect": "^1.13.1", "object-keys": "^1.1.1", - "object.assign": "^4.1.4", - "regexp.prototype.flags": "^1.5.1", - "safe-array-concat": "^1.0.1", - "safe-regex-test": "^1.0.0", + "object.assign": "^4.1.5", + "regexp.prototype.flags": "^1.5.2", + "safe-array-concat": "^1.1.0", + "safe-regex-test": "^1.0.3", "string.prototype.trim": "^1.2.8", "string.prototype.trimend": "^1.0.7", "string.prototype.trimstart": "^1.0.7", - "typed-array-buffer": "^1.0.0", - "typed-array-byte-length": "^1.0.0", - "typed-array-byte-offset": "^1.0.0", - "typed-array-length": "^1.0.4", + "typed-array-buffer": "^1.0.2", + "typed-array-byte-length": "^1.0.1", + "typed-array-byte-offset": "^1.0.2", + "typed-array-length": "^1.0.5", "unbox-primitive": "^1.0.2", - "which-typed-array": "^1.1.13" + "which-typed-array": "^1.1.14" }, "engines": { "node": ">= 0.4" @@ -8389,11 +8220,16 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/es-array-method-boxes-properly": { + "node_modules/es-define-property": { "version": "1.0.0", - "resolved": "https://registry.npmjs.org/es-array-method-boxes-properly/-/es-array-method-boxes-properly-1.0.0.tgz", - "integrity": "sha512-wd6JXUmyHmt8T5a2xreUwKcGPq6f1f+WwIJkijUqiGcJz1qqnZgP6XIK+QyIWU5lT7imeNxUll48bziG+TSYcA==", - "dev": true + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz", + "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==", + "dependencies": { + "get-intrinsic": "^1.2.4" + }, + "engines": { + "node": ">= 0.4" + } }, "node_modules/es-errors": { "version": "1.3.0", @@ -8435,13 +8271,13 @@ "integrity": "sha512-cXLGjP0c4T3flZJKQSuziYoq7MlT+rnvfZjfp7h+I7K9BNX54kP9nyWvdbwjQ4u1iWbOL4u96fgeZLToQlZC7w==" }, "node_modules/es-set-tostringtag": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.2.tgz", - "integrity": "sha512-BuDyupZt65P9D2D2vA/zqcI3G5xRsklm5N3xCwuiy+/vKy8i0ifdsQP1sLgO4tZDSCaQUSnmC48khknGMV3D2Q==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/es-set-tostringtag/-/es-set-tostringtag-2.0.3.tgz", + "integrity": "sha512-3T8uNMC3OQTHkFUsFq8r/BwAXLHvU/9O9mE0fBc/MY5iq/8H7ncvO947LmYA6ldWw9Uh8Yhf25zu6n7nML5QWQ==", "dependencies": { - "get-intrinsic": "^1.2.2", - "has-tostringtag": "^1.0.0", - "hasown": "^2.0.0" + "get-intrinsic": "^1.2.4", + "has-tostringtag": "^1.0.2", + "hasown": "^2.0.1" }, "engines": { "node": ">= 0.4" @@ -8641,9 +8477,9 @@ } }, "node_modules/eslint-module-utils": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.8.0.tgz", - "integrity": "sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw==", + "version": "2.8.1", + "resolved": "https://registry.npmjs.org/eslint-module-utils/-/eslint-module-utils-2.8.1.tgz", + "integrity": "sha512-rXDXR3h7cs7dy9RNpUlQf80nX31XWJEyGq1tRMo+6GsO5VmTe4UTwtmonAD4ZkAsrfMVDA2wlGJ3790Ys+D49Q==", "dependencies": { "debug": "^3.2.7" }, @@ -9608,14 +9444,14 @@ } }, "node_modules/flatted": { - "version": "3.2.9", - "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.2.9.tgz", - "integrity": "sha512-36yxDn5H7OFZQla0/jFJmbIKTdZAQHngCedGxiMmpNfEZM0sdEeT+WczLQrjK6D7o2aiyLYDnkw0R3JK0Qv1RQ==" + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/flatted/-/flatted-3.3.1.tgz", + "integrity": "sha512-X8cqMLLie7KsNUDSdzeN8FYK9rEt4Dt67OsG/DNGnYTSDBG4uFAJFBnUeiV+zCVAvwFy56IjM9sH51jVaEhNxw==" }, "node_modules/focus-lock": { - "version": "1.1.0", - "resolved": "https://registry.npmjs.org/focus-lock/-/focus-lock-1.1.0.tgz", - "integrity": "sha512-7j9OR+mxVmGcfxpCU7qKT09R32TX4jlic2/iWT5pm58SYWB1lbREpb7hEkrXxx9MzkenDBOAGatBEcMbJ143UQ==", + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/focus-lock/-/focus-lock-1.3.3.tgz", + "integrity": "sha512-hfXkZha7Xt4RQtrL1HBfspAuIj89Y0fb6GX0dfJilb8S2G/lvL4akPAcHq6xoD2NuZnDMCnZL/zQesMyeu6Psg==", "dependencies": { "tslib": "^2.0.3" }, @@ -10200,20 +10036,20 @@ } }, "node_modules/has-property-descriptors": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.1.tgz", - "integrity": "sha512-VsX8eaIewvas0xnvinAe9bw4WfIeODpGYikiWYLH+dma0Jw6KHYqWiWfhQlgOVK8D6PvjubK5Uc4P0iIhIcNVg==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", + "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", "dependencies": { - "get-intrinsic": "^1.2.2" + "es-define-property": "^1.0.0" }, "funding": { "url": "https://github.com/sponsors/ljharb" } }, "node_modules/has-proto": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.1.tgz", - "integrity": "sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz", + "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==", "engines": { "node": ">= 0.4" }, @@ -10402,19 +10238,6 @@ "safe-buffer": "~5.1.0" } }, - "node_modules/html-element-map": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/html-element-map/-/html-element-map-1.3.1.tgz", - "integrity": "sha512-6XMlxrAFX4UEEGxctfFnmrFaaZFNf9i5fNuV5wZ3WWQ4FVaNP1aX1LkX9j2mfEx1NpjeE/rL3nmgEn23GdFmrg==", - "dev": true, - "dependencies": { - "array.prototype.filter": "^1.0.0", - "call-bind": "^1.0.2" - }, - "funding": { - "url": "https://github.com/sponsors/ljharb" - } - }, "node_modules/html-encoding-sniffer": { "version": "2.0.1", "resolved": "https://registry.npmjs.org/html-encoding-sniffer/-/html-encoding-sniffer-2.0.1.tgz", @@ -10506,10 +10329,9 @@ } }, "node_modules/htmlparser2": { - "version": "8.0.2", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-8.0.2.tgz", - "integrity": "sha512-GYdjWKDkbRLkZ5geuHs5NY1puJ+PXwP7+fHPRz06Eirsb9ugf6d8kkXav6ADhcODhFFPMIXyxkxSuMf3D6NCFA==", - "dev": true, + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-6.1.0.tgz", + "integrity": "sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A==", "funding": [ "https://github.com/fb55/htmlparser2?sponsor=1", { @@ -10518,14 +10340,22 @@ } ], "dependencies": { - "domelementtype": "^2.3.0", - "domhandler": "^5.0.3", - "domutils": "^3.0.1", - "entities": "^4.4.0" + "domelementtype": "^2.0.1", + "domhandler": "^4.0.0", + "domutils": "^2.5.2", + "entities": "^2.0.0" } }, - "node_modules/http-deceiver": { - "version": "1.2.7", + "node_modules/htmlparser2/node_modules/entities": { + "version": "2.2.0", + "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", + "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", + "funding": { + "url": "https://github.com/fb55/entities?sponsor=1" + } + }, + "node_modules/http-deceiver": { + "version": "1.2.7", "resolved": "https://registry.npmjs.org/http-deceiver/-/http-deceiver-1.2.7.tgz", "integrity": "sha512-LmpOGxTfbpgtGVxJrj5k7asXHCgNZp5nLfp+hWc8QQRqtb7fUy6kRY3BO1h9ddF6yIPYUARgxGOwB42DnxIaNw==" }, @@ -10792,9 +10622,9 @@ } }, "node_modules/imask": { - "version": "7.4.0", - "resolved": "https://registry.npmjs.org/imask/-/imask-7.4.0.tgz", - "integrity": "sha512-fU6mCo5YiTeDI8aVreuOKLOWxXIrRVnuQhZQXbjhwHxQb3GOQyCtlDGMyHxu2gq//LnKDxTwDBq1teRHmkzA3Q==", + "version": "7.5.0", + "resolved": "https://registry.npmjs.org/imask/-/imask-7.5.0.tgz", + "integrity": "sha512-eoTEnw67KAamB1zsiYtU35s0Fj1XYZ8mN2q3ZDGO4ot4FtPmBpw9S6kOTj0kaOILdsEA6ZhNtH2TAMXe/NChmQ==", "dependencies": { "@babel/runtime-corejs3": "^7.23.9" }, @@ -11345,9 +11175,9 @@ } }, "node_modules/is-negative-zero": { - "version": "2.0.2", - "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.2.tgz", - "integrity": "sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA==", + "version": "2.0.3", + "resolved": "https://registry.npmjs.org/is-negative-zero/-/is-negative-zero-2.0.3.tgz", + "integrity": "sha512-5KoIu2Ngpyek75jXodFvnafB6DJgr3u8uuK0LEZJjrU19DrMD3EVERaR8sjz8CCGgpZvxPl9SuE1GMVPFHx1mw==", "engines": { "node": ">= 0.4" }, @@ -11477,11 +11307,14 @@ } }, "node_modules/is-shared-array-buffer": { - "version": "1.0.2", - "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz", - "integrity": "sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA==", + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/is-shared-array-buffer/-/is-shared-array-buffer-1.0.3.tgz", + "integrity": "sha512-nA2hv5XIhLR3uVzDDfCIknerhx8XUKnstuOERPNNIinXG7v9u+ohXF67vxm4TPTEPU6lm61ZkwP3c9PCB97rhg==", "dependencies": { - "call-bind": "^1.0.2" + "call-bind": "^1.0.7" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" @@ -11512,12 +11345,6 @@ "url": "https://github.com/sponsors/ljharb" } }, - "node_modules/is-subset": { - "version": "0.1.1", - "resolved": "https://registry.npmjs.org/is-subset/-/is-subset-0.1.1.tgz", - "integrity": "sha512-6Ybun0IkarhmEqxXCNw/C0bna6Zb/TkfUX9UbwJtK6ObwAVCxmAP308WWTHviM/zAqXk05cdhYsUsZeGQh99iw==", - "dev": true - }, "node_modules/is-symbol": { "version": "1.0.4", "resolved": "https://registry.npmjs.org/is-symbol/-/is-symbol-1.0.4.tgz", @@ -11745,9 +11572,9 @@ } }, "node_modules/istanbul-reports": { - "version": "3.1.6", - "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.6.tgz", - "integrity": "sha512-TLgnMkKg3iTDsQ9PbPTdpfAK2DzjF9mqUG7RMgcQl8oFjad8ob4laGxv5XV5U9MAfx8D6tSJiUyuAwzLicaxlg==", + "version": "3.1.7", + "resolved": "https://registry.npmjs.org/istanbul-reports/-/istanbul-reports-3.1.7.tgz", + "integrity": "sha512-BewmUXImeuRk2YY0PVbxgKAysvhRPUQE0h5QRM++nVWyubKGV0l8qQ5op8+B2DOmwSe63Jivj0BjkPQVf8fP5g==", "dependencies": { "html-escaper": "^2.0.0", "istanbul-lib-report": "^3.0.0" @@ -13112,11 +12939,6 @@ "node": ">= 6" } }, - "node_modules/jsdom/node_modules/parse5": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", - "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==" - }, "node_modules/jsesc": { "version": "2.5.2", "resolved": "https://registry.npmjs.org/jsesc/-/jsesc-2.5.2.tgz", @@ -13324,11 +13146,14 @@ } }, "node_modules/lilconfig": { - "version": "3.0.0", - "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.0.0.tgz", - "integrity": "sha512-K2U4W2Ff5ibV7j7ydLr+zLAkIg5JJ4lPn1Ltsdt+Tz/IjQ8buJ55pZAxoP34lqIiwtF9iAvtLv3JGv7CAyAg+g==", + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.1.tgz", + "integrity": "sha512-O18pf7nyvHTckunPWCV1XUNXU1piu01y2b7ATJ0ppkUkk8ocqVWBrYjJBCwHDjD/ZWcfyrA0P4gKhzWGi5EINQ==", "engines": { "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/antonk52" } }, "node_modules/lines-and-columns": { @@ -13408,24 +13233,6 @@ "integrity": "sha512-3j8wdDzYuWO3lM3Reg03MuQR957t287Rpcxp1njpEa8oDrikb+FwGdW3n+FELh/A6qib6yPit0j/pv9G/yeAqA==", "dev": true }, - "node_modules/lodash.escape": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/lodash.escape/-/lodash.escape-4.0.1.tgz", - "integrity": "sha512-nXEOnb/jK9g0DYMr1/Xvq6l5xMD7GDG55+GSYIYmS0G4tBk/hURD4JR9WCavs04t33WmJx9kCyp9vJ+mr4BOUw==", - "dev": true - }, - "node_modules/lodash.flattendeep": { - "version": "4.4.0", - "resolved": "https://registry.npmjs.org/lodash.flattendeep/-/lodash.flattendeep-4.4.0.tgz", - "integrity": "sha512-uHaJFihxmJcEX3kT4I23ABqKKalJ/zDrDg0lsFtc1h+3uw49SIJ5beyhx5ExVRti3AvKoOJngIj7xz3oylPdWQ==", - "dev": true - }, - "node_modules/lodash.isequal": { - "version": "4.5.0", - "resolved": "https://registry.npmjs.org/lodash.isequal/-/lodash.isequal-4.5.0.tgz", - "integrity": "sha512-pDo3lu8Jhfjqls6GkMgpahsF9kCyayhgykjyLMNFTKWrpVdAQtYyB4muAMWozBB4ig/dtWAmsMxLEI8wuz+DYQ==", - "dev": true - }, "node_modules/lodash.isplainobject": { "version": "4.0.6", "resolved": "https://registry.npmjs.org/lodash.isplainobject/-/lodash.isplainobject-4.0.6.tgz", @@ -13772,12 +13579,6 @@ "node": "*" } }, - "node_modules/moo": { - "version": "0.5.2", - "resolved": "https://registry.npmjs.org/moo/-/moo-0.5.2.tgz", - "integrity": "sha512-iSAJLHYKnX41mKcJKjqvnAN9sf0LMDTXDEvFv+ffuRR9a1MIuXLjMNL6EsnDHSkKLTWNqQQ5uo61P4EbU4NU+Q==", - "dev": true - }, "node_modules/mrmime": { "version": "2.0.0", "resolved": "https://registry.npmjs.org/mrmime/-/mrmime-2.0.0.tgz", @@ -13851,34 +13652,6 @@ "resolved": "https://registry.npmjs.org/natural-compare/-/natural-compare-1.4.0.tgz", "integrity": "sha512-OWND8ei3VtNC9h7V60qff3SVobHr996CTwgxubgyQYEpg290h9J0buyECNNJexkFm5sOajh5G116RYA1c8ZMSw==" }, - "node_modules/nearley": { - "version": "2.20.1", - "resolved": "https://registry.npmjs.org/nearley/-/nearley-2.20.1.tgz", - "integrity": "sha512-+Mc8UaAebFzgV+KpI5n7DasuuQCHA89dmwm7JXw3TV43ukfNQ9DnBH3Mdb2g/I4Fdxc26pwimBWvjIw0UAILSQ==", - "dev": true, - "dependencies": { - "commander": "^2.19.0", - "moo": "^0.5.0", - "railroad-diagrams": "^1.0.0", - "randexp": "0.4.6" - }, - "bin": { - "nearley-railroad": "bin/nearley-railroad.js", - "nearley-test": "bin/nearley-test.js", - "nearley-unparse": "bin/nearley-unparse.js", - "nearleyc": "bin/nearleyc.js" - }, - "funding": { - "type": "individual", - "url": "https://nearley.js.org/#give-to-nearley" - } - }, - "node_modules/nearley/node_modules/commander": { - "version": "2.20.3", - "resolved": "https://registry.npmjs.org/commander/-/commander-2.20.3.tgz", - "integrity": "sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==", - "dev": true - }, "node_modules/negotiator": { "version": "0.6.3", "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", @@ -14121,13 +13894,13 @@ } }, "node_modules/object-is": { - "version": "1.1.5", - "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.5.tgz", - "integrity": "sha512-3cyDsyHgtmi7I7DfSSI2LDp6SK2lwvtbg0p0R1e0RvTqF5ceGx+K2dfSjm1bKDMVCFEDAQvy+o8c6a7VujOddw==", + "version": "1.1.6", + "resolved": "https://registry.npmjs.org/object-is/-/object-is-1.1.6.tgz", + "integrity": "sha512-F8cZ+KfGlSGi09lJT7/Nd6KJZ9ygtvYC0/UYYLI9nmQKLMnydpB9yvbv9K1uSkEu7FU9vYPmVwLg328tX+ot3Q==", "dev": true, "dependencies": { - "call-bind": "^1.0.2", - "define-properties": "^1.1.3" + "call-bind": "^1.0.7", + "define-properties": "^1.2.1" }, "engines": { "node": ">= 0.4" @@ -14469,29 +14242,9 @@ } }, "node_modules/parse5": { - "version": "7.1.2", - "resolved": "https://registry.npmjs.org/parse5/-/parse5-7.1.2.tgz", - "integrity": "sha512-Czj1WaSVpaoj0wbhMzLmWD69anp2WH7FXMB9n1Sy8/ZFF9jolSQVMu1Ij5WIyGmcBmhk7EOndpO4mIpihVqAXw==", - "dev": true, - "dependencies": { - "entities": "^4.4.0" - }, - "funding": { - "url": "https://github.com/inikulin/parse5?sponsor=1" - } - }, - "node_modules/parse5-htmlparser2-tree-adapter": { - "version": "7.0.0", - "resolved": "https://registry.npmjs.org/parse5-htmlparser2-tree-adapter/-/parse5-htmlparser2-tree-adapter-7.0.0.tgz", - "integrity": "sha512-B77tOZrqqfUfnVcOrUvfdLbz4pu4RopLD/4vmu3HUPswwTA8OH0EMW9BlWR2B0RCoiZRAHEUu7IxeP1Pd1UU+g==", - "dev": true, - "dependencies": { - "domhandler": "^5.0.2", - "parse5": "^7.0.0" - }, - "funding": { - "url": "https://github.com/inikulin/parse5?sponsor=1" - } + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/parse5/-/parse5-6.0.1.tgz", + "integrity": "sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==" }, "node_modules/parseurl": { "version": "1.3.3", @@ -14574,12 +14327,6 @@ "through": "~2.3" } }, - "node_modules/performance-now": { - "version": "2.1.0", - "resolved": "https://registry.npmjs.org/performance-now/-/performance-now-2.1.0.tgz", - "integrity": "sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow==", - "dev": true - }, "node_modules/picocolors": { "version": "1.0.0", "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.0.tgz", @@ -14807,6 +14554,14 @@ "node": ">=0.10.0" } }, + "node_modules/possible-typed-array-names": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/possible-typed-array-names/-/possible-typed-array-names-1.0.0.tgz", + "integrity": "sha512-d7Uw+eZoloe0EHDIYoe+bQ5WXnGMOpmiZFTuMWCwpjzzkL2nTjcKiAk4hh8TjnGye2TwWOk3UXucZ+3rbmBa8Q==", + "engines": { + "node": ">= 0.4" + } + }, "node_modules/postcss": { "version": "8.4.33", "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.33.tgz", @@ -14850,13 +14605,13 @@ } }, "node_modules/postcss-colormin": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-6.0.2.tgz", - "integrity": "sha512-TXKOxs9LWcdYo5cgmcSHPkyrLAh86hX1ijmyy6J8SbOhyv6ua053M3ZAM/0j44UsnQNIWdl8gb5L7xX2htKeLw==", + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/postcss-colormin/-/postcss-colormin-6.0.3.tgz", + "integrity": "sha512-ECpkS+UZRyAtu/kjive2/1mihP+GNtgC8kcdU8ueWZi1ZVxMNnRziCLdhrWECJhEtSWijfX2Cl9XTTCK/hjGaA==", "dependencies": { - "browserslist": "^4.22.2", + "browserslist": "^4.23.0", "caniuse-api": "^3.0.0", - "colord": "^2.9.1", + "colord": "^2.9.3", "postcss-value-parser": "^4.2.0" }, "engines": { @@ -14867,11 +14622,11 @@ } }, "node_modules/postcss-convert-values": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-6.0.2.tgz", - "integrity": "sha512-aeBmaTnGQ+NUSVQT8aY0sKyAD/BaLJenEKZ03YK0JnDE1w1Rr8XShoxdal2V2H26xTJKr3v5haByOhJuyT4UYw==", + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/postcss-convert-values/-/postcss-convert-values-6.0.4.tgz", + "integrity": "sha512-YT2yrGzPXoQD3YeA2kBo/696qNwn7vI+15AOS2puXWEvSWqdCqlOyDWRy5GNnOc9ACRGOkuQ4ESQEqPJBWt/GA==", "dependencies": { - "browserslist": "^4.22.2", + "browserslist": "^4.23.0", "postcss-value-parser": "^4.2.0" }, "engines": { @@ -14920,9 +14675,9 @@ } }, "node_modules/postcss-discard-duplicates": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-6.0.1.tgz", - "integrity": "sha512-1hvUs76HLYR8zkScbwyJ8oJEugfPV+WchpnA+26fpJ7Smzs51CzGBHC32RS03psuX/2l0l0UKh2StzNxOrKCYg==", + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/postcss-discard-duplicates/-/postcss-discard-duplicates-6.0.2.tgz", + "integrity": "sha512-U2rsj4w6pAGROCCcD13LP2eBIi1whUsXs4kgE6xkIuGfkbxCBSKhkCTWyowFd66WdVlLv0uM1euJKIgmdmZObg==", "engines": { "node": "^14 || ^16 || >=18.0" }, @@ -14931,9 +14686,9 @@ } }, "node_modules/postcss-discard-empty": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-6.0.1.tgz", - "integrity": "sha512-yitcmKwmVWtNsrrRqGJ7/C0YRy53i0mjexBDQ9zYxDwTWVBgbU4+C9jIZLmQlTDT9zhml+u0OMFJh8+31krmOg==", + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/postcss-discard-empty/-/postcss-discard-empty-6.0.2.tgz", + "integrity": "sha512-rj6pVC2dVCJrP0Y2RkYTQEbYaCf4HEm+R/2StQgJqGHxAa3+KcYslNQhcRqjLHtl/4wpzipJluaJLqBj6d5eDQ==", "engines": { "node": "^14 || ^16 || >=18.0" }, @@ -15004,12 +14759,12 @@ "integrity": "sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A==" }, "node_modules/postcss-merge-longhand": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-6.0.2.tgz", - "integrity": "sha512-+yfVB7gEM8SrCo9w2lCApKIEzrTKl5yS1F4yGhV3kSim6JzbfLGJyhR1B6X+6vOT0U33Mgx7iv4X9MVWuaSAfw==", + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/postcss-merge-longhand/-/postcss-merge-longhand-6.0.3.tgz", + "integrity": "sha512-kF/y3DU8CRt+SX3tP/aG+2gkZI2Z7OXDsPU7FgxIJmuyhQQ1EHceIYcsp/alvzCm2P4c37Sfdu8nNrHc+YeyLg==", "dependencies": { "postcss-value-parser": "^4.2.0", - "stylehacks": "^6.0.2" + "stylehacks": "^6.0.3" }, "engines": { "node": "^14 || ^16 || >=18.0" @@ -15019,11 +14774,11 @@ } }, "node_modules/postcss-merge-rules": { - "version": "6.0.3", - "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-6.0.3.tgz", - "integrity": "sha512-yfkDqSHGohy8sGYIJwBmIGDv4K4/WrJPX355XrxQb/CSsT4Kc/RxDi6akqn5s9bap85AWgv21ArcUWwWdGNSHA==", + "version": "6.0.4", + "resolved": "https://registry.npmjs.org/postcss-merge-rules/-/postcss-merge-rules-6.0.4.tgz", + "integrity": "sha512-97iF3UJ5v8N1BWy38y+0l+Z8o5/9uGlEgtWic2PJPzoRrLB6Gxg8TVG93O0EK52jcLeMsywre26AUlX1YAYeHA==", "dependencies": { - "browserslist": "^4.22.2", + "browserslist": "^4.23.0", "caniuse-api": "^3.0.0", "cssnano-utils": "^4.0.1", "postcss-selector-parser": "^6.0.15" @@ -15036,9 +14791,9 @@ } }, "node_modules/postcss-minify-font-values": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-6.0.1.tgz", - "integrity": "sha512-tIwmF1zUPoN6xOtA/2FgVk1ZKrLcCvE0dpZLtzyyte0j9zUeB8RTbCqrHZGjJlxOvNWKMYtunLrrl7HPOiR46w==", + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/postcss-minify-font-values/-/postcss-minify-font-values-6.0.2.tgz", + "integrity": "sha512-IedzbVMoX0a7VZWjSYr5qJ6C37rws8kl8diPBeMZLJfWKkgXuMFY5R/OxPegn/q9tK9ztd0XRH3aR0u2t+A7uQ==", "dependencies": { "postcss-value-parser": "^4.2.0" }, @@ -15050,11 +14805,11 @@ } }, "node_modules/postcss-minify-gradients": { - "version": "6.0.1", - "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-6.0.1.tgz", - "integrity": "sha512-M1RJWVjd6IOLPl1hYiOd5HQHgpp6cvJVLrieQYS9y07Yo8itAr6jaekzJphaJFR0tcg4kRewCk3kna9uHBxn/w==", + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/postcss-minify-gradients/-/postcss-minify-gradients-6.0.2.tgz", + "integrity": "sha512-vP5mF7iI6/5fcpv+rSfwWQekOE+8I1i7/7RjZPGuIjj6eUaZVeG4XZYZrroFuw1WQd51u2V32wyQFZ+oYdE7CA==", "dependencies": { - "colord": "^2.9.1", + "colord": "^2.9.3", "cssnano-utils": "^4.0.1", "postcss-value-parser": "^4.2.0" }, @@ -15066,11 +14821,11 @@ } }, "node_modules/postcss-minify-params": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-6.0.2.tgz", - "integrity": "sha512-zwQtbrPEBDj+ApELZ6QylLf2/c5zmASoOuA4DzolyVGdV38iR2I5QRMsZcHkcdkZzxpN8RS4cN7LPskOkTwTZw==", + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/postcss-minify-params/-/postcss-minify-params-6.0.3.tgz", + "integrity": "sha512-j4S74d3AAeCK5eGdQndXSrkxusV2ekOxbXGnlnZthMyZBBvSDiU34CihTASbJxuVB3bugudmwolS7+Dgs5OyOQ==", "dependencies": { - "browserslist": "^4.22.2", + "browserslist": "^4.23.0", "cssnano-utils": "^4.0.1", "postcss-value-parser": "^4.2.0" }, @@ -15232,11 +14987,11 @@ } }, "node_modules/postcss-normalize-unicode": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-6.0.2.tgz", - "integrity": "sha512-Ff2VdAYCTGyMUwpevTZPZ4w0+mPjbZzLLyoLh/RMpqUqeQKZ+xMm31hkxBavDcGKcxm6ACzGk0nBfZ8LZkStKA==", + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/postcss-normalize-unicode/-/postcss-normalize-unicode-6.0.3.tgz", + "integrity": "sha512-T2Bb3gXz0ASgc3ori2dzjv6j/P2IantreaC6fT8tWjqYUiqMAh5jGIkdPwEV2FaucjQlCLeFJDJh2BeSugE1ig==", "dependencies": { - "browserslist": "^4.22.2", + "browserslist": "^4.23.0", "postcss-value-parser": "^4.2.0" }, "engines": { @@ -15290,11 +15045,11 @@ } }, "node_modules/postcss-reduce-initial": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-6.0.2.tgz", - "integrity": "sha512-YGKalhNlCLcjcLvjU5nF8FyeCTkCO5UtvJEt0hrPZVCTtRLSOH4z00T1UntQPj4dUmIYZgMj8qK77JbSX95hSw==", + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/postcss-reduce-initial/-/postcss-reduce-initial-6.0.3.tgz", + "integrity": "sha512-w4QIR9pEa1N4xMx3k30T1vLZl6udVK2RmNqrDXhBXX9L0mBj2a8ADs8zkbaEH7eUy1m30Wyr5EBgHN31Yq1JvA==", "dependencies": { - "browserslist": "^4.22.2", + "browserslist": "^4.23.0", "caniuse-api": "^3.0.0" }, "engines": { @@ -15623,34 +15378,6 @@ } ] }, - "node_modules/raf": { - "version": "3.4.1", - "resolved": "https://registry.npmjs.org/raf/-/raf-3.4.1.tgz", - "integrity": "sha512-Sq4CW4QhwOHE8ucn6J34MqtZCeWFP2aQSmrlroYgqAV1PjStIhJXxYuTgUIfkEk7zTLjmIjLmU5q+fbD1NnOJA==", - "dev": true, - "dependencies": { - "performance-now": "^2.1.0" - } - }, - "node_modules/railroad-diagrams": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/railroad-diagrams/-/railroad-diagrams-1.0.0.tgz", - "integrity": "sha512-cz93DjNeLY0idrCNOH6PviZGRN9GJhsdm9hpn1YCS879fj4W+x5IFJhhkRZcwVgMmFF7R82UA/7Oh+R8lLZg6A==", - "dev": true - }, - "node_modules/randexp": { - "version": "0.4.6", - "resolved": "https://registry.npmjs.org/randexp/-/randexp-0.4.6.tgz", - "integrity": "sha512-80WNmd9DA0tmZrw9qQa62GPPWfuXJknrmVmLcxvq4uZBdYqb1wYoKTmnlGUchvVWe0XiLupYkBoXVOxz3C8DYQ==", - "dev": true, - "dependencies": { - "discontinuous-range": "1.0.0", - "ret": "~0.1.10" - }, - "engines": { - "node": ">=0.12" - } - }, "node_modules/randombytes": { "version": "2.1.0", "resolved": "https://registry.npmjs.org/randombytes/-/randombytes-2.1.0.tgz", @@ -15858,12 +15585,12 @@ "integrity": "sha512-nsO+KSNgo1SbJqJEYRE9ERzo7YtYbou/OqjSQKxV7jcKox7+usiUVZOAC+XnDOABXggQTno0Y1CpVnuWEc1boQ==" }, "node_modules/react-focus-lock": { - "version": "2.9.8", - "resolved": "https://registry.npmjs.org/react-focus-lock/-/react-focus-lock-2.9.8.tgz", - "integrity": "sha512-nLrUCTF8/BWGaWV00wvmIOPe56HTLWtqjqwWebHE80jB0fCMsm/Cl2zbp8ulbCoe5BOU7bWSCg5YhkYhDxykWw==", + "version": "2.11.2", + "resolved": "https://registry.npmjs.org/react-focus-lock/-/react-focus-lock-2.11.2.tgz", + "integrity": "sha512-DDTbEiov0+RthESPVSTIdAWPPKic+op3sCcP+icbMRobvQNt7LuAlJ3KoarqQv5sCgKArru3kXmlmFTa27/CdQ==", "dependencies": { "@babel/runtime": "^7.0.0", - "focus-lock": "^1.0.1", + "focus-lock": "^1.3.2", "prop-types": "^15.6.2", "react-clientside-effect": "^1.2.6", "use-callback-ref": "^1.3.0", @@ -15906,11 +15633,11 @@ } }, "node_modules/react-imask": { - "version": "7.4.0", - "resolved": "https://registry.npmjs.org/react-imask/-/react-imask-7.4.0.tgz", - "integrity": "sha512-U7O2IhIKIGF0ch16xBinwbWGfsgeDyM3KcftD8/bWLuES+KQOjv8wCjX2QZNiAqsZ3FgSembaJmqAN8XlB5LbA==", + "version": "7.5.0", + "resolved": "https://registry.npmjs.org/react-imask/-/react-imask-7.5.0.tgz", + "integrity": "sha512-yWExhHphDmNaHvmOsYR+5QcludeBdYk6bXyo8kouIJFAub5sF+O0kLPVupg2yhd7EfTqjLswFZ/tqY1AhKnd9Q==", "dependencies": { - "imask": "^7.4.0", + "imask": "^7.5.0", "prop-types": "^15.8.1" }, "engines": { @@ -16079,9 +15806,9 @@ } }, "node_modules/react-remove-scroll-bar": { - "version": "2.3.4", - "resolved": "https://registry.npmjs.org/react-remove-scroll-bar/-/react-remove-scroll-bar-2.3.4.tgz", - "integrity": "sha512-63C4YQBUt0m6ALadE9XV56hV8BgJWDmmTPY758iIJjfQKt2nYwoUrPk0LXRXcB/yIj82T1/Ixfdpdk68LwIB0A==", + "version": "2.3.5", + "resolved": "https://registry.npmjs.org/react-remove-scroll-bar/-/react-remove-scroll-bar-2.3.5.tgz", + "integrity": "sha512-3cqjOqg6s0XbOjWvmasmqHch+RLxIEk2r/70rzGXuz3iIGQsQheEQyqYCBb5EECoD01Vo2SIbDqW4paLeLTASw==", "dependencies": { "react-style-singleton": "^2.2.1", "tslib": "^2.0.0" @@ -16117,11 +15844,11 @@ } }, "node_modules/react-router": { - "version": "6.22.0", - "resolved": "https://registry.npmjs.org/react-router/-/react-router-6.22.0.tgz", - "integrity": "sha512-q2yemJeg6gw/YixRlRnVx6IRJWZD6fonnfZhN1JIOhV2iJCPeRNSH3V1ISwHf+JWcESzLC3BOLD1T07tmO5dmg==", + "version": "6.22.2", + "resolved": "https://registry.npmjs.org/react-router/-/react-router-6.22.2.tgz", + "integrity": "sha512-YD3Dzprzpcq+tBMHBS822tCjnWD3iIZbTeSXMY9LPSG541EfoBGyZ3bS25KEnaZjLcmQpw2AVLkFyfgXY8uvcw==", "dependencies": { - "@remix-run/router": "1.15.0" + "@remix-run/router": "1.15.2" }, "engines": { "node": ">=14.0.0" @@ -16131,12 +15858,12 @@ } }, "node_modules/react-router-dom": { - "version": "6.22.0", - "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-6.22.0.tgz", - "integrity": "sha512-z2w+M4tH5wlcLmH3BMMOMdrtrJ9T3oJJNsAlBJbwk+8Syxd5WFJ7J5dxMEW0/GEXD1BBis4uXRrNIz3mORr0ag==", + "version": "6.22.2", + "resolved": "https://registry.npmjs.org/react-router-dom/-/react-router-dom-6.22.2.tgz", + "integrity": "sha512-WgqxD2qySEIBPZ3w0sHH+PUAiamDeszls9tzqMPBDA1YYVucTBXLU7+gtRfcSnhe92A3glPnvSxK2dhNoAVOIQ==", "dependencies": { - "@remix-run/router": "1.15.0", - "react-router": "6.22.0" + "@remix-run/router": "1.15.2", + "react-router": "6.22.2" }, "engines": { "node": ">=14.0.0" @@ -16146,19 +15873,6 @@ "react-dom": ">=16.8" } }, - "node_modules/react-shallow-renderer": { - "version": "16.15.0", - "resolved": "https://registry.npmjs.org/react-shallow-renderer/-/react-shallow-renderer-16.15.0.tgz", - "integrity": "sha512-oScf2FqQ9LFVQgA73vr86xl2NaOIX73rh+YFqcOp68CWj56tSfgtGKrEbyhCj0rSijyG9M1CYprTh39fBi5hzA==", - "dev": true, - "dependencies": { - "object-assign": "^4.1.1", - "react-is": "^16.12.0 || ^17.0.0 || ^18.0.0" - }, - "peerDependencies": { - "react": "^16.0.0 || ^17.0.0 || ^18.0.0" - } - }, "node_modules/react-style-singleton": { "version": "2.2.1", "resolved": "https://registry.npmjs.org/react-style-singleton/-/react-style-singleton-2.2.1.tgz", @@ -16193,21 +15907,6 @@ "react": "^16.8.3 || ^17.0.0-0 || ^18.0.0" } }, - "node_modules/react-test-renderer": { - "version": "17.0.2", - "resolved": "https://registry.npmjs.org/react-test-renderer/-/react-test-renderer-17.0.2.tgz", - "integrity": "sha512-yaQ9cB89c17PUb0x6UfWRs7kQCorVdHlutU1boVPEsB8IDZH6n9tHxMacc3y0JoXOJUsZb/t/Mb8FUWMKaM7iQ==", - "dev": true, - "dependencies": { - "object-assign": "^4.1.1", - "react-is": "^17.0.2", - "react-shallow-renderer": "^16.13.1", - "scheduler": "^0.20.2" - }, - "peerDependencies": { - "react": "17.0.2" - } - }, "node_modules/react-tooltip": { "version": "4.5.1", "resolved": "https://registry.npmjs.org/react-tooltip/-/react-tooltip-4.5.1.tgz", @@ -16649,87 +16348,6 @@ "strip-ansi": "^6.0.1" } }, - "node_modules/renderkid/node_modules/css-select": { - "version": "4.3.0", - "resolved": "https://registry.npmjs.org/css-select/-/css-select-4.3.0.tgz", - "integrity": "sha512-wPpOYtnsVontu2mODhA19JrqWxNsfdatRKd64kmpRbQgh1KtItko5sTnEpPdpSaJszTOhEMlF/RPz28qj4HqhQ==", - "dependencies": { - "boolbase": "^1.0.0", - "css-what": "^6.0.1", - "domhandler": "^4.3.1", - "domutils": "^2.8.0", - "nth-check": "^2.0.1" - }, - "funding": { - "url": "https://github.com/sponsors/fb55" - } - }, - "node_modules/renderkid/node_modules/dom-serializer": { - "version": "1.4.1", - "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-1.4.1.tgz", - "integrity": "sha512-VHwB3KfrcOOkelEG2ZOfxqLZdfkil8PtJi4P8N2MMXucZq2yLp75ClViUlOVwyoHEDjYU433Aq+5zWP61+RGag==", - "dependencies": { - "domelementtype": "^2.0.1", - "domhandler": "^4.2.0", - "entities": "^2.0.0" - }, - "funding": { - "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" - } - }, - "node_modules/renderkid/node_modules/domhandler": { - "version": "4.3.1", - "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-4.3.1.tgz", - "integrity": "sha512-GrwoxYN+uWlzO8uhUXRl0P+kHE4GtVPfYzVLcUxPL7KNdHKj66vvlhiweIHqYYXWlw+T8iLMp42Lm67ghw4WMQ==", - "dependencies": { - "domelementtype": "^2.2.0" - }, - "engines": { - "node": ">= 4" - }, - "funding": { - "url": "https://github.com/fb55/domhandler?sponsor=1" - } - }, - "node_modules/renderkid/node_modules/domutils": { - "version": "2.8.0", - "resolved": "https://registry.npmjs.org/domutils/-/domutils-2.8.0.tgz", - "integrity": "sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==", - "dependencies": { - "dom-serializer": "^1.0.1", - "domelementtype": "^2.2.0", - "domhandler": "^4.2.0" - }, - "funding": { - "url": "https://github.com/fb55/domutils?sponsor=1" - } - }, - "node_modules/renderkid/node_modules/entities": { - "version": "2.2.0", - "resolved": "https://registry.npmjs.org/entities/-/entities-2.2.0.tgz", - "integrity": "sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==", - "funding": { - "url": "https://github.com/fb55/entities?sponsor=1" - } - }, - "node_modules/renderkid/node_modules/htmlparser2": { - "version": "6.1.0", - "resolved": "https://registry.npmjs.org/htmlparser2/-/htmlparser2-6.1.0.tgz", - "integrity": "sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A==", - "funding": [ - "https://github.com/fb55/htmlparser2?sponsor=1", - { - "type": "github", - "url": "https://github.com/sponsors/fb55" - } - ], - "dependencies": { - "domelementtype": "^2.0.1", - "domhandler": "^4.0.0", - "domutils": "^2.5.2", - "entities": "^2.0.0" - } - }, "node_modules/repeat-element": { "version": "1.1.4", "resolved": "https://registry.npmjs.org/repeat-element/-/repeat-element-1.1.4.tgz", @@ -16903,16 +16521,6 @@ "node": ">=10" } }, - "node_modules/rst-selector-parser": { - "version": "2.2.3", - "resolved": "https://registry.npmjs.org/rst-selector-parser/-/rst-selector-parser-2.2.3.tgz", - "integrity": "sha512-nDG1rZeP6oFTLN6yNDV/uiAvs1+FS/KlrEwh7+y7dpuApDBy6bI2HTBcc0/V8lv9OTqfyD34eF7au2pm8aBbhA==", - "dev": true, - "dependencies": { - "lodash.flattendeep": "^4.4.0", - "nearley": "^2.7.10" - } - }, "node_modules/rsvp": { "version": "4.8.5", "resolved": "https://registry.npmjs.org/rsvp/-/rsvp-4.8.5.tgz", @@ -17592,13 +17200,14 @@ } }, "node_modules/set-function-name": { - "version": "2.0.1", - "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.1.tgz", - "integrity": "sha512-tMNCiqYVkXIZgc2Hnoy2IvC/f8ezc5koaRFkCjrpWzGpCd3qbZXPzVy9MAZzK1ch/X0jvSkojys3oqJN0qCmdA==", + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/set-function-name/-/set-function-name-2.0.2.tgz", + "integrity": "sha512-7PGFlmtwsEADb0WYyvCMa1t+yke6daIG4Wirafur5kcf+MhUnPms1UeR0CKQdTZD81yESwMHbtn+TR+dMviakQ==", "dependencies": { - "define-data-property": "^1.0.1", + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", "functions-have-names": "^1.2.3", - "has-property-descriptors": "^1.0.0" + "has-property-descriptors": "^1.0.2" }, "engines": { "node": ">= 0.4" @@ -17772,11 +17381,11 @@ "optional": true }, "node_modules/side-channel": { - "version": "1.0.5", - "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.5.tgz", - "integrity": "sha512-QcgiIWV4WV7qWExbN5llt6frQB/lBven9pqliLXfGPB+K9ZYXxDozp0wLkHS24kWCm+6YXH/f0HhnObZnZOBnQ==", + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz", + "integrity": "sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==", "dependencies": { - "call-bind": "^1.0.6", + "call-bind": "^1.0.7", "es-errors": "^1.3.0", "get-intrinsic": "^1.2.4", "object-inspect": "^1.13.1" @@ -18088,9 +17697,9 @@ } }, "node_modules/spdx-exceptions": { - "version": "2.4.0", - "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.4.0.tgz", - "integrity": "sha512-hcjppoJ68fhxA/cjbN4T8N6uCUejN8yFw69ttpqtBeCbF3u13n7mb31NB9jKwGTTWWnt9IbRA/mf1FprYS8wfw==" + "version": "2.5.0", + "resolved": "https://registry.npmjs.org/spdx-exceptions/-/spdx-exceptions-2.5.0.tgz", + "integrity": "sha512-PiU42r+xO4UbUS1buo3LPJkjlO7430Xn5SVAhdpzzsPHsjbYVflnnFdATgabnLude+Cqu25p6N+g2lw/PFsa4w==" }, "node_modules/spdx-expression-parse": { "version": "3.0.1", @@ -18440,11 +18049,11 @@ } }, "node_modules/stylehacks": { - "version": "6.0.2", - "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-6.0.2.tgz", - "integrity": "sha512-00zvJGnCu64EpMjX8b5iCZ3us2Ptyw8+toEkb92VdmkEaRaSGBNKAoK6aWZckhXxmQP8zWiTaFaiMGIU8Ve8sg==", + "version": "6.0.3", + "resolved": "https://registry.npmjs.org/stylehacks/-/stylehacks-6.0.3.tgz", + "integrity": "sha512-KzBqjnqktc8/I0ERCb+lGq06giF/JxDbw2r9kEVhen9noHeIDRtMWUp9r62sOk+/2bbX6sFG1GhsS7ToXG0PEg==", "dependencies": { - "browserslist": "^4.22.2", + "browserslist": "^4.23.0", "postcss-selector-parser": "^6.0.15" }, "engines": { @@ -18599,6 +18208,61 @@ "node": ">= 10" } }, + "node_modules/svgo/node_modules/css-select": { + "version": "5.1.0", + "resolved": "https://registry.npmjs.org/css-select/-/css-select-5.1.0.tgz", + "integrity": "sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==", + "dependencies": { + "boolbase": "^1.0.0", + "css-what": "^6.1.0", + "domhandler": "^5.0.2", + "domutils": "^3.0.1", + "nth-check": "^2.0.1" + }, + "funding": { + "url": "https://github.com/sponsors/fb55" + } + }, + "node_modules/svgo/node_modules/dom-serializer": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/dom-serializer/-/dom-serializer-2.0.0.tgz", + "integrity": "sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==", + "dependencies": { + "domelementtype": "^2.3.0", + "domhandler": "^5.0.2", + "entities": "^4.2.0" + }, + "funding": { + "url": "https://github.com/cheeriojs/dom-serializer?sponsor=1" + } + }, + "node_modules/svgo/node_modules/domhandler": { + "version": "5.0.3", + "resolved": "https://registry.npmjs.org/domhandler/-/domhandler-5.0.3.tgz", + "integrity": "sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==", + "dependencies": { + "domelementtype": "^2.3.0" + }, + "engines": { + "node": ">= 4" + }, + "funding": { + "url": "https://github.com/fb55/domhandler?sponsor=1" + } + }, + "node_modules/svgo/node_modules/domutils": { + "version": "3.1.0", + "resolved": "https://registry.npmjs.org/domutils/-/domutils-3.1.0.tgz", + "integrity": "sha512-H78uMmQtI2AhgDJjWeQmHwJJ2bLPD3GMmO7Zja/ZZh84wkm+4ut+IUnUdRa8uCGX88DiVx1j6FRe1XfxEgjEZA==", + "dependencies": { + "dom-serializer": "^2.0.0", + "domelementtype": "^2.3.0", + "domhandler": "^5.0.3" + }, + "funding": { + "url": "https://github.com/fb55/domutils?sponsor=1" + } + }, "node_modules/symbol-tree": { "version": "3.2.4", "resolved": "https://registry.npmjs.org/symbol-tree/-/symbol-tree-3.2.4.tgz", @@ -18633,9 +18297,9 @@ } }, "node_modules/terser": { - "version": "5.27.0", - "resolved": "https://registry.npmjs.org/terser/-/terser-5.27.0.tgz", - "integrity": "sha512-bi1HRwVRskAjheeYl291n3JC4GgO/Ty4z1nVs5AAsmonJulGxpSektecnNedrwK9C7vpvVtcX3cw00VSLt7U2A==", + "version": "5.28.1", + "resolved": "https://registry.npmjs.org/terser/-/terser-5.28.1.tgz", + "integrity": "sha512-wM+bZp54v/E9eRRGXb5ZFDvinrJIOaTapx3WUokyVGZu5ucVCK55zEgGd5Dl2fSr3jUo5sDiERErUWLY6QPFyA==", "dependencies": { "@jridgewell/source-map": "^0.3.3", "acorn": "^8.8.2", @@ -18748,9 +18412,9 @@ "integrity": "sha512-eHY7nBftgThBqOyHGVN+l8gF0BucP09fMo0oO/Lb0w1OF80dJv+lDVpXG60WMQvkcxAkNybKsrEIE3ZtKGmPrA==" }, "node_modules/tiny-invariant": { - "version": "1.3.1", - "resolved": "https://registry.npmjs.org/tiny-invariant/-/tiny-invariant-1.3.1.tgz", - "integrity": "sha512-AD5ih2NlSssTCwsMznbvwMZpJ1cbhkGd2uueNxzv2jDlEeZdU04JQfRnggJQ8DrcVBGjAsCKwFBbDlVNtEMlzw==" + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/tiny-invariant/-/tiny-invariant-1.3.3.tgz", + "integrity": "sha512-+FbBPE1o9QAYvviau/qC5SE3caw21q3xkvWKBtja5vgqOWIHHJ3ioaq1VPfn/Szqctz2bU/oYeKd9/z5BL+PVg==" }, "node_modules/tiny-warning": { "version": "1.0.3", @@ -18981,11 +18645,11 @@ } }, "node_modules/typed-array-buffer": { - "version": "1.0.1", - "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.1.tgz", - "integrity": "sha512-RSqu1UEuSlrBhHTWC8O9FnPjOduNs4M7rJ4pRKoEjtx1zUNOPN2sSXHLDX+Y2WPbHIxbvg4JFo2DNAEfPIKWoQ==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/typed-array-buffer/-/typed-array-buffer-1.0.2.tgz", + "integrity": "sha512-gEymJYKZtKXzzBzM4jqa9w6Q1Jjm7x2d+sh19AdsD4wqnMPDYyvwpsIc2Q/835kHuo3BEQ7CjelGhfTsoBb2MQ==", "dependencies": { - "call-bind": "^1.0.6", + "call-bind": "^1.0.7", "es-errors": "^1.3.0", "is-typed-array": "^1.1.13" }, @@ -18994,14 +18658,15 @@ } }, "node_modules/typed-array-byte-length": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.0.tgz", - "integrity": "sha512-Or/+kvLxNpeQ9DtSydonMxCx+9ZXOswtwJn17SNLvhptaXYDJvkFFP5zbfU/uLmvnBJlI4yrnXRxpdWH/M5tNA==", + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/typed-array-byte-length/-/typed-array-byte-length-1.0.1.tgz", + "integrity": "sha512-3iMJ9q0ao7WE9tWcaYKIptkNBuOIcZCCT0d4MRvuuH88fEoEH62IuQe0OtraD3ebQEoTRk8XCBoknUNc1Y67pw==", "dependencies": { - "call-bind": "^1.0.2", + "call-bind": "^1.0.7", "for-each": "^0.3.3", - "has-proto": "^1.0.1", - "is-typed-array": "^1.1.10" + "gopd": "^1.0.1", + "has-proto": "^1.0.3", + "is-typed-array": "^1.1.13" }, "engines": { "node": ">= 0.4" @@ -19011,15 +18676,16 @@ } }, "node_modules/typed-array-byte-offset": { - "version": "1.0.0", - "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.0.tgz", - "integrity": "sha512-RD97prjEt9EL8YgAgpOkf3O4IF9lhJFr9g0htQkm0rchFp/Vx7LW5Q8fSXXub7BXAODyUQohRMyOc3faCPd0hg==", + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/typed-array-byte-offset/-/typed-array-byte-offset-1.0.2.tgz", + "integrity": "sha512-Ous0vodHa56FviZucS2E63zkgtgrACj7omjwd/8lTEMEPFFyjfixMZ1ZXenpgCFBBt4EC1J2XsyVS2gkG0eTFA==", "dependencies": { - "available-typed-arrays": "^1.0.5", - "call-bind": "^1.0.2", + "available-typed-arrays": "^1.0.7", + "call-bind": "^1.0.7", "for-each": "^0.3.3", - "has-proto": "^1.0.1", - "is-typed-array": "^1.1.10" + "gopd": "^1.0.1", + "has-proto": "^1.0.3", + "is-typed-array": "^1.1.13" }, "engines": { "node": ">= 0.4" @@ -19029,13 +18695,19 @@ } }, "node_modules/typed-array-length": { - "version": "1.0.4", - "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.4.tgz", - "integrity": "sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng==", + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/typed-array-length/-/typed-array-length-1.0.5.tgz", + "integrity": "sha512-yMi0PlwuznKHxKmcpoOdeLwxBoVPkqZxd7q2FgMkmD3bNwvF5VW0+UlUQ1k1vmktTu4Yu13Q0RIxEP8+B+wloA==", "dependencies": { - "call-bind": "^1.0.2", + "call-bind": "^1.0.7", "for-each": "^0.3.3", - "is-typed-array": "^1.1.9" + "gopd": "^1.0.1", + "has-proto": "^1.0.3", + "is-typed-array": "^1.1.13", + "possible-typed-array-names": "^1.0.0" + }, + "engines": { + "node": ">= 0.4" }, "funding": { "url": "https://github.com/sponsors/ljharb" diff --git a/package.json b/package.json index 8bb334f0c..a8acc8917 100755 --- a/package.json +++ b/package.json @@ -40,7 +40,7 @@ "@fortawesome/free-regular-svg-icons": "^6.1.1", "@fortawesome/free-solid-svg-icons": "^6.1.1", "@fortawesome/react-fontawesome": "^0.2.0", - "@openedx/paragon": "^22.0.0", + "@openedx/paragon": "22.1.1", "@stripe/react-stripe-js": "^1.10.0", "@stripe/stripe-js": "^1.36.0", "axios": "^0.27.2", @@ -75,17 +75,13 @@ "@openedx/frontend-build": "13.0.27", "@testing-library/jest-dom": "^5.14.1", "@testing-library/react": "^12.1.5", - "@wojtekmaj/enzyme-adapter-react-17": "^0.8.0", "audit-ci": "^6.3.0", "axios-mock-adapter": "^1.21.1", "chance": "^1.1.8", - "enzyme": "^3.11.0", - "enzyme-to-json": "^3.6.2", "html-webpack-plugin": "^5.5.0", "husky": "^8.0.1", "lodash.defaultsdeep": "^4.6.1", "qs": "^6.11.0", - "react-test-renderer": "^17.0.2", "redux-mock-store": "^1.5.4", "rosie": "^2.1.0", "webpack-merge": "^5.8.0" diff --git a/src/feedback/AlertList.test.jsx b/src/feedback/AlertList.test.jsx index 75d29b208..3372fdc43 100644 --- a/src/feedback/AlertList.test.jsx +++ b/src/feedback/AlertList.test.jsx @@ -1,7 +1,7 @@ import React from 'react'; import { Provider } from 'react-redux'; import { createStore } from 'redux'; -import renderer, { act } from 'react-test-renderer'; +import { render, act } from '@testing-library/react'; import { IntlProvider } from '@edx/frontend-platform/i18n'; import ConnectedAlertList from './AlertList'; @@ -28,7 +28,7 @@ describe('AlertList', () => { ); - const tree = renderer.create(component).toJSON(); + const { container: tree } = render(component); expect(tree).toMatchSnapshot(); }); @@ -46,7 +46,7 @@ describe('AlertList', () => { ); - const tree = renderer.create(component); + const { container: tree } = render(component); act(() => { store.dispatch(addMessage('boo', null, { needed: 'data' }, MESSAGE_TYPES.WARNING)); store.dispatch(addMessage('bah', 'Bah!', null, MESSAGE_TYPES.INFO)); @@ -55,6 +55,6 @@ describe('AlertList', () => { store.dispatch(addMessage(null, 'Debug debug', null, MESSAGE_TYPES.DEBUG)); store.dispatch(addMessage('fallback-error', null, null, MESSAGE_TYPES.ERROR)); }); - expect(tree.toJSON()).toMatchSnapshot(); + expect(tree).toMatchSnapshot(); }); }); diff --git a/src/feedback/AlertMessage.test.jsx b/src/feedback/AlertMessage.test.jsx index 2f83ff82a..978c7b067 100644 --- a/src/feedback/AlertMessage.test.jsx +++ b/src/feedback/AlertMessage.test.jsx @@ -1,6 +1,5 @@ import React from 'react'; -import { mount } from 'enzyme'; -import renderer from 'react-test-renderer'; +import { fireEvent, render } from '@testing-library/react'; import { IntlProvider } from '@edx/frontend-platform/i18n'; import AlertMessage from './AlertMessage'; @@ -23,8 +22,9 @@ describe('AlertMessage', () => { ); - const wrapper = mount(component); - wrapper.find('.btn').simulate('click'); + const { container } = render(component); + const button = container.querySelector('.btn'); + fireEvent.click(button); expect(closeHandlerMock).toHaveBeenCalledWith(123); }); @@ -43,7 +43,7 @@ describe('AlertMessage', () => { ); - const tree = renderer.create(component).toJSON(); + const { container: tree } = render(component); // The alert should have an 'alert-warning' class. That's the default in the code. expect(tree).toMatchSnapshot(); }); @@ -59,7 +59,7 @@ describe('AlertMessage', () => { ); - const tree = renderer.create(component).toJSON(); + const { container: tree } = render(component); expect(tree).toMatchSnapshot(); }); @@ -74,7 +74,7 @@ describe('AlertMessage', () => { ); - const tree = renderer.create(component).toJSON(); + const { container: tree } = render(component); expect(tree).toMatchSnapshot(); }); }); diff --git a/src/feedback/__snapshots__/AlertList.test.jsx.snap b/src/feedback/__snapshots__/AlertList.test.jsx.snap index 4d0e494fb..b8a050b91 100644 --- a/src/feedback/__snapshots__/AlertList.test.jsx.snap +++ b/src/feedback/__snapshots__/AlertList.test.jsx.snap @@ -1,179 +1,164 @@ // Jest Snapshot v1, https://goo.gl/fbAQLP -exports[`AlertList should be null by default 1`] = `null`; +exports[`AlertList should be null by default 1`] = `
`; exports[`AlertList should render messages of each type 1`] = ` -Array [ +
, +
, +
, + , + , +
- } + class="fade alert-content alert alert-danger show" + dialog="[object Object]" role="alert" >
There was an unexpected problem. If the problem persists, please contact support @@ -181,21 +166,19 @@ Array [ .
-
, -] + + `; diff --git a/src/feedback/__snapshots__/AlertMessage.test.jsx.snap b/src/feedback/__snapshots__/AlertMessage.test.jsx.snap index cc56b4220..56f1ffb32 100644 --- a/src/feedback/__snapshots__/AlertMessage.test.jsx.snap +++ b/src/feedback/__snapshots__/AlertMessage.test.jsx.snap @@ -1,113 +1,103 @@ // Jest Snapshot v1, https://goo.gl/fbAQLP exports[`AlertMessage should default its severity when necessary 1`] = ` -
+
`; exports[`AlertMessage should render a userMessage element 1`] = ` -
- Wondrous message! - - } - role="alert" -> +
`; exports[`AlertMessage should render a userMessage function 1`] = ` -
- } - role="alert" -> +
diff --git a/src/payment/AlertCodeMessages.test.jsx b/src/payment/AlertCodeMessages.test.jsx index 5c4e9c124..37fbe2ebf 100644 --- a/src/payment/AlertCodeMessages.test.jsx +++ b/src/payment/AlertCodeMessages.test.jsx @@ -1,6 +1,6 @@ import React from 'react'; import { Provider } from 'react-redux'; -import renderer from 'react-test-renderer'; +import { render } from '@testing-library/react'; import configureMockStore from 'redux-mock-store'; import { IntlProvider } from '@edx/frontend-platform/i18n'; @@ -19,7 +19,7 @@ describe('SingleEnrollmentCodeWarning', () => { ); - const tree = renderer.create(component).toJSON(); + const { container: tree } = render(component); expect(tree).toMatchSnapshot(); }); }); @@ -35,7 +35,7 @@ describe('EnrollmentCodeQuantityUpdated', () => { ); - const tree = renderer.create(component).toJSON(); + const { container: tree } = render(component); expect(tree).toMatchSnapshot(); }); }); @@ -47,7 +47,7 @@ describe('TransactionDeclined', () => { ); - const tree = renderer.create(component).toJSON(); + const { container: tree } = render(component); expect(tree).toMatchSnapshot(); }); }); diff --git a/src/payment/PaymentPage.test.jsx b/src/payment/PaymentPage.test.jsx index af4291a86..b2fe28c65 100644 --- a/src/payment/PaymentPage.test.jsx +++ b/src/payment/PaymentPage.test.jsx @@ -1,13 +1,12 @@ /* eslint-disable react/jsx-no-constructed-context-values */ /* eslint-disable global-require */ import React from 'react'; -import { mount } from 'enzyme'; +import { render } from '@testing-library/react'; import { act } from 'react-dom/test-utils'; import { createStore, applyMiddleware } from 'redux'; import thunkMiddleware from 'redux-thunk'; import { Provider } from 'react-redux'; import { Factory } from 'rosie'; -import { createSerializer } from 'enzyme-to-json'; import { IntlProvider, configure as configureI18n } from '@edx/frontend-platform/i18n'; import { getConfig } from '@edx/frontend-platform'; import * as analytics from '@edx/frontend-platform/analytics'; @@ -23,9 +22,6 @@ import { transformResults } from './data/utils'; import { ENROLLMENT_CODE_PRODUCT_TYPE } from './cart/order-details'; import { MESSAGE_TYPES, addMessage } from '../feedback'; -// run enzyme JSON serializer using options compatible with prior snapshots -expect.addSnapshotSerializer(createSerializer({ mode: 'deep', noKey: true })); - jest.mock('universal-cookie', () => { class MockCookies { static result = { @@ -109,8 +105,8 @@ describe('', () => { ); - const tree = mount(component); - expect(tree).toMatchSnapshot(); + const tree = render(component); + expect(tree.container).toMatchSnapshot(); }); it('should render the basket', () => { @@ -123,13 +119,12 @@ describe('', () => { ); - const tree = mount(component); + const tree = render(component); act(() => { store.dispatch(basketDataReceived(transformResults(Factory.build('basket', {}, { numProducts: 1 })))); store.dispatch(fetchBasket.fulfill()); }); - tree.update(); - expect(tree).toMatchSnapshot(); + expect(tree.container).toMatchSnapshot(); }); it('should render the basket in a different currency', () => { @@ -152,13 +147,12 @@ describe('', () => { ); - const tree = mount(component); + const tree = render(component); act(() => { store.dispatch(basketDataReceived(transformResults(Factory.build('basket', {}, { numProducts: 1 })))); store.dispatch(fetchBasket.fulfill()); }); - tree.update(); - expect(tree).toMatchSnapshot(); + expect(tree.container).toMatchSnapshot(); }); it('should render the basket with an enterprise offer', () => { @@ -171,7 +165,7 @@ describe('', () => { ); - const tree = mount(component); + const tree = render(component); act(() => { store.dispatch(basketDataReceived(transformResults(Factory.build( 'basket', @@ -189,8 +183,7 @@ describe('', () => { store.dispatch(fetchBasket.fulfill()); }); - tree.update(); - expect(tree).toMatchSnapshot(); + expect(tree.container).toMatchSnapshot(); }); it('should render the basket for a bulk order', () => { @@ -204,7 +197,7 @@ describe('', () => { ); - const tree = mount(component); + const tree = render(component); act(() => { store.dispatch(basketDataReceived(transformResults(Factory.build( 'basket', @@ -213,8 +206,7 @@ describe('', () => { )))); store.dispatch(fetchBasket.fulfill()); }); - tree.update(); - expect(tree).toMatchSnapshot(); + expect(tree.container).toMatchSnapshot(); }); it('should render an empty cart', () => { @@ -227,13 +219,12 @@ describe('', () => { ); - const tree = mount(component); + const tree = render(component); act(() => { store.dispatch(basketDataReceived(transformResults(Factory.build('basket', {}, { numProducts: 0 })))); store.dispatch(fetchBasket.fulfill()); }); - tree.update(); - expect(tree).toMatchSnapshot(); + expect(tree.container).toMatchSnapshot(); }); it('should render a redirect spinner', () => { @@ -246,7 +237,7 @@ describe('', () => { ); - const tree = mount(component); + const tree = render(component); act(() => { store.dispatch(basketDataReceived(transformResults(Factory.build( 'basket', @@ -257,8 +248,7 @@ describe('', () => { )))); store.dispatch(fetchBasket.fulfill()); }); - tree.update(); - expect(tree).toMatchSnapshot(); + expect(tree.container).toMatchSnapshot(); }); it('should render a free basket', () => { @@ -271,7 +261,7 @@ describe('', () => { ); - const tree = mount(component); + const tree = render(component); act(() => { store.dispatch(basketDataReceived(transformResults(Factory.build( 'basket', @@ -282,8 +272,7 @@ describe('', () => { )))); store.dispatch(fetchBasket.fulfill()); }); - tree.update(); - expect(tree).toMatchSnapshot(); + expect(tree.container).toMatchSnapshot(); }); it('should render all custom alert messages', () => { @@ -296,7 +285,7 @@ describe('', () => { ); - const tree = mount(component); + render(component); act(() => { store.dispatch(basketDataReceived(transformResults(Factory.build( 'basket', @@ -310,9 +299,8 @@ describe('', () => { }, MESSAGE_TYPES.INFO)); store.dispatch(fetchBasket.fulfill()); }); - tree.update(); // TODO: Disabling for now update once we can swap between stripe and cybersource - // expect(tree).toMatchSnapshot(); + // expect(tree.container).toMatchSnapshot(); }); }); }); diff --git a/src/payment/__snapshots__/AlertCodeMessages.test.jsx.snap b/src/payment/__snapshots__/AlertCodeMessages.test.jsx.snap index 8fa881a68..09d6ffd77 100644 --- a/src/payment/__snapshots__/AlertCodeMessages.test.jsx.snap +++ b/src/payment/__snapshots__/AlertCodeMessages.test.jsx.snap @@ -1,32 +1,35 @@ // Jest Snapshot v1, https://goo.gl/fbAQLP exports[`EnrollmentCodeQuantityUpdated should render with values 1`] = ` -Array [ +
We've updated your quantity. -
, - "Your cart includes 2 enrollment codes at a total cost of ", - "$100.00", - ", that you will receive via email.", -] + + Your cart includes 2 enrollment codes at a total cost of + $100.00 + , that you will receive via email. +
`; exports[`SingleEnrollmentCodeWarning should render with values 1`] = ` -Array [ +
Purchasing just for yourself? -
, - "If you are purchasing a single code for someone else, please continue with checkout. However, if you are the learner ", + + If you are purchasing a single code for someone else, please continue with checkout. However, if you are the learner
click here to enroll directly - , - ".", -] + + . +
`; -exports[`TransactionDeclined should render with values 1`] = `"Your payment could not be processed. Please check your payment information or reach out to your bank or financial institution for further assistance."`; +exports[`TransactionDeclined should render with values 1`] = ` +
+ Your payment could not be processed. Please check your payment information or reach out to your bank or financial institution for further assistance. +
+`; diff --git a/src/payment/__snapshots__/PaymentPage.test.jsx.snap b/src/payment/__snapshots__/PaymentPage.test.jsx.snap index 47f1610e6..b3f8a5694 100644 --- a/src/payment/__snapshots__/PaymentPage.test.jsx.snap +++ b/src/payment/__snapshots__/PaymentPage.test.jsx.snap @@ -1,175 +1,174 @@ // Jest Snapshot v1, https://goo.gl/fbAQLP exports[` Renders correctly in various states should render a free basket 1`] = ` -
+
-

- Payment -

-
-
- - Shopping cart details are loaded. - -
-
+
+
+
+ - In Your Cart -
-

- Your purchase contains the following: -

+ Shopping cart details are loaded. +
+
+ In Your Cart +
+

+ Your purchase contains the following: +

- +
+ +
-
-
-
- Introduction to Dogs -
-

- Verified Certificate -

+
+ Introduction to Dogs +
+

+ Verified Certificate +

+
-
-
-
- Summary -
-
- + Summary + + +
- Price - - + Price + + + $103.07 + +
+
- $103.07 - + + TOTAL + + + $103.07 + +
- - TOTAL - - - $103.07 - + Order Details + +

+ After you complete your order you will be able to select course dates from your dashboard. +

-
-
- Order Details -
-

- After you complete your order you will be able to select course dates from your dashboard. -

-
-
- -
-
-
+
+
`; exports[` Renders correctly in various states should render a redirect spinner 1`] = ` -
-
-
+
+
+
- - Loading basket... - + + Loading basket... + +
@@ -177,5974 +176,5762 @@ exports[` Renders correctly in various states should render a red `; exports[` Renders correctly in various states should render an empty cart 1`] = ` -
+
-
- Your cart is empty. -
-

- Array [ - "If you attempted to make a purchase, you have not been charged. Return to your ", +

+ Your cart is empty. +
+

+ If you attempted to make a purchase, you have not been charged. Return to your dashboard - , - " to try again, or ", + + to try again, or contact edX E-commerce Support - , - ".", - ] -

+ + . +

+
`; exports[` Renders correctly in various states should render its default (loading) state 1`] = ` -
+
-

- Payment -

-
-
- - Loading, please wait... - -
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
+
-
-
- Select Payment Method -
-

- - -

-
-
-
-
+ Loading, please wait... +
+
+
+
+
+
+
+
+
+
-
-
-
-
-
+
+
+
+
+ Select Payment Method +
+

+ + +

+
+
+
+ class="col-lg-6" + > +
+
+
+
+
+
+
+
+
+
+
+
+ class="col-lg-6" + > +
+
+
+
+
-
-
+
+
`; exports[` Renders correctly in various states should render the basket 1`] = ` -
+
-

- Payment -

-
-
- - Shopping cart details are loaded. - -
-
+
+
+
+ - In Your Cart -
-

- Your purchase contains the following: -

+ Shopping cart details are loaded. +
+
+ In Your Cart +
+

+ Your purchase contains the following: +

- +
+ +
-
-
-
- Introduction to Llamass -
-

- Verified Certificate -

+
+ Introduction to Llamass +
+

+ Verified Certificate +

+
-
-
-
- Summary -
-
- - Price - - + +
+ + Price + + + $464.88 + +
+
- $464.88 - + + TOTAL + + + $464.88 + +
- - TOTAL - - - $464.88 - + Order Details + +

+ After you complete your order you will be able to select course dates from your dashboard. +

+
+
+
+
- Order Details + Select Payment Method
-

- After you complete your order you will be able to select course dates from your dashboard. +

+ +

-
- -
-
-
-
-
- Select Payment Method -
-

- - -

-
-
-
-
- Card Holder Information -
+
+ Card Holder Information +
- - + + +
+
+ + +
- - + + +
+
+ + +
-
-
- - + + +
+
+ +
+ +
+
- - + + +
+
+ + +
+
+ Billing Information +
- - + + +
+
+ +
+
+ + + + + +
+ + The three last digits in the signature area on the back of your card. For American Express, it is the four digits on the front of the card. +
+
+
+ +
-
- -
-
-
-
-
- Array [ - , - , - ] -
-
- - -
-
-
-
-
- Billing Information -
-
-
- - - Card Number (required) - -
-
- -
-
- - - Security Code (required) - - - - -
- + The three last digits in the signature area on the back of your card. For American Express, it is the four digits on the front of the card. +
+
+
+ +
+
+
+
+ +
+
+
+
+
+ +
+
+
+
+
+
+
+
+
+   +
+
+
+ + +
+
+
+
+`; + +exports[` Renders correctly in various states should render the basket in a different currency 1`] = ` +
+
+
+

+ Payment +

+
+
+
+ + Shopping cart details are loaded. + +
+
+ In Your Cart +
+

+ Your purchase contains the following: +

+
+
+
+ +
+
+
+
+ Introduction to Pigeonss +
+

+ Verified Certificate +

+
+
+
+
+
+ Summary +
+ +
+ + Price + + + + MX$8,500 + * + +
+
+ + TOTAL + + + + MX$8,500 + * + + +
+
+ * This total contains an approximate conversion. You will be charged + $445.19 + USD. +
+
+
+
+ Order Details +
+

+ After you complete your order you will be able to select course dates from your dashboard. +

+
+
+
+
+
+
+
+ Select Payment Method +
+

+ + +

+
+
+
+ Card Holder Information +
+
+
+ + +
+
+ + +
+
- Array [ +
, + Address (required) + +
+
+ + , - ] + /> +
- - + + +
+
+ +
+ +
+
-
-
-
-
- Billing Information -
-
- - + -
+ -
+
+ + - +
+
+
+
+ Billing Information +
- - - Security Code (required) - - - + + +
+
-
- + The three last digits in the signature area on the back of your card. For American Express, it is the four digits on the front of the card. +
+
- The three last digits in the signature area on the back of your card. For American Express, it is the four digits on the front of the card. -
-
-
- -
-
-
-
- -
-
-
-
-
- -
-
-
-
-
-
-
-
-
-   -
-
-
- - -
-
-
-`; - -exports[` Renders correctly in various states should render the basket with an enterprise offer 1`] = ` -
-
-

- Payment -

-
-
-
- - Shopping cart details are loaded. - -
-
- In Your Cart -
-

- Your purchase contains the following: -

-
-
-
- +
+
-
- Introduction to Pigs -
-

- Verified Certificate -

-
-
-
-
-
- Summary -
- -
- - Price - - - $158.87 - -
-
-

- - Discounts applied - - - $0.00 - -

-

- Array [ - "50%", - " discount provided by Pied Piper.", - ] -

-
-
- - TOTAL - - - $158.87 - -
-
-
-
- Order Details -
-

- After you complete your order you will be able to select course dates from your dashboard. -

-
-
-
-
-
-
-
-
- Select Payment Method -
-

- - -

-
-
-
-
- Card Holder Information -
-
-
- - -
-
- - -
-
-
-
- - -
-
- - -
-
-
-
- - -
-
- -
- +
+ +
+
+
+
+
+ +
+
+
- Array [ -
+
+
+ +
+
+
+
+
+`; + +exports[` Renders correctly in various states should render the basket with an enterprise offer 1`] = ` +
+
+
+

+ Payment +

+
+
+
+ + Shopping cart details are loaded. + +
+
+ In Your Cart +
+

+ Your purchase contains the following: +

+
+
+
- State/Province - , - , - ] + +
+
+
+
+ Introduction to Pigs +
+

+ Verified Certificate +

+
+
+
+
+
+ Summary +
+ +
+ + Price + + + $158.87 +
- - + + Discounts applied + + + $0.00 + +

+

+ 50% + discount provided by Pied Piper. +

+
+
+ + TOTAL + + + $158.87 +
+
+
+ Order Details +
+

+ After you complete your order you will be able to select course dates from your dashboard. +

+
+
+
+
+
- Billing Information + Select Payment Method
+

+ + +

+
+
+
+ Card Holder Information +
- - + -
+ -
+
+ + - +
- - + - + +
+
+ + +
+
+
+
+ + +
+
+ +
+ +
+
+
+
+
+ + +
+
+
+
+
+
+
+ Billing Information +
+
+
+ + +
+
-
- + The three last digits in the signature area on the back of your card. For American Express, it is the four digits on the front of the card. +
+
- The three last digits in the signature area on the back of your card. For American Express, it is the four digits on the front of the card. -
-
-
- +
+ +
-
-
-
+
+ data-hj-suppress="true" + > +
+
-
-
-
+
+ data-hj-suppress="true" + > +
+
-
-
-   +
+   +
-
- -
+ + +
diff --git a/src/payment/cart/Cart.test.jsx b/src/payment/cart/Cart.test.jsx index db5fe3d28..485d6835e 100644 --- a/src/payment/cart/Cart.test.jsx +++ b/src/payment/cart/Cart.test.jsx @@ -1,6 +1,6 @@ /* eslint-disable react/jsx-no-constructed-context-values */ import React from 'react'; -import { mount } from 'enzyme'; +import { render } from '@testing-library/react'; import { act } from 'react-dom/test-utils'; import { Provider } from 'react-redux'; import { IntlProvider } from '@edx/frontend-platform/i18n'; @@ -8,7 +8,6 @@ import { AppContext } from '@edx/frontend-platform/react'; import { Factory } from 'rosie'; import { createStore } from 'redux'; import Cookies from 'universal-cookie'; -import { createSerializer } from 'enzyme-to-json'; import '../__factories__/basket.factory'; import '../__factories__/userAccount.factory'; @@ -17,9 +16,6 @@ import createRootReducer from '../../data/reducers'; import { fetchBasket, basketDataReceived } from '../data/actions'; import { transformResults } from '../data/utils'; -// run enzyme JSON serializer using options compatible with prior snapshots -expect.addSnapshotSerializer(createSerializer({ mode: 'deep', noKey: true })); - jest.mock('@edx/frontend-platform/analytics', () => ({ sendTrackEvent: jest.fn(), })); @@ -52,11 +48,11 @@ describe('', () => { ); - tree = mount(component); + tree = render(component); }); it('renders the loading skeleton', () => { - expect(tree).toMatchSnapshot(); + expect(tree.container).toMatchSnapshot(); }); it('renders a basic, one product cart', () => { @@ -68,8 +64,8 @@ describe('', () => { )))); store.dispatch(fetchBasket.fulfill()); }); - tree.update(); - expect(tree).toMatchSnapshot(); + + expect(tree.container).toMatchSnapshot(); }); it('renders a basic, one product cart with coupon form', () => { @@ -81,8 +77,8 @@ describe('', () => { )))); store.dispatch(fetchBasket.fulfill()); }); - tree.update(); - expect(tree).toMatchSnapshot(); + + expect(tree.container).toMatchSnapshot(); }); it('renders a cart with an offer', () => { @@ -96,8 +92,8 @@ describe('', () => { )))); store.dispatch(fetchBasket.fulfill()); }); - tree.update(); - expect(tree).toMatchSnapshot(); + + expect(tree.container).toMatchSnapshot(); }); it('renders a cart in non USD currency', () => { @@ -119,7 +115,7 @@ describe('', () => { ); - tree = mount(component); + tree = render(component); act(() => { store.dispatch(basketDataReceived(transformResults(Factory.build( @@ -130,8 +126,7 @@ describe('', () => { store.dispatch(fetchBasket.fulfill()); }); - tree.update(); - expect(tree).toMatchSnapshot(); + expect(tree.container).toMatchSnapshot(); }); it('renders a bulk enrollment cart', () => { @@ -144,7 +139,6 @@ describe('', () => { store.dispatch(fetchBasket.fulfill()); }); - tree.update(); - expect(tree).toMatchSnapshot(); + expect(tree.container).toMatchSnapshot(); }); }); diff --git a/src/payment/cart/CouponForm.jsx b/src/payment/cart/CouponForm.jsx index c64339eee..d65ad2469 100644 --- a/src/payment/cart/CouponForm.jsx +++ b/src/payment/cart/CouponForm.jsx @@ -52,7 +52,7 @@ class CouponForm extends Component { description="Label for the add coupon form" /> - +
`; exports[` renders a basic, one product cart with coupon form 1`] = ` -
-
- - Shopping cart details are loaded. - -
-
- In Your Cart -
-

- Your purchase contains the following: -

+
+
+
+ + Shopping cart details are loaded. +
+
+ In Your Cart +
+

+ Your purchase contains the following: +

- +
+ +
+
+
+
+ Introduction to Pigeonss +
+

+ Verified Certificate +

+
+
+
+ Summary +
+
-
- Introduction to Pigeonss -
-

+ - Verified Certificate -

+ $445.19 +
-
-
-
-
- Summary -
- -
- - Price - - - $445.19 - -
-
-
- Array [ +
, +
-
, - ] +
+
+ +
+
+ + TOTAL + + + $445.19 +
- - +
- - TOTAL - - - $445.19 - + Order Details + +

+ After you complete your order you will be able to select course dates from your dashboard. +

-
-
- Order Details -
-

- After you complete your order you will be able to select course dates from your dashboard. -

-
-
-
+ +
`; exports[` renders a bulk enrollment cart 1`] = ` -
-
- - Shopping cart details are loaded. - -
-
- In Your Cart -
-

- Your purchase contains the following: -

+
+
+
+ + Shopping cart details are loaded. +
+
+ In Your Cart +
+

+ Your purchase contains the following: +

- +
+ +
-
-
-
- Introduction to Chickenss -
-

- Verified Certificate -

+
+ Introduction to Chickenss +
+

+ Verified Certificate +

+
-
-
-
-
+
- +
+ +
+ + Max: 100 +
- - Max: 100 -
+ + +
+
+
+ Summary +
+ +
+ + + + + + + + + + + + + + + +
+ Price + + Quantity + + Subtotal +
+ $92.77 + + 1 + + $92.77 +
- - -
-
-
- Summary -
- -
- - - - - - - - - - - - - - - -
- Price - - Quantity - - Subtotal -
- $92.77 - - 1 - - $92.77 -
+ + $92.77 + +
- - TOTAL - - - $92.77 - + Order Details + +

+ By purchasing, you and your organization agree to the following terms: +

+
    +
  • + Each code is valid for the one course covered and can be used only one time. +
  • +
  • + You are responsible for distributing codes to your learners in your organization. +
  • +
  • + Each code will expire in one year from date of purchase or, if earlier, once the course is closed. +
  • +
  • + If a course is not designated as self-paced, you should confirm that a course run is available before expiration. +
  • +
  • + You may not resell codes to third parties. +
  • +
  • + All edX for Business sales are final and not eligible for refunds. +
  • +
+

+ You will receive an email at person@edx.org with your enrollment code(s). +

-
-
- Order Details -
-

- By purchasing, you and your organization agree to the following terms: -

-
    -
  • - Each code is valid for the one course covered and can be used only one time. -
  • -
  • - You are responsible for distributing codes to your learners in your organization. -
  • -
  • - Each code will expire in one year from date of purchase or, if earlier, once the course is closed. -
  • -
  • - If a course is not designated as self-paced, you should confirm that a course run is available before expiration. -
  • -
  • - You may not resell codes to third parties. -
  • -
  • - All edX for Business sales are final and not eligible for refunds. -
  • -
-

- You will receive an email at person@edx.org with your enrollment code(s). -

-
-
-
+ +
`; exports[` renders a cart in non USD currency 1`] = ` -
-
- - Shopping cart details are loaded. - -
-
- In Your Cart -
-

- Your purchase contains the following: -

+
+
+
+ + Shopping cart details are loaded. +
+
+ In Your Cart +
+

+ Your purchase contains the following: +

- +
+ +
+
+
+
+ Introduction to Guanacos +
+

+ Verified Certificate +

+
+
+
+ Summary +
+
-
- Introduction to Guanacos -
-

+ - Verified Certificate -

+ + MX$1,264 + * + +
-
-
-
-
- Summary -
- -
- - Price - - - - MX$1,264 - * + + TOTAL - -
-
- - TOTAL - - - - MX$1,264 - * + + + MX$1,264 + * + - +
+
+ * This total contains an approximate conversion. You will be charged + $66.22 + USD. +
- Array [ - "* This total contains an approximate conversion. You will be charged ", - "$66.22", - " USD.", - ] +
+ Order Details +
+

+ After you complete your order you will be able to select course dates from your dashboard. +

-
-
- Order Details -
-

- After you complete your order you will be able to select course dates from your dashboard. -

-
-
-
+ +
`; exports[` renders a cart with an offer 1`] = ` -
-
- - Shopping cart details are loaded. - -
-
- In Your Cart -
-

- Your purchase contains the following: -

+
+
+
+ + Shopping cart details are loaded. +
+
+ In Your Cart +
+

+ Your purchase contains the following: +

- +
+ +
+
+
+
+ Introduction to Pigs +
+

+ Verified Certificate +

+
+
+
+ Summary +
+ +
+ + Price + + + $158.87 + +
-
- Introduction to Pigs -
+ + Discounts applied + + + $0.00 + +

- Verified Certificate + 50% + discount provided by Pied Piper.

-
-
-
-
- Summary -
- -
- - Price - - - $158.87 - -
-
-

- Discounts applied + TOTAL - - $0.00 + + $158.87 -

-

- Array [ - "50%", - " discount provided by Pied Piper.", - ] -

+
- - TOTAL - - - $158.87 - + Order Details + +

+ After you complete your order you will be able to select course dates from your dashboard. +

-
-
- Order Details -
-

- After you complete your order you will be able to select course dates from your dashboard. -

-
-
-
+ +
`; exports[` renders the loading skeleton 1`] = ` -
-
- - Loading, please wait... - -
-
-
+
+
+
+ + Loading, please wait... +
-
-
+ class="skeleton py-2 mb-3 w-50" + />
+
+ class="col-5" + > +
+
+ class="col-7" + > +
+
+
+
+
+
+
+
+
-
-
-
-
-
-
-
-
+
+
`; diff --git a/src/payment/cart/__snapshots__/CouponForm.test.jsx.snap b/src/payment/cart/__snapshots__/CouponForm.test.jsx.snap index 8d2697167..41256a4a7 100644 --- a/src/payment/cart/__snapshots__/CouponForm.test.jsx.snap +++ b/src/payment/cart/__snapshots__/CouponForm.test.jsx.snap @@ -1,105 +1,100 @@ // Jest Snapshot v1, https://goo.gl/fbAQLP exports[`CouponForm should render a coupon even if no known benefitType is supplied 1`] = ` -
- + - Coupon COUPONCODE applied - - -
+ + Coupon COUPONCODE applied + + + +
`; exports[`CouponForm should render a form when there is no coupon 1`] = ` -
-
+ - Array [ +
, +
-
, - ] -
- - +
+
+ + +
`; exports[`CouponForm should render a percentage value coupon 1`] = ` -
- + - Coupon COUPONCODE applied for 10% off - - -
+ + Coupon COUPONCODE applied for 10% off + + + +
`; exports[`CouponForm should render an absolute value coupon 1`] = ` -
- - Coupon COUPONCODE applied for - $10.00 - off - - -
+ + Coupon COUPONCODE applied for + $10.00 + off + + + +
`; diff --git a/src/payment/cart/__snapshots__/LocalizedPrice.test.jsx.snap b/src/payment/cart/__snapshots__/LocalizedPrice.test.jsx.snap index 3c28db0c7..fddc77ab0 100644 --- a/src/payment/cart/__snapshots__/LocalizedPrice.test.jsx.snap +++ b/src/payment/cart/__snapshots__/LocalizedPrice.test.jsx.snap @@ -1,10 +1,16 @@ // Jest Snapshot v1, https://goo.gl/fbAQLP exports[`LocalizedPrice should render localized currency 1`] = ` - - MX$190 - * - +
+ + MX$190 + * + +
`; -exports[`LocalizedPrice should render unlocalized currency 1`] = `"$10.00"`; +exports[`LocalizedPrice should render unlocalized currency 1`] = ` +
+ $10.00 +
+`; diff --git a/src/payment/cart/__snapshots__/Offers.test.jsx.snap b/src/payment/cart/__snapshots__/Offers.test.jsx.snap index 88f0d7019..582dd349c 100644 --- a/src/payment/cart/__snapshots__/Offers.test.jsx.snap +++ b/src/payment/cart/__snapshots__/Offers.test.jsx.snap @@ -1,76 +1,82 @@ // Jest Snapshot v1, https://goo.gl/fbAQLP exports[` renders a dynamic discount offer 1`] = ` -
-

+

- - Discounts applied - - - -$10.00 - -

-

- 50% - discount for your first upgrade applied. -

+ + Discounts applied + + + -$10.00 + +

+

+ 50% + discount for your first upgrade applied. +

+
`; exports[` renders a percentage offer 1`] = ` -
-

+

- - Discounts applied - - - -$10.00 - -

-

- 50% - discount provided by Pied Piper. -

+ + Discounts applied + + + -$10.00 + +

+

+ 50% + discount provided by Pied Piper. +

+
`; exports[` renders an absolute value offer 1`] = ` -
-

+

- - Discounts applied - - - -$10.00 - -

-

- $10.00 - discount provided by Pied Piper. -

+ + Discounts applied + + + -$10.00 + +

+

+ $10.00 + discount provided by Pied Piper. +

+
`; diff --git a/src/payment/cart/__snapshots__/ProductLineItem.test.jsx.snap b/src/payment/cart/__snapshots__/ProductLineItem.test.jsx.snap index 7f4729cda..4f9257a8c 100644 --- a/src/payment/cart/__snapshots__/ProductLineItem.test.jsx.snap +++ b/src/payment/cart/__snapshots__/ProductLineItem.test.jsx.snap @@ -1,240 +1,254 @@ // Jest Snapshot v1, https://goo.gl/fbAQLP exports[` Rendering should render the product details 1`] = ` -
+
- + class="col-5" + > +
+ +
+
+
+
+ Introduction to Happiness +
+

+ Verified Certificate +

-
-
-
- Introduction to Happiness -
-

- Verified Certificate -

`; exports[` Rendering should render the product details for audit certificate 1`] = ` -
+
- +
+ +
+
+
+
+ Introduction to Happiness +
+

-
-
- Introduction to Happiness -
-

-

`; exports[` Rendering should render the product details for honor certificate 1`] = ` -
+
- +
+ +
+
+
+
+ Introduction to Happiness +
+

-
-
- Introduction to Happiness -
-

-

`; exports[` Rendering should render the product details for no-id-professional certificate 1`] = ` -
+
- + class="col-5" + > +
+ +
+
+
+
+ Introduction to Happiness +
+

+ Professional Certificate +

-
-
-
- Introduction to Happiness -
-

- Professional Certificate -

`; exports[` Rendering should render the product details for professional certificate 1`] = ` -
+
- + class="col-5" + > +
+ +
+
+
+
+ Introduction to Happiness +
+

+ Professional Certificate +

-
-
-
- Introduction to Happiness -
-

- Professional Certificate -

`; exports[` Rendering should render the product details for unknown seat type 1`] = ` -
+
- +
+ +
+
+
+
+ Introduction to Happiness +
+

-
-
- Introduction to Happiness -
-

-

`; exports[` Rendering should render the product details for verified certificate 1`] = ` -
+
- + class="col-5" + > +
+ +
+
+
+
+ Introduction to Happiness +
+

+ Verified Certificate +

-
-
-
- Introduction to Happiness -
-

- Verified Certificate -

`; diff --git a/src/payment/cart/order-details/OrderDetails.test.jsx b/src/payment/cart/order-details/OrderDetails.test.jsx index 8e71b459d..573fea63a 100644 --- a/src/payment/cart/order-details/OrderDetails.test.jsx +++ b/src/payment/cart/order-details/OrderDetails.test.jsx @@ -1,6 +1,6 @@ import React from 'react'; import { Provider } from 'react-redux'; -import renderer from 'react-test-renderer'; +import { render } from '@testing-library/react'; import configureMockStore from 'redux-mock-store'; import { IntlProvider } from '@edx/frontend-platform/i18n'; import { AppContext } from '@edx/frontend-platform/react'; @@ -51,8 +51,8 @@ describe('OrderDetails', () => { ); - const tree = renderer.create(component).toJSON(); - expect(tree).toBeNull(); + const { container: tree } = render(component); + expect(tree.children.length).toBe(0); }); it('should render if given a store path', () => { @@ -65,8 +65,8 @@ describe('OrderDetails', () => { ); - const tree = renderer.create(component).toJSON(); - expect(tree).toBeNull(); + const { container: tree } = render(component); + expect(tree.children.length).toBe(0); }); it('should render nothing if given an unknown product type', () => { @@ -84,8 +84,8 @@ describe('OrderDetails', () => { ); - const tree = renderer.create(component).toJSON(); - expect(tree).toBeNull(); + const { container: tree } = render(component); + expect(tree.children.length).toBe(0); }); it('should render course entitlement product message', () => { @@ -103,7 +103,7 @@ describe('OrderDetails', () => { ); - const tree = renderer.create(component).toJSON(); + const { container: tree } = render(component); // This snapshot should be the message for the course entitlement product - a single sentence. expect(tree).toMatchSnapshot(); }); @@ -125,7 +125,7 @@ describe('OrderDetails', () => { ); - const tree = renderer.create(component).toJSON(); + const { container: tree } = render(component); // This snapshot should be a big list of bullet points and include the user's email at the end. expect(tree).toMatchSnapshot(); }); @@ -145,7 +145,7 @@ describe('OrderDetails', () => { ); - const tree = renderer.create(component).toJSON(); + const { container: tree } = render(component); // This snapshot should be the message for the verified seat product - a single sentence. expect(tree).toMatchSnapshot(); }); @@ -165,7 +165,7 @@ describe('OrderDetails', () => { ); - const tree = renderer.create(component).toJSON(); + const { container: tree } = render(component); // This snapshot should be the message for the credit seat product - a single sentence. expect(tree).toMatchSnapshot(); }); @@ -185,7 +185,7 @@ describe('OrderDetails', () => { ); - const tree = renderer.create(component).toJSON(); + const { container: tree } = render(component); // This snapshot should be the message for a generic seat product - a single sentence. expect(tree).toMatchSnapshot(); }); diff --git a/src/payment/cart/order-details/__snapshots__/OrderDetails.test.jsx.snap b/src/payment/cart/order-details/__snapshots__/OrderDetails.test.jsx.snap index f863674d1..2615985a0 100644 --- a/src/payment/cart/order-details/__snapshots__/OrderDetails.test.jsx.snap +++ b/src/payment/cart/order-details/__snapshots__/OrderDetails.test.jsx.snap @@ -1,99 +1,109 @@ // Jest Snapshot v1, https://goo.gl/fbAQLP exports[`OrderDetails should render course entitlement product message 1`] = ` -
-
+
- Order Details -
-

- After you complete your order you will be able to select course dates from your dashboard. -

+
+ Order Details +
+

+ After you complete your order you will be able to select course dates from your dashboard. +

+
`; exports[`OrderDetails should render credit seat message 1`] = ` -
-
+
- Order Details -
-

- After you complete your order you will receive credit for your course. -

+
+ Order Details +
+

+ After you complete your order you will receive credit for your course. +

+
`; exports[`OrderDetails should render enrollment code product message 1`] = ` -
-
+
- Order Details -
-

- By purchasing, you and your organization agree to the following terms: -

-
    -
  • - Each code is valid for the one course covered and can be used only one time. -
  • -
  • - You are responsible for distributing codes to your learners in your organization. -
  • -
  • - Each code will expire in one year from date of purchase or, if earlier, once the course is closed. -
  • -
  • - If a course is not designated as self-paced, you should confirm that a course run is available before expiration. -
  • -
  • - You may not resell codes to third parties. -
  • -
  • - All edX for Business sales are final and not eligible for refunds. -
  • -
-

- You will receive an email at staff@example.com with your enrollment code(s). -

+
+ Order Details +
+

+ By purchasing, you and your organization agree to the following terms: +

+
    +
  • + Each code is valid for the one course covered and can be used only one time. +
  • +
  • + You are responsible for distributing codes to your learners in your organization. +
  • +
  • + Each code will expire in one year from date of purchase or, if earlier, once the course is closed. +
  • +
  • + If a course is not designated as self-paced, you should confirm that a course run is available before expiration. +
  • +
  • + You may not resell codes to third parties. +
  • +
  • + All edX for Business sales are final and not eligible for refunds. +
  • +
+

+ You will receive an email at staff@example.com with your enrollment code(s). +

+
`; exports[`OrderDetails should render seat message 1`] = ` -
-
+
- Order Details -
-

- After you complete your order you will be automatically enrolled in the course. -

+
+ Order Details +
+

+ After you complete your order you will be automatically enrolled in the course. +

+
`; exports[`OrderDetails should render verified seat message 1`] = ` -
-
+
- Order Details -
-

- The above total includes any applicable taxes. After you complete your order you will be automatically enrolled in the verified track of the course. -

+
+ Order Details +
+

+ The above total includes any applicable taxes. After you complete your order you will be automatically enrolled in the verified track of the course. +

+
`; diff --git a/src/payment/checkout/Checkout.jsx b/src/payment/checkout/Checkout.jsx index 92ee6b8ca..7831f459a 100644 --- a/src/payment/checkout/Checkout.jsx +++ b/src/payment/checkout/Checkout.jsx @@ -257,6 +257,7 @@ class Checkout extends React.Component { className={classNames('payment-method-button', { 'skeleton-pulse': loading })} disabled={submissionDisabled} isProcessing={payPalIsSubmitting} + data-testid="PayPalButton" /> {/* Apple Pay temporarily disabled per REV-927 - https://github.com/openedx/frontend-app-payment/pull/256 */} diff --git a/src/payment/checkout/Checkout.test.jsx b/src/payment/checkout/Checkout.test.jsx index 387c13f9a..f153eda09 100644 --- a/src/payment/checkout/Checkout.test.jsx +++ b/src/payment/checkout/Checkout.test.jsx @@ -1,18 +1,22 @@ import React from 'react'; import { Provider } from 'react-redux'; import configureMockStore from 'redux-mock-store'; -import { mount } from 'enzyme'; +import { fireEvent, render, screen } from '@testing-library/react'; import { IntlProvider, configure as configureI18n } from '@edx/frontend-platform/i18n'; import { sendTrackEvent } from '@edx/frontend-platform/analytics'; import { Factory } from 'rosie'; import Checkout from './Checkout'; +import * as formValidators from './payment-form/utils/form-validators'; import { submitPayment } from '../data/actions'; import '../__factories__/basket.factory'; import '../__factories__/userAccount.factory'; import { transformResults } from '../data/utils'; import { getPerformanceProperties } from '../performanceEventing'; +const validateRequiredFieldsMock = jest.spyOn(formValidators, 'validateRequiredFields'); +const validateCardDetailsMock = jest.spyOn(formValidators, 'validateCardDetails'); + jest.mock('@edx/frontend-platform/analytics', () => ({ sendTrackEvent: jest.fn(), })); @@ -52,7 +56,6 @@ global.ApplePaySession = jest.fn().mockImplementation(() => applePaySession); global.ApplePaySession.canMakePayments = () => true; describe('', () => { - let checkoutComponent; // eslint-disable-line no-unused-vars let wrapper; let store; let state; @@ -84,19 +87,12 @@ describe('', () => { ); - wrapper = mount(component); - checkoutComponent = wrapper - .find('Checkout') - .first() - .instance(); + wrapper = render(component); }); - it('submits and tracks paypal', () => { - const paypalButton = wrapper - .find('PayPalButton') - .find('button') - .hostNodes(); - paypalButton.simulate('click'); + it('submits and tracks paypal', async () => { + const paypalButton = await screen.findByTestId('PayPalButton'); + fireEvent.click(paypalButton); expect(sendTrackEvent).toHaveBeenCalledWith('edx.bi.ecommerce.basket.payment_selected', { type: 'click', @@ -114,8 +110,8 @@ describe('', () => { ...getPerformanceProperties(), paymentProcessor: 'Cybersource', }); - const formSubmitButton = wrapper.find('form button[type="submit"]').hostNodes(); - formSubmitButton.simulate('click'); + const formSubmitButton = wrapper.container.querySelector('form button[type="submit"]'); + fireEvent.click(formSubmitButton); expect(sendTrackEvent).toHaveBeenCalledWith('edx.bi.ecommerce.basket.payment_selected', { type: 'click', @@ -124,15 +120,22 @@ describe('', () => { checkoutType: 'client_side', flexMicroformEnabled: true, stripeEnabled: false, - }); }); it('fires an action when handling a cybersource submission', () => { - const formData = { name: 'test' }; - checkoutComponent.handleSubmitCybersource(formData); + validateRequiredFieldsMock.mockReturnValueOnce({}); + validateCardDetailsMock.mockReturnValueOnce({}); + + const firstNameField = wrapper.container.querySelector('#firstName'); + const lastNameField = wrapper.container.querySelector('#lastName'); - expect(store.getActions().pop()).toEqual(submitPayment({ method: 'cybersource', ...formData })); + fireEvent.change(firstNameField, { target: { value: 'John' } }); + fireEvent.change(lastNameField, { target: { value: 'Doe' } }); + fireEvent.submit(screen.getByTestId('payment-form')); + + store.getActions().pop(); + expect(store.getActions().pop()).toMatchObject(submitPayment({ method: 'cybersource' })); }); }); @@ -162,21 +165,17 @@ describe('', () => { store = mockStore(state); }); - it('renders and tracks free checkout', () => { - const component = ( + it('renders and tracks free checkout', async () => { + render( - + , ); - wrapper = mount(component); - const freeCheckoutButton = wrapper - .find('FreeCheckoutOrderButton') - .find('a') - .hostNodes(); - freeCheckoutButton.simulate('click'); + const freeCheckoutButton = await screen.findByRole('link', { name: /place order/i }); + fireEvent.click(freeCheckoutButton); expect(sendTrackEvent).toHaveBeenCalledWith('edx.bi.ecommerce.basket.free_checkout', { type: 'click', diff --git a/src/payment/checkout/payment-form/CardDetails.test.jsx b/src/payment/checkout/payment-form/CardDetails.test.jsx index 26ac291fa..cc8da599f 100644 --- a/src/payment/checkout/payment-form/CardDetails.test.jsx +++ b/src/payment/checkout/payment-form/CardDetails.test.jsx @@ -1,16 +1,26 @@ /* eslint-disable global-require */ import React from 'react'; -import { shallow } from 'enzyme'; +import { render } from '@testing-library/react'; +import configureMockStore from 'redux-mock-store'; +import { IntlProvider } from '@edx/frontend-platform/i18n'; +import { Provider } from 'react-redux'; +import { reduxForm } from 'redux-form'; import { CardDetailsComponent } from './CardDetails'; -const mockIntl = { - formatMessage: () => 'I18N_TEXT', -}; +const mockStore = configureMockStore(); describe('', () => { it('exists', () => { - const cardDetails = shallow().instance(); - expect(cardDetails).toBeTruthy(); + const cardDetails = render(reduxForm( + + + + + , + )); + expect(cardDetails.container).toBeTruthy(); }); }); diff --git a/src/payment/checkout/payment-form/CardHolderInformation.test.jsx b/src/payment/checkout/payment-form/CardHolderInformation.test.jsx index 8d2fa84e3..8a37498ce 100644 --- a/src/payment/checkout/payment-form/CardHolderInformation.test.jsx +++ b/src/payment/checkout/payment-form/CardHolderInformation.test.jsx @@ -1,24 +1,29 @@ /* eslint-disable react/jsx-no-constructed-context-values */ import React from 'react'; import { Provider } from 'react-redux'; -import { mount } from 'enzyme'; import { IntlProvider, configure as configureI18n, } from '@edx/frontend-platform/i18n'; +import { fireEvent, render, screen } from '@testing-library/react'; import { AppContext } from '@edx/frontend-platform/react'; import { Factory } from 'rosie'; import { createStore } from 'redux'; -import CardHolderInformation, { CardHolderInformationComponent } from './CardHolderInformation'; +import CardHolderInformation from './CardHolderInformation'; import PaymentForm from './PaymentForm'; import createRootReducer from '../../../data/reducers'; +import countryStatesMap from './utils/countryStatesMap'; import '../../__factories__/userAccount.factory'; jest.mock('@edx/frontend-platform/analytics', () => ({ sendTrackEvent: jest.fn(), })); +jest.mock('./utils/countryStatesMap', () => ({ + __esModule: true, + default: jest.fn(), +})); configureI18n({ config: { @@ -54,7 +59,7 @@ describe('', () => { const authenticatedUser = Factory.build('userAccount'); store = createStore(createRootReducer(), {}); - const component = ( + render( @@ -63,23 +68,17 @@ describe('', () => { - + , ); - const wrapper = mount(component); - const cardHolderInformation = wrapper - .find(CardHolderInformationComponent) - .first() - .instance(); - const eventMock = jest.fn(); - cardHolderInformation.handleSelectCountry(eventMock, 'US'); + fireEvent.change(screen.getByLabelText('Country (required)'), { target: { value: 'US' } }); - expect(cardHolderInformation.state).toEqual({ selectedCountry: 'US' }); + expect(countryStatesMap).toHaveBeenCalledWith('US'); }); }); describe('purchasedForOrganization field', () => { it('renders for bulk purchase', () => { - const wrapper = mount(( + const wrapper = render(( ', () => { )); - expect(wrapper.exists('#purchasedForOrganization')).toEqual(true); + expect(wrapper.container.querySelector('#purchasedForOrganization')).toBeTruthy(); }); it('does not render if not bulk purchase', () => { - const wrapper = mount(( + const wrapper = render(( ', () => { )); - expect(wrapper.exists('#purchasedForOrganization')).toEqual(false); + expect(wrapper.container.querySelector('#purchasedForOrganization')).toBeFalsy(); }); }); }); diff --git a/src/payment/checkout/payment-form/PaymentForm.jsx b/src/payment/checkout/payment-form/PaymentForm.jsx index 405a57c04..82ddf9bdb 100644 --- a/src/payment/checkout/payment-form/PaymentForm.jsx +++ b/src/payment/checkout/payment-form/PaymentForm.jsx @@ -134,6 +134,7 @@ export class PaymentFormComponent extends React.Component { return (
', () => { let paymentForm; let store; + let wrapper; beforeEach(() => { store = createStore(createRootReducer(), {}); - const wrapper = mount(( + wrapper = render(( @@ -71,7 +72,12 @@ describe('', () => { )); - paymentForm = wrapper.find(PaymentFormComponent).first().instance(); + paymentForm = screen.getByTestId('payment-form'); + }); + + afterEach(() => { + formValidators.validateRequiredFields({}); + formValidators.validateCardDetails({}); }); describe('getRequiredFields', () => { @@ -123,7 +129,7 @@ describe('', () => { it('returns organization fields for a bulk order', () => { const isBulkOrder = true; - mount(( + render(( @@ -187,9 +193,9 @@ describe('', () => { validateRequiredFieldsMock.mockReturnValueOnce(testCaseData[0]); validateCardDetailsMock.mockReturnValueOnce(testCaseData[1]); if (testCaseData[2]) { - expect(() => paymentForm.onSubmit(testFormValues)).toThrow(testCaseData[2]); + expect(() => fireEvent.submit(paymentForm, (testFormValues)).toThrow(testCaseData[2])); } else { - expect(() => paymentForm.onSubmit(testFormValues)).not.toThrow(); + expect(() => fireEvent.submit(paymentForm, testFormValues)).not.toThrow(); } }); }); @@ -225,7 +231,7 @@ describe('', () => { }); describe('focusFirstError', () => { it('focuses on the input name of the first error', () => { - const wrapper = mount(( + wrapper = render(( ', () => { })} > {}} onSubmitPayment={() => {}} onSubmitButtonClick={() => {}} /> @@ -245,13 +250,10 @@ describe('', () => { )); - paymentForm = wrapper.find(PaymentFormComponent).first().instance(); - const firstNameField = wrapper.find('#firstName').hostNodes().getDOMNode(); + paymentForm = screen.getAllByTestId('payment-form'); + const firstNameField = wrapper.container.querySelector('#firstName'); firstNameField.focus = jest.fn(); - paymentForm.setState({ - shouldFocusFirstError: true, - firstErrorId: null, - }); + fireEvent.submit(paymentForm[1]); expect(firstNameField.focus).toHaveBeenCalled(); }); }); diff --git a/src/payment/checkout/payment-form/StripePaymentForm.test.jsx b/src/payment/checkout/payment-form/StripePaymentForm.test.jsx index c39fed99e..7918a8696 100644 --- a/src/payment/checkout/payment-form/StripePaymentForm.test.jsx +++ b/src/payment/checkout/payment-form/StripePaymentForm.test.jsx @@ -2,19 +2,18 @@ import React from 'react'; import * as reactRedux from 'react-redux'; import { createStore } from 'redux'; -import { mount } from 'enzyme'; +import { fireEvent, render, screen } from '@testing-library/react'; import { IntlProvider, configure as configureI18n } from '@edx/frontend-platform/i18n'; import { Factory } from 'rosie'; import configureMockStore from 'redux-mock-store'; -import { Elements, PaymentElement } from '@stripe/react-stripe-js'; +import { Elements } from '@stripe/react-stripe-js'; import { AppContext } from '@edx/frontend-platform/react'; import StripePaymentForm from './StripePaymentForm'; import * as formValidators from './utils/form-validators'; import createRootReducer from '../../../data/reducers'; import '../../__factories__/userAccount.factory'; import * as mocks from '../stripeMocks'; -import PlaceOrderButton from './PlaceOrderButton'; import { basketSelector } from '../../data/selectors'; jest.mock('@edx/frontend-platform/analytics', () => ({ @@ -59,7 +58,6 @@ describe('', () => { let store; let mockStripe; let mockElements; - let submitButton; let state; let mockElement; let paymentElement; @@ -89,7 +87,7 @@ describe('', () => { form: {}, }; - const wrapper = mount(( + const wrapper = render(( @@ -105,8 +103,7 @@ describe('', () => { )); - paymentElement = wrapper.find(PaymentElement); - submitButton = wrapper.find(PlaceOrderButton); + paymentElement = wrapper.container.querySelectorAll('#payment-element'); }); afterEach(() => { @@ -162,7 +159,7 @@ describe('', () => { it('returns organization fields for a bulk order', () => { const isBulkOrder = true; - mount(( + render(( @@ -221,7 +218,7 @@ describe('', () => { }, }; const submitStripePayment = jest.fn(); - mount(( + render(( @@ -233,6 +230,7 @@ describe('', () => { shouldFocusFirstError firstErrorId={null} paymentDataSelector={basketSelector} + isProcessing /> @@ -256,10 +254,10 @@ describe('', () => { testData.forEach((testCaseData) => { validateRequiredFieldsMock.mockReturnValueOnce(testCaseData[0]); if (testCaseData[1]) { - expect(() => submitButton.simulate('click')); + expect(() => fireEvent.click(screen.getByText('Place Order'))); expect(submitStripePayment).not.toHaveBeenCalled(); } else { - expect(() => submitButton.simulate('click')).not.toThrow(); + expect(() => fireEvent.click(screen.getByText('Place Order'))).not.toThrow(); } }); }); diff --git a/src/payment/payment-methods/apple-pay/ApplePayButton.jsx b/src/payment/payment-methods/apple-pay/ApplePayButton.jsx index 0852fee55..6b8a2b4ac 100644 --- a/src/payment/payment-methods/apple-pay/ApplePayButton.jsx +++ b/src/payment/payment-methods/apple-pay/ApplePayButton.jsx @@ -34,6 +34,7 @@ class ApplePayButton extends React.Component { title={intl.formatMessage(messages['payment.apple.pay.pay.with.apple.pay'])} type="button" lang={intl.locale} + data-testid="applePayBtn" /> ); } diff --git a/src/payment/payment-methods/apple-pay/ApplePayButton.test.jsx b/src/payment/payment-methods/apple-pay/ApplePayButton.test.jsx index 621b322eb..840a2a3a7 100644 --- a/src/payment/payment-methods/apple-pay/ApplePayButton.test.jsx +++ b/src/payment/payment-methods/apple-pay/ApplePayButton.test.jsx @@ -1,6 +1,5 @@ import React from 'react'; -import { mount } from 'enzyme'; -import renderer from 'react-test-renderer'; +import { fireEvent, render, screen } from '@testing-library/react'; import { IntlProvider } from '@edx/frontend-platform/i18n'; import { logError } from '@edx/frontend-platform/logging'; import { getConfig } from '@edx/frontend-platform'; @@ -23,38 +22,38 @@ global.ApplePaySession.canMakePayments = () => true; describe('', () => { it('should render properly', () => { - const tree = renderer - .create(( - - - - )) - .toJSON(); + const { container: tree } = render( + + + , + ); expect(tree).toMatchSnapshot(); }); it('should call an onClick handler if it is supplied', () => { const clickHandler = jest.fn(); - const wrapper = mount(( + render(( )); - wrapper.find('ApplePayButton').simulate('click'); + const applyPayButton = screen.getByTestId('applePayBtn'); + fireEvent.click(applyPayButton); expect(clickHandler).toHaveBeenCalled(); }); it('should not call an onClick handler if it is disabled', () => { const clickHandler = jest.fn(); - const wrapper = mount(( + render(( )); - wrapper.find('ApplePayButton').simulate('click'); + const applyPayButton = screen.getByTestId('applePayBtn'); + fireEvent.click(applyPayButton); expect(clickHandler).not.toHaveBeenCalled(); }); @@ -73,7 +72,7 @@ describe('', () => { }); it('should log an error if it catches one in constructor', () => { - mount(( + render(( diff --git a/src/payment/payment-methods/apple-pay/__snapshots__/ApplePayButton.test.jsx.snap b/src/payment/payment-methods/apple-pay/__snapshots__/ApplePayButton.test.jsx.snap index 3d17eee1b..b69bcbcff 100644 --- a/src/payment/payment-methods/apple-pay/__snapshots__/ApplePayButton.test.jsx.snap +++ b/src/payment/payment-methods/apple-pay/__snapshots__/ApplePayButton.test.jsx.snap @@ -1,12 +1,14 @@ // Jest Snapshot v1, https://goo.gl/fbAQLP exports[` should render properly 1`] = ` -
`; diff --git a/src/payment/payment-methods/paypal/PayPalButton.test.jsx b/src/payment/payment-methods/paypal/PayPalButton.test.jsx index 5cd95c910..c765e09ba 100644 --- a/src/payment/payment-methods/paypal/PayPalButton.test.jsx +++ b/src/payment/payment-methods/paypal/PayPalButton.test.jsx @@ -1,5 +1,5 @@ import React from 'react'; -import renderer from 'react-test-renderer'; +import { render } from '@testing-library/react'; import { IntlProvider } from '@edx/frontend-platform/i18n'; import PayPalButton from './PayPalButton'; @@ -11,7 +11,7 @@ describe('OrderDetails', () => { ); - const tree = renderer.create(component).toJSON(); + const { container: tree } = render(component); expect(tree).toMatchSnapshot(); }); it('should render the button with a spinner when processing', () => { @@ -20,7 +20,7 @@ describe('OrderDetails', () => { ); - const tree = renderer.create(component).toJSON(); + const { container: tree } = render(component); expect(tree).toMatchSnapshot(); }); }); diff --git a/src/payment/payment-methods/paypal/__snapshots__/PayPalButton.test.jsx.snap b/src/payment/payment-methods/paypal/__snapshots__/PayPalButton.test.jsx.snap index 899c5e5af..5cb4bdd8c 100644 --- a/src/payment/payment-methods/paypal/__snapshots__/PayPalButton.test.jsx.snap +++ b/src/payment/payment-methods/paypal/__snapshots__/PayPalButton.test.jsx.snap @@ -1,26 +1,30 @@ // Jest Snapshot v1, https://goo.gl/fbAQLP exports[`OrderDetails should render the button by default 1`] = ` - +
+ +
`; exports[`OrderDetails should render the button with a spinner when processing 1`] = ` - +
+ +
`; diff --git a/src/setupTest.js b/src/setupTest.js index 9c110b743..3a65fb810 100755 --- a/src/setupTest.js +++ b/src/setupTest.js @@ -2,12 +2,9 @@ import 'core-js/stable'; import 'regenerator-runtime/runtime'; -import Enzyme from 'enzyme'; -import Adapter from '@wojtekmaj/enzyme-adapter-react-17'; +import '@testing-library/jest-dom'; import { mergeConfig } from '@edx/frontend-platform'; -Enzyme.configure({ adapter: new Adapter() }); - mergeConfig({ CURRENCY_COOKIE_NAME: process.env.CURRENCY_COOKIE_NAME, SUPPORT_URL: process.env.SUPPORT_URL,