diff --git a/package.json b/package.json index 6725a48c..988cd75c 100644 --- a/package.json +++ b/package.json @@ -66,6 +66,7 @@ "eslint-plugin-react-hooks": "^4.3.0", "eslint-plugin-storybook": "^0.5.7", "js-yaml": "^4.1.0", + "markdown-link-check": "^3.13.7", "next-compose-plugins": "^2.2.1", "next-remote-watch": "^1.0.0", "next-sitemap": "^2.5.20", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index b81eed57..a6509c35 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -13,7 +13,7 @@ importers: version: 3.0.7(react@17.0.2) '@docsearch/react': specifier: '3' - version: 3.0.0(@algolia/client-search@4.13.0)(@types/react@17.0.39)(react-dom@17.0.2)(react@17.0.2) + version: 3.0.0(@algolia/client-search@4.13.0)(@types/react@17.0.39)(react-dom@17.0.2(react@17.0.2))(react@17.0.2) glob: specifier: ^8.0.1 version: 8.0.1 @@ -28,13 +28,13 @@ importers: version: 2.3.1(@babel/core@7.17.5) next: specifier: 12.3.4 - version: 12.3.4(@babel/core@7.17.5)(react-dom@17.0.2)(react@17.0.2) + version: 12.3.4(@babel/core@7.17.5)(react-dom@17.0.2(react@17.0.2))(react@17.0.2) next-linaria: specifier: ^0.11.0 - version: 0.11.0(linaria@2.3.1) + version: 0.11.0(linaria@2.3.1(@babel/core@7.17.5)) next-mdx-remote: specifier: ^4.0.2 - version: 4.0.2(react-dom@17.0.2)(react@17.0.2) + version: 4.0.2(react-dom@17.0.2(react@17.0.2))(react@17.0.2) react: specifier: 17.0.2 version: 17.0.2 @@ -80,25 +80,25 @@ importers: version: 12.1.5 '@react-theming/storybook-addon': specifier: ^1.1.5 - version: 1.1.5(@storybook/addons@6.4.19)(@storybook/react@6.4.19)(@storybook/theming@6.4.19)(react-dom@17.0.2)(react@17.0.2) + version: 1.1.5(@storybook/addons@6.4.19(react-dom@17.0.2(react@17.0.2))(react@17.0.2))(@storybook/react@6.4.19(@babel/core@7.17.5)(@types/react@17.0.39)(@types/webpack@4.41.32)(eslint@8.10.0)(react-dom@17.0.2(react@17.0.2))(react@17.0.2)(type-fest@0.20.2)(typescript@4.5.5)(webpack-hot-middleware@2.25.1))(@storybook/theming@6.4.19(react-dom@17.0.2(react@17.0.2))(react@17.0.2))(react-dom@17.0.2(react@17.0.2))(react@17.0.2) '@storybook/addon-actions': specifier: ^6.4.19 - version: 6.4.19(@types/react@17.0.39)(react-dom@17.0.2)(react@17.0.2) + version: 6.4.19(@types/react@17.0.39)(react-dom@17.0.2(react@17.0.2))(react@17.0.2) '@storybook/addon-essentials': specifier: ^6.4.19 - version: 6.4.19(@babel/core@7.17.5)(@storybook/react@6.4.19)(@types/react@17.0.39)(babel-loader@8.2.3)(eslint@8.10.0)(react-dom@17.0.2)(react@17.0.2)(typescript@4.5.5)(webpack@4.46.0) + version: 6.4.19(@babel/core@7.17.5)(@storybook/react@6.4.19(@babel/core@7.17.5)(@types/react@17.0.39)(@types/webpack@4.41.32)(eslint@8.10.0)(react-dom@17.0.2(react@17.0.2))(react@17.0.2)(type-fest@0.20.2)(typescript@4.5.5)(webpack-hot-middleware@2.25.1))(@types/react@17.0.39)(babel-loader@8.2.3(@babel/core@7.17.5)(webpack@4.46.0))(eslint@8.10.0)(react-dom@17.0.2(react@17.0.2))(react@17.0.2)(typescript@4.5.5)(webpack@4.46.0) '@storybook/addon-interactions': specifier: ^6.4.19 - version: 6.4.19(@types/react@17.0.39)(eslint@8.10.0)(react-dom@17.0.2)(react@17.0.2)(typescript@4.5.5) + version: 6.4.19(@types/react@17.0.39)(eslint@8.10.0)(react-dom@17.0.2(react@17.0.2))(react@17.0.2)(typescript@4.5.5) '@storybook/addon-links': specifier: ^6.4.19 - version: 6.4.19(react-dom@17.0.2)(react@17.0.2) + version: 6.4.19(react-dom@17.0.2(react@17.0.2))(react@17.0.2) '@storybook/react': specifier: ^6.4.19 - version: 6.4.19(@babel/core@7.17.5)(@types/react@17.0.39)(eslint@8.10.0)(react-dom@17.0.2)(react@17.0.2)(typescript@4.5.5) + version: 6.4.19(@babel/core@7.17.5)(@types/react@17.0.39)(@types/webpack@4.41.32)(eslint@8.10.0)(react-dom@17.0.2(react@17.0.2))(react@17.0.2)(type-fest@0.20.2)(typescript@4.5.5)(webpack-hot-middleware@2.25.1) '@storybook/testing-library': specifier: ^0.0.9 - version: 0.0.9(react-dom@17.0.2)(react@17.0.2) + version: 0.0.9(react-dom@17.0.2(react@17.0.2))(react@17.0.2) '@types/glob': specifier: ^8.1.0 version: 8.1.0 @@ -119,7 +119,7 @@ importers: version: 1.3.3 '@typescript-eslint/eslint-plugin': specifier: 5.61.0 - version: 5.61.0(@typescript-eslint/parser@5.61.0)(eslint@8.10.0)(typescript@4.5.5) + version: 5.61.0(@typescript-eslint/parser@5.61.0(eslint@8.10.0)(typescript@4.5.5))(eslint@8.10.0)(typescript@4.5.5) '@typescript-eslint/parser': specifier: 5.61.0 version: 5.61.0(eslint@8.10.0)(typescript@4.5.5) @@ -134,19 +134,19 @@ importers: version: 8.10.0 eslint-config-airbnb: specifier: ^19.0.4 - version: 19.0.4(eslint-plugin-import@2.25.4)(eslint-plugin-jsx-a11y@6.5.1)(eslint-plugin-react-hooks@4.3.0)(eslint-plugin-react@7.29.2)(eslint@8.10.0) + version: 19.0.4(eslint-plugin-import@2.25.4)(eslint-plugin-jsx-a11y@6.5.1(eslint@8.10.0))(eslint-plugin-react-hooks@4.3.0(eslint@8.10.0))(eslint-plugin-react@7.29.2(eslint@8.10.0))(eslint@8.10.0) eslint-config-airbnb-typescript: specifier: ^16.1.4 - version: 16.1.4(@typescript-eslint/eslint-plugin@5.61.0)(@typescript-eslint/parser@5.61.0)(eslint-plugin-import@2.25.4)(eslint@8.10.0) + version: 16.1.4(@typescript-eslint/eslint-plugin@5.61.0(@typescript-eslint/parser@5.61.0(eslint@8.10.0)(typescript@4.5.5))(eslint@8.10.0)(typescript@4.5.5))(@typescript-eslint/parser@5.61.0(eslint@8.10.0)(typescript@4.5.5))(eslint-plugin-import@2.25.4)(eslint@8.10.0) eslint-config-next: specifier: 12.1.0 - version: 12.1.0(eslint@8.10.0)(next@12.3.4)(typescript@4.5.5) + version: 12.1.0(eslint@8.10.0)(next@12.3.4(@babel/core@7.17.5)(react-dom@17.0.2(react@17.0.2))(react@17.0.2))(typescript@4.5.5) eslint-config-prettier: specifier: ^8.5.0 version: 8.5.0(eslint@8.10.0) eslint-plugin-prettier: specifier: ^4.0.0 - version: 4.0.0(eslint-config-prettier@8.5.0)(eslint@8.10.0)(prettier@2.4.1) + version: 4.0.0(eslint-config-prettier@8.5.0(eslint@8.10.0))(eslint@8.10.0)(prettier@2.4.1) eslint-plugin-react-hooks: specifier: ^4.3.0 version: 4.3.0(eslint@8.10.0) @@ -156,6 +156,9 @@ importers: js-yaml: specifier: ^4.1.0 version: 4.1.0 + markdown-link-check: + specifier: ^3.13.7 + version: 3.13.7 next-compose-plugins: specifier: ^2.2.1 version: 2.2.1 @@ -164,7 +167,7 @@ importers: version: 1.0.0 next-sitemap: specifier: ^2.5.20 - version: 2.5.20(next@12.3.4) + version: 2.5.20(next@12.3.4(@babel/core@7.17.5)(react-dom@17.0.2(react@17.0.2))(react@17.0.2)) prettier: specifier: 2.4.1 version: 2.4.1 @@ -1206,6 +1209,22 @@ packages: engines: {node: '>=10'} deprecated: This functionality has been moved to @npmcli/fs + '@oozcitak/dom@1.15.10': + resolution: {integrity: sha512-0JT29/LaxVgRcGKvHmSrUTEvZ8BXvZhGl2LASRUgHqDTC1M5g1pLmVv56IYNyt3bG2CUjDkc67wnyZC14pbQrQ==} + engines: {node: '>=8.0'} + + '@oozcitak/infra@1.0.8': + resolution: {integrity: sha512-JRAUc9VR6IGHOL7OGF+yrvs0LO8SlqGnPAMqyzOuFZPSZSXI7Xf2O9+awQPSMXgIWGtgUf/dA6Hs6X6ySEaWTg==} + engines: {node: '>=6.0'} + + '@oozcitak/url@1.0.4': + resolution: {integrity: sha512-kDcD8y+y3FCSOvnBI6HJgl00viO/nGbQoCINmQ0h98OhnGITrWR3bOGfwYCthgcrV8AnTJz8MzslTQbC3SOAmw==} + engines: {node: '>=8.0'} + + '@oozcitak/util@8.3.8': + resolution: {integrity: sha512-T8TbSnGsxo6TDBJx/Sgv/BlVJL3tshxZP7Aq5R1mSnM5OcHY2dQaxLMu2+E8u3gN0MLOzdjurqN4ZRVuzQycOQ==} + engines: {node: '>=8.0'} + '@pmmmwh/react-refresh-webpack-plugin@0.5.4': resolution: {integrity: sha512-zZbZeHQDnoTlt2AF+diQT0wsSXpvWiaIOZwBRdltNFhG1+I3ozyaw7U/nBiUwyJ0D+zwdXp0E3bWOl38Ag2BMw==} engines: {node: '>= 10.13'} @@ -1665,6 +1684,9 @@ packages: resolution: {integrity: sha512-RbzJvlNzmRq5c3O09UipeuXno4tA1FE6ikOjxZK0tuxVv3412l64l5t1W5pj4+rJq9vpkm/kwiR07aZXnsKPxw==} engines: {node: '>= 6'} + '@tootallnate/quickjs-emscripten@0.23.0': + resolution: {integrity: sha512-C5Mc6rdnsaJDjO3UpGW/CQTHtCKaYlScZTly4JIu97Jxo/odCiH0ITnDXSJPTOrEKk/ycSZ0AOgTmkDtkOsvIA==} + '@tsconfig/node10@1.0.8': resolution: {integrity: sha512-6XFfSQmMgq0CFLY1MslA/CPUfhIL919M1rMsa5lP2P097N2Wd1sSX0tx1u4olM16fLNhtHZpRhedZJphNJqmZg==} @@ -2051,6 +2073,10 @@ packages: resolution: {integrity: sha512-RZNwNclF7+MS/8bDg70amg32dyeZGZxiDuQmZxKLAlQjr3jGyLx+4Kkk58UO7D2QdgFIQCovuSuZESne6RG6XQ==} engines: {node: '>= 6.0.0'} + agent-base@7.1.3: + resolution: {integrity: sha512-jRR5wdylq8CkOe6hei19GGZnxM6rBGwFl3Bg0YItGDimvjGtAvdZk4Pu6Cl4u4Igsws4a1fd1Vq3ezrhn4KmFw==} + engines: {node: '>= 14'} + aggregate-error@3.1.0: resolution: {integrity: sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA==} engines: {node: '>=8'} @@ -2219,6 +2245,10 @@ packages: ast-types-flow@0.0.7: resolution: {integrity: sha512-eBvWn1lvIApYMhzQMsu9ciLfkBY499mFZlNqG+/9WR7PVlroQw0vG30cOQQbaKz3sCEc44TAOu2ykzqXSNnwag==} + ast-types@0.13.4: + resolution: {integrity: sha512-x1FCFnFifvYDDzTaLII71vG5uvDwgtmDTEVWAxrgeiR8VjMONcCXJx7E+USjDtHlwFmt9MysbqgF9b9Vjr6w+w==} + engines: {node: '>=4'} + ast-types@0.14.2: resolution: {integrity: sha512-O0yuUDnZeQDL+ncNGlJ78BiO4jnYI3bvMsD5prT0/nsgijG/LpNBIr63gTjVTNsiGkgQhiyCShTgxt8oXOrklA==} engines: {node: '>=4'} @@ -2230,6 +2260,9 @@ packages: async-each@1.0.3: resolution: {integrity: sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ==} + async@3.2.6: + resolution: {integrity: sha512-htCUDlxyyCLMgaM3xXg0C0LW2xqfuQ6p05pCEIsXuyQ+a1koYKTuBMzRNwmybfLgvJDMd0r1LTn4+E0Ti6C2AA==} + asynckit@0.4.0: resolution: {integrity: sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q==} @@ -2352,6 +2385,10 @@ packages: resolution: {integrity: sha512-5T6P4xPgpp0YDFvSWwEZ4NoE3aM4QBQXDzmVbraCkFj8zHM+mba8SyqB5DbZWyR7mYHo6Y7BdQo3MoA4m0TeQg==} engines: {node: '>=0.10.0'} + basic-ftp@5.0.5: + resolution: {integrity: sha512-4Bcg1P8xhUuqcii/S0Z9wiHIrQVPMermM1any+MX5GeGD7faD3/msQUDGLol9wOcz4/jbg/WJnGqoJF6LiBdtg==} + engines: {node: '>=10.0.0'} + batch-processor@1.0.0: resolution: {integrity: sha512-xoLQD8gmmR32MeuBHgH0Tzd5PuSZx71ZsbhVxOCRbgktZEPe4SQy7s9Z50uPp0F/f7iw2XmkHN2xkgbMfckMDA==} @@ -2545,6 +2582,10 @@ packages: resolution: {integrity: sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==} engines: {node: '>=10'} + chalk@5.4.1: + resolution: {integrity: sha512-zgVZuo2WcZgfUEmsn6eO3kINexW8RAE4maiQ8QNs8CtpPCSyMiYsULR3HQYkm3w8FIA3SberyMJMSldGsW+U3w==} + engines: {node: ^12.17.0 || ^14.13 || >=16.0.0} + character-entities-html4@1.1.4: resolution: {integrity: sha512-HRcDxZuZqMx3/a+qrzxdBKBPUpxWEq9xw2OPZ3a/174ihfrQKVsFhqtthBInFy1zZ9GgZyFXOatNujm8M+El3g==} @@ -2573,6 +2614,13 @@ packages: resolution: {integrity: sha512-Y4kiDb+AM4Ecy58YkuZrrSRJBDQdQ2L+NyS1vHHFtNtUjgutcZfx3yp1dAONI/oPaPmyGfCLx5CxL+zauIMyKQ==} engines: {node: '>=6'} + cheerio-select@2.1.0: + resolution: {integrity: sha512-9v9kG0LvzrlcungtnJtpGNxY+fzECQKhK4EGJX2vByejiMX84MFNQw4UxPJl3bFbTMw+Dfs37XaIkCwTZfLh4g==} + + cheerio@1.0.0: + resolution: {integrity: sha512-quS9HgjQpdaXOvsZz82Oz7uxtXiy6UIsIQcpBj7HRw2M63Skasm9qlDocAM7jNuaxdhpPU7c4kJN+gA5MCu4ww==} + engines: {node: '>=18.17'} + chokidar@2.1.8: resolution: {integrity: sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg==} deprecated: Chokidar 2 does not receive security updates since 2019. Upgrade to chokidar 3 with 15x fewer dependencies @@ -2695,6 +2743,10 @@ packages: comma-separated-tokens@2.0.2: resolution: {integrity: sha512-G5yTt3KQN4Yn7Yk4ed73hlZ1evrFKXeUW3086p3PRFNp7m2vIjI6Pg+Kgb+oyzhd9F2qdcoj67+y3SdxL5XWsg==} + commander@13.1.0: + resolution: {integrity: sha512-/rFeCpNJQbhSZjGVwO9RFV3xPqbnERS8MmIQzCtD/zl6gpJuV/bMLuN92oG3F7d8oDEHHRrujSXNUr8fpjntKw==} + engines: {node: '>=18'} + commander@2.20.3: resolution: {integrity: sha512-GpVkmM8vF2vQUkj2LvZmD35JxeJOLCwJ9cUkugyk2nuhbv3+mJvpLYYt+0+USMxE+oj+ey/lJEnhZw75x/OMcQ==} @@ -2849,6 +2901,9 @@ packages: css-select@4.2.1: resolution: {integrity: sha512-/aUslKhzkTNCQUB2qTX84lVmfia9NyjP3WpDGtj/WxhwBzWBYUV3DgUpurHTme8UTPcPlAD1DJ+b0nN/t50zDQ==} + css-select@5.1.0: + resolution: {integrity: sha512-nwoRF1rvRRnnCqqY7updORDsuqKzqYJ28+oSMaJMMgOauh3fvwHqMS7EZpIPqK8GL+g9mKxF1vP/ZjSeNjEVHg==} + css-selector-parser@1.4.1: resolution: {integrity: sha512-HYPSb7y/Z7BNDCOrakL4raGO2zltZkbeXyAd6Tg9obzix6QhzxCotdBl6VT0Dv4vZfJGVz3WL/xaEI9Ly3ul0g==} @@ -2856,6 +2911,10 @@ packages: resolution: {integrity: sha512-arSMRWIIFY0hV8pIxZMEfmMI47Wj3R/aWpZDDxWYCPEiOMv6tfOrnpDtgxBYPEQD4V0Y/958+1TdC3iWTFcUPw==} engines: {node: '>= 6'} + css-what@6.1.0: + resolution: {integrity: sha512-HTUrgRJ7r4dsZKU6GjmpfRK1O76h97Z8MfS1G0FozR+oF2kG6Vfe8JE6zwrkbxigziPHinCJ+gCPjA9EaBDtRw==} + engines: {node: '>= 6'} + cssesc@3.0.0: resolution: {integrity: sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==} engines: {node: '>=4'} @@ -2883,6 +2942,10 @@ packages: damerau-levenshtein@1.0.8: resolution: {integrity: sha512-sdQSFB7+llfUcQHUQO3+B8ERRj0Oa4w9POWMI/puGtuf7gFywGmkaLCElnudfTiKZV+NvHqL0ifzdrI8Ro7ESA==} + data-uri-to-buffer@6.0.2: + resolution: {integrity: sha512-7hvf7/GW8e86rW0ptuwS3OcBGDjIi6SZva7hCyWC0yYry2cOPmLIjXAUHI6DK2HsnwJd9ifmt57i8eV2n4YNpw==} + engines: {node: '>= 14'} + data-urls@2.0.0: resolution: {integrity: sha512-X5eWTSXO/BJmpdIKCRuKUgSCgAN0OwliVK3yPKbwIWU1Tdw5BRajxlzMidvh+gwko9AfQ9zIj52pzF91Q3YAvQ==} engines: {node: '>=10'} @@ -2962,6 +3025,10 @@ packages: resolution: {integrity: sha512-jwK2UV4cnPpbcG7+VRARKTZPUWowwXA8bzH5NP6ud0oeAxyYPuGZUAC7hMugpCdz4BeSZl2Dl9k66CHJ/46ZYQ==} engines: {node: '>=0.10.0'} + degenerator@5.0.1: + resolution: {integrity: sha512-TllpMR/t0M5sqCXfj85i4XaAzxmS5tVA16dqvdkMwGmzI+dXLXnw3J+3Vdv7VKw+ThlTMboK6i9rnZ6Nntj5CQ==} + engines: {node: '>= 14'} + delayed-stream@1.0.0: resolution: {integrity: sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ==} engines: {node: '>=0.4.0'} @@ -3035,6 +3102,9 @@ packages: dom-serializer@1.3.2: resolution: {integrity: sha512-5c54Bk5Dw4qAxNOI1pFEizPSjVsx5+bpJKmL2kPn8JhBUq2q09tTCa3mjijun2NfK78NMouDYNMBkOrPZiS+ig==} + dom-serializer@2.0.0: + resolution: {integrity: sha512-wIkAryiqt/nV5EQKqQpo3SToSOV9J0DnbJqwK7Wv/Trc92zIAYZ4FlMu+JPFW1DfGFt81ZTCGgDEabffXeLyJg==} + dom-walk@0.1.2: resolution: {integrity: sha512-6QvTW9mrGeIegrFXdtQi9pk7O/nSK6lSdXW2eqUspN5LWD7UTji2Fqw5V2YLjBpHEoU9Xl/eUWNpDeZvoyOv2w==} @@ -3045,6 +3115,9 @@ packages: domelementtype@2.2.0: resolution: {integrity: sha512-DtBMo82pv1dFtUmHyr48beiuq792Sxohr+8Hm9zoxklYPfa6n0Z3Byjj2IV7bmr2IyqClnqEQhfgHJJ5QF0R5A==} + domelementtype@2.3.0: + resolution: {integrity: sha512-OLETBj6w0OsagBwdXnPdN0cnMfF9opN69co+7ZrbfPGrdpPVNBUj02spi6B1N7wChLQiPn4CSH/zJvXw56gmHw==} + domexception@2.0.1: resolution: {integrity: sha512-yxJ2mFy/sibVQlu5qHjOkf9J3K6zgmCxgJ94u2EdvDOV09H+32LtRswEcUsmUWN72pVLOEnTSRaIVVzVQgS0dg==} engines: {node: '>=8'} @@ -3053,9 +3126,16 @@ packages: resolution: {integrity: sha512-fC0aXNQXqKSFTr2wDNZDhsEYjCiYsDWl3D01kwt25hm1YIPyDGHvvi3rw+PLqHAl/m71MaiF7d5zvBr0p5UB2g==} engines: {node: '>= 4'} + domhandler@5.0.3: + resolution: {integrity: sha512-cgwlv/1iFQiFnU96XXgROh8xTeetsnJiDsTc7TYCLFd9+/WNkIqPTxiM/8pSd8VIrhXGTf1Ny1q1hquVqDJB5w==} + engines: {node: '>= 4'} + domutils@2.8.0: resolution: {integrity: sha512-w96Cjofp72M5IIhpjgobBimYEfoPjx1Vx0BSX9P30WBdZW2WIKU0T1Bd0kz2eNZ9ikjKgHbEyKx8BB6H1L3h3A==} + domutils@3.2.2: + resolution: {integrity: sha512-6kZKyUajlDuqlHKVX1w7gyslj9MPIXzIFiz/rGu35uC1wMi+kMhQwGhl4lt9unC9Vb9INnY9Z3/ZA3+FhASLaw==} + dot-case@3.0.4: resolution: {integrity: sha512-Kv5nKlh6yRrdrGvxeJ2e5y2eRUpkUosIW4A2AS38zwSz27zu7ufDwQPi5Jhs3XAlGNetl3bmnGhQsMtkKJnj3w==} @@ -3112,6 +3192,9 @@ packages: resolution: {integrity: sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==} engines: {node: '>= 0.8'} + encoding-sniffer@0.2.0: + resolution: {integrity: sha512-ju7Wq1kg04I3HtiYIOrUrdfdDvkyO9s5XM8QAj/bN61Yo/Vb4vgJxy5vi4Yxk01gWHbrofpPtpxM8bKger9jhg==} + end-of-stream@1.4.4: resolution: {integrity: sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q==} @@ -3125,6 +3208,14 @@ packages: entities@2.2.0: resolution: {integrity: sha512-p92if5Nz619I0w+akJrLZH0MX0Pb5DX39XOwQTtXSdQQOaYH03S1uIQp4mhOZtAXrxq4ViO67YTiLBo2638o9A==} + entities@4.5.0: + resolution: {integrity: sha512-V0hjH4dGPh9Ao5p0MoRY6BVqtwCjhz6vI5LT8AJ55H+4g9/4vbHx1I54fS0XuclLhDHArPQCiMjDxjaL8fPxhw==} + engines: {node: '>=0.12'} + + entities@6.0.0: + resolution: {integrity: sha512-aKstq2TDOndCn4diEyp9Uq/Flu2i1GlLkc6XIDQSDMuaFE3OPW5OphLCyQ5SpSJZTb4reN+kTcYru5yIfXoRPw==} + engines: {node: '>=0.12'} + errno@0.1.8: resolution: {integrity: sha512-dJ6oBr5SQ1VSd9qkk7ByRgb/1SH4JZjCHSW/mr63/QcXO9zLVxvJ6Oy13nio03rxpSnVDDjFor75SjVeZWPW/A==} hasBin: true @@ -3180,6 +3271,11 @@ packages: engines: {node: '>=6.0'} hasBin: true + escodegen@2.1.0: + resolution: {integrity: sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w==} + engines: {node: '>=6.0'} + hasBin: true + eslint-config-airbnb-base@15.0.0: resolution: {integrity: sha512-xaX3z4ZZIcFLvh2oUNvcX5oEofXda7giYmuplVxoOg5A7EXJMrUyqRgR+mhDhPK8LZ4PttFOBvCYDbX3sUoUig==} engines: {node: ^10.12.0 || >=12.0.0} @@ -3625,7 +3721,7 @@ packages: resolution: {integrity: sha512-oWb1Z6mkHIskLzEJ/XWX0srkpkTQ7vaopMQkyaEIoq0fmtFVxOthb8cCxeT+p3ynTdkk/RZwbgG4brR5BeWECw==} engines: {node: '>= 4.0'} os: [darwin] - deprecated: The v1 package contains DANGEROUS / INSECURE binaries. Upgrade to safe fsevents v2 + deprecated: Upgrade to fsevents v2 to mitigate potential security issues fsevents@2.3.2: resolution: {integrity: sha512-xiqMQR4xAeHTuB9uWm+fFRcIOgKBMiOBP+eXiyT7jsgVCq1bkVygt00oASowB7EdtpOHaaPgKt812P9ab+DDKA==} @@ -3676,6 +3772,10 @@ packages: resolution: {integrity: sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw==} engines: {node: '>= 0.4'} + get-uri@6.0.4: + resolution: {integrity: sha512-E1b1lFFLvLgak2whF2xDBcOy6NLVGZBqqjJjsIhvopKfWWEi64pLVTWWehV8KlLerZkfNTA95sTe2OdJKm1OzQ==} + engines: {node: '>= 14'} + get-value@2.0.6: resolution: {integrity: sha512-Ln0UQDlxH1BapMu3GPtf7CuYNwRZf2gwCuPqbyG6pB8WfmFpzqcy4xtAaAMUhnNqjMKTiCPZG2oMT3YSx8U2NA==} engines: {node: '>=0.10.0'} @@ -3882,6 +3982,9 @@ packages: html-escaper@2.0.2: resolution: {integrity: sha512-H2iMtd0I4Mt5eYiapRdIDjp+XzelXQ0tFE4JS7YFwFevXXMmOp9myNrUvCg0D6ws8iqkRPBfKHgbwig1SmlLfg==} + html-link-extractor@1.0.5: + resolution: {integrity: sha512-ADd49pudM157uWHwHQPUSX4ssMsvR/yHIswOR5CUfBdK9g9ZYGMhVSE6KZVHJ6kCkR0gH4htsfzU6zECDNVwyw==} + html-minifier-terser@5.1.1: resolution: {integrity: sha512-ZPr5MNObqnV/T9akshPKbVgyOqLmy+Bxo7juKCfTfnjNniTAMdy4hz21YQqoofMBJD2kdREaqPPdThoR78Tgxg==} engines: {node: '>=6'} @@ -3903,6 +4006,9 @@ packages: htmlparser2@6.1.0: resolution: {integrity: sha512-gyyPk6rgonLFEDGoeRgQNaEUvdJ4ktTmmUh/h2t7s+M8oPpIPxgNACWa+6ESR57kXstwqPiCut0V8NRpcwgU7A==} + htmlparser2@9.1.0: + resolution: {integrity: sha512-5zfg6mHUoaer/97TxnGpxmbR7zJtPwIYFMZ/H5ucTlPZhKvtum05yiPK3Mgai3a0DyVxv7qYqoweaEd2nrYQzQ==} + http-errors@1.8.1: resolution: {integrity: sha512-Kpk9Sm7NmI+RHhnj6OIWDI1d6fIoFAtFt9RLaTMRlg/8w49juAStsrBgp0Dp4OdxdVbRIeKhtCUvoi/RuAhO4g==} engines: {node: '>= 0.6'} @@ -3915,6 +4021,10 @@ packages: resolution: {integrity: sha512-k0zdNgqWTGA6aeIRVpvfVob4fL52dTfaehylg0Y4UvSySvOq/Y+BOyPrgpUrA7HylqvU8vIZGsRuXmspskV0Tg==} engines: {node: '>= 6'} + http-proxy-agent@7.0.2: + resolution: {integrity: sha512-T1gkAiYYDWYx3V5Bmyu7HcfcvL7mUrTWiM6yOfa3PIphViJ/gFPbvidQ+veqSOHci/PxBcDabeUNCzpOODJZig==} + engines: {node: '>= 14'} + https-browserify@1.0.0: resolution: {integrity: sha512-J+FkSdyD+0mA0N+81tMotaRMfSL9SGi+xpD3T6YApKsc3bGSXJlfXri3VyFOeYkfLRQisDk1W+jIFFKBeUBbBg==} @@ -3922,10 +4032,18 @@ packages: resolution: {integrity: sha512-dFcAjpTQFgoLMzC2VwU+C/CbS7uRL0lWmxDITmqm7C+7F0Odmj6s9l6alZc6AELXhrnggM2CeWSXHGOdX2YtwA==} engines: {node: '>= 6'} + https-proxy-agent@7.0.6: + resolution: {integrity: sha512-vK9P5/iUfdl95AI+JVyUuIcVtd4ofvtrOr3HNtM2yxC9bnMbEdp3x01OhQNnjb8IJYi38VlTE3mBXwcfvywuSw==} + engines: {node: '>= 14'} + iconv-lite@0.4.24: resolution: {integrity: sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==} engines: {node: '>=0.10.0'} + iconv-lite@0.6.3: + resolution: {integrity: sha512-4fCk79wshMdzMp2rH06qWrJE4iolqLhCUH+OiuIgU++RB0+94NlDL81atO7GX55uUKueo0txHNtvEyI6D7WdMw==} + engines: {node: '>=0.10.0'} + icss-utils@4.1.1: resolution: {integrity: sha512-4aFq7wvWyMHKgxsH8QQtGpvbASCf+eM3wPRLI6R+MgAnTCZ6STYsRvttLvRWK0Nfif5piF394St3HeJDaljGPA==} engines: {node: '>= 6'} @@ -3989,6 +4107,10 @@ packages: invariant@2.2.4: resolution: {integrity: sha512-phJfQVBuaJM5raOpJjSfkiD6BpbCE4Ns//LaXl6wGYtUBY83nWS6Rf9tXm2e8VaK60JEjYldbPif/A2B1C2gNA==} + ip-address@9.0.5: + resolution: {integrity: sha512-zHtQzGojZXTwZTHQqra+ETKd4Sn3vgi7uBmlPoXVWZqYvuKmtI0l/VZTjqGmJY9x88GGOaZ9+G9ES8hC4T4X8g==} + engines: {node: '>= 12'} + ip@1.1.5: resolution: {integrity: sha512-rBtCAQAJm8A110nbwn6YdveUnuZH3WrC36IwkRXxDnq53JvXA2NVQvB7IHyKomxK1MJ4VDNw3UtFDdXQ+AvLYA==} @@ -4000,6 +4122,10 @@ packages: resolution: {integrity: sha512-opmNIX7uFnS96NtPmhWQgQx6/NYFgsUXYMllcfzwWKUMwfo8kku1TvE6hkNcH+Q1ts5cMVrsY7j0bxXQDciu9Q==} engines: {node: '>=8'} + is-absolute-url@4.0.1: + resolution: {integrity: sha512-/51/TKE88Lmm7Gc4/8btclNXWS+g50wXhYJq8HWIBAGUBnoAdRu1aXeh364t/O7wXDAcTJDP8PNuNKWUDWie+A==} + engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} + is-accessor-descriptor@0.1.6: resolution: {integrity: sha512-e1BM1qnDbMRG3ll2U9dSK0UMHuWOs3pY3AtcFsmvwPtKL3MML/Q86i+GilLfvqEs4GW+ExB91tQ3Ig9noDIZ+A==} engines: {node: '>=0.10.0'} @@ -4193,6 +4319,10 @@ packages: resolution: {integrity: sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg==} engines: {node: '>= 0.4'} + is-relative-url@4.0.0: + resolution: {integrity: sha512-PkzoL1qKAYXNFct5IKdKRH/iBQou/oCC85QhXj6WKtUQBliZ4Yfd3Zk27RHu9KQG8r6zgvAA2AQKC9p+rqTszg==} + engines: {node: '>=14.16'} + is-set@2.0.2: resolution: {integrity: sha512-+2cnTEZeY5z/iXGbLhPrOAaK/Mau5k5eXq9j14CpRTftq0pAJu2MwVRSZhyZWBzx3o6X795Lz6Bpb6R0GKf37g==} @@ -4330,6 +4460,9 @@ packages: resolution: {integrity: sha512-wpxZs9NoxZaJESJGIZTyDEaYpl0FKSA+FB9aJiyemKhMwkxQg63h4T1KJgUGHpTqPDNRcmmYLugrRjJlBtWvRA==} hasBin: true + jsbn@1.1.0: + resolution: {integrity: sha512-4bYVV3aAMtDTTu4+xsDYa6sy9GyJ69/amsu9sYF2zqjiEoZA5xJi3BrfX3uY+/IekIu7MwdObdbDWpoZdBv3/A==} + jsdom@16.7.0: resolution: {integrity: sha512-u9Smc2G1USStM+s/x1ru5Sxrl6mPYCbByG1U/hUmqaVsm4tbNyS7CicOSRyuGQYZhTu0h84qkZZQ/I+dzizSVw==} engines: {node: '>=10'} @@ -4441,6 +4574,9 @@ packages: lines-and-columns@1.2.4: resolution: {integrity: sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==} + link-check@5.4.0: + resolution: {integrity: sha512-0Pf4xBVUnwJdbDgpBlhHNmWDtbVjHTpIFs+JaBuIsC9PKRxjv4KMGCO2Gc8lkVnqMf9B/yaNY+9zmMlO5MyToQ==} + loader-runner@2.4.0: resolution: {integrity: sha512-Jsmr89RcXGIwivFY21FcRrisYZfvLMTWx5kOLc+JTxtpBOG6xML0vzbc6SEQG2FO9/4Fc3wW4LVcB5DmGflaRw==} engines: {node: '>=4.3.0 <5.0.0 || >=5.10'} @@ -4517,6 +4653,10 @@ packages: resolution: {integrity: sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA==} engines: {node: '>=10'} + lru-cache@7.18.3: + resolution: {integrity: sha512-jumlc0BIUrS3qJGgIkWZsyfAM7NCWiBcCDhnd+3NNM5KbBmLTgHVfWBcg6W+rLUsIpzpERPsvwUP7CckAQSOoA==} + engines: {node: '>=12'} + lz-string@1.4.4: resolution: {integrity: sha512-0ckx7ZHRPqb0oUm8zNr+90mtf9DQB60H1wMCjBtfi62Kl3a7JbHob6gA2bC+xRvZoOL+1hzUK8jeuEIQE8svEQ==} hasBin: true @@ -4553,6 +4693,13 @@ packages: resolution: {integrity: sha512-WWC0ZuMzCyDHYCasEGs4IPvLyTGftYwh6wIEOULOF0HXcqZlhwRzrK0w2VUlxWA98xnvb/jszw4ZSkJ6ADpM6Q==} engines: {node: '>=0.10.0'} + markdown-link-check@3.13.7: + resolution: {integrity: sha512-Btn3HU8s2Uyh1ZfzmyZEkp64zp2+RAjwfQt1u4swq2Xa6w37OW0T2inQZrkSNVxDSa2jSN2YYhw/JkAp5jF1PQ==} + hasBin: true + + markdown-link-extractor@4.0.2: + resolution: {integrity: sha512-5cUOu4Vwx1wenJgxaudsJ8xwLUMN7747yDJX3V/L7+gi3e4MsCm7w5nbrDQQy8nEfnl4r5NV3pDXMAjhGXYXAw==} + markdown-table@2.0.0: resolution: {integrity: sha512-Ezda85ToJUBhM6WGaG6veasyym+Tbs3cMAw/ZhOPqXiYsr0jgocBV3j3nx+4lk47plLlIqjwuTm/ywVI+zjJ/A==} @@ -4565,6 +4712,11 @@ packages: peerDependencies: react: '>= 0.14.0' + marked@12.0.2: + resolution: {integrity: sha512-qXUm7e/YKFoqFPYPa3Ukg9xlI5cyAtGmyEIzMfW//m6kXwCy2Ps9DYf5ioijFKQ8qyuscrHoY04iJGctu2Kg0Q==} + engines: {node: '>= 18'} + hasBin: true + material-colors@1.2.6: resolution: {integrity: sha512-6qE4B9deFBIa9YSpOc9O0Sgc43zTeVYbgDT5veRKSlB2+ZuHNoVVxA1L/ckMUayV9Ay9y7Z/SZCLcGteW9i7bg==} @@ -4926,6 +5078,11 @@ packages: nearest-color@0.4.4: resolution: {integrity: sha512-orhcaIORC10tf41Ld2wwlcC+FaAavHG87JHWB3eHH5p7v2k9Tzym2XNEZzLAm5YJwGv6Q38WWc7SOb+Qfu/4NQ==} + needle@3.3.1: + resolution: {integrity: sha512-6k0YULvhpw+RoLNiQCRKOl09Rv1dPLr8hHnVjHqdolKwDrdNyk+Hmrthi4lIGPPz3r39dLx0hsF5s40sZ3Us4Q==} + engines: {node: '>= 4.4.x'} + hasBin: true + negotiator@0.6.3: resolution: {integrity: sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==} engines: {node: '>= 0.6'} @@ -4936,6 +5093,10 @@ packages: nested-error-stacks@2.1.0: resolution: {integrity: sha512-AO81vsIO1k1sM4Zrd6Hu7regmJN1NSiAja10gc4bX3F0wd+9rQmcuHQaHVQCYIEC8iFXnE+mavh23GOt7wBgug==} + netmask@2.0.2: + resolution: {integrity: sha512-dBpDMdxv9Irdq66304OLfEmQ9tbNRFnFTuZiLo+bD+r332bBmMJ8GBLXklIXXgxd3+v9+KUnZaUR5PJMa75Gsg==} + engines: {node: '>= 0.4.0'} + next-compose-plugins@2.2.1: resolution: {integrity: sha512-OjJ+fV15FXO2uQXQagLD4C0abYErBjyjE0I0FHpOEIB8upw0hg1ldFP6cqHTJBH1cZqy96OeR3u1dJ+Ez2D4Bg==} @@ -4990,6 +5151,10 @@ packages: resolution: {integrity: sha512-tmPX422rYgofd4epzrNoOXiE8XFZYOcCq1vD7MAXCDO+O+zndlA2ztdKKMa+EeuBG5tHETpr4ml4RGgpqDCCAg==} engines: {node: '>= 0.10.5'} + node-email-verifier@2.0.0: + resolution: {integrity: sha512-AHcppjOH2KT0mxakrxFMOMjV/gOVMRpYvnJUkNfgF9oJ3INdVmqcMFJ5TlM8elpTPwt6A7bSp1IMnnWcxGom/Q==} + engines: {node: '>=16.0.0'} + node-fetch@2.6.7: resolution: {integrity: sha512-ZjMPFEfVx5j+y2yF35Kzx5sF7kDzxuDj6ziH4FFbOp87zKDZNx8yExJIb05OGF4Nlt9IHFIMBkRl41VdvcNdbQ==} engines: {node: 4.x || >=6.0.0} @@ -5197,6 +5362,14 @@ packages: resolution: {integrity: sha512-R4nPAVTAU0B9D35/Gk3uJf/7XYbQcyohSKdvAxIRSNghFl4e71hVoGnBNQz9cWaXxO2I10KTC+3jMdvvoKw6dQ==} engines: {node: '>=6'} + pac-proxy-agent@7.2.0: + resolution: {integrity: sha512-TEB8ESquiLMc0lV8vcd5Ql/JAKAoyzHFXaStwjkzpOpC5Yv+pIzLfHvjTSdf3vpa2bMiUQrg9i6276yn8666aA==} + engines: {node: '>= 14'} + + pac-resolver@7.0.1: + resolution: {integrity: sha512-5NPgf87AT2STgwa2ntRMr45jTKrYBGkVU36yT0ig/n/GMAa3oPqhZfIQ2kMEimReg0+t9kZViDVZ83qfVUlckg==} + engines: {node: '>= 14'} + pako@1.0.11: resolution: {integrity: sha512-4hLB8Py4zZce5s4yd9XzopqwVv/yGNhV1Bl8NTmCq1763HeK2+EwVTv+leGeL13Dnh2wfbqowVPXCIO0z4taYw==} @@ -5233,9 +5406,18 @@ packages: parse5-htmlparser2-tree-adapter@6.0.1: resolution: {integrity: sha512-qPuWvbLgvDGilKc5BoicRovlT4MtYT6JfJyBOMDsKoiT+GiuP5qyrPCnR9HcPECIJJmZh5jRndyNThnhhb/vlA==} + parse5-htmlparser2-tree-adapter@7.1.0: + resolution: {integrity: sha512-ruw5xyKs6lrpo9x9rCZqZZnIUntICjQAd0Wsmp396Ul9lN/h+ifgVV1x1gZHi8euej6wTfpqX8j+BFQxF0NS/g==} + + parse5-parser-stream@7.1.2: + resolution: {integrity: sha512-JyeQc9iwFLn5TbvvqACIF/VXG6abODeB3Fwmv/TGdLk2LfbWkaySGY72at4+Ty7EkPZj854u4CrICqNk2qIbow==} + parse5@6.0.1: resolution: {integrity: sha512-Ofn/CTFzRGTTxwpNEs9PP93gXShHcTq255nzRYSKe8AkVpZY7e1fpmTfOyoIvjP5HG7Z2ZM7VS9PPhQGW2pOpw==} + parse5@7.3.0: + resolution: {integrity: sha512-IInvU7fabl34qmi9gY8XOVxhYyMyuH2xUNpb2q8/Y+7552KlejkRvqvD19nMoUW/uQGGbqNpA6Tufu5FL5BZgw==} + parseurl@1.3.3: resolution: {integrity: sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==} engines: {node: '>= 0.8'} @@ -5428,6 +5610,10 @@ packages: resolution: {integrity: sha512-cdGef/drWFoydD1JsMzuFf8100nZl+GT+yacc2bEced5f9Rjk4z+WtFUTBu9PhOi9j/jfmBPu0mMEY4wIdAF8A==} engines: {node: '>= 0.6.0'} + progress@2.0.3: + resolution: {integrity: sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA==} + engines: {node: '>=0.4.0'} + promise-inflight@1.0.1: resolution: {integrity: sha512-6zWPyEOFaQBJYcGMHBKTKJ3u6TBsnMFOIZSa6ce1e/ZrrsOlnHRHbabMjLiBYKp+n44X9eUI6VUPaukCXHuG4g==} peerDependencies: @@ -5464,6 +5650,13 @@ packages: resolution: {integrity: sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==} engines: {node: '>= 0.10'} + proxy-agent@6.5.0: + resolution: {integrity: sha512-TmatMXdr2KlRiA2CyDu8GqR8EjahTG3aY3nXjdzFyoZbmB8hrBsTyMezhULIXKnC0jpfjlmiZ3+EaCzoInSu/A==} + engines: {node: '>= 14'} + + proxy-from-env@1.1.0: + resolution: {integrity: sha512-D+zkORCbA9f1tdWRK0RaCR3GPv50cMxcrz4X8k5LTSUD1Dkw47mKJEZQNunItRTkWwgtaUSo1RVFRIG9ZXiFYg==} + prr@1.0.1: resolution: {integrity: sha512-yPw4Sng1gWghHQWj0B3ZggWUm4qVbPwPFcRG8KyxiU7J2OHFSoEHKS+EZ3fv5l1t9CyCiop6l/ZYeWbrgoQejw==} @@ -5907,6 +6100,9 @@ packages: deprecated: some dependency vulnerabilities fixed, support for node < 10 dropped, and newer ECMAScript syntax/features added hasBin: true + sax@1.4.1: + resolution: {integrity: sha512-+aWOz7yVScEGoKNd4PA10LZ8sk0A/z5+nXQG5giUO5rprX9jgYsTdov9qCchZiPIZezbZH+jRut8nPodFAX4Jg==} + saxes@5.0.1: resolution: {integrity: sha512-5LBh1Tls8c9xgGjw3QrMwETmTMVk0oFgvrFSvWx62llR2hcEInrKNZ2GZCCuuy2lvWrdl5jhbpeqc5hRYKFOcw==} engines: {node: '>=10'} @@ -6033,6 +6229,10 @@ packages: resolution: {integrity: sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q==} engines: {node: '>=8'} + smart-buffer@4.2.0: + resolution: {integrity: sha512-94hK0Hh8rPqQl2xXc3HsaBoOXKV20MToPkcXvwbISWLEs+64sBq5kFgn2kJDHb1Pry9yrP0dxrCI9RRci7RXKg==} + engines: {node: '>= 6.0.0', npm: '>= 3.0.0'} + snapdragon-node@2.1.1: resolution: {integrity: sha512-O27l4xaMYt/RSQ5TR3vpWCAB5Kb/czIcqUFOM/C4fYcLnbZUc1PkjTAMjof2pBWaSTwOUd6qUHcFGVGj7aIwnw==} engines: {node: '>=0.10.0'} @@ -6045,6 +6245,14 @@ packages: resolution: {integrity: sha512-FtyOnWN/wCHTVXOMwvSv26d+ko5vWlIDD6zoUJ7LW8vh+ZBC8QdljveRP+crNrtBwioEUWy/4dMtbBjA4ioNlg==} engines: {node: '>=0.10.0'} + socks-proxy-agent@8.0.5: + resolution: {integrity: sha512-HehCEsotFqbPW9sJ8WVYB6UbmIMv7kUUORIF2Nncq4VQvBfNBLibW9YZR5dlYCSUhwcD628pRllm7n+E+YTzJw==} + engines: {node: '>= 14'} + + socks@2.8.4: + resolution: {integrity: sha512-D3YaD0aRxR3mEcqnidIs7ReYJFVzWdd6fXJYUM8ixcQcJRGTka/b3saV0KflYhyVJXKhb947GndU35SxYNResQ==} + engines: {node: '>= 10.0.0', npm: '>= 3.0.0'} + source-list-map@2.0.1: resolution: {integrity: sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw==} @@ -6100,6 +6308,9 @@ packages: sprintf-js@1.0.3: resolution: {integrity: sha512-D9cPgkvLlV3t3IzL0D0YLvGA9Ahk4PcvVwUbN0dSGr1aP0Nrt4AEnTUbuGvquEC0mA64Gqt1fzirlRs5ibXx8g==} + sprintf-js@1.1.3: + resolution: {integrity: sha512-Oo+0REFV59/rz3gfJNKQiBlwfHaSESl1pcGyABQsnnIfWOFt6JNj5gCog2U6MLZ//IGYD+nA8nI+mTShREReaA==} + ssri@6.0.2: resolution: {integrity: sha512-cepbSq/neFK7xB6A50KHN0xHDotYzq58wWCa5LeWqnPrHG8GzfEjO/4O8kpmcGW+oaxkvhEJCWgbgNk4/ZV93Q==} @@ -6473,6 +6684,10 @@ packages: resolution: {integrity: sha512-a4PDLQgLTPHVzOK+x3F79/M4GtyYPl+aX9AAK7aQxpwxDwCqkeZCScy7Gk5kWT3JtdFq1uhO3uZJdLtHI4dK9A==} engines: {node: '>=14.0'} + undici@6.21.3: + resolution: {integrity: sha512-gBLkYIlEnSp8pFbT64yFgGE6UIB9tAkhukC23PmMDCe5Nd+cRqKxSjw5y54MK2AZMgZfJWMaNE4nYUHgi1XEOw==} + engines: {node: '>=18.17'} + unfetch@4.2.0: resolution: {integrity: sha512-F9p7yYCn6cIW9El1zi0HI6vqpeIvBsr3dSuRO6Xuppb1u5rXpCPmMvLSyECLhybr9isec8Ohl0hPekMVrEinDA==} @@ -6698,6 +6913,10 @@ packages: validate-npm-package-license@3.0.4: resolution: {integrity: sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew==} + validator@13.15.15: + resolution: {integrity: sha512-BgWVbCI72aIQy937xbawcs+hrVaN/CZ2UwutgaJ36hGqRrLNM+f5LUT/YPRbo8IV/ASeFzXszezV+y2+rq3l8A==} + engines: {node: '>= 0.10'} + vary@1.1.2: resolution: {integrity: sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==} engines: {node: '>= 0.8'} @@ -6807,9 +7026,17 @@ packages: whatwg-encoding@1.0.5: resolution: {integrity: sha512-b5lim54JOPN9HtzvK9HFXvBma/rnfFeqsic0hSpjtDbVxR3dJKLc+KB4V6GgiGOvl7CY/KNh8rxSo9DKQrnUEw==} + whatwg-encoding@3.1.1: + resolution: {integrity: sha512-6qN4hJdMwfYBtE3YBTTHhoeuUrDBPZmbQaxWAqSALV/MeEnR5z1xd8UKud2RAkFoPkmB+hli1TZSnyi84xz1vQ==} + engines: {node: '>=18'} + whatwg-mimetype@2.3.0: resolution: {integrity: sha512-M4yMwr6mAnQz76TbJm914+gPpB/nCwvZbJU28cUD6dR004SAxDLOOSUaB1JDRqLtaOV/vi0IC5lEAGFgrjGv/g==} + whatwg-mimetype@4.0.0: + resolution: {integrity: sha512-QaKxh0eNIi2mE9p2vEdzfagOKHCcj1pJ56EEHGQOVxp8r9/iszLUUV7v89x9O1p/T+NlTM5W7jW6+cz4Fq1YVg==} + engines: {node: '>=18'} + whatwg-url@5.0.0: resolution: {integrity: sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw==} @@ -6900,6 +7127,10 @@ packages: xml-name-validator@3.0.0: resolution: {integrity: sha512-A5CUptxDsvxKJEU3yO6DuWBSJz/qizqzJKOMIfUJHETbBw/sFaDxgd6fxm1ewUaM0jZ444Fc5vC5ROYurg/4Pw==} + xmlbuilder2@3.1.1: + resolution: {integrity: sha512-WCSfbfZnQDdLQLiMdGUQpMxxckeQ4oZNMNhLVkcekTu7xhD4tuUDyAPoY8CwXvBYE6LwBHd6QW2WZXlOWr1vCw==} + engines: {node: '>=12.0'} + xmlchars@2.2.0: resolution: {integrity: sha512-JZnDKK8B0RCDw84FNdDAIpZK+JuJw+s7Lz8nksI7SIuU3UXJJslUthsi+uWBUYOwPFwW7W7PRLRfUKpxjtjFCw==} @@ -7949,7 +8180,7 @@ snapshots: '@docsearch/css@3.0.0': {} - '@docsearch/react@3.0.0(@algolia/client-search@4.13.0)(@types/react@17.0.39)(react-dom@17.0.2)(react@17.0.2)': + '@docsearch/react@3.0.0(@algolia/client-search@4.13.0)(@types/react@17.0.39)(react-dom@17.0.2(react@17.0.2))(react@17.0.2)': dependencies: '@algolia/autocomplete-core': 1.5.2 '@algolia/autocomplete-preset-algolia': 1.5.2(@algolia/client-search@4.13.0)(algoliasearch@4.13.0) @@ -8002,7 +8233,7 @@ snapshots: '@emotion/sheet@0.9.4': {} - '@emotion/styled-base@10.3.0(@emotion/core@10.3.1)(react@17.0.2)': + '@emotion/styled-base@10.3.0(@emotion/core@10.3.1(react@17.0.2))(react@17.0.2)': dependencies: '@babel/runtime': 7.17.2 '@emotion/core': 10.3.1(react@17.0.2) @@ -8011,10 +8242,10 @@ snapshots: '@emotion/utils': 0.11.3 react: 17.0.2 - '@emotion/styled@10.3.0(@emotion/core@10.3.1)(react@17.0.2)': + '@emotion/styled@10.3.0(@emotion/core@10.3.1(react@17.0.2))(react@17.0.2)': dependencies: '@emotion/core': 10.3.1(react@17.0.2) - '@emotion/styled-base': 10.3.0(@emotion/core@10.3.1)(react@17.0.2) + '@emotion/styled-base': 10.3.0(@emotion/core@10.3.1(react@17.0.2))(react@17.0.2) babel-plugin-emotion: 10.2.2 react: 17.0.2 @@ -8281,7 +8512,24 @@ snapshots: mkdirp: 1.0.4 rimraf: 3.0.2 - '@pmmmwh/react-refresh-webpack-plugin@0.5.4(react-refresh@0.11.0)(webpack@4.46.0)': + '@oozcitak/dom@1.15.10': + dependencies: + '@oozcitak/infra': 1.0.8 + '@oozcitak/url': 1.0.4 + '@oozcitak/util': 8.3.8 + + '@oozcitak/infra@1.0.8': + dependencies: + '@oozcitak/util': 8.3.8 + + '@oozcitak/url@1.0.4': + dependencies: + '@oozcitak/infra': 1.0.8 + '@oozcitak/util': 8.3.8 + + '@oozcitak/util@8.3.8': {} + + '@pmmmwh/react-refresh-webpack-plugin@0.5.4(@types/webpack@4.41.32)(react-refresh@0.11.0)(type-fest@0.20.2)(webpack-hot-middleware@2.25.1)(webpack@4.46.0)': dependencies: ansi-html-community: 0.0.8 common-path-prefix: 3.0.0 @@ -8294,12 +8542,16 @@ snapshots: schema-utils: 3.1.1 source-map: 0.7.3 webpack: 4.46.0 + optionalDependencies: + '@types/webpack': 4.41.32 + type-fest: 0.20.2 + webpack-hot-middleware: 2.25.1 '@polka/url@1.0.0-next.21': {} '@popperjs/core@2.11.2': {} - '@reach/component-component@0.1.3(prop-types@15.8.1)(react-dom@17.0.2)(react@17.0.2)': + '@reach/component-component@0.1.3(prop-types@15.8.1)(react-dom@17.0.2(react@17.0.2))(react@17.0.2)': dependencies: prop-types: 15.8.1 react: 17.0.2 @@ -8307,9 +8559,9 @@ snapshots: '@reach/observe-rect@1.2.0': {} - '@reach/rect@0.2.1(prop-types@15.8.1)(react-dom@17.0.2)(react@17.0.2)': + '@reach/rect@0.2.1(prop-types@15.8.1)(react-dom@17.0.2(react@17.0.2))(react@17.0.2)': dependencies: - '@reach/component-component': 0.1.3(prop-types@15.8.1)(react-dom@17.0.2)(react@17.0.2) + '@reach/component-component': 0.1.3(prop-types@15.8.1)(react-dom@17.0.2(react@17.0.2))(react@17.0.2) '@reach/observe-rect': 1.2.0 prop-types: 15.8.1 react: 17.0.2 @@ -8327,15 +8579,15 @@ snapshots: is-color-stop: 1.1.0 rgb-hex: 3.0.0 - '@react-theming/storybook-addon@1.1.5(@storybook/addons@6.4.19)(@storybook/react@6.4.19)(@storybook/theming@6.4.19)(react-dom@17.0.2)(react@17.0.2)': + '@react-theming/storybook-addon@1.1.5(@storybook/addons@6.4.19(react-dom@17.0.2(react@17.0.2))(react@17.0.2))(@storybook/react@6.4.19(@babel/core@7.17.5)(@types/react@17.0.39)(@types/webpack@4.41.32)(eslint@8.10.0)(react-dom@17.0.2(react@17.0.2))(react@17.0.2)(type-fest@0.20.2)(typescript@4.5.5)(webpack-hot-middleware@2.25.1))(@storybook/theming@6.4.19(react-dom@17.0.2(react@17.0.2))(react@17.0.2))(react-dom@17.0.2(react@17.0.2))(react@17.0.2)': dependencies: '@react-theming/flatten': 0.1.1 '@react-theming/theme-name': 1.0.3 '@react-theming/theme-swatch': 1.0.0(react@17.0.2) - '@storybook/addon-devkit': 1.4.2(@storybook/addons@6.4.19)(@storybook/react@6.4.19)(react-dom@17.0.2)(react@17.0.2) - '@storybook/react': 6.4.19(@babel/core@7.17.5)(@types/react@17.0.39)(eslint@8.10.0)(react-dom@17.0.2)(react@17.0.2)(typescript@4.5.5) - '@storybook/theming': 6.4.19(react-dom@17.0.2)(react@17.0.2) - '@usulpro/react-json-view': 2.0.1(react-dom@17.0.2)(react@17.0.2) + '@storybook/addon-devkit': 1.4.2(@storybook/addons@6.4.19(react-dom@17.0.2(react@17.0.2))(react@17.0.2))(@storybook/react@6.4.19(@babel/core@7.17.5)(@types/react@17.0.39)(@types/webpack@4.41.32)(eslint@8.10.0)(react-dom@17.0.2(react@17.0.2))(react@17.0.2)(type-fest@0.20.2)(typescript@4.5.5)(webpack-hot-middleware@2.25.1))(react-dom@17.0.2(react@17.0.2))(react@17.0.2) + '@storybook/react': 6.4.19(@babel/core@7.17.5)(@types/react@17.0.39)(@types/webpack@4.41.32)(eslint@8.10.0)(react-dom@17.0.2(react@17.0.2))(react@17.0.2)(type-fest@0.20.2)(typescript@4.5.5)(webpack-hot-middleware@2.25.1) + '@storybook/theming': 6.4.19(react-dom@17.0.2(react@17.0.2))(react@17.0.2) + '@usulpro/react-json-view': 2.0.1(react-dom@17.0.2(react@17.0.2))(react@17.0.2) react: 17.0.2 react-color: 2.19.3(react@17.0.2) transitivePeerDependencies: @@ -8354,67 +8606,70 @@ snapshots: '@rushstack/eslint-patch@1.1.0': {} - '@storybook/addon-actions@6.4.19(@types/react@17.0.39)(react-dom@17.0.2)(react@17.0.2)': + '@storybook/addon-actions@6.4.19(@types/react@17.0.39)(react-dom@17.0.2(react@17.0.2))(react@17.0.2)': dependencies: - '@storybook/addons': 6.4.19(react-dom@17.0.2)(react@17.0.2) - '@storybook/api': 6.4.19(react-dom@17.0.2)(react@17.0.2) - '@storybook/components': 6.4.19(@types/react@17.0.39)(react-dom@17.0.2)(react@17.0.2) + '@storybook/addons': 6.4.19(react-dom@17.0.2(react@17.0.2))(react@17.0.2) + '@storybook/api': 6.4.19(react-dom@17.0.2(react@17.0.2))(react@17.0.2) + '@storybook/components': 6.4.19(@types/react@17.0.39)(react-dom@17.0.2(react@17.0.2))(react@17.0.2) '@storybook/core-events': 6.4.19 '@storybook/csf': 0.0.2--canary.87bc651.0 - '@storybook/theming': 6.4.19(react-dom@17.0.2)(react@17.0.2) + '@storybook/theming': 6.4.19(react-dom@17.0.2(react@17.0.2))(react@17.0.2) core-js: 3.21.1 fast-deep-equal: 3.1.3 global: 4.4.0 lodash: 4.17.21 polished: 4.1.4 prop-types: 15.8.1 - react: 17.0.2 - react-dom: 17.0.2(react@17.0.2) react-inspector: 5.1.1(react@17.0.2) regenerator-runtime: 0.13.9 telejson: 5.3.3 ts-dedent: 2.2.0 util-deprecate: 1.0.2 uuid-browser: 3.1.0 + optionalDependencies: + react: 17.0.2 + react-dom: 17.0.2(react@17.0.2) transitivePeerDependencies: - '@types/react' - '@storybook/addon-backgrounds@6.4.19(@types/react@17.0.39)(react-dom@17.0.2)(react@17.0.2)': + '@storybook/addon-backgrounds@6.4.19(@types/react@17.0.39)(react-dom@17.0.2(react@17.0.2))(react@17.0.2)': dependencies: - '@storybook/addons': 6.4.19(react-dom@17.0.2)(react@17.0.2) - '@storybook/api': 6.4.19(react-dom@17.0.2)(react@17.0.2) + '@storybook/addons': 6.4.19(react-dom@17.0.2(react@17.0.2))(react@17.0.2) + '@storybook/api': 6.4.19(react-dom@17.0.2(react@17.0.2))(react@17.0.2) '@storybook/client-logger': 6.4.19 - '@storybook/components': 6.4.19(@types/react@17.0.39)(react-dom@17.0.2)(react@17.0.2) + '@storybook/components': 6.4.19(@types/react@17.0.39)(react-dom@17.0.2(react@17.0.2))(react@17.0.2) '@storybook/core-events': 6.4.19 '@storybook/csf': 0.0.2--canary.87bc651.0 - '@storybook/theming': 6.4.19(react-dom@17.0.2)(react@17.0.2) + '@storybook/theming': 6.4.19(react-dom@17.0.2(react@17.0.2))(react@17.0.2) core-js: 3.21.1 global: 4.4.0 memoizerific: 1.11.3 - react: 17.0.2 - react-dom: 17.0.2(react@17.0.2) regenerator-runtime: 0.13.9 ts-dedent: 2.2.0 util-deprecate: 1.0.2 + optionalDependencies: + react: 17.0.2 + react-dom: 17.0.2(react@17.0.2) transitivePeerDependencies: - '@types/react' - '@storybook/addon-controls@6.4.19(@types/react@17.0.39)(eslint@8.10.0)(react-dom@17.0.2)(react@17.0.2)(typescript@4.5.5)': + '@storybook/addon-controls@6.4.19(@types/react@17.0.39)(eslint@8.10.0)(react-dom@17.0.2(react@17.0.2))(react@17.0.2)(typescript@4.5.5)': dependencies: - '@storybook/addons': 6.4.19(react-dom@17.0.2)(react@17.0.2) - '@storybook/api': 6.4.19(react-dom@17.0.2)(react@17.0.2) + '@storybook/addons': 6.4.19(react-dom@17.0.2(react@17.0.2))(react@17.0.2) + '@storybook/api': 6.4.19(react-dom@17.0.2(react@17.0.2))(react@17.0.2) '@storybook/client-logger': 6.4.19 - '@storybook/components': 6.4.19(@types/react@17.0.39)(react-dom@17.0.2)(react@17.0.2) - '@storybook/core-common': 6.4.19(eslint@8.10.0)(react-dom@17.0.2)(react@17.0.2)(typescript@4.5.5) + '@storybook/components': 6.4.19(@types/react@17.0.39)(react-dom@17.0.2(react@17.0.2))(react@17.0.2) + '@storybook/core-common': 6.4.19(eslint@8.10.0)(react-dom@17.0.2(react@17.0.2))(react@17.0.2)(typescript@4.5.5) '@storybook/csf': 0.0.2--canary.87bc651.0 '@storybook/node-logger': 6.4.19 - '@storybook/store': 6.4.19(react-dom@17.0.2)(react@17.0.2) - '@storybook/theming': 6.4.19(react-dom@17.0.2)(react@17.0.2) + '@storybook/store': 6.4.19(react-dom@17.0.2(react@17.0.2))(react@17.0.2) + '@storybook/theming': 6.4.19(react-dom@17.0.2(react@17.0.2))(react@17.0.2) core-js: 3.21.1 lodash: 4.17.21 + ts-dedent: 2.2.0 + optionalDependencies: react: 17.0.2 react-dom: 17.0.2(react@17.0.2) - ts-dedent: 2.2.0 transitivePeerDependencies: - '@types/react' - eslint @@ -8424,19 +8679,19 @@ snapshots: - webpack-cli - webpack-command - '@storybook/addon-devkit@1.4.2(@storybook/addons@6.4.19)(@storybook/react@6.4.19)(react-dom@17.0.2)(react@17.0.2)': + '@storybook/addon-devkit@1.4.2(@storybook/addons@6.4.19(react-dom@17.0.2(react@17.0.2))(react@17.0.2))(@storybook/react@6.4.19(@babel/core@7.17.5)(@types/react@17.0.39)(@types/webpack@4.41.32)(eslint@8.10.0)(react-dom@17.0.2(react@17.0.2))(react@17.0.2)(type-fest@0.20.2)(typescript@4.5.5)(webpack-hot-middleware@2.25.1))(react-dom@17.0.2(react@17.0.2))(react@17.0.2)': dependencies: - '@reach/rect': 0.2.1(prop-types@15.8.1)(react-dom@17.0.2)(react@17.0.2) - '@storybook/addons': 6.4.19(react-dom@17.0.2)(react@17.0.2) + '@reach/rect': 0.2.1(prop-types@15.8.1)(react-dom@17.0.2(react@17.0.2))(react@17.0.2) + '@storybook/addons': 6.4.19(react-dom@17.0.2(react@17.0.2))(react@17.0.2) '@storybook/core-events': 6.4.19 - '@storybook/react': 6.4.19(@babel/core@7.17.5)(@types/react@17.0.39)(eslint@8.10.0)(react-dom@17.0.2)(react@17.0.2)(typescript@4.5.5) - '@storybook/theming': 6.4.19(react-dom@17.0.2)(react@17.0.2) + '@storybook/react': 6.4.19(@babel/core@7.17.5)(@types/react@17.0.39)(@types/webpack@4.41.32)(eslint@8.10.0)(react-dom@17.0.2(react@17.0.2))(react@17.0.2)(type-fest@0.20.2)(typescript@4.5.5)(webpack-hot-middleware@2.25.1) + '@storybook/theming': 6.4.19(react-dom@17.0.2(react@17.0.2))(react@17.0.2) deep-equal: 2.0.5 prop-types: 15.8.1 react: 17.0.2 react-dom: 17.0.2(react@17.0.2) - '@storybook/addon-docs@6.4.19(@storybook/react@6.4.19)(@types/react@17.0.39)(eslint@8.10.0)(react-dom@17.0.2)(react@17.0.2)(typescript@4.5.5)(webpack@4.46.0)': + '@storybook/addon-docs@6.4.19(@storybook/react@6.4.19(@babel/core@7.17.5)(@types/react@17.0.39)(@types/webpack@4.41.32)(eslint@8.10.0)(react-dom@17.0.2(react@17.0.2))(react@17.0.2)(type-fest@0.20.2)(typescript@4.5.5)(webpack-hot-middleware@2.25.1))(@types/react@17.0.39)(eslint@8.10.0)(react-dom@17.0.2(react@17.0.2))(react@17.0.2)(typescript@4.5.5)(webpack@4.46.0)': dependencies: '@babel/core': 7.17.5 '@babel/generator': 7.23.0 @@ -8447,22 +8702,21 @@ snapshots: '@mdx-js/loader': 1.6.22(react@17.0.2) '@mdx-js/mdx': 1.6.22 '@mdx-js/react': 1.6.22(react@17.0.2) - '@storybook/addons': 6.4.19(react-dom@17.0.2)(react@17.0.2) - '@storybook/api': 6.4.19(react-dom@17.0.2)(react@17.0.2) - '@storybook/builder-webpack4': 6.4.19(@types/react@17.0.39)(eslint@8.10.0)(react-dom@17.0.2)(react@17.0.2)(typescript@4.5.5) + '@storybook/addons': 6.4.19(react-dom@17.0.2(react@17.0.2))(react@17.0.2) + '@storybook/api': 6.4.19(react-dom@17.0.2(react@17.0.2))(react@17.0.2) + '@storybook/builder-webpack4': 6.4.19(@types/react@17.0.39)(eslint@8.10.0)(react-dom@17.0.2(react@17.0.2))(react@17.0.2)(typescript@4.5.5) '@storybook/client-logger': 6.4.19 - '@storybook/components': 6.4.19(@types/react@17.0.39)(react-dom@17.0.2)(react@17.0.2) - '@storybook/core': 6.4.19(@types/react@17.0.39)(eslint@8.10.0)(react-dom@17.0.2)(react@17.0.2)(typescript@4.5.5)(webpack@4.46.0) + '@storybook/components': 6.4.19(@types/react@17.0.39)(react-dom@17.0.2(react@17.0.2))(react@17.0.2) + '@storybook/core': 6.4.19(@types/react@17.0.39)(eslint@8.10.0)(react-dom@17.0.2(react@17.0.2))(react@17.0.2)(typescript@4.5.5)(webpack@4.46.0) '@storybook/core-events': 6.4.19 '@storybook/csf': 0.0.2--canary.87bc651.0 '@storybook/csf-tools': 6.4.19 '@storybook/node-logger': 6.4.19 '@storybook/postinstall': 6.4.19 - '@storybook/preview-web': 6.4.19(react-dom@17.0.2)(react@17.0.2) - '@storybook/react': 6.4.19(@babel/core@7.17.5)(@types/react@17.0.39)(eslint@8.10.0)(react-dom@17.0.2)(react@17.0.2)(typescript@4.5.5) - '@storybook/source-loader': 6.4.19(react-dom@17.0.2)(react@17.0.2) - '@storybook/store': 6.4.19(react-dom@17.0.2)(react@17.0.2) - '@storybook/theming': 6.4.19(react-dom@17.0.2)(react@17.0.2) + '@storybook/preview-web': 6.4.19(react-dom@17.0.2(react@17.0.2))(react@17.0.2) + '@storybook/source-loader': 6.4.19(react-dom@17.0.2(react@17.0.2))(react@17.0.2) + '@storybook/store': 6.4.19(react-dom@17.0.2(react@17.0.2))(react@17.0.2) + '@storybook/theming': 6.4.19(react-dom@17.0.2(react@17.0.2))(react@17.0.2) acorn: 7.4.1 acorn-jsx: 5.3.2(acorn@7.4.1) acorn-walk: 7.2.0 @@ -8479,14 +8733,16 @@ snapshots: p-limit: 3.1.0 prettier: 2.3.0 prop-types: 15.8.1 - react: 17.0.2 - react-dom: 17.0.2(react@17.0.2) - react-element-to-jsx-string: 14.3.4(react-dom@17.0.2)(react@17.0.2) + react-element-to-jsx-string: 14.3.4(react-dom@17.0.2(react@17.0.2))(react@17.0.2) regenerator-runtime: 0.13.9 remark-external-links: 8.0.0 remark-slug: 6.1.0 ts-dedent: 2.2.0 util-deprecate: 1.0.2 + optionalDependencies: + '@storybook/react': 6.4.19(@babel/core@7.17.5)(@types/react@17.0.39)(@types/webpack@4.41.32)(eslint@8.10.0)(react-dom@17.0.2(react@17.0.2))(react@17.0.2)(type-fest@0.20.2)(typescript@4.5.5)(webpack-hot-middleware@2.25.1) + react: 17.0.2 + react-dom: 17.0.2(react@17.0.2) webpack: 4.46.0 transitivePeerDependencies: - '@storybook/builder-webpack5' @@ -8503,26 +8759,27 @@ snapshots: - webpack-cli - webpack-command - '@storybook/addon-essentials@6.4.19(@babel/core@7.17.5)(@storybook/react@6.4.19)(@types/react@17.0.39)(babel-loader@8.2.3)(eslint@8.10.0)(react-dom@17.0.2)(react@17.0.2)(typescript@4.5.5)(webpack@4.46.0)': + '@storybook/addon-essentials@6.4.19(@babel/core@7.17.5)(@storybook/react@6.4.19(@babel/core@7.17.5)(@types/react@17.0.39)(@types/webpack@4.41.32)(eslint@8.10.0)(react-dom@17.0.2(react@17.0.2))(react@17.0.2)(type-fest@0.20.2)(typescript@4.5.5)(webpack-hot-middleware@2.25.1))(@types/react@17.0.39)(babel-loader@8.2.3(@babel/core@7.17.5)(webpack@4.46.0))(eslint@8.10.0)(react-dom@17.0.2(react@17.0.2))(react@17.0.2)(typescript@4.5.5)(webpack@4.46.0)': dependencies: '@babel/core': 7.17.5 - '@storybook/addon-actions': 6.4.19(@types/react@17.0.39)(react-dom@17.0.2)(react@17.0.2) - '@storybook/addon-backgrounds': 6.4.19(@types/react@17.0.39)(react-dom@17.0.2)(react@17.0.2) - '@storybook/addon-controls': 6.4.19(@types/react@17.0.39)(eslint@8.10.0)(react-dom@17.0.2)(react@17.0.2)(typescript@4.5.5) - '@storybook/addon-docs': 6.4.19(@storybook/react@6.4.19)(@types/react@17.0.39)(eslint@8.10.0)(react-dom@17.0.2)(react@17.0.2)(typescript@4.5.5)(webpack@4.46.0) - '@storybook/addon-measure': 6.4.19(@types/react@17.0.39)(react-dom@17.0.2)(react@17.0.2) - '@storybook/addon-outline': 6.4.19(@types/react@17.0.39)(react-dom@17.0.2)(react@17.0.2) - '@storybook/addon-toolbars': 6.4.19(@types/react@17.0.39)(react-dom@17.0.2)(react@17.0.2) - '@storybook/addon-viewport': 6.4.19(@types/react@17.0.39)(react-dom@17.0.2)(react@17.0.2) - '@storybook/addons': 6.4.19(react-dom@17.0.2)(react@17.0.2) - '@storybook/api': 6.4.19(react-dom@17.0.2)(react@17.0.2) + '@storybook/addon-actions': 6.4.19(@types/react@17.0.39)(react-dom@17.0.2(react@17.0.2))(react@17.0.2) + '@storybook/addon-backgrounds': 6.4.19(@types/react@17.0.39)(react-dom@17.0.2(react@17.0.2))(react@17.0.2) + '@storybook/addon-controls': 6.4.19(@types/react@17.0.39)(eslint@8.10.0)(react-dom@17.0.2(react@17.0.2))(react@17.0.2)(typescript@4.5.5) + '@storybook/addon-docs': 6.4.19(@storybook/react@6.4.19(@babel/core@7.17.5)(@types/react@17.0.39)(@types/webpack@4.41.32)(eslint@8.10.0)(react-dom@17.0.2(react@17.0.2))(react@17.0.2)(type-fest@0.20.2)(typescript@4.5.5)(webpack-hot-middleware@2.25.1))(@types/react@17.0.39)(eslint@8.10.0)(react-dom@17.0.2(react@17.0.2))(react@17.0.2)(typescript@4.5.5)(webpack@4.46.0) + '@storybook/addon-measure': 6.4.19(@types/react@17.0.39)(react-dom@17.0.2(react@17.0.2))(react@17.0.2) + '@storybook/addon-outline': 6.4.19(@types/react@17.0.39)(react-dom@17.0.2(react@17.0.2))(react@17.0.2) + '@storybook/addon-toolbars': 6.4.19(@types/react@17.0.39)(react-dom@17.0.2(react@17.0.2))(react@17.0.2) + '@storybook/addon-viewport': 6.4.19(@types/react@17.0.39)(react-dom@17.0.2(react@17.0.2))(react@17.0.2) + '@storybook/addons': 6.4.19(react-dom@17.0.2(react@17.0.2))(react@17.0.2) + '@storybook/api': 6.4.19(react-dom@17.0.2(react@17.0.2))(react@17.0.2) '@storybook/node-logger': 6.4.19 babel-loader: 8.2.3(@babel/core@7.17.5)(webpack@4.46.0) core-js: 3.21.1 - react: 17.0.2 - react-dom: 17.0.2(react@17.0.2) regenerator-runtime: 0.13.9 ts-dedent: 2.2.0 + optionalDependencies: + react: 17.0.2 + react-dom: 17.0.2(react@17.0.2) webpack: 4.46.0 transitivePeerDependencies: - '@storybook/angular' @@ -8547,22 +8804,23 @@ snapshots: - webpack-cli - webpack-command - '@storybook/addon-interactions@6.4.19(@types/react@17.0.39)(eslint@8.10.0)(react-dom@17.0.2)(react@17.0.2)(typescript@4.5.5)': + '@storybook/addon-interactions@6.4.19(@types/react@17.0.39)(eslint@8.10.0)(react-dom@17.0.2(react@17.0.2))(react@17.0.2)(typescript@4.5.5)': dependencies: - '@storybook/addons': 6.4.19(react-dom@17.0.2)(react@17.0.2) - '@storybook/api': 6.4.19(react-dom@17.0.2)(react@17.0.2) - '@storybook/components': 6.4.19(@types/react@17.0.39)(react-dom@17.0.2)(react@17.0.2) - '@storybook/core-common': 6.4.19(eslint@8.10.0)(react-dom@17.0.2)(react@17.0.2)(typescript@4.5.5) + '@storybook/addons': 6.4.19(react-dom@17.0.2(react@17.0.2))(react@17.0.2) + '@storybook/api': 6.4.19(react-dom@17.0.2(react@17.0.2))(react@17.0.2) + '@storybook/components': 6.4.19(@types/react@17.0.39)(react-dom@17.0.2(react@17.0.2))(react@17.0.2) + '@storybook/core-common': 6.4.19(eslint@8.10.0)(react-dom@17.0.2(react@17.0.2))(react@17.0.2)(typescript@4.5.5) '@storybook/core-events': 6.4.19 '@storybook/csf': 0.0.2--canary.87bc651.0 - '@storybook/instrumenter': 6.4.19(react-dom@17.0.2)(react@17.0.2) - '@storybook/theming': 6.4.19(react-dom@17.0.2)(react@17.0.2) + '@storybook/instrumenter': 6.4.19(react-dom@17.0.2(react@17.0.2))(react@17.0.2) + '@storybook/theming': 6.4.19(react-dom@17.0.2(react@17.0.2))(react@17.0.2) global: 4.4.0 jest-mock: 27.5.1 polished: 4.1.4 + ts-dedent: 2.2.0 + optionalDependencies: react: 17.0.2 react-dom: 17.0.2(react@17.0.2) - ts-dedent: 2.2.0 transitivePeerDependencies: - '@types/react' - eslint @@ -8572,95 +8830,100 @@ snapshots: - webpack-cli - webpack-command - '@storybook/addon-links@6.4.19(react-dom@17.0.2)(react@17.0.2)': + '@storybook/addon-links@6.4.19(react-dom@17.0.2(react@17.0.2))(react@17.0.2)': dependencies: - '@storybook/addons': 6.4.19(react-dom@17.0.2)(react@17.0.2) + '@storybook/addons': 6.4.19(react-dom@17.0.2(react@17.0.2))(react@17.0.2) '@storybook/client-logger': 6.4.19 '@storybook/core-events': 6.4.19 '@storybook/csf': 0.0.2--canary.87bc651.0 - '@storybook/router': 6.4.19(react-dom@17.0.2)(react@17.0.2) + '@storybook/router': 6.4.19(react-dom@17.0.2(react@17.0.2))(react@17.0.2) '@types/qs': 6.9.7 core-js: 3.21.1 global: 4.4.0 prop-types: 15.8.1 qs: 6.10.3 - react: 17.0.2 - react-dom: 17.0.2(react@17.0.2) regenerator-runtime: 0.13.9 ts-dedent: 2.2.0 + optionalDependencies: + react: 17.0.2 + react-dom: 17.0.2(react@17.0.2) - '@storybook/addon-measure@6.4.19(@types/react@17.0.39)(react-dom@17.0.2)(react@17.0.2)': + '@storybook/addon-measure@6.4.19(@types/react@17.0.39)(react-dom@17.0.2(react@17.0.2))(react@17.0.2)': dependencies: - '@storybook/addons': 6.4.19(react-dom@17.0.2)(react@17.0.2) - '@storybook/api': 6.4.19(react-dom@17.0.2)(react@17.0.2) + '@storybook/addons': 6.4.19(react-dom@17.0.2(react@17.0.2))(react@17.0.2) + '@storybook/api': 6.4.19(react-dom@17.0.2(react@17.0.2))(react@17.0.2) '@storybook/client-logger': 6.4.19 - '@storybook/components': 6.4.19(@types/react@17.0.39)(react-dom@17.0.2)(react@17.0.2) + '@storybook/components': 6.4.19(@types/react@17.0.39)(react-dom@17.0.2(react@17.0.2))(react@17.0.2) '@storybook/core-events': 6.4.19 '@storybook/csf': 0.0.2--canary.87bc651.0 core-js: 3.21.1 global: 4.4.0 + optionalDependencies: react: 17.0.2 react-dom: 17.0.2(react@17.0.2) transitivePeerDependencies: - '@types/react' - '@storybook/addon-outline@6.4.19(@types/react@17.0.39)(react-dom@17.0.2)(react@17.0.2)': + '@storybook/addon-outline@6.4.19(@types/react@17.0.39)(react-dom@17.0.2(react@17.0.2))(react@17.0.2)': dependencies: - '@storybook/addons': 6.4.19(react-dom@17.0.2)(react@17.0.2) - '@storybook/api': 6.4.19(react-dom@17.0.2)(react@17.0.2) + '@storybook/addons': 6.4.19(react-dom@17.0.2(react@17.0.2))(react@17.0.2) + '@storybook/api': 6.4.19(react-dom@17.0.2(react@17.0.2))(react@17.0.2) '@storybook/client-logger': 6.4.19 - '@storybook/components': 6.4.19(@types/react@17.0.39)(react-dom@17.0.2)(react@17.0.2) + '@storybook/components': 6.4.19(@types/react@17.0.39)(react-dom@17.0.2(react@17.0.2))(react@17.0.2) '@storybook/core-events': 6.4.19 '@storybook/csf': 0.0.2--canary.87bc651.0 core-js: 3.21.1 global: 4.4.0 - react: 17.0.2 - react-dom: 17.0.2(react@17.0.2) regenerator-runtime: 0.13.9 ts-dedent: 2.2.0 + optionalDependencies: + react: 17.0.2 + react-dom: 17.0.2(react@17.0.2) transitivePeerDependencies: - '@types/react' - '@storybook/addon-toolbars@6.4.19(@types/react@17.0.39)(react-dom@17.0.2)(react@17.0.2)': + '@storybook/addon-toolbars@6.4.19(@types/react@17.0.39)(react-dom@17.0.2(react@17.0.2))(react@17.0.2)': dependencies: - '@storybook/addons': 6.4.19(react-dom@17.0.2)(react@17.0.2) - '@storybook/api': 6.4.19(react-dom@17.0.2)(react@17.0.2) - '@storybook/components': 6.4.19(@types/react@17.0.39)(react-dom@17.0.2)(react@17.0.2) - '@storybook/theming': 6.4.19(react-dom@17.0.2)(react@17.0.2) + '@storybook/addons': 6.4.19(react-dom@17.0.2(react@17.0.2))(react@17.0.2) + '@storybook/api': 6.4.19(react-dom@17.0.2(react@17.0.2))(react@17.0.2) + '@storybook/components': 6.4.19(@types/react@17.0.39)(react-dom@17.0.2(react@17.0.2))(react@17.0.2) + '@storybook/theming': 6.4.19(react-dom@17.0.2(react@17.0.2))(react@17.0.2) core-js: 3.21.1 + regenerator-runtime: 0.13.9 + optionalDependencies: react: 17.0.2 react-dom: 17.0.2(react@17.0.2) - regenerator-runtime: 0.13.9 transitivePeerDependencies: - '@types/react' - '@storybook/addon-viewport@6.4.19(@types/react@17.0.39)(react-dom@17.0.2)(react@17.0.2)': + '@storybook/addon-viewport@6.4.19(@types/react@17.0.39)(react-dom@17.0.2(react@17.0.2))(react@17.0.2)': dependencies: - '@storybook/addons': 6.4.19(react-dom@17.0.2)(react@17.0.2) - '@storybook/api': 6.4.19(react-dom@17.0.2)(react@17.0.2) + '@storybook/addons': 6.4.19(react-dom@17.0.2(react@17.0.2))(react@17.0.2) + '@storybook/api': 6.4.19(react-dom@17.0.2(react@17.0.2))(react@17.0.2) '@storybook/client-logger': 6.4.19 - '@storybook/components': 6.4.19(@types/react@17.0.39)(react-dom@17.0.2)(react@17.0.2) + '@storybook/components': 6.4.19(@types/react@17.0.39)(react-dom@17.0.2(react@17.0.2))(react@17.0.2) '@storybook/core-events': 6.4.19 - '@storybook/theming': 6.4.19(react-dom@17.0.2)(react@17.0.2) + '@storybook/theming': 6.4.19(react-dom@17.0.2(react@17.0.2))(react@17.0.2) core-js: 3.21.1 global: 4.4.0 memoizerific: 1.11.3 prop-types: 15.8.1 + regenerator-runtime: 0.13.9 + optionalDependencies: react: 17.0.2 react-dom: 17.0.2(react@17.0.2) - regenerator-runtime: 0.13.9 transitivePeerDependencies: - '@types/react' - '@storybook/addons@6.4.19(react-dom@17.0.2)(react@17.0.2)': + '@storybook/addons@6.4.19(react-dom@17.0.2(react@17.0.2))(react@17.0.2)': dependencies: - '@storybook/api': 6.4.19(react-dom@17.0.2)(react@17.0.2) + '@storybook/api': 6.4.19(react-dom@17.0.2(react@17.0.2))(react@17.0.2) '@storybook/channels': 6.4.19 '@storybook/client-logger': 6.4.19 '@storybook/core-events': 6.4.19 '@storybook/csf': 0.0.2--canary.87bc651.0 - '@storybook/router': 6.4.19(react-dom@17.0.2)(react@17.0.2) - '@storybook/theming': 6.4.19(react-dom@17.0.2)(react@17.0.2) + '@storybook/router': 6.4.19(react-dom@17.0.2(react@17.0.2))(react@17.0.2) + '@storybook/theming': 6.4.19(react-dom@17.0.2(react@17.0.2))(react@17.0.2) '@types/webpack-env': 1.16.3 core-js: 3.21.1 global: 4.4.0 @@ -8668,15 +8931,15 @@ snapshots: react-dom: 17.0.2(react@17.0.2) regenerator-runtime: 0.13.9 - '@storybook/api@6.4.19(react-dom@17.0.2)(react@17.0.2)': + '@storybook/api@6.4.19(react-dom@17.0.2(react@17.0.2))(react@17.0.2)': dependencies: '@storybook/channels': 6.4.19 '@storybook/client-logger': 6.4.19 '@storybook/core-events': 6.4.19 '@storybook/csf': 0.0.2--canary.87bc651.0 - '@storybook/router': 6.4.19(react-dom@17.0.2)(react@17.0.2) + '@storybook/router': 6.4.19(react-dom@17.0.2(react@17.0.2))(react@17.0.2) '@storybook/semver': 7.3.2 - '@storybook/theming': 6.4.19(react-dom@17.0.2)(react@17.0.2) + '@storybook/theming': 6.4.19(react-dom@17.0.2(react@17.0.2))(react@17.0.2) core-js: 3.21.1 fast-deep-equal: 3.1.3 global: 4.4.0 @@ -8690,7 +8953,7 @@ snapshots: ts-dedent: 2.2.0 util-deprecate: 1.0.2 - '@storybook/builder-webpack4@6.4.19(@types/react@17.0.39)(eslint@8.10.0)(react-dom@17.0.2)(react@17.0.2)(typescript@4.5.5)': + '@storybook/builder-webpack4@6.4.19(@types/react@17.0.39)(eslint@8.10.0)(react-dom@17.0.2(react@17.0.2))(react@17.0.2)(typescript@4.5.5)': dependencies: '@babel/core': 7.17.5 '@babel/plugin-proposal-class-properties': 7.16.7(@babel/core@7.17.5) @@ -8713,22 +8976,22 @@ snapshots: '@babel/preset-env': 7.16.11(@babel/core@7.17.5) '@babel/preset-react': 7.16.7(@babel/core@7.17.5) '@babel/preset-typescript': 7.16.7(@babel/core@7.17.5) - '@storybook/addons': 6.4.19(react-dom@17.0.2)(react@17.0.2) - '@storybook/api': 6.4.19(react-dom@17.0.2)(react@17.0.2) + '@storybook/addons': 6.4.19(react-dom@17.0.2(react@17.0.2))(react@17.0.2) + '@storybook/api': 6.4.19(react-dom@17.0.2(react@17.0.2))(react@17.0.2) '@storybook/channel-postmessage': 6.4.19 '@storybook/channels': 6.4.19 - '@storybook/client-api': 6.4.19(react-dom@17.0.2)(react@17.0.2) + '@storybook/client-api': 6.4.19(react-dom@17.0.2(react@17.0.2))(react@17.0.2) '@storybook/client-logger': 6.4.19 - '@storybook/components': 6.4.19(@types/react@17.0.39)(react-dom@17.0.2)(react@17.0.2) - '@storybook/core-common': 6.4.19(eslint@8.10.0)(react-dom@17.0.2)(react@17.0.2)(typescript@4.5.5) + '@storybook/components': 6.4.19(@types/react@17.0.39)(react-dom@17.0.2(react@17.0.2))(react@17.0.2) + '@storybook/core-common': 6.4.19(eslint@8.10.0)(react-dom@17.0.2(react@17.0.2))(react@17.0.2)(typescript@4.5.5) '@storybook/core-events': 6.4.19 '@storybook/node-logger': 6.4.19 - '@storybook/preview-web': 6.4.19(react-dom@17.0.2)(react@17.0.2) - '@storybook/router': 6.4.19(react-dom@17.0.2)(react@17.0.2) + '@storybook/preview-web': 6.4.19(react-dom@17.0.2(react@17.0.2))(react@17.0.2) + '@storybook/router': 6.4.19(react-dom@17.0.2(react@17.0.2))(react@17.0.2) '@storybook/semver': 7.3.2 - '@storybook/store': 6.4.19(react-dom@17.0.2)(react@17.0.2) - '@storybook/theming': 6.4.19(react-dom@17.0.2)(react@17.0.2) - '@storybook/ui': 6.4.19(@types/react@17.0.39)(react-dom@17.0.2)(react@17.0.2) + '@storybook/store': 6.4.19(react-dom@17.0.2(react@17.0.2))(react@17.0.2) + '@storybook/theming': 6.4.19(react-dom@17.0.2(react@17.0.2))(react@17.0.2) + '@storybook/ui': 6.4.19(@types/react@17.0.39)(react-dom@17.0.2(react@17.0.2))(react@17.0.2) '@types/node': 14.18.12 '@types/webpack': 4.41.32 autoprefixer: 9.8.8 @@ -8756,14 +9019,15 @@ snapshots: style-loader: 1.3.0(webpack@4.46.0) terser-webpack-plugin: 4.2.3(webpack@4.46.0) ts-dedent: 2.2.0 - typescript: 4.5.5 - url-loader: 4.1.1(file-loader@6.2.0)(webpack@4.46.0) + url-loader: 4.1.1(file-loader@6.2.0(webpack@4.46.0))(webpack@4.46.0) util-deprecate: 1.0.2 webpack: 4.46.0 webpack-dev-middleware: 3.7.3(webpack@4.46.0) webpack-filter-warnings-plugin: 1.2.1(webpack@4.46.0) webpack-hot-middleware: 2.25.1 webpack-virtual-modules: 0.2.2 + optionalDependencies: + typescript: 4.5.5 transitivePeerDependencies: - '@types/react' - bluebird @@ -8797,15 +9061,15 @@ snapshots: ts-dedent: 2.2.0 util-deprecate: 1.0.2 - '@storybook/client-api@6.4.19(react-dom@17.0.2)(react@17.0.2)': + '@storybook/client-api@6.4.19(react-dom@17.0.2(react@17.0.2))(react@17.0.2)': dependencies: - '@storybook/addons': 6.4.19(react-dom@17.0.2)(react@17.0.2) + '@storybook/addons': 6.4.19(react-dom@17.0.2(react@17.0.2))(react@17.0.2) '@storybook/channel-postmessage': 6.4.19 '@storybook/channels': 6.4.19 '@storybook/client-logger': 6.4.19 '@storybook/core-events': 6.4.19 '@storybook/csf': 0.0.2--canary.87bc651.0 - '@storybook/store': 6.4.19(react-dom@17.0.2)(react@17.0.2) + '@storybook/store': 6.4.19(react-dom@17.0.2(react@17.0.2))(react@17.0.2) '@types/qs': 6.9.7 '@types/webpack-env': 1.16.3 core-js: 3.21.1 @@ -8827,12 +9091,12 @@ snapshots: core-js: 3.21.1 global: 4.4.0 - '@storybook/components@6.4.19(@types/react@17.0.39)(react-dom@17.0.2)(react@17.0.2)': + '@storybook/components@6.4.19(@types/react@17.0.39)(react-dom@17.0.2(react@17.0.2))(react@17.0.2)': dependencies: '@popperjs/core': 2.11.2 '@storybook/client-logger': 6.4.19 '@storybook/csf': 0.0.2--canary.87bc651.0 - '@storybook/theming': 6.4.19(react-dom@17.0.2)(react@17.0.2) + '@storybook/theming': 6.4.19(react-dom@17.0.2(react@17.0.2))(react@17.0.2) '@types/color-convert': 2.0.0 '@types/overlayscrollbars': 1.12.1 '@types/react-syntax-highlighter': 11.0.5 @@ -8847,9 +9111,9 @@ snapshots: polished: 4.1.4 prop-types: 15.8.1 react: 17.0.2 - react-colorful: 5.5.1(react-dom@17.0.2)(react@17.0.2) + react-colorful: 5.5.1(react-dom@17.0.2(react@17.0.2))(react@17.0.2) react-dom: 17.0.2(react@17.0.2) - react-popper-tooltip: 3.1.1(react-dom@17.0.2)(react@17.0.2) + react-popper-tooltip: 3.1.1(react-dom@17.0.2(react@17.0.2))(react@17.0.2) react-syntax-highlighter: 13.5.3(react@17.0.2) react-textarea-autosize: 8.3.3(@types/react@17.0.39)(react@17.0.2) regenerator-runtime: 0.13.9 @@ -8858,18 +9122,18 @@ snapshots: transitivePeerDependencies: - '@types/react' - '@storybook/core-client@6.4.19(@types/react@17.0.39)(react-dom@17.0.2)(react@17.0.2)(typescript@4.5.5)(webpack@4.46.0)': + '@storybook/core-client@6.4.19(@types/react@17.0.39)(react-dom@17.0.2(react@17.0.2))(react@17.0.2)(typescript@4.5.5)(webpack@4.46.0)': dependencies: - '@storybook/addons': 6.4.19(react-dom@17.0.2)(react@17.0.2) + '@storybook/addons': 6.4.19(react-dom@17.0.2(react@17.0.2))(react@17.0.2) '@storybook/channel-postmessage': 6.4.19 '@storybook/channel-websocket': 6.4.19 - '@storybook/client-api': 6.4.19(react-dom@17.0.2)(react@17.0.2) + '@storybook/client-api': 6.4.19(react-dom@17.0.2(react@17.0.2))(react@17.0.2) '@storybook/client-logger': 6.4.19 '@storybook/core-events': 6.4.19 '@storybook/csf': 0.0.2--canary.87bc651.0 - '@storybook/preview-web': 6.4.19(react-dom@17.0.2)(react@17.0.2) - '@storybook/store': 6.4.19(react-dom@17.0.2)(react@17.0.2) - '@storybook/ui': 6.4.19(@types/react@17.0.39)(react-dom@17.0.2)(react@17.0.2) + '@storybook/preview-web': 6.4.19(react-dom@17.0.2(react@17.0.2))(react@17.0.2) + '@storybook/store': 6.4.19(react-dom@17.0.2(react@17.0.2))(react@17.0.2) + '@storybook/ui': 6.4.19(@types/react@17.0.39)(react-dom@17.0.2(react@17.0.2))(react@17.0.2) airbnb-js-shims: 2.2.1 ansi-to-html: 0.6.15 core-js: 3.21.1 @@ -8880,14 +9144,15 @@ snapshots: react-dom: 17.0.2(react@17.0.2) regenerator-runtime: 0.13.9 ts-dedent: 2.2.0 - typescript: 4.5.5 unfetch: 4.2.0 util-deprecate: 1.0.2 webpack: 4.46.0 + optionalDependencies: + typescript: 4.5.5 transitivePeerDependencies: - '@types/react' - '@storybook/core-common@6.4.19(eslint@8.10.0)(react-dom@17.0.2)(react@17.0.2)(typescript@4.5.5)': + '@storybook/core-common@6.4.19(eslint@8.10.0)(react-dom@17.0.2(react@17.0.2))(react@17.0.2)(typescript@4.5.5)': dependencies: '@babel/core': 7.17.5 '@babel/plugin-proposal-class-properties': 7.16.7(@babel/core@7.17.5) @@ -8938,9 +9203,10 @@ snapshots: slash: 3.0.0 telejson: 5.3.3 ts-dedent: 2.2.0 - typescript: 4.5.5 util-deprecate: 1.0.2 webpack: 4.46.0 + optionalDependencies: + typescript: 4.5.5 transitivePeerDependencies: - eslint - supports-color @@ -8952,19 +9218,19 @@ snapshots: dependencies: core-js: 3.21.1 - '@storybook/core-server@6.4.19(@types/react@17.0.39)(eslint@8.10.0)(react-dom@17.0.2)(react@17.0.2)(typescript@4.5.5)': + '@storybook/core-server@6.4.19(@types/react@17.0.39)(eslint@8.10.0)(react-dom@17.0.2(react@17.0.2))(react@17.0.2)(typescript@4.5.5)': dependencies: '@discoveryjs/json-ext': 0.5.6 - '@storybook/builder-webpack4': 6.4.19(@types/react@17.0.39)(eslint@8.10.0)(react-dom@17.0.2)(react@17.0.2)(typescript@4.5.5) - '@storybook/core-client': 6.4.19(@types/react@17.0.39)(react-dom@17.0.2)(react@17.0.2)(typescript@4.5.5)(webpack@4.46.0) - '@storybook/core-common': 6.4.19(eslint@8.10.0)(react-dom@17.0.2)(react@17.0.2)(typescript@4.5.5) + '@storybook/builder-webpack4': 6.4.19(@types/react@17.0.39)(eslint@8.10.0)(react-dom@17.0.2(react@17.0.2))(react@17.0.2)(typescript@4.5.5) + '@storybook/core-client': 6.4.19(@types/react@17.0.39)(react-dom@17.0.2(react@17.0.2))(react@17.0.2)(typescript@4.5.5)(webpack@4.46.0) + '@storybook/core-common': 6.4.19(eslint@8.10.0)(react-dom@17.0.2(react@17.0.2))(react@17.0.2)(typescript@4.5.5) '@storybook/core-events': 6.4.19 '@storybook/csf': 0.0.2--canary.87bc651.0 '@storybook/csf-tools': 6.4.19 - '@storybook/manager-webpack4': 6.4.19(@types/react@17.0.39)(eslint@8.10.0)(react-dom@17.0.2)(react@17.0.2)(typescript@4.5.5) + '@storybook/manager-webpack4': 6.4.19(@types/react@17.0.39)(eslint@8.10.0)(react-dom@17.0.2(react@17.0.2))(react@17.0.2)(typescript@4.5.5) '@storybook/node-logger': 6.4.19 '@storybook/semver': 7.3.2 - '@storybook/store': 6.4.19(react-dom@17.0.2)(react@17.0.2) + '@storybook/store': 6.4.19(react-dom@17.0.2(react@17.0.2))(react@17.0.2) '@types/node': 14.18.12 '@types/node-fetch': 2.6.1 '@types/pretty-hrtime': 1.0.1 @@ -8994,11 +9260,12 @@ snapshots: slash: 3.0.0 telejson: 5.3.3 ts-dedent: 2.2.0 - typescript: 4.5.5 util-deprecate: 1.0.2 watchpack: 2.3.1 webpack: 4.46.0 ws: 8.5.0 + optionalDependencies: + typescript: 4.5.5 transitivePeerDependencies: - '@types/react' - bluebird @@ -9011,14 +9278,15 @@ snapshots: - webpack-cli - webpack-command - '@storybook/core@6.4.19(@types/react@17.0.39)(eslint@8.10.0)(react-dom@17.0.2)(react@17.0.2)(typescript@4.5.5)(webpack@4.46.0)': + '@storybook/core@6.4.19(@types/react@17.0.39)(eslint@8.10.0)(react-dom@17.0.2(react@17.0.2))(react@17.0.2)(typescript@4.5.5)(webpack@4.46.0)': dependencies: - '@storybook/core-client': 6.4.19(@types/react@17.0.39)(react-dom@17.0.2)(react@17.0.2)(typescript@4.5.5)(webpack@4.46.0) - '@storybook/core-server': 6.4.19(@types/react@17.0.39)(eslint@8.10.0)(react-dom@17.0.2)(react@17.0.2)(typescript@4.5.5) + '@storybook/core-client': 6.4.19(@types/react@17.0.39)(react-dom@17.0.2(react@17.0.2))(react@17.0.2)(typescript@4.5.5)(webpack@4.46.0) + '@storybook/core-server': 6.4.19(@types/react@17.0.39)(eslint@8.10.0)(react-dom@17.0.2(react@17.0.2))(react@17.0.2)(typescript@4.5.5) react: 17.0.2 react-dom: 17.0.2(react@17.0.2) - typescript: 4.5.5 webpack: 4.46.0 + optionalDependencies: + typescript: 4.5.5 transitivePeerDependencies: - '@storybook/manager-webpack5' - '@types/react' @@ -9062,9 +9330,9 @@ snapshots: dependencies: lodash: 4.17.21 - '@storybook/instrumenter@6.4.19(react-dom@17.0.2)(react@17.0.2)': + '@storybook/instrumenter@6.4.19(react-dom@17.0.2(react@17.0.2))(react@17.0.2)': dependencies: - '@storybook/addons': 6.4.19(react-dom@17.0.2)(react@17.0.2) + '@storybook/addons': 6.4.19(react-dom@17.0.2(react@17.0.2))(react@17.0.2) '@storybook/client-logger': 6.4.19 '@storybook/core-events': 6.4.19 global: 4.4.0 @@ -9072,17 +9340,17 @@ snapshots: - react - react-dom - '@storybook/manager-webpack4@6.4.19(@types/react@17.0.39)(eslint@8.10.0)(react-dom@17.0.2)(react@17.0.2)(typescript@4.5.5)': + '@storybook/manager-webpack4@6.4.19(@types/react@17.0.39)(eslint@8.10.0)(react-dom@17.0.2(react@17.0.2))(react@17.0.2)(typescript@4.5.5)': dependencies: '@babel/core': 7.17.5 '@babel/plugin-transform-template-literals': 7.16.7(@babel/core@7.17.5) '@babel/preset-react': 7.16.7(@babel/core@7.17.5) - '@storybook/addons': 6.4.19(react-dom@17.0.2)(react@17.0.2) - '@storybook/core-client': 6.4.19(@types/react@17.0.39)(react-dom@17.0.2)(react@17.0.2)(typescript@4.5.5)(webpack@4.46.0) - '@storybook/core-common': 6.4.19(eslint@8.10.0)(react-dom@17.0.2)(react@17.0.2)(typescript@4.5.5) + '@storybook/addons': 6.4.19(react-dom@17.0.2(react@17.0.2))(react@17.0.2) + '@storybook/core-client': 6.4.19(@types/react@17.0.39)(react-dom@17.0.2(react@17.0.2))(react@17.0.2)(typescript@4.5.5)(webpack@4.46.0) + '@storybook/core-common': 6.4.19(eslint@8.10.0)(react-dom@17.0.2(react@17.0.2))(react@17.0.2)(typescript@4.5.5) '@storybook/node-logger': 6.4.19 - '@storybook/theming': 6.4.19(react-dom@17.0.2)(react@17.0.2) - '@storybook/ui': 6.4.19(@types/react@17.0.39)(react-dom@17.0.2)(react@17.0.2) + '@storybook/theming': 6.4.19(react-dom@17.0.2(react@17.0.2))(react@17.0.2) + '@storybook/ui': 6.4.19(@types/react@17.0.39)(react-dom@17.0.2(react@17.0.2))(react@17.0.2) '@types/node': 14.18.12 '@types/webpack': 4.41.32 babel-loader: 8.2.3(@babel/core@7.17.5)(webpack@4.46.0) @@ -9107,12 +9375,13 @@ snapshots: telejson: 5.3.3 terser-webpack-plugin: 4.2.3(webpack@4.46.0) ts-dedent: 2.2.0 - typescript: 4.5.5 - url-loader: 4.1.1(file-loader@6.2.0)(webpack@4.46.0) + url-loader: 4.1.1(file-loader@6.2.0(webpack@4.46.0))(webpack@4.46.0) util-deprecate: 1.0.2 webpack: 4.46.0 webpack-dev-middleware: 3.7.3(webpack@4.46.0) webpack-virtual-modules: 0.2.2 + optionalDependencies: + typescript: 4.5.5 transitivePeerDependencies: - '@types/react' - bluebird @@ -9135,14 +9404,14 @@ snapshots: dependencies: core-js: 3.21.1 - '@storybook/preview-web@6.4.19(react-dom@17.0.2)(react@17.0.2)': + '@storybook/preview-web@6.4.19(react-dom@17.0.2(react@17.0.2))(react@17.0.2)': dependencies: - '@storybook/addons': 6.4.19(react-dom@17.0.2)(react@17.0.2) + '@storybook/addons': 6.4.19(react-dom@17.0.2(react@17.0.2))(react@17.0.2) '@storybook/channel-postmessage': 6.4.19 '@storybook/client-logger': 6.4.19 '@storybook/core-events': 6.4.19 '@storybook/csf': 0.0.2--canary.87bc651.0 - '@storybook/store': 6.4.19(react-dom@17.0.2)(react@17.0.2) + '@storybook/store': 6.4.19(react-dom@17.0.2(react@17.0.2))(react@17.0.2) ansi-to-html: 0.6.15 core-js: 3.21.1 global: 4.4.0 @@ -9170,20 +9439,19 @@ snapshots: transitivePeerDependencies: - supports-color - '@storybook/react@6.4.19(@babel/core@7.17.5)(@types/react@17.0.39)(eslint@8.10.0)(react-dom@17.0.2)(react@17.0.2)(typescript@4.5.5)': + '@storybook/react@6.4.19(@babel/core@7.17.5)(@types/react@17.0.39)(@types/webpack@4.41.32)(eslint@8.10.0)(react-dom@17.0.2(react@17.0.2))(react@17.0.2)(type-fest@0.20.2)(typescript@4.5.5)(webpack-hot-middleware@2.25.1)': dependencies: - '@babel/core': 7.17.5 '@babel/preset-flow': 7.16.7(@babel/core@7.17.5) '@babel/preset-react': 7.16.7(@babel/core@7.17.5) - '@pmmmwh/react-refresh-webpack-plugin': 0.5.4(react-refresh@0.11.0)(webpack@4.46.0) - '@storybook/addons': 6.4.19(react-dom@17.0.2)(react@17.0.2) - '@storybook/core': 6.4.19(@types/react@17.0.39)(eslint@8.10.0)(react-dom@17.0.2)(react@17.0.2)(typescript@4.5.5)(webpack@4.46.0) - '@storybook/core-common': 6.4.19(eslint@8.10.0)(react-dom@17.0.2)(react@17.0.2)(typescript@4.5.5) + '@pmmmwh/react-refresh-webpack-plugin': 0.5.4(@types/webpack@4.41.32)(react-refresh@0.11.0)(type-fest@0.20.2)(webpack-hot-middleware@2.25.1)(webpack@4.46.0) + '@storybook/addons': 6.4.19(react-dom@17.0.2(react@17.0.2))(react@17.0.2) + '@storybook/core': 6.4.19(@types/react@17.0.39)(eslint@8.10.0)(react-dom@17.0.2(react@17.0.2))(react@17.0.2)(typescript@4.5.5)(webpack@4.46.0) + '@storybook/core-common': 6.4.19(eslint@8.10.0)(react-dom@17.0.2(react@17.0.2))(react@17.0.2)(typescript@4.5.5) '@storybook/csf': 0.0.2--canary.87bc651.0 '@storybook/node-logger': 6.4.19 '@storybook/react-docgen-typescript-plugin': 1.0.2-canary.253f8c1.0(typescript@4.5.5)(webpack@4.46.0) '@storybook/semver': 7.3.2 - '@storybook/store': 6.4.19(react-dom@17.0.2)(react@17.0.2) + '@storybook/store': 6.4.19(react-dom@17.0.2(react@17.0.2))(react@17.0.2) '@types/webpack-env': 1.16.3 babel-plugin-add-react-displayname: 0.0.5 babel-plugin-named-asset-import: 0.3.8(@babel/core@7.17.5) @@ -9198,8 +9466,10 @@ snapshots: read-pkg-up: 7.0.1 regenerator-runtime: 0.13.9 ts-dedent: 2.2.0 - typescript: 4.5.5 webpack: 4.46.0 + optionalDependencies: + '@babel/core': 7.17.5 + typescript: 4.5.5 transitivePeerDependencies: - '@storybook/builder-webpack5' - '@storybook/manager-webpack5' @@ -9220,7 +9490,7 @@ snapshots: - webpack-hot-middleware - webpack-plugin-serve - '@storybook/router@6.4.19(react-dom@17.0.2)(react@17.0.2)': + '@storybook/router@6.4.19(react-dom@17.0.2(react@17.0.2))(react@17.0.2)': dependencies: '@storybook/client-logger': 6.4.19 core-js: 3.21.1 @@ -9233,7 +9503,7 @@ snapshots: react: 17.0.2 react-dom: 17.0.2(react@17.0.2) react-router: 6.2.2(react@17.0.2) - react-router-dom: 6.2.2(react-dom@17.0.2)(react@17.0.2) + react-router-dom: 6.2.2(react-dom@17.0.2(react@17.0.2))(react@17.0.2) ts-dedent: 2.2.0 '@storybook/semver@7.3.2': @@ -9241,9 +9511,9 @@ snapshots: core-js: 3.21.1 find-up: 4.1.0 - '@storybook/source-loader@6.4.19(react-dom@17.0.2)(react@17.0.2)': + '@storybook/source-loader@6.4.19(react-dom@17.0.2(react@17.0.2))(react@17.0.2)': dependencies: - '@storybook/addons': 6.4.19(react-dom@17.0.2)(react@17.0.2) + '@storybook/addons': 6.4.19(react-dom@17.0.2(react@17.0.2))(react@17.0.2) '@storybook/client-logger': 6.4.19 '@storybook/csf': 0.0.2--canary.87bc651.0 core-js: 3.21.1 @@ -9256,9 +9526,9 @@ snapshots: react-dom: 17.0.2(react@17.0.2) regenerator-runtime: 0.13.9 - '@storybook/store@6.4.19(react-dom@17.0.2)(react@17.0.2)': + '@storybook/store@6.4.19(react-dom@17.0.2(react@17.0.2))(react@17.0.2)': dependencies: - '@storybook/addons': 6.4.19(react-dom@17.0.2)(react@17.0.2) + '@storybook/addons': 6.4.19(react-dom@17.0.2(react@17.0.2))(react@17.0.2) '@storybook/client-logger': 6.4.19 '@storybook/core-events': 6.4.19 '@storybook/csf': 0.0.2--canary.87bc651.0 @@ -9276,10 +9546,10 @@ snapshots: ts-dedent: 2.2.0 util-deprecate: 1.0.2 - '@storybook/testing-library@0.0.9(react-dom@17.0.2)(react@17.0.2)': + '@storybook/testing-library@0.0.9(react-dom@17.0.2(react@17.0.2))(react@17.0.2)': dependencies: '@storybook/client-logger': 6.4.19 - '@storybook/instrumenter': 6.4.19(react-dom@17.0.2)(react@17.0.2) + '@storybook/instrumenter': 6.4.19(react-dom@17.0.2(react@17.0.2))(react@17.0.2) '@testing-library/dom': 8.11.3 '@testing-library/user-event': 13.5.0(@testing-library/dom@8.11.3) ts-dedent: 2.2.0 @@ -9287,15 +9557,15 @@ snapshots: - react - react-dom - '@storybook/theming@6.4.19(react-dom@17.0.2)(react@17.0.2)': + '@storybook/theming@6.4.19(react-dom@17.0.2(react@17.0.2))(react@17.0.2)': dependencies: '@emotion/core': 10.3.1(react@17.0.2) '@emotion/is-prop-valid': 0.8.8 - '@emotion/styled': 10.3.0(@emotion/core@10.3.1)(react@17.0.2) + '@emotion/styled': 10.3.0(@emotion/core@10.3.1(react@17.0.2))(react@17.0.2) '@storybook/client-logger': 6.4.19 core-js: 3.21.1 deep-object-diff: 1.1.9 - emotion-theming: 10.3.0(@emotion/core@10.3.1)(react@17.0.2) + emotion-theming: 10.3.0(@emotion/core@10.3.1(react@17.0.2))(react@17.0.2) global: 4.4.0 memoizerific: 1.11.3 polished: 4.1.4 @@ -9304,23 +9574,23 @@ snapshots: resolve-from: 5.0.0 ts-dedent: 2.2.0 - '@storybook/ui@6.4.19(@types/react@17.0.39)(react-dom@17.0.2)(react@17.0.2)': + '@storybook/ui@6.4.19(@types/react@17.0.39)(react-dom@17.0.2(react@17.0.2))(react@17.0.2)': dependencies: '@emotion/core': 10.3.1(react@17.0.2) - '@storybook/addons': 6.4.19(react-dom@17.0.2)(react@17.0.2) - '@storybook/api': 6.4.19(react-dom@17.0.2)(react@17.0.2) + '@storybook/addons': 6.4.19(react-dom@17.0.2(react@17.0.2))(react@17.0.2) + '@storybook/api': 6.4.19(react-dom@17.0.2(react@17.0.2))(react@17.0.2) '@storybook/channels': 6.4.19 '@storybook/client-logger': 6.4.19 - '@storybook/components': 6.4.19(@types/react@17.0.39)(react-dom@17.0.2)(react@17.0.2) + '@storybook/components': 6.4.19(@types/react@17.0.39)(react-dom@17.0.2(react@17.0.2))(react@17.0.2) '@storybook/core-events': 6.4.19 - '@storybook/router': 6.4.19(react-dom@17.0.2)(react@17.0.2) + '@storybook/router': 6.4.19(react-dom@17.0.2(react@17.0.2))(react@17.0.2) '@storybook/semver': 7.3.2 - '@storybook/theming': 6.4.19(react-dom@17.0.2)(react@17.0.2) + '@storybook/theming': 6.4.19(react-dom@17.0.2(react@17.0.2))(react@17.0.2) copy-to-clipboard: 3.3.1 core-js: 3.21.1 core-js-pure: 3.21.1 downshift: 6.1.7(react@17.0.2) - emotion-theming: 10.3.0(@emotion/core@10.3.1)(react@17.0.2) + emotion-theming: 10.3.0(@emotion/core@10.3.1(react@17.0.2))(react@17.0.2) fuse.js: 3.6.1 global: 4.4.0 lodash: 4.17.21 @@ -9330,8 +9600,8 @@ snapshots: qs: 6.10.3 react: 17.0.2 react-dom: 17.0.2(react@17.0.2) - react-draggable: 4.4.4(react-dom@17.0.2)(react@17.0.2) - react-helmet-async: 1.2.3(react-dom@17.0.2)(react@17.0.2) + react-draggable: 4.4.4(react-dom@17.0.2(react@17.0.2))(react@17.0.2) + react-helmet-async: 1.2.3(react-dom@17.0.2(react@17.0.2))(react@17.0.2) react-sizeme: 3.0.2 regenerator-runtime: 0.13.9 resolve-from: 5.0.0 @@ -9361,6 +9631,8 @@ snapshots: '@tootallnate/once@1.1.2': {} + '@tootallnate/quickjs-emscripten@0.23.0': {} + '@tsconfig/node10@1.0.8': {} '@tsconfig/node12@1.0.9': {} @@ -9542,7 +9814,7 @@ snapshots: dependencies: '@types/yargs-parser': 21.0.0 - '@typescript-eslint/eslint-plugin@5.61.0(@typescript-eslint/parser@5.61.0)(eslint@8.10.0)(typescript@4.5.5)': + '@typescript-eslint/eslint-plugin@5.61.0(@typescript-eslint/parser@5.61.0(eslint@8.10.0)(typescript@4.5.5))(eslint@8.10.0)(typescript@4.5.5)': dependencies: '@eslint-community/regexpp': 4.5.1 '@typescript-eslint/parser': 5.61.0(eslint@8.10.0)(typescript@4.5.5) @@ -9556,6 +9828,7 @@ snapshots: natural-compare-lite: 1.4.0 semver: 7.5.4 tsutils: 3.21.0(typescript@4.5.5) + optionalDependencies: typescript: 4.5.5 transitivePeerDependencies: - supports-color @@ -9575,6 +9848,7 @@ snapshots: '@typescript-eslint/typescript-estree': 5.61.0(typescript@4.5.5) debug: 4.3.4 eslint: 8.10.0 + optionalDependencies: typescript: 4.5.5 transitivePeerDependencies: - supports-color @@ -9596,6 +9870,7 @@ snapshots: debug: 4.3.4 eslint: 8.10.0 tsutils: 3.21.0(typescript@4.5.5) + optionalDependencies: typescript: 4.5.5 transitivePeerDependencies: - supports-color @@ -9613,6 +9888,7 @@ snapshots: is-glob: 4.0.3 semver: 7.5.4 tsutils: 3.21.0(typescript@4.5.5) + optionalDependencies: typescript: 4.5.5 transitivePeerDependencies: - supports-color @@ -9626,6 +9902,7 @@ snapshots: is-glob: 4.0.3 semver: 7.5.4 tsutils: 3.21.0(typescript@4.5.5) + optionalDependencies: typescript: 4.5.5 transitivePeerDependencies: - supports-color @@ -9668,7 +9945,7 @@ snapshots: '@typescript-eslint/types': 5.61.0 eslint-visitor-keys: 3.3.0 - '@usulpro/react-json-view@2.0.1(react-dom@17.0.2)(react@17.0.2)': + '@usulpro/react-json-view@2.0.1(react-dom@17.0.2(react@17.0.2))(react@17.0.2)': dependencies: color-string: 1.9.0 flux: 4.0.3(react@17.0.2) @@ -9813,6 +10090,8 @@ snapshots: transitivePeerDependencies: - supports-color + agent-base@7.1.3: {} + aggregate-error@3.1.0: dependencies: clean-stack: 2.2.0 @@ -10002,6 +10281,10 @@ snapshots: ast-types-flow@0.0.7: {} + ast-types@0.13.4: + dependencies: + tslib: 2.6.2 + ast-types@0.14.2: dependencies: tslib: 2.3.1 @@ -10011,6 +10294,8 @@ snapshots: async-each@1.0.3: optional: true + async@3.2.6: {} + asynckit@0.4.0: {} at-least-node@1.0.0: {} @@ -10173,6 +10458,8 @@ snapshots: mixin-deep: 1.3.2 pascalcase: 0.1.1 + basic-ftp@5.0.5: {} + batch-processor@1.0.0: {} better-opn@2.1.1: @@ -10468,6 +10755,8 @@ snapshots: ansi-styles: 4.3.0 supports-color: 7.2.0 + chalk@5.4.1: {} + character-entities-html4@1.1.4: {} character-entities-html4@2.1.0: {} @@ -10486,6 +10775,29 @@ snapshots: charcodes@0.2.0: {} + cheerio-select@2.1.0: + 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.2.2 + + cheerio@1.0.0: + dependencies: + cheerio-select: 2.1.0 + dom-serializer: 2.0.0 + domhandler: 5.0.3 + domutils: 3.2.2 + encoding-sniffer: 0.2.0 + htmlparser2: 9.1.0 + parse5: 7.3.0 + parse5-htmlparser2-tree-adapter: 7.1.0 + parse5-parser-stream: 7.1.2 + undici: 6.21.3 + whatwg-mimetype: 4.0.0 + chokidar@2.1.8: dependencies: anymatch: 2.0.0 @@ -10632,6 +10944,8 @@ snapshots: comma-separated-tokens@2.0.2: {} + commander@13.1.0: {} + commander@2.20.3: {} commander@4.1.1: {} @@ -10850,10 +11164,20 @@ snapshots: domutils: 2.8.0 nth-check: 2.0.1 + css-select@5.1.0: + dependencies: + boolbase: 1.0.0 + css-what: 6.1.0 + domhandler: 5.0.3 + domutils: 3.2.2 + nth-check: 2.0.1 + css-selector-parser@1.4.1: {} css-what@5.1.0: {} + css-what@6.1.0: {} + cssesc@3.0.0: {} cssom@0.3.8: {} @@ -10872,6 +11196,8 @@ snapshots: damerau-levenshtein@1.0.8: {} + data-uri-to-buffer@6.0.2: {} + data-urls@2.0.0: dependencies: abab: 2.0.6 @@ -10945,6 +11271,12 @@ snapshots: is-descriptor: 1.0.2 isobject: 3.0.1 + degenerator@5.0.1: + dependencies: + ast-types: 0.13.4 + escodegen: 2.1.0 + esprima: 4.0.1 + delayed-stream@1.0.0: {} delegates@1.0.0: {} @@ -11013,12 +11345,20 @@ snapshots: domhandler: 4.3.0 entities: 2.2.0 + dom-serializer@2.0.0: + dependencies: + domelementtype: 2.3.0 + domhandler: 5.0.3 + entities: 4.5.0 + dom-walk@0.1.2: {} domain-browser@1.2.0: {} domelementtype@2.2.0: {} + domelementtype@2.3.0: {} + domexception@2.0.1: dependencies: webidl-conversions: 5.0.0 @@ -11027,12 +11367,22 @@ snapshots: dependencies: domelementtype: 2.2.0 + domhandler@5.0.3: + dependencies: + domelementtype: 2.3.0 + domutils@2.8.0: dependencies: dom-serializer: 1.3.2 domelementtype: 2.2.0 domhandler: 4.3.0 + domutils@3.2.2: + dependencies: + dom-serializer: 2.0.0 + domelementtype: 2.3.0 + domhandler: 5.0.3 + dot-case@3.0.4: dependencies: no-case: 3.0.4 @@ -11086,7 +11436,7 @@ snapshots: emojis-list@3.0.0: {} - emotion-theming@10.3.0(@emotion/core@10.3.1)(react@17.0.2): + emotion-theming@10.3.0(@emotion/core@10.3.1(react@17.0.2))(react@17.0.2): dependencies: '@babel/runtime': 7.17.2 '@emotion/core': 10.3.1(react@17.0.2) @@ -11096,6 +11446,11 @@ snapshots: encodeurl@1.0.2: {} + encoding-sniffer@0.2.0: + dependencies: + iconv-lite: 0.6.3 + whatwg-encoding: 3.1.1 + end-of-stream@1.4.4: dependencies: once: 1.4.0 @@ -11114,6 +11469,10 @@ snapshots: entities@2.2.0: {} + entities@4.5.0: {} + + entities@6.0.0: {} + errno@0.1.8: dependencies: prr: 1.0.1 @@ -11191,35 +11550,43 @@ snapshots: optionalDependencies: source-map: 0.6.1 + escodegen@2.1.0: + dependencies: + esprima: 4.0.1 + estraverse: 5.3.0 + esutils: 2.0.3 + optionalDependencies: + source-map: 0.6.1 + eslint-config-airbnb-base@15.0.0(eslint-plugin-import@2.25.4)(eslint@8.10.0): dependencies: confusing-browser-globals: 1.0.11 eslint: 8.10.0 - eslint-plugin-import: 2.25.4(@typescript-eslint/parser@5.61.0)(eslint-import-resolver-typescript@2.5.0)(eslint@8.10.0) + eslint-plugin-import: 2.25.4(@typescript-eslint/parser@5.61.0(eslint@8.10.0)(typescript@4.5.5))(eslint-import-resolver-typescript@2.5.0)(eslint@8.10.0) object.assign: 4.1.2 object.entries: 1.1.5 semver: 6.3.1 - eslint-config-airbnb-typescript@16.1.4(@typescript-eslint/eslint-plugin@5.61.0)(@typescript-eslint/parser@5.61.0)(eslint-plugin-import@2.25.4)(eslint@8.10.0): + eslint-config-airbnb-typescript@16.1.4(@typescript-eslint/eslint-plugin@5.61.0(@typescript-eslint/parser@5.61.0(eslint@8.10.0)(typescript@4.5.5))(eslint@8.10.0)(typescript@4.5.5))(@typescript-eslint/parser@5.61.0(eslint@8.10.0)(typescript@4.5.5))(eslint-plugin-import@2.25.4)(eslint@8.10.0): dependencies: - '@typescript-eslint/eslint-plugin': 5.61.0(@typescript-eslint/parser@5.61.0)(eslint@8.10.0)(typescript@4.5.5) + '@typescript-eslint/eslint-plugin': 5.61.0(@typescript-eslint/parser@5.61.0(eslint@8.10.0)(typescript@4.5.5))(eslint@8.10.0)(typescript@4.5.5) '@typescript-eslint/parser': 5.61.0(eslint@8.10.0)(typescript@4.5.5) eslint: 8.10.0 eslint-config-airbnb-base: 15.0.0(eslint-plugin-import@2.25.4)(eslint@8.10.0) - eslint-plugin-import: 2.25.4(@typescript-eslint/parser@5.61.0)(eslint-import-resolver-typescript@2.5.0)(eslint@8.10.0) + eslint-plugin-import: 2.25.4(@typescript-eslint/parser@5.61.0(eslint@8.10.0)(typescript@4.5.5))(eslint-import-resolver-typescript@2.5.0)(eslint@8.10.0) - eslint-config-airbnb@19.0.4(eslint-plugin-import@2.25.4)(eslint-plugin-jsx-a11y@6.5.1)(eslint-plugin-react-hooks@4.3.0)(eslint-plugin-react@7.29.2)(eslint@8.10.0): + eslint-config-airbnb@19.0.4(eslint-plugin-import@2.25.4)(eslint-plugin-jsx-a11y@6.5.1(eslint@8.10.0))(eslint-plugin-react-hooks@4.3.0(eslint@8.10.0))(eslint-plugin-react@7.29.2(eslint@8.10.0))(eslint@8.10.0): dependencies: eslint: 8.10.0 eslint-config-airbnb-base: 15.0.0(eslint-plugin-import@2.25.4)(eslint@8.10.0) - eslint-plugin-import: 2.25.4(@typescript-eslint/parser@5.61.0)(eslint-import-resolver-typescript@2.5.0)(eslint@8.10.0) + eslint-plugin-import: 2.25.4(@typescript-eslint/parser@5.61.0(eslint@8.10.0)(typescript@4.5.5))(eslint-import-resolver-typescript@2.5.0)(eslint@8.10.0) eslint-plugin-jsx-a11y: 6.5.1(eslint@8.10.0) eslint-plugin-react: 7.29.2(eslint@8.10.0) eslint-plugin-react-hooks: 4.3.0(eslint@8.10.0) object.assign: 4.1.2 object.entries: 1.1.5 - eslint-config-next@12.1.0(eslint@8.10.0)(next@12.3.4)(typescript@4.5.5): + eslint-config-next@12.1.0(eslint@8.10.0)(next@12.3.4(@babel/core@7.17.5)(react-dom@17.0.2(react@17.0.2))(react@17.0.2))(typescript@4.5.5): dependencies: '@next/eslint-plugin-next': 12.1.0 '@rushstack/eslint-patch': 1.1.0 @@ -11227,11 +11594,12 @@ snapshots: eslint: 8.10.0 eslint-import-resolver-node: 0.3.6 eslint-import-resolver-typescript: 2.5.0(eslint-plugin-import@2.25.4)(eslint@8.10.0) - eslint-plugin-import: 2.25.4(@typescript-eslint/parser@5.61.0)(eslint-import-resolver-typescript@2.5.0)(eslint@8.10.0) + eslint-plugin-import: 2.25.4(@typescript-eslint/parser@5.61.0(eslint@8.10.0)(typescript@4.5.5))(eslint-import-resolver-typescript@2.5.0)(eslint@8.10.0) eslint-plugin-jsx-a11y: 6.5.1(eslint@8.10.0) eslint-plugin-react: 7.29.2(eslint@8.10.0) eslint-plugin-react-hooks: 4.3.0(eslint@8.10.0) - next: 12.3.4(@babel/core@7.17.5)(react-dom@17.0.2)(react@17.0.2) + next: 12.3.4(@babel/core@7.17.5)(react-dom@17.0.2(react@17.0.2))(react@17.0.2) + optionalDependencies: typescript: 4.5.5 transitivePeerDependencies: - eslint-import-resolver-webpack @@ -11252,7 +11620,7 @@ snapshots: dependencies: debug: 4.3.4 eslint: 8.10.0 - eslint-plugin-import: 2.25.4(@typescript-eslint/parser@5.61.0)(eslint-import-resolver-typescript@2.5.0)(eslint@8.10.0) + eslint-plugin-import: 2.25.4(@typescript-eslint/parser@5.61.0(eslint@8.10.0)(typescript@4.5.5))(eslint-import-resolver-typescript@2.5.0)(eslint@8.10.0) glob: 7.2.0 is-glob: 4.0.3 resolve: 1.22.0 @@ -11260,26 +11628,26 @@ snapshots: transitivePeerDependencies: - supports-color - eslint-module-utils@2.7.3(@typescript-eslint/parser@5.61.0)(eslint-import-resolver-node@0.3.6)(eslint-import-resolver-typescript@2.5.0): + eslint-module-utils@2.7.3(@typescript-eslint/parser@5.61.0(eslint@8.10.0)(typescript@4.5.5))(eslint-import-resolver-node@0.3.6)(eslint-import-resolver-typescript@2.5.0): dependencies: - '@typescript-eslint/parser': 5.61.0(eslint@8.10.0)(typescript@4.5.5) debug: 3.2.7 + find-up: 2.1.0 + optionalDependencies: + '@typescript-eslint/parser': 5.61.0(eslint@8.10.0)(typescript@4.5.5) eslint-import-resolver-node: 0.3.6 eslint-import-resolver-typescript: 2.5.0(eslint-plugin-import@2.25.4)(eslint@8.10.0) - find-up: 2.1.0 transitivePeerDependencies: - supports-color - eslint-plugin-import@2.25.4(@typescript-eslint/parser@5.61.0)(eslint-import-resolver-typescript@2.5.0)(eslint@8.10.0): + eslint-plugin-import@2.25.4(@typescript-eslint/parser@5.61.0(eslint@8.10.0)(typescript@4.5.5))(eslint-import-resolver-typescript@2.5.0)(eslint@8.10.0): dependencies: - '@typescript-eslint/parser': 5.61.0(eslint@8.10.0)(typescript@4.5.5) array-includes: 3.1.4 array.prototype.flat: 1.2.5 debug: 2.6.9 doctrine: 2.1.0 eslint: 8.10.0 eslint-import-resolver-node: 0.3.6 - eslint-module-utils: 2.7.3(@typescript-eslint/parser@5.61.0)(eslint-import-resolver-node@0.3.6)(eslint-import-resolver-typescript@2.5.0) + eslint-module-utils: 2.7.3(@typescript-eslint/parser@5.61.0(eslint@8.10.0)(typescript@4.5.5))(eslint-import-resolver-node@0.3.6)(eslint-import-resolver-typescript@2.5.0) has: 1.0.3 is-core-module: 2.8.1 is-glob: 4.0.3 @@ -11287,6 +11655,8 @@ snapshots: object.values: 1.1.5 resolve: 1.22.0 tsconfig-paths: 3.12.0 + optionalDependencies: + '@typescript-eslint/parser': 5.61.0(eslint@8.10.0)(typescript@4.5.5) transitivePeerDependencies: - eslint-import-resolver-typescript - eslint-import-resolver-webpack @@ -11308,12 +11678,13 @@ snapshots: language-tags: 1.0.5 minimatch: 3.1.2 - eslint-plugin-prettier@4.0.0(eslint-config-prettier@8.5.0)(eslint@8.10.0)(prettier@2.4.1): + eslint-plugin-prettier@4.0.0(eslint-config-prettier@8.5.0(eslint@8.10.0))(eslint@8.10.0)(prettier@2.4.1): dependencies: eslint: 8.10.0 - eslint-config-prettier: 8.5.0(eslint@8.10.0) prettier: 2.4.1 prettier-linter-helpers: 1.0.0 + optionalDependencies: + eslint-config-prettier: 8.5.0(eslint@8.10.0) eslint-plugin-react-hooks@4.3.0(eslint@8.10.0): dependencies: @@ -11728,7 +12099,6 @@ snapshots: dependencies: '@babel/code-frame': 7.22.13 chalk: 2.4.2 - eslint: 8.10.0 micromatch: 3.1.10 minimatch: 3.1.2 semver: 5.7.2 @@ -11736,6 +12106,8 @@ snapshots: typescript: 4.5.5 webpack: 4.46.0 worker-rpc: 0.1.1 + optionalDependencies: + eslint: 8.10.0 transitivePeerDependencies: - supports-color @@ -11747,7 +12119,6 @@ snapshots: chokidar: 3.5.3 cosmiconfig: 6.0.0 deepmerge: 4.2.2 - eslint: 8.10.0 fs-extra: 9.1.0 glob: 7.2.0 memfs: 3.4.1 @@ -11757,6 +12128,8 @@ snapshots: tapable: 1.1.3 typescript: 4.5.5 webpack: 4.46.0 + optionalDependencies: + eslint: 8.10.0 form-data@3.0.1: dependencies: @@ -11866,6 +12239,14 @@ snapshots: call-bind: 1.0.2 get-intrinsic: 1.1.1 + get-uri@6.0.4: + dependencies: + basic-ftp: 5.0.5 + data-uri-to-buffer: 6.0.2 + debug: 4.3.4 + transitivePeerDependencies: + - supports-color + get-value@2.0.6: {} github-slugger@1.4.0: {} @@ -12153,6 +12534,10 @@ snapshots: html-escaper@2.0.2: {} + html-link-extractor@1.0.5: + dependencies: + cheerio: 1.0.0 + html-minifier-terser@5.1.1: dependencies: camel-case: 4.1.2 @@ -12187,6 +12572,13 @@ snapshots: domutils: 2.8.0 entities: 2.2.0 + htmlparser2@9.1.0: + dependencies: + domelementtype: 2.3.0 + domhandler: 5.0.3 + domutils: 3.2.2 + entities: 4.5.0 + http-errors@1.8.1: dependencies: depd: 1.1.2 @@ -12211,6 +12603,13 @@ snapshots: transitivePeerDependencies: - supports-color + http-proxy-agent@7.0.2: + dependencies: + agent-base: 7.1.3 + debug: 4.3.4 + transitivePeerDependencies: + - supports-color + https-browserify@1.0.0: {} https-proxy-agent@5.0.1: @@ -12220,10 +12619,21 @@ snapshots: transitivePeerDependencies: - supports-color + https-proxy-agent@7.0.6: + dependencies: + agent-base: 7.1.3 + debug: 4.3.4 + transitivePeerDependencies: + - supports-color + iconv-lite@0.4.24: dependencies: safer-buffer: 2.1.2 + iconv-lite@0.6.3: + dependencies: + safer-buffer: 2.1.2 + icss-utils@4.1.1: dependencies: postcss: 7.0.39 @@ -12277,12 +12687,19 @@ snapshots: dependencies: loose-envify: 1.4.0 + ip-address@9.0.5: + dependencies: + jsbn: 1.1.0 + sprintf-js: 1.1.3 + ip@1.1.5: {} ipaddr.js@1.9.1: {} is-absolute-url@3.0.3: {} + is-absolute-url@4.0.1: {} + is-accessor-descriptor@0.1.6: dependencies: kind-of: 3.2.2 @@ -12457,6 +12874,10 @@ snapshots: call-bind: 1.0.2 has-tostringtag: 1.0.0 + is-relative-url@4.0.0: + dependencies: + is-absolute-url: 4.0.1 + is-set@2.0.2: {} is-shared-array-buffer@1.0.1: {} @@ -12610,6 +13031,8 @@ snapshots: dependencies: argparse: 2.0.1 + jsbn@1.1.0: {} + jsdom@16.7.0: dependencies: abab: 2.0.6 @@ -12758,6 +13181,16 @@ snapshots: lines-and-columns@1.2.4: {} + link-check@5.4.0: + dependencies: + is-relative-url: 4.0.0 + ms: 2.1.3 + needle: 3.3.1 + node-email-verifier: 2.0.0 + proxy-agent: 6.5.0 + transitivePeerDependencies: + - supports-color + loader-runner@2.4.0: {} loader-utils@1.4.2: @@ -12835,6 +13268,8 @@ snapshots: dependencies: yallist: 4.0.0 + lru-cache@7.18.3: {} + lz-string@1.4.4: {} make-dir@2.1.0: @@ -12864,6 +13299,25 @@ snapshots: markdown-extensions@1.1.1: {} + markdown-link-check@3.13.7: + dependencies: + async: 3.2.6 + chalk: 5.4.1 + commander: 13.1.0 + link-check: 5.4.0 + markdown-link-extractor: 4.0.2 + needle: 3.3.1 + progress: 2.0.3 + proxy-agent: 6.5.0 + xmlbuilder2: 3.1.1 + transitivePeerDependencies: + - supports-color + + markdown-link-extractor@4.0.2: + dependencies: + html-link-extractor: 1.0.5 + marked: 12.0.2 + markdown-table@2.0.0: dependencies: repeat-string: 1.6.1 @@ -12874,6 +13328,8 @@ snapshots: dependencies: react: 17.0.2 + marked@12.0.2: {} + material-colors@1.2.6: {} md5.js@1.3.5: @@ -13512,19 +13968,26 @@ snapshots: nearest-color@0.4.4: {} + needle@3.3.1: + dependencies: + iconv-lite: 0.6.3 + sax: 1.4.1 + negotiator@0.6.3: {} neo-async@2.6.2: {} nested-error-stacks@2.1.0: {} + netmask@2.0.2: {} + next-compose-plugins@2.2.1: {} - next-linaria@0.11.0(linaria@2.3.1): + next-linaria@0.11.0(linaria@2.3.1(@babel/core@7.17.5)): dependencies: linaria: 2.3.1(@babel/core@7.17.5) - next-mdx-remote@4.0.2(react-dom@17.0.2)(react@17.0.2): + next-mdx-remote@4.0.2(react-dom@17.0.2(react@17.0.2))(react@17.0.2): dependencies: '@mdx-js/mdx': 2.1.0 '@mdx-js/react': 2.1.1(react@17.0.2) @@ -13545,13 +14008,13 @@ snapshots: transitivePeerDependencies: - supports-color - next-sitemap@2.5.20(next@12.3.4): + next-sitemap@2.5.20(next@12.3.4(@babel/core@7.17.5)(react-dom@17.0.2(react@17.0.2))(react@17.0.2)): dependencies: '@corex/deepmerge': 2.6.148 minimist: 1.2.7 - next: 12.3.4(@babel/core@7.17.5)(react-dom@17.0.2)(react@17.0.2) + next: 12.3.4(@babel/core@7.17.5)(react-dom@17.0.2(react@17.0.2))(react@17.0.2) - next@12.3.4(@babel/core@7.17.5)(react-dom@17.0.2)(react@17.0.2): + next@12.3.4(@babel/core@7.17.5)(react-dom@17.0.2(react@17.0.2))(react@17.0.2): dependencies: '@next/env': 12.3.4 '@swc/helpers': 0.4.11 @@ -13590,6 +14053,11 @@ snapshots: dependencies: minimatch: 3.1.2 + node-email-verifier@2.0.0: + dependencies: + ms: 2.1.3 + validator: 13.15.15 + node-fetch@2.6.7: dependencies: whatwg-url: 5.0.0 @@ -13824,6 +14292,24 @@ snapshots: p-try@2.2.0: {} + pac-proxy-agent@7.2.0: + dependencies: + '@tootallnate/quickjs-emscripten': 0.23.0 + agent-base: 7.1.3 + debug: 4.3.4 + get-uri: 6.0.4 + http-proxy-agent: 7.0.2 + https-proxy-agent: 7.0.6 + pac-resolver: 7.0.1 + socks-proxy-agent: 8.0.5 + transitivePeerDependencies: + - supports-color + + pac-resolver@7.0.1: + dependencies: + degenerator: 5.0.1 + netmask: 2.0.2 + pako@1.0.11: {} parallel-transform@1.2.0: @@ -13887,8 +14373,21 @@ snapshots: dependencies: parse5: 6.0.1 + parse5-htmlparser2-tree-adapter@7.1.0: + dependencies: + domhandler: 5.0.3 + parse5: 7.3.0 + + parse5-parser-stream@7.1.2: + dependencies: + parse5: 7.3.0 + parse5@6.0.1: {} + parse5@7.3.0: + dependencies: + entities: 6.0.0 + parseurl@1.3.3: {} pascal-case@3.1.2: @@ -14057,8 +14556,10 @@ snapshots: process@0.11.10: {} + progress@2.0.3: {} + promise-inflight@1.0.1(bluebird@3.7.2): - dependencies: + optionalDependencies: bluebird: 3.7.2 promise.allsettled@1.0.5: @@ -14102,6 +14603,21 @@ snapshots: forwarded: 0.2.0 ipaddr.js: 1.9.1 + proxy-agent@6.5.0: + dependencies: + agent-base: 7.1.3 + debug: 4.3.4 + http-proxy-agent: 7.0.2 + https-proxy-agent: 7.0.6 + lru-cache: 7.18.3 + pac-proxy-agent: 7.2.0 + proxy-from-env: 1.1.0 + socks-proxy-agent: 8.0.5 + transitivePeerDependencies: + - supports-color + + proxy-from-env@1.1.0: {} + prr@1.0.1: {} psl@1.8.0: {} @@ -14204,7 +14720,7 @@ snapshots: reactcss: 1.2.3(react@17.0.2) tinycolor2: 1.4.2 - react-colorful@5.5.1(react-dom@17.0.2)(react@17.0.2): + react-colorful@5.5.1(react-dom@17.0.2(react@17.0.2))(react@17.0.2): dependencies: react: 17.0.2 react-dom: 17.0.2(react@17.0.2) @@ -14235,7 +14751,7 @@ snapshots: react: 17.0.2 scheduler: 0.20.2 - react-draggable@4.4.4(react-dom@17.0.2)(react@17.0.2): + react-draggable@4.4.4(react-dom@17.0.2(react@17.0.2))(react@17.0.2): dependencies: clsx: 1.1.1 prop-types: 15.8.1 @@ -14246,7 +14762,7 @@ snapshots: dependencies: prop-types: 15.8.1 - react-element-to-jsx-string@14.3.4(react-dom@17.0.2)(react@17.0.2): + react-element-to-jsx-string@14.3.4(react-dom@17.0.2(react@17.0.2))(react@17.0.2): dependencies: '@base2/pretty-print-object': 1.0.1 is-plain-object: 5.0.0 @@ -14256,7 +14772,7 @@ snapshots: react-fast-compare@3.2.0: {} - react-helmet-async@1.2.3(react-dom@17.0.2)(react@17.0.2): + react-helmet-async@1.2.3(react-dom@17.0.2(react@17.0.2))(react@17.0.2): dependencies: '@babel/runtime': 7.17.2 invariant: 2.2.4 @@ -14279,7 +14795,7 @@ snapshots: react-lifecycles-compat@3.0.4: {} - react-popper-tooltip@3.1.1(react-dom@17.0.2)(react@17.0.2): + react-popper-tooltip@3.1.1(react-dom@17.0.2(react@17.0.2))(react@17.0.2): dependencies: '@babel/runtime': 7.17.2 '@popperjs/core': 2.11.2 @@ -14302,7 +14818,7 @@ snapshots: prop-types: 15.8.1 react-easy-swipe: 0.0.21 - react-router-dom@6.2.2(react-dom@17.0.2)(react@17.0.2): + react-router-dom@6.2.2(react-dom@17.0.2(react@17.0.2))(react@17.0.2): dependencies: history: 5.3.0 react: 17.0.2 @@ -14702,6 +15218,8 @@ snapshots: transitivePeerDependencies: - supports-color + sax@1.4.1: {} + saxes@5.0.1: dependencies: xmlchars: 2.2.0 @@ -14853,6 +15371,8 @@ snapshots: slash@3.0.0: {} + smart-buffer@4.2.0: {} + snapdragon-node@2.1.1: dependencies: define-property: 1.0.0 @@ -14876,6 +15396,19 @@ snapshots: transitivePeerDependencies: - supports-color + socks-proxy-agent@8.0.5: + dependencies: + agent-base: 7.1.3 + debug: 4.3.4 + socks: 2.8.4 + transitivePeerDependencies: + - supports-color + + socks@2.8.4: + dependencies: + ip-address: 9.0.5 + smart-buffer: 4.2.0 + source-list-map@2.0.1: {} source-map-js@1.0.2: {} @@ -14925,6 +15458,8 @@ snapshots: sprintf-js@1.0.3: {} + sprintf-js@1.1.3: {} + ssri@6.0.2: dependencies: figgy-pudding: 3.5.2 @@ -15070,8 +15605,9 @@ snapshots: styled-jsx@5.0.7(@babel/core@7.17.5)(react@17.0.2): dependencies: - '@babel/core': 7.17.5 react: 17.0.2 + optionalDependencies: + '@babel/core': 7.17.5 stylis@3.5.4: {} @@ -15254,7 +15790,7 @@ snapshots: yn: 3.1.1 ts-pnp@1.2.0(typescript@4.5.5): - dependencies: + optionalDependencies: typescript: 4.5.5 tsconfig-paths@3.12.0: @@ -15320,6 +15856,8 @@ snapshots: dependencies: '@fastify/busboy': 2.0.0 + undici@6.21.3: {} + unfetch@4.2.0: {} unherit@1.1.3: @@ -15494,13 +16032,14 @@ snapshots: urix@0.1.0: {} - url-loader@4.1.1(file-loader@6.2.0)(webpack@4.46.0): + url-loader@4.1.1(file-loader@6.2.0(webpack@4.46.0))(webpack@4.46.0): dependencies: - file-loader: 6.2.0(webpack@4.46.0) loader-utils: 2.0.2 mime-types: 2.1.34 schema-utils: 3.1.1 webpack: 4.46.0 + optionalDependencies: + file-loader: 6.2.0(webpack@4.46.0) url@0.11.0: dependencies: @@ -15513,14 +16052,16 @@ snapshots: use-isomorphic-layout-effect@1.1.1(@types/react@17.0.39)(react@17.0.2): dependencies: - '@types/react': 17.0.39 react: 17.0.2 + optionalDependencies: + '@types/react': 17.0.39 use-latest@1.2.0(@types/react@17.0.39)(react@17.0.2): dependencies: - '@types/react': 17.0.39 react: 17.0.2 use-isomorphic-layout-effect: 1.1.1(@types/react@17.0.39)(react@17.0.2) + optionalDependencies: + '@types/react': 17.0.39 use-sync-external-store@1.2.0(react@17.0.2): dependencies: @@ -15573,6 +16114,8 @@ snapshots: spdx-correct: 3.1.1 spdx-expression-parse: 3.0.1 + validator@13.15.15: {} + vary@1.1.2: {} vfile-location@3.2.0: {} @@ -15738,8 +16281,14 @@ snapshots: dependencies: iconv-lite: 0.4.24 + whatwg-encoding@3.1.1: + dependencies: + iconv-lite: 0.6.3 + whatwg-mimetype@2.3.0: {} + whatwg-mimetype@4.0.0: {} + whatwg-url@5.0.0: dependencies: tr46: 0.0.3 @@ -15832,6 +16381,13 @@ snapshots: xml-name-validator@3.0.0: {} + xmlbuilder2@3.1.1: + dependencies: + '@oozcitak/dom': 1.15.10 + '@oozcitak/infra': 1.0.8 + '@oozcitak/util': 8.3.8 + js-yaml: 3.14.1 + xmlchars@2.2.0: {} xtend@4.0.2: {} diff --git a/src/components/ui/AlphaBanner.tsx b/src/components/ui/AlphaBanner.tsx index 4603e46d..bd33af20 100644 --- a/src/components/ui/AlphaBanner.tsx +++ b/src/components/ui/AlphaBanner.tsx @@ -72,11 +72,11 @@ const AlphaBanner = () => { {isDesktop ? ( <> - Hardhat 3 alpha: Rust rewrite, Solidity tests, multi-chain, - and more + Hacking at ETHGlobal Prague? Try Hardhat 3 alpha—Rust-powered, + Solidity tests, multi-chain, and more. ) : ( - <>Try the Hardhat 3 alpha release + <>At ETHGlobal? Try the Hardhat 3 alpha release )} diff --git a/src/config.ts b/src/config.ts index 40e40e0d..4bb66fe8 100644 --- a/src/config.ts +++ b/src/config.ts @@ -25,8 +25,8 @@ export const SOCIALS_LINKS = { export const PRIVACY_POLICY_PATH = "/privacy-policy.html"; export const bannerContent = { - text: "Hardhat 3 alpha: Rust rewrite, Solidity tests, multi-chain, and more!", - shortText: "Try the Hardhat 3 alpha release!", + text: "Hacking at ETHGlobal Prague? Try Hardhat 3 alpha—Rust-powered, Solidity tests, multi-chain, and more.", + shortText: "At ETHGlobal? Try the Hardhat 3 alpha release", href: "/hardhat3-alpha", }; diff --git a/src/content/hardhat3-alpha/_dirinfo.yaml b/src/content/hardhat3-alpha/_dirinfo.yaml index 6fedf725..41f22a97 100644 --- a/src/content/hardhat3-alpha/_dirinfo.yaml +++ b/src/content/hardhat3-alpha/_dirinfo.yaml @@ -1,21 +1,21 @@ section-type: group section-title: Hardhat 3 Alpha order: - - title: Overview - href: "#overview" - title: Getting started - href: "#getting-started" + href: "#getting-started-with-hardhat-3" + - title: Installation + href: "#installation" + - title: Project structure + href: "#project-structure" + - title: Writing a smart contract + href: "#writing-a-smart-contract" + - title: Testing your contracts + href: "#testing-your-contracts" - title: Solidity tests href: "#solidity-tests" - - title: Integration tests with TypeScript - href: "#integration-tests-with-typescript" - - title: Multichain capabilities - href: "#multichain-capabilities" - - title: Seamless contract deployments - href: "#seamless-contract-deployments" - - title: Revamped build system - href: "#revamped-build-system" - - title: Declarative configuration - href: "#declarative-configuration" - - title: Powerful extensibility - href: "#powerful-extensibility" + - title: TypeScript tests + href: "#typescript-tests" + - title: Writing scripts + href: "#writing-scripts-to-interact-with-the-network" + - title: Deploying contracts + href: "#deploying-contracts" diff --git a/src/content/hardhat3-alpha/index.md b/src/content/hardhat3-alpha/index.md index 9e58e52d..2dc15172 100644 --- a/src/content/hardhat3-alpha/index.md +++ b/src/content/hardhat3-alpha/index.md @@ -1,54 +1,37 @@ --- -prev: false +prev: true --- -# Hardhat 3 Alpha +# Getting started with Hardhat 3 -## Overview +Hardhat is a flexible and extensible development environment for Ethereum software. It helps you write, test, debug and deploy your smart contracts with ease, whether you're building a simple prototype or a complex production system. -Welcome to the Hardhat 3 Alpha! This tutorial walks you through the major changes coming in Hardhat 3, including Solidity tests, support for multichain workflows, a revamped build system, and more. +This guide will walk you through the installation of our recommended setup, but as most of Hardhat's functionality comes from plugins, you are free to customize it or choose a completely different path. -We assume you are familiar with Hardhat 2, but this tutorial isn't meant as a migration guide. Since Hardhat 3 is still in alpha and its APIs might change, we recommend waiting until the beta release before migrating. +## Installation -Join our [Hardhat 3 Alpha](https://hardhat.org/hardhat3-alpha-telegram-group) Telegram group to share feedback and stay updated on new releases. It's still early, and your input can help us make Hardhat 3 the best it can be. +:::tip -## Getting started - -This section covers how to initialize the sample project for this tutorial. Make sure you have Node.js v22 or later installed, along with a package manager like `npm` or `pnpm`. - -Open a terminal and run these commands to create a new directory and initialize a Node.js project: - -::::tabsgroup{options=npm,pnpm} - -:::tab{value=npm} - -``` -mkdir hardhat3-alpha -cd hardhat3-alpha -npm init -y -``` +[Hardhat for Visual Studio Code](../hardhat-vscode/) is the official Hardhat extension that adds advanced support for Solidity to VSCode. If you use Visual Studio Code, give it a try! ::: -:::tab{value=pnpm} - -``` -mkdir hardhat3-alpha -cd hardhat3-alpha -pnpm init -``` +To get started with Hardhat 3, you’ll need [Node.js](https://nodejs.org/) v22 or later installed on your system, along with a package manager such as [npm](https://www.npmjs.com/) or [pnpm](https://pnpm.io/). -::: +First, create a new directory for your project: -:::: +```bash +mkdir hardhat-example +cd hardhat-example +``` -Then initialize the sample project: +Once that's done, initialize your Hardhat project by running: ::::tabsgroup{options=npm,pnpm} :::tab{value=npm} -``` +```bash npx hardhat@next --init ``` @@ -56,78 +39,86 @@ npx hardhat@next --init :::tab{value=pnpm} -``` -pnpx hardhat@next --init +```bash +pnpm dlx hardhat@next --init ``` ::: :::: -Accept the default answers for each question: - -1. Select the current directory as the project location. -2. Enable ESM for the project. -3. Set **Node Test Runner and Viem** as the testing setup. -4. Install the necessary dependencies. +This command will prompt you with a few configuration options. You can accept the default answers to quickly scaffold a working setup. -::::tip +Using the defaults will: -The built-in [Node.js test runner](https://nodejs.org/api/test.html) is fast and requires no dependencies, and [viem](https://viem.sh/) is easy to use and has powerful typing features. We recommend using them, but Hardhat will continue to support Mocha and Ethers.js for backward compatibility and for those who prefer not to switch libraries. +1. Initialize the project in the current directory. +2. Use the example project that includes the [Node.js test runner](https://nodejs.org/api/test.html) and [viem](https://viem.sh/). +3. Automatically install all the required dependencies. -:::: - -Everything should be set up now. Verify it by printing the help output: +After the setup is complete, you’ll have a fully working Hardhat 3 project with everything you need to get started. Run the Hardhat help to verify the project was set up correctly: ::::tabsgroup{options=npm,pnpm} :::tab{value=npm} -``` -npx hardhat +```bash +npx hardhat --help ``` ::: :::tab{value=pnpm} -``` -pnpm hardhat +```bash +pnpm hardhat --help ``` ::: :::: -## Solidity tests +## Project structure -Hardhat 3 has full support for writing Foundry-compatible Solidity tests. You can write unit, fuzz, and invariant tests, and use testing libraries like [forge-std](https://github.com/foundry-rs/forge-std) and [PRBTest](https://github.com/PaulRBerg/prb-test). +The Hardhat project initialization from the previous section creates the following file structure: -Run the sample project's Solidity tests with the `test solidity` task: +``` +hardhat.config.ts -::::tabsgroup{options=npm,pnpm} +contracts +├── Counter.sol +└── Counter.t.sol -:::tab{value=npm} +test +└── Counter.ts -``` -npx hardhat test solidity +ignition +└── modules + └── Counter.ts + +scripts +├── check-predeploy.ts +└── send-op-tx.ts ``` -::: +Here’s a quick overview of these files and directories: -:::tab{value=pnpm} +- `hardhat.config.ts`: The main configuration file for your project. It defines settings like the Solidity compiler version, network configurations, and the plugins and tasks your project uses. -``` -pnpm hardhat test solidity -``` +- `contracts`: Contains your project's Solidity contracts. You can also include Solidity test files here. Any file ending in `.t.sol` will be treated as a test file. -::: +- `test`: Used for TypeScript integration tests. You can also include Solidity test files here. -:::: +- `ignition`: Holds your [Hardhat Ignition](https://hardhat.org/ignition) deployment modules, which describe how your contracts should be deployed. + +- `scripts`: A place for any custom scripts that interact with your contracts or automate parts of your workflow. Scripts have full access to Hardhat’s runtime and can use plugins, connect to networks, deploy contracts, and more. -The contract being tested is `Counter`, located in the `contracts/Counter.sol` file: +## Writing a smart contract + +Writing a smart contract with Hardhat is as easy as writing a Solidity file inside the `contracts` directory. For example, your `contracts/Counter.sol` should look like this: ```solidity +pragma solidity ^0.8.28; + contract Counter { uint public x; @@ -146,7 +137,43 @@ contract Counter { } ``` -And this is the content of the `contracts/Counter.t.sol` Solidity test file: +Hardhat will automatically detect it, and compile it with the correct version of Solidity based on its `pragma` statement and your Hardhat configuration. All you need to do is running: + +::::tabsgroup{options=npm,pnpm} + +:::tab{value=npm} + +```bash +npx hardhat compile +``` + +::: + +:::tab{value=pnpm} + +```bash +pnpm hardhat compile +``` + +::: + +:::: + +You can learn more about how to customize your Solidity version and settings in [this guide](./learn-more/configuring-the-compiler.md). + +## Testing your contracts + +Tests are a critical part of any Ethereum project. Hardhat lets you write tests in both **Solidity** and **TypeScript**, giving you flexibility to choose the right tool for each situation. + +Solidity tests run directly on the EVM and are great for unit tests. They execute in a controlled environment, making them fast and deterministic. They also have access to test-related EVM extensions, normally called cheatcodes, which allow you to build complex tests in Solidity. + +TypeScript tests, on the other hand, use a fully-simulated local blockchain and interact with it through JSON-RPC. This allows you to write more complex or end-to-end tests using the full power of a general-purpose programming language and a realistic blockchain simulation. You can use any Ethereum TypeScript library, like [viem](https://viem.sh/) or [ethers.js](https://docs.ethers.org/v5/) to write your tests. + +Use Solidity when you want low-level, efficient, EVM-native tests. Use TypeScript when you want richer tooling, more flexible assertions, or to test blockchain-level interactions, like workflows involving multiple transactions. + +### Solidity tests + +Hardhat 3 has full support for writing Solidity tests. The example project includes a Solidity test file at `contracts/Counter.t.sol`: ```solidity import { Counter } from "./Counter.sol"; @@ -177,508 +204,242 @@ contract CounterTest is Test { } ``` -The `CounterTest` contract is deployed, and all its functions starting with `test` are executed. If an execution reverts, that test is considered a failure. Test contracts can also include a `setUp` function, which runs before each test function. - -Functions that start with `test` and have no parameters are unit tests, while those with parameters are considered fuzz tests. Fuzz tests are run multiple times with randomly generated inputs. If any of those executions revert, the test fails and the input is printed. - -Solidity tests have access to cheatcodes—special functions that can be called by a test to modify the EVM in non-standard ways. In the sample test, `test_IncByZero` uses the `vm.expectRevert` cheatcode, which expects the next call to revert. If the call _doesn't_ revert, the test fails. There are many other cheatcodes available; for example, you can change the value of `block.number` with the `vm.roll` cheatcode. - -### Stack traces in Solidity tests - -Failed tests include Solidity stack traces. To see them in action, make the `test_IncByZero` test fail by commenting out the `expectRevert` cheatcode: - -```solidity{2} - function test_IncByZero() public { - // vm.expectRevert(); - counter.incBy(0); - } -``` - -And run `npx hardhat test solidity` again to get a stack trace: - -``` -Failure (1): test_IncByZero() -Reason: revert: incBy: increment should be positive - at Counter.incBy (contracts/Counter.sol:15) - at CounterTest.test_IncByZero (contracts/Counter.t.sol:27) -``` - -## Integration tests with TypeScript - -Solidity tests are great for unit testing, but there are situations where they fall short: - -- **Complex tests**, where a general-purpose language is more comfortable and productive than Solidity. -- **Tests that need real blockchain behavior**, such as blocks and transactions. While you can use cheatcodes to simulate this, mocking too many things is error-prone and hard to maintain. -- **End-to-end tests**, where you test deployed contracts under conditions similar to production. - -To handle these cases, Hardhat 3 continues to support writing tests in TypeScript or JavaScript. - -The sample project includes a TypeScript test as an example. The `Counter` contract emits an `Increment(uint by)` event when the value is incremented. Suppose you want to send multiple transactions, aggregate all the emitted events, and assert something about the result. While this can be done in Solidity, TypeScript makes it more convenient: - -```ts -describe("Counter", async function () { - const { viem } = await network.connect(); - const publicClient = await viem.getPublicClient(); - - it("The sum of the Increment events should match the current value", async function () { - const vault = await viem.deployContract("Counter"); - - // run a series of increments - for (let i = 1n; i <= 10n; i++) { - await vault.write.incBy([i]); - } - - const events = await publicClient.getContractEvents({ - address: vault.address, - abi: vault.abi, - eventName: "Increment", - fromBlock: 0n, - strict: true, - }); - - // check that the aggregated events match the current value - let total = 0n; - for (const event of events) { - total += event.args.by; - } - - assert.equal(total, await vault.read.x()); - }); -}); -``` - -To run the TypeScript tests in the project, execute the following command: +You can run all the test in your project — both Solidity and TypeScript — using the `test` task: ::::tabsgroup{options=npm,pnpm} :::tab{value=npm} -``` -npx hardhat test node +```bash +npx hardhat test ``` ::: :::tab{value=pnpm} -``` -pnpm hardhat test node +```bash +pnpm hardhat test ``` ::: :::: -This task comes from the Hardhat plugin for the Node.js test runner, but you can use alternative setups. We provide another plugin for Mocha, and it's possible to write plugins for other test runners as well. - -To run all your tests—both Solidity and TypeScript—use the `test` task: +If you only want to run your Solidity tests, you can use this instead: ::::tabsgroup{options=npm,pnpm} :::tab{value=npm} -``` -npx hardhat test +```bash +npx hardhat test solidity ``` ::: :::tab{value=pnpm} -``` -pnpm hardhat test +```bash +pnpm hardhat test solidity ``` ::: :::: -## Multichain capabilities +When you run this command, Hardhat will: -Like other Ethereum development tools, Hardhat 2 assumes you're working with a single network that behaves like Ethereum Mainnet. That assumption made sense in the past, but it no longer reflects today's rollup-centric ecosystem. +- Compile your contracts and tests. +- Treat all `.t.sol` files in the `contracts/` directory and all `.sol` files in the `test/` directory as test files. +- Deploy each test contract defined in those files. +- Call every function that starts with `test`. If any of these calls revert, the corresponding test is marked as failed. -Hardhat 3 drops that assumption: +In the example above: -- You can choose the type of chain you want to interact with. -- You can manage connections to multiple networks at once. +- `test_InitialValue` and `test_IncByZero` are **unit tests**: they take no parameters and run once per test execution. +- `testFuzz_Inc` is a **fuzz test**: since it takes a parameter, Hardhat will run it multiple times using random inputs. If any of those runs revert, the fuzz test fails and the failing input is printed. -### Chain types +If any of your tests fails, Hardhat will provide detailed **Solidity stack traces** to help you understand why. To see them in action, first comment out the `vm.expectRevert();` line in `test_IncByZero`: -Hardhat 3 introduces the concept of chain types. You can think of a chain type as the common behavior shared by a chain and its testnets. The initial release supports three chain types: +```solidity +function test_IncByZero() public { + // vm.expectRevert(); + counter.incBy(0); +} +``` -- `l1`, for Ethereum Mainnet and its testnets. -- `optimism`, for OP Mainnet and OP Sepolia. -- `generic`, a fallback for chains that are not supported. +Then run the last command again and you’ll get a stack-trace along with the test failure: -We'll gradually add new options over time. +``` +Failure (1): test_IncByZero() +Reason: revert: incBy: increment should be positive + at Counter.incBy (contracts/Counter.sol:15) + at CounterTest.test_IncByZero (contracts/Counter.t.sol:30) +``` -The `scripts/send-op-tx.ts` script demonstrates how to use chain types: +This lets you quickly pinpoint the issue, even across deeply nested calls. -```ts -import { network } from "hardhat"; +Learn more at [writing Solidity tests here](./learn-more/writing-solidity-tests.md). -const chainType = "optimism"; +### TypeScript tests -const { viem } = await network.connect("hardhatOp", chainType); +Solidity tests are ideal for fast, focused unit testing, but they fall short in certain situations: -console.log("Sending transaction using the OP chain type"); +- **Complex test logic**, where a general-purpose language like TypeScript is more expressive and ergonomic than Solidity. +- **Tests that require realistic blockchain behavior**, such as advancing blocks or working with gas costs or multiple transactions. While cheatcodes can simulate this to some extent, excessive mocking is hard to maintain and can lead to inaccurate assumptions. +- **End-to-end scenarios**, where you want to test your contracts as they would behave in production—across multiple transactions, clients, and user interactions. -const publicClient = await viem.getPublicClient(); -const [senderClient] = await viem.getWalletClients(); +To support these cases, Hardhat lets you write tests in TypeScript (or JavaScript), using the Node.js test runner or other frameworks like Mocha. These tests run in a real Node.js environment and interact with your contracts through RPC, making them more representative of actual usage. -console.log("Sending 1 wei from", senderClient.account.address, "to itself"); +The example project includes a TypeScript test file at `test/Counter.ts`: -const l1Gas = await publicClient.estimateL1Gas({ - account: senderClient.account.address, - to: senderClient.account.address, - value: 1n, -}); +```tsx +describe("Counter", async function () { + const { viem } = await network.connect(); + const publicClient = await viem.getPublicClient(); -console.log("Estimated L1 gas:", l1Gas); + it("The sum of the Increment events should match the current value", async function () { + const counter = await viem.deployContract("Counter"); -console.log("Sending L2 transaction"); -const tx = await senderClient.sendTransaction({ - to: senderClient.account.address, - value: 1n, -}); + // run a series of increments + for (let i = 1n; i <= 10n; i++) { + await counter.write.incBy([i]); + } -await publicClient.waitForTransactionReceipt({ hash: tx }); + const events = await publicClient.getContractEvents({ + address: counter.address, + abi: counter.abi, + eventName: "Increment", + fromBlock: 0n, + strict: true, + }); + + // check that the aggregated events match the current value + let total = 0n; + for (const event of events) { + total += event.args.by; + } -console.log("Transaction sent successfully"); + assert.equal(total, await counter.read.x()); + }); +}); ``` -This script estimates the [L1 gas](https://docs.optimism.io/stack/transactions/fees) that will be used by an L2 transaction. It uses viem's [OP Stack extension](https://viem.sh/op-stack) on a local network configured with the `optimism` chain type. Run this command to try it out: +To run only your TypeScript tests, use the `test node` task: ::::tabsgroup{options=npm,pnpm} :::tab{value=npm} -``` -npx hardhat run scripts/send-op-tx.ts +```bash +npx hardhat test node ``` ::: :::tab{value=pnpm} -``` -pnpm hardhat run scripts/send-op-tx.ts +```bash +pnpm hardhat test node ``` ::: :::: -If you edit the script and change the value of `chainType` to `"l1"`, it will no longer work. More importantly, that change will cause a compilation error, thanks to the powerful TypeScript capabilities of Hardhat 3 and viem. +This test deploys the `Counter` contract, calls `incBy` multiple times (each in a separate transaction), collects all the emitted `Increment` events, and verifies that their sum matches the contract's final value. -### Network manager +Writing this same test in Solidity is possible, but less convenient, and the test would be executed in a different context — closer to a single transaction calling the contract multiple times, than different users interacting with it over time. This makes TypeScript a better fit for scenarios that depend on realistic transaction flows or blockchain behavior. -In Hardhat 2, a task always uses a single, fixed network connection during its entire execution. You can't change this connection or create new ones. Hardhat 3 removes these limitations. You can create connections at runtime, have multiple connections simultaneously, or close them when needed. +You can write any TypeScript code you want in your tests, as they are normal TypeScript files with access to Hardhat. In this example, we use `viem` to interact with the contracts and test the expected behavior. To learn more about how to use `viem` with Hardhat, read [this guide](./learn-more/using-viem.md). -`scripts/check-predeploy.ts` illustrates this: +## Writing scripts to interact with the network -```ts -import { network } from "hardhat"; +A script in Hardhat is just a TypeScript or JavaScript file with access to your contracts, configuration, and any other functionality that Hardhat provides. You can use them to run custom logic or to automate workflows. -// address of the GasPriceOracle predeploy in OP Stack chains -const OP_GAS_PRICE_ORACLE = "0x420000000000000000000000000000000000000F"; +By convention, scripts are located in the `scripts/` directory. You can name them however you like and use either `.ts` or `.js` extensions. -async function mainnetExample() { - const { viem } = await network.connect("hardhatMainnet", "l1"); +The example project includes two scripts. One of them, `scripts/send-op-tx.ts`, shows how you can simulate a local Optimism-like network and send a transaction on it. - const publicClient = await viem.getPublicClient(); - const gasPriceOracleCode = await publicClient.getCode({ - address: OP_GAS_PRICE_ORACLE, - }); - - console.log( - "GasPriceOracle exists in l1 chain type?", - gasPriceOracleCode !== undefined - ); -} - -async function opExample() { - const { viem } = await network.connect("hardhatOp", "optimism"); - - const publicClient = await viem.getPublicClient(); - const gasPriceOracleCode = await publicClient.getCode({ - address: OP_GAS_PRICE_ORACLE, - }); - - console.log( - "GasPriceOracle exists in optimism chain type?", - gasPriceOracleCode !== undefined - ); -} - -await mainnetExample(); -await opExample(); -``` - -Each function creates a connection to a different network and checks if a given predeploy exists. - -The `network.connect` function returns a network connection, which is an object with properties related to the network: - -- It includes information about the network and an EIP-1193 provider to interact with it. -- It provides extensions added by plugins, like a `viem` helper object when the `hardhat-viem` plugin is used. - -`network.connect` accepts two optional parameters: a network name and a chain type. The network name corresponds to one of the networks in your Hardhat config. The chain type is used to perform validations and to properly type the returned object. - -## Seamless contract deployments - -Hardhat comes with an official deployment solution: [**Hardhat Ignition**](https://hardhat.org/ignition), a declarative system for deploying smart contracts. It's already available in Hardhat 2 and has been adopted by many projects. The API hasn't changed in Hardhat 3: if you're familiar with it, you won't encounter any surprises. - -With Hardhat Ignition, you define the smart contract instances you want to deploy, along with any operations you want to perform on them. These definitions are grouped into Ignition Modules, which are then analyzed and executed in the most efficient way. This includes sending independent transactions in parallel, recovering from errors, and resuming interrupted deployments. - -The sample project includes an Ignition Module as an example. To deploy this module in a simulated network, run the following command: +To run a script, you can use the `run` task: ::::tabsgroup{options=npm,pnpm} :::tab{value=npm} -``` -npx hardhat ignition deploy ignition/modules/Counter.ts +```bash +npx hardhat run scripts/send-op-tx.ts ``` ::: :::tab{value=pnpm} -``` -pnpm hardhat ignition deploy ignition/modules/Counter.ts +```bash +pnpm hardhat run scripts/send-op-tx.ts ``` ::: :::: -This deployment is executed on the default network, which lasts only for the duration of the task. To simulate a deployment on a persistent network, follow these steps: - -1. Start a Hardhat node with `npx hardhat node` or `pnpm hardhat node`. -2. Open another terminal and deploy the module to the Hardhat node: - - ::::tabsgroup{options=npm,pnpm} - - :::tab{value=npm} - - ``` - npx hardhat ignition deploy --network localhost ignition/modules/Counter.ts - ``` - - ::: - - :::tab{value=pnpm} - - ``` - pnpm hardhat ignition deploy --network localhost ignition/modules/Counter.ts - ``` - - ::: - - :::: - -3. Run the same command again once the deployment finishes. Since the module has already been deployed, Ignition won't send any transactions. -4. Without stopping the node, add the following line to the Ignition module in `ignition/modules/Counter.ts`: - - ```ts{3} - m.call(counter, "incBy", [5n]); - - m.call(counter, "inc"); - - return { counter }; - ``` - -5. Run the command from step 2 once more. This time, only the new action runs. +By doing this, Hardhat will compile your contracts and run your script with access to all of Hardhat's functionality. -While Hardhat Ignition is our recommended approach for deploying contracts, you're free to use other tools. For example, you can use custom scripts for simple deployments or a deployment plugin from the community. +## Deploying contracts -### Managing secrets +The example project comes with our official deployment solution: **Hardhat Ignition**, a declarative system for deploying smart contracts. -Hardhat 3 includes an encrypted secrets manager that makes it easier to handle sensitive information like private keys. This ensures you don't have to hardcode secrets in your source code or store them in plain text. +With Hardhat Ignition, you define the smart contract instances you want to deploy, along with any operations you want to perform on them. These definitions are grouped into Ignition Modules, which are then analyzed and executed in the most efficient way. This includes sending independent transactions in parallel, recovering from errors, and resuming interrupted deployments. -The sepolia network configuration uses an encrypted secret for its RPC URL and private key: +Ignition modules are located in the `ignition/modules/` directory. This is the example module, `ignition/modules/Counter.ts`: -```js -networks: { - sepolia: { - type: "http", - chainType: "l1", - url: configVariable("SEPOLIA_RPC_URL"), - accounts: [configVariable("SEPOLIA_PRIVATE_KEY")], - }, -}, -``` +```typescript +import { buildModule } from "@nomicfoundation/hardhat-ignition/modules"; -Run the following tasks to add these secrets: +export default buildModule("CounterModule", (m) => { + const counter = m.contract("Counter"); -::::tabsgroup{options=npm,pnpm} - -:::tab{value=npm} + m.call(counter, "incBy", [5n]); + return { counter }; +}); ``` -npx hardhat keystore set SEPOLIA_RPC_URL -npx hardhat keystore set SEPOLIA_PRIVATE_KEY -``` - -::: - -:::tab{value=pnpm} - -``` -pnpm hardhat keystore set SEPOLIA_RPC_URL -pnpm hardhat keystore set SEPOLIA_PRIVATE_KEY -``` - -::: - -:::: - -::::tip -If you don't have an RPC URL for Sepolia, you can use a public one like `https://sepolia.gateway.tenderly.co`. Keep in mind that public endpoints like this can be slower and less reliable. +Inside a module you call functions, like `m.contract` and `m.call`, to describe the deployment you want to execute. To learn more about how to write an Ignition module, please read [this document](https://hardhat.org/ignition/docs/guides/creating-modules). -:::: - -Once the secrets are set, you can deploy the Ignition module to Sepolia: +Modules are deployed with the `ignition deploy` task. To check that the deployment works correctly, let's run it in a simulated network: ::::tabsgroup{options=npm,pnpm} :::tab{value=npm} -``` -npx hardhat ignition deploy --network sepolia ignition/modules/Counter.ts +```bash +npx hardhat ignition deploy ignition/modules/Counter.ts ``` ::: :::tab{value=pnpm} -``` -pnpm hardhat ignition deploy --network sepolia ignition/modules/Counter.ts +```bash +pnpm hardhat ignition deploy ignition/modules/Counter.ts ``` ::: :::: -Enter your password to decrypt the private key, confirm that you want to deploy to Sepolia, and wait until Hardhat Ignition finishes the deployment. After this, if you repeat the command, Ignition will detect that the module has already been deployed and won't send any new transactions. - -Secrets are only decrypted when needed, which means you only need to enter the password if a Hardhat task actually uses a secret. - -## Revamped build system - -The build system was completely redesigned in Hardhat 3 to make it more powerful and flexible. The new system includes **build profiles**, offers **better npm compatibility**, and adds **opt-in support for user remappings**. - -### Build profiles - -Different workflows need different compiler settings. **Build profiles**, a new feature in Hardhat 3, let you handle this easily. - -The sample project comes with two build profiles, `default` and `production`: - -```js -solidity: { - profiles: { - default: { - version: "0.8.28", - }, - production: { - version: "0.8.28", - settings: { - optimizer: { - enabled: true, - runs: 200, - }, - }, - }, - }, -} -``` - -The `default` profile disables the optimizer, making it ideal for development workflows that need fast compilation times. The `production` profile is an example for production workflows, where optimized code matters more than compilation speed. - -Tasks can choose to use a sensible build profile by default. For example, tasks that deploy contracts can rely on the `production` profile, while other tasks can use the `default` profile. You can also pass the `--build-profile` flag to choose which profile should be used. - -Build profiles don't need to be explicitly defined. If you include a Solidity configuration like you do in Hardhat 2, those settings will be used in the `default` profile: - -```js -solidity: { - version: "0.8.28", -} -``` - -### Full npm support - -The build system of Hardhat 3 is now fully integrated with npm: **anything that can be done with npm is supported**. In most cases, this won't affect you, but advanced scenarios that were previously difficult or unsupported now work out of the box. - -A difficult scenario in Hardhat 2 was handling conflicting transitive dependencies. Suppose you have a project with two dependencies, each of which depends on a different version of OpenZeppelin. This leads to conflicts that require complex manual workarounds. In Hardhat 3, this same scenario works automatically without any extra effort on your part. - -The new compilation system uses remappings internally to manage Solidity dependencies, but this complexity is hidden from you. **User-defined remappings are fully supported**, but using them is optional—there's no need to set them unless you want to. - -## Declarative configuration - -Hardhat 3 configuration is done via a TypeScript file, and it's now fully declarative. This contrasts with Hardhat 2, where some things are configured by the side effects of certain imports and function calls. - -For example, in Hardhat 2 you only need to import a plugin to enable it: - -```ts -// Hardhat 2 -import "some-hardhat-plugin"; -``` - -In Hardhat 3, you must explicitly add the imported plugin to the configuration object: - -```ts -// Hardhat 3 -import SomeHardhatPlugin from "some-hardhat-plugin"; - -const config: HardhatUserConfig = { - plugins: [SomeHardhatPlugin], - // ...other configuration... -}; -``` - -Although slightly more verbose, a fully declarative configuration has many advantages: - -- Faster load times, even with multiple plugins. -- Greater flexibility in building the configuration object, such as dynamically enabling or disabling plugins. -- The ability to create Hardhat environments at runtime, useful in advanced use cases. - -Leaving aside these differences and the options related to new features, the configuration is essentially the same as in Hardhat 2. - -## Powerful extensibility - -The main extensibility point of Hardhat 3, like in Hardhat 2, is the ability to create custom tasks. The following example defines an `accounts` task that prints the accounts in the network: - -```ts -import { task, HardhatUserConfig } from "hardhat/config"; - -const accountsTask = task("accounts", "Prints the list of accounts") - .setAction(async (taskArgs, { network }) => { - const { provider } = await network.connect(); - - const accounts = await provider.request({ method: "eth_accounts" }); - - console.log(accounts); - }) - .build(); - -const config: HardhatUserConfig = { - tasks: [accountsTask], - // ...other configuration... -}; -``` - -Defining this task is similar to how it's done in Hardhat 2, with two differences: - -- It needs to be included in the configuration object, just like plugins. -- The `build` function must be called at the end. - -Hardhat 3 also includes a new hook system that enables easy extension of core functionality and allows plugin authors to add their own extensibility points. +Your deployment was successfully executed in a network simulated by Hardhat! To learn more about how to deploy contracts with Ignition, including how to connect to a real network and how to manage your private keys, please read [this guide](./learn-more/deploying-contracts.md). -## Closing words +## Learn more -In this tutorial, we covered some of the biggest changes coming in Hardhat 3, including first-class Solidity tests, multichain support, a revamped build system, and more—all designed to make Ethereum development more powerful and flexible. +To learn more about Hardhat, check out these other guides: -This is an alpha release and things are still evolving. Your feedback is invaluable, whether it's about missing features, usability issues, or anything else. Share your thoughts in the [Hardhat 3 Alpha](https://hardhat.org/hardhat3-alpha-telegram-group) Telegram group or [open an issue](https://github.com/NomicFoundation/hardhat/issues/new?template=hardhat-3-alpha.yml) in our GitHub issue tracker. +- [Writing Solidity tests](./learn-more/writing-solidity-tests.md) +- [Using Viem with Hardhat](./learn-more/using-viem.md) +- [Deploying contracts](./learn-more/deploying-contracts.md) +- [Configuring the compiler](./learn-more/configuring-the-compiler.md) +- [Differences with Hardhat 2](./learn-more/comparison.md) -We'll continue refining Hardhat 3 in the alpha stage until all planned features are in place. Once complete, we'll release a beta version with comprehensive documentation and a migration guide to help projects transition smoothly. Thanks for trying it out, and stay tuned for updates! +and join our [Hardhat 3 Alpha](https://hardhat.org/hardhat3-alpha-telegram-group) Telegram group to share feedback and stay updated on new releases. diff --git a/src/content/hardhat3-alpha/learn-more/_dirinfo.yaml b/src/content/hardhat3-alpha/learn-more/_dirinfo.yaml index 98b31c28..f87416ea 100644 --- a/src/content/hardhat3-alpha/learn-more/_dirinfo.yaml +++ b/src/content/hardhat3-alpha/learn-more/_dirinfo.yaml @@ -1,13 +1,15 @@ section-type: group section-title: Learn more order: - - title: Differences with Hardhat 2 - href: /comparison - - title: Alpha version limitations - href: /alpha-limitations - - title: Configuring the compiler - href: /configuring-the-compiler - title: Writing Solidity tests href: /writing-solidity-tests - title: Using viem href: /using-viem + - title: Deploying contracts + href: /deploying-contracts + - title: Configuring the compiler + href: /configuring-the-compiler + - title: Differences with Hardhat 2 + href: /comparison + - title: Alpha version limitations + href: /alpha-limitations diff --git a/src/content/hardhat3-alpha/learn-more/deploying-contracts.md b/src/content/hardhat3-alpha/learn-more/deploying-contracts.md new file mode 100644 index 00000000..a30f85e0 --- /dev/null +++ b/src/content/hardhat3-alpha/learn-more/deploying-contracts.md @@ -0,0 +1,142 @@ +# Deploying smart contracts + +Hardhat comes with an official deployment solution: [**Hardhat Ignition**](https://hardhat.org/ignition), a declarative system for deploying smart contracts. It's already available in Hardhat 2 and has been adopted by many projects. The API hasn't changed in Hardhat 3: if you're familiar with it, you won't encounter any surprises. + +With Hardhat Ignition, you define the smart contract instances you want to deploy, along with any operations you want to perform on them. These definitions are grouped into Ignition Modules, which are then analyzed and executed in the most efficient way. This includes sending independent transactions in parallel, recovering from errors, and resuming interrupted deployments. + +The sample project includes an Ignition Module as an example. To learn more about how to write an Ignition module, please read [this document](https://hardhat.org/ignition/docs/guides/creating-modules). + +To deploy the example module in a simulated network, run the following command: + +::::tabsgroup{options=npm,pnpm} + +:::tab{value=npm} + +``` +npx hardhat ignition deploy ignition/modules/Counter.ts +``` + +::: + +:::tab{value=pnpm} + +``` +pnpm hardhat ignition deploy ignition/modules/Counter.ts +``` + +::: + +:::: + +This deployment is executed on the default network, which lasts only for the duration of the task. To simulate a deployment on a persistent network, follow these steps: + +1. Start a Hardhat node with `npx hardhat node` or `pnpm hardhat node`. +2. Open another terminal and deploy the module to the Hardhat node: + + ::::tabsgroup{options=npm,pnpm} + + :::tab{value=npm} + + ``` + npx hardhat ignition deploy --network localhost ignition/modules/Counter.ts + ``` + + ::: + + :::tab{value=pnpm} + + ``` + pnpm hardhat ignition deploy --network localhost ignition/modules/Counter.ts + ``` + + ::: + + :::: + +3. Run the same command again once the deployment finishes. Since the module has already been deployed, Ignition won't send any transactions. +4. Without stopping the node, add the following line to the Ignition module in `ignition/modules/Counter.ts`: + + ```ts{3} + m.call(counter, "incBy", [5n]); + + m.call(counter, "inc"); + + return { counter }; + ``` + +5. Run the command from step 2 once more. This time, only the new action runs. + +While Hardhat Ignition is our recommended approach for deploying contracts, you're free to use other tools. For example, you can use custom scripts for simple deployments or a deployment plugin from the community. + +## Managing secrets + +Hardhat 3 includes an encrypted secrets manager that makes it easier to handle sensitive information like private keys. This ensures you don't have to hardcode secrets in your source code or store them in plain text. + +The sepolia network configuration uses an encrypted secret for its RPC URL and private key: + +```js +networks: { + sepolia: { + type: "http", + chainType: "l1", + url: configVariable("SEPOLIA_RPC_URL"), + accounts: [configVariable("SEPOLIA_PRIVATE_KEY")], + }, +}, +``` + +Run the following tasks to add these secrets: + +::::tabsgroup{options=npm,pnpm} + +:::tab{value=npm} + +``` +npx hardhat keystore set SEPOLIA_RPC_URL +npx hardhat keystore set SEPOLIA_PRIVATE_KEY +``` + +::: + +:::tab{value=pnpm} + +``` +pnpm hardhat keystore set SEPOLIA_RPC_URL +pnpm hardhat keystore set SEPOLIA_PRIVATE_KEY +``` + +::: + +:::: + +::::tip + +If you don't have an RPC URL for Sepolia, you can use a public one like `https://sepolia.gateway.tenderly.co`. Keep in mind that public endpoints like this can be slower and less reliable. + +:::: + +Once the secrets are set, you can deploy the Ignition module to Sepolia: + +::::tabsgroup{options=npm,pnpm} + +:::tab{value=npm} + +``` +npx hardhat ignition deploy --network sepolia ignition/modules/Counter.ts +``` + +::: + +:::tab{value=pnpm} + +``` +pnpm hardhat ignition deploy --network sepolia ignition/modules/Counter.ts +``` + +::: + +:::: + +Enter your password to decrypt the private key, confirm that you want to deploy to Sepolia, and wait until Hardhat Ignition finishes the deployment. After this, if you repeat the command, Ignition will detect that the module has already been deployed and won't send any new transactions. + +Secrets are only decrypted when needed, which means you only need to enter the password if a Hardhat task actually uses a secret. diff --git a/src/content/hardhat3-alpha/learn-more/whats-new.md b/src/content/hardhat3-alpha/learn-more/whats-new.md new file mode 100644 index 00000000..9e58e52d --- /dev/null +++ b/src/content/hardhat3-alpha/learn-more/whats-new.md @@ -0,0 +1,684 @@ +--- +prev: false +--- + +# Hardhat 3 Alpha + +## Overview + +Welcome to the Hardhat 3 Alpha! This tutorial walks you through the major changes coming in Hardhat 3, including Solidity tests, support for multichain workflows, a revamped build system, and more. + +We assume you are familiar with Hardhat 2, but this tutorial isn't meant as a migration guide. Since Hardhat 3 is still in alpha and its APIs might change, we recommend waiting until the beta release before migrating. + +Join our [Hardhat 3 Alpha](https://hardhat.org/hardhat3-alpha-telegram-group) Telegram group to share feedback and stay updated on new releases. It's still early, and your input can help us make Hardhat 3 the best it can be. + +## Getting started + +This section covers how to initialize the sample project for this tutorial. Make sure you have Node.js v22 or later installed, along with a package manager like `npm` or `pnpm`. + +Open a terminal and run these commands to create a new directory and initialize a Node.js project: + +::::tabsgroup{options=npm,pnpm} + +:::tab{value=npm} + +``` +mkdir hardhat3-alpha +cd hardhat3-alpha +npm init -y +``` + +::: + +:::tab{value=pnpm} + +``` +mkdir hardhat3-alpha +cd hardhat3-alpha +pnpm init +``` + +::: + +:::: + +Then initialize the sample project: + +::::tabsgroup{options=npm,pnpm} + +:::tab{value=npm} + +``` +npx hardhat@next --init +``` + +::: + +:::tab{value=pnpm} + +``` +pnpx hardhat@next --init +``` + +::: + +:::: + +Accept the default answers for each question: + +1. Select the current directory as the project location. +2. Enable ESM for the project. +3. Set **Node Test Runner and Viem** as the testing setup. +4. Install the necessary dependencies. + +::::tip + +The built-in [Node.js test runner](https://nodejs.org/api/test.html) is fast and requires no dependencies, and [viem](https://viem.sh/) is easy to use and has powerful typing features. We recommend using them, but Hardhat will continue to support Mocha and Ethers.js for backward compatibility and for those who prefer not to switch libraries. + +:::: + +Everything should be set up now. Verify it by printing the help output: + +::::tabsgroup{options=npm,pnpm} + +:::tab{value=npm} + +``` +npx hardhat +``` + +::: + +:::tab{value=pnpm} + +``` +pnpm hardhat +``` + +::: + +:::: + +## Solidity tests + +Hardhat 3 has full support for writing Foundry-compatible Solidity tests. You can write unit, fuzz, and invariant tests, and use testing libraries like [forge-std](https://github.com/foundry-rs/forge-std) and [PRBTest](https://github.com/PaulRBerg/prb-test). + +Run the sample project's Solidity tests with the `test solidity` task: + +::::tabsgroup{options=npm,pnpm} + +:::tab{value=npm} + +``` +npx hardhat test solidity +``` + +::: + +:::tab{value=pnpm} + +``` +pnpm hardhat test solidity +``` + +::: + +:::: + +The contract being tested is `Counter`, located in the `contracts/Counter.sol` file: + +```solidity +contract Counter { + uint public x; + + event Increment(uint by); + + function inc() public { + x++; + emit Increment(1); + } + + function incBy(uint by) public { + require(by > 0, "incBy: increment should be positive"); + x += by; + emit Increment(by); + } +} +``` + +And this is the content of the `contracts/Counter.t.sol` Solidity test file: + +```solidity +import { Counter } from "./Counter.sol"; +import { Test } from "forge-std/Test.sol"; + +contract CounterTest is Test { + Counter counter; + + function setUp() public { + counter = new Counter(); + } + + function test_InitialValue() public view { + require(counter.x() == 0, "Initial value should be 0"); + } + + function testFuzz_Inc(uint8 x) public { + for (uint8 i = 0; i < x; i++) { + counter.inc(); + } + require(counter.x() == x, "Value after calling inc x times should be x"); + } + + function test_IncByZero() public { + vm.expectRevert(); + counter.incBy(0); + } +} +``` + +The `CounterTest` contract is deployed, and all its functions starting with `test` are executed. If an execution reverts, that test is considered a failure. Test contracts can also include a `setUp` function, which runs before each test function. + +Functions that start with `test` and have no parameters are unit tests, while those with parameters are considered fuzz tests. Fuzz tests are run multiple times with randomly generated inputs. If any of those executions revert, the test fails and the input is printed. + +Solidity tests have access to cheatcodes—special functions that can be called by a test to modify the EVM in non-standard ways. In the sample test, `test_IncByZero` uses the `vm.expectRevert` cheatcode, which expects the next call to revert. If the call _doesn't_ revert, the test fails. There are many other cheatcodes available; for example, you can change the value of `block.number` with the `vm.roll` cheatcode. + +### Stack traces in Solidity tests + +Failed tests include Solidity stack traces. To see them in action, make the `test_IncByZero` test fail by commenting out the `expectRevert` cheatcode: + +```solidity{2} + function test_IncByZero() public { + // vm.expectRevert(); + counter.incBy(0); + } +``` + +And run `npx hardhat test solidity` again to get a stack trace: + +``` +Failure (1): test_IncByZero() +Reason: revert: incBy: increment should be positive + at Counter.incBy (contracts/Counter.sol:15) + at CounterTest.test_IncByZero (contracts/Counter.t.sol:27) +``` + +## Integration tests with TypeScript + +Solidity tests are great for unit testing, but there are situations where they fall short: + +- **Complex tests**, where a general-purpose language is more comfortable and productive than Solidity. +- **Tests that need real blockchain behavior**, such as blocks and transactions. While you can use cheatcodes to simulate this, mocking too many things is error-prone and hard to maintain. +- **End-to-end tests**, where you test deployed contracts under conditions similar to production. + +To handle these cases, Hardhat 3 continues to support writing tests in TypeScript or JavaScript. + +The sample project includes a TypeScript test as an example. The `Counter` contract emits an `Increment(uint by)` event when the value is incremented. Suppose you want to send multiple transactions, aggregate all the emitted events, and assert something about the result. While this can be done in Solidity, TypeScript makes it more convenient: + +```ts +describe("Counter", async function () { + const { viem } = await network.connect(); + const publicClient = await viem.getPublicClient(); + + it("The sum of the Increment events should match the current value", async function () { + const vault = await viem.deployContract("Counter"); + + // run a series of increments + for (let i = 1n; i <= 10n; i++) { + await vault.write.incBy([i]); + } + + const events = await publicClient.getContractEvents({ + address: vault.address, + abi: vault.abi, + eventName: "Increment", + fromBlock: 0n, + strict: true, + }); + + // check that the aggregated events match the current value + let total = 0n; + for (const event of events) { + total += event.args.by; + } + + assert.equal(total, await vault.read.x()); + }); +}); +``` + +To run the TypeScript tests in the project, execute the following command: + +::::tabsgroup{options=npm,pnpm} + +:::tab{value=npm} + +``` +npx hardhat test node +``` + +::: + +:::tab{value=pnpm} + +``` +pnpm hardhat test node +``` + +::: + +:::: + +This task comes from the Hardhat plugin for the Node.js test runner, but you can use alternative setups. We provide another plugin for Mocha, and it's possible to write plugins for other test runners as well. + +To run all your tests—both Solidity and TypeScript—use the `test` task: + +::::tabsgroup{options=npm,pnpm} + +:::tab{value=npm} + +``` +npx hardhat test +``` + +::: + +:::tab{value=pnpm} + +``` +pnpm hardhat test +``` + +::: + +:::: + +## Multichain capabilities + +Like other Ethereum development tools, Hardhat 2 assumes you're working with a single network that behaves like Ethereum Mainnet. That assumption made sense in the past, but it no longer reflects today's rollup-centric ecosystem. + +Hardhat 3 drops that assumption: + +- You can choose the type of chain you want to interact with. +- You can manage connections to multiple networks at once. + +### Chain types + +Hardhat 3 introduces the concept of chain types. You can think of a chain type as the common behavior shared by a chain and its testnets. The initial release supports three chain types: + +- `l1`, for Ethereum Mainnet and its testnets. +- `optimism`, for OP Mainnet and OP Sepolia. +- `generic`, a fallback for chains that are not supported. + +We'll gradually add new options over time. + +The `scripts/send-op-tx.ts` script demonstrates how to use chain types: + +```ts +import { network } from "hardhat"; + +const chainType = "optimism"; + +const { viem } = await network.connect("hardhatOp", chainType); + +console.log("Sending transaction using the OP chain type"); + +const publicClient = await viem.getPublicClient(); +const [senderClient] = await viem.getWalletClients(); + +console.log("Sending 1 wei from", senderClient.account.address, "to itself"); + +const l1Gas = await publicClient.estimateL1Gas({ + account: senderClient.account.address, + to: senderClient.account.address, + value: 1n, +}); + +console.log("Estimated L1 gas:", l1Gas); + +console.log("Sending L2 transaction"); +const tx = await senderClient.sendTransaction({ + to: senderClient.account.address, + value: 1n, +}); + +await publicClient.waitForTransactionReceipt({ hash: tx }); + +console.log("Transaction sent successfully"); +``` + +This script estimates the [L1 gas](https://docs.optimism.io/stack/transactions/fees) that will be used by an L2 transaction. It uses viem's [OP Stack extension](https://viem.sh/op-stack) on a local network configured with the `optimism` chain type. Run this command to try it out: + +::::tabsgroup{options=npm,pnpm} + +:::tab{value=npm} + +``` +npx hardhat run scripts/send-op-tx.ts +``` + +::: + +:::tab{value=pnpm} + +``` +pnpm hardhat run scripts/send-op-tx.ts +``` + +::: + +:::: + +If you edit the script and change the value of `chainType` to `"l1"`, it will no longer work. More importantly, that change will cause a compilation error, thanks to the powerful TypeScript capabilities of Hardhat 3 and viem. + +### Network manager + +In Hardhat 2, a task always uses a single, fixed network connection during its entire execution. You can't change this connection or create new ones. Hardhat 3 removes these limitations. You can create connections at runtime, have multiple connections simultaneously, or close them when needed. + +`scripts/check-predeploy.ts` illustrates this: + +```ts +import { network } from "hardhat"; + +// address of the GasPriceOracle predeploy in OP Stack chains +const OP_GAS_PRICE_ORACLE = "0x420000000000000000000000000000000000000F"; + +async function mainnetExample() { + const { viem } = await network.connect("hardhatMainnet", "l1"); + + const publicClient = await viem.getPublicClient(); + const gasPriceOracleCode = await publicClient.getCode({ + address: OP_GAS_PRICE_ORACLE, + }); + + console.log( + "GasPriceOracle exists in l1 chain type?", + gasPriceOracleCode !== undefined + ); +} + +async function opExample() { + const { viem } = await network.connect("hardhatOp", "optimism"); + + const publicClient = await viem.getPublicClient(); + const gasPriceOracleCode = await publicClient.getCode({ + address: OP_GAS_PRICE_ORACLE, + }); + + console.log( + "GasPriceOracle exists in optimism chain type?", + gasPriceOracleCode !== undefined + ); +} + +await mainnetExample(); +await opExample(); +``` + +Each function creates a connection to a different network and checks if a given predeploy exists. + +The `network.connect` function returns a network connection, which is an object with properties related to the network: + +- It includes information about the network and an EIP-1193 provider to interact with it. +- It provides extensions added by plugins, like a `viem` helper object when the `hardhat-viem` plugin is used. + +`network.connect` accepts two optional parameters: a network name and a chain type. The network name corresponds to one of the networks in your Hardhat config. The chain type is used to perform validations and to properly type the returned object. + +## Seamless contract deployments + +Hardhat comes with an official deployment solution: [**Hardhat Ignition**](https://hardhat.org/ignition), a declarative system for deploying smart contracts. It's already available in Hardhat 2 and has been adopted by many projects. The API hasn't changed in Hardhat 3: if you're familiar with it, you won't encounter any surprises. + +With Hardhat Ignition, you define the smart contract instances you want to deploy, along with any operations you want to perform on them. These definitions are grouped into Ignition Modules, which are then analyzed and executed in the most efficient way. This includes sending independent transactions in parallel, recovering from errors, and resuming interrupted deployments. + +The sample project includes an Ignition Module as an example. To deploy this module in a simulated network, run the following command: + +::::tabsgroup{options=npm,pnpm} + +:::tab{value=npm} + +``` +npx hardhat ignition deploy ignition/modules/Counter.ts +``` + +::: + +:::tab{value=pnpm} + +``` +pnpm hardhat ignition deploy ignition/modules/Counter.ts +``` + +::: + +:::: + +This deployment is executed on the default network, which lasts only for the duration of the task. To simulate a deployment on a persistent network, follow these steps: + +1. Start a Hardhat node with `npx hardhat node` or `pnpm hardhat node`. +2. Open another terminal and deploy the module to the Hardhat node: + + ::::tabsgroup{options=npm,pnpm} + + :::tab{value=npm} + + ``` + npx hardhat ignition deploy --network localhost ignition/modules/Counter.ts + ``` + + ::: + + :::tab{value=pnpm} + + ``` + pnpm hardhat ignition deploy --network localhost ignition/modules/Counter.ts + ``` + + ::: + + :::: + +3. Run the same command again once the deployment finishes. Since the module has already been deployed, Ignition won't send any transactions. +4. Without stopping the node, add the following line to the Ignition module in `ignition/modules/Counter.ts`: + + ```ts{3} + m.call(counter, "incBy", [5n]); + + m.call(counter, "inc"); + + return { counter }; + ``` + +5. Run the command from step 2 once more. This time, only the new action runs. + +While Hardhat Ignition is our recommended approach for deploying contracts, you're free to use other tools. For example, you can use custom scripts for simple deployments or a deployment plugin from the community. + +### Managing secrets + +Hardhat 3 includes an encrypted secrets manager that makes it easier to handle sensitive information like private keys. This ensures you don't have to hardcode secrets in your source code or store them in plain text. + +The sepolia network configuration uses an encrypted secret for its RPC URL and private key: + +```js +networks: { + sepolia: { + type: "http", + chainType: "l1", + url: configVariable("SEPOLIA_RPC_URL"), + accounts: [configVariable("SEPOLIA_PRIVATE_KEY")], + }, +}, +``` + +Run the following tasks to add these secrets: + +::::tabsgroup{options=npm,pnpm} + +:::tab{value=npm} + +``` +npx hardhat keystore set SEPOLIA_RPC_URL +npx hardhat keystore set SEPOLIA_PRIVATE_KEY +``` + +::: + +:::tab{value=pnpm} + +``` +pnpm hardhat keystore set SEPOLIA_RPC_URL +pnpm hardhat keystore set SEPOLIA_PRIVATE_KEY +``` + +::: + +:::: + +::::tip + +If you don't have an RPC URL for Sepolia, you can use a public one like `https://sepolia.gateway.tenderly.co`. Keep in mind that public endpoints like this can be slower and less reliable. + +:::: + +Once the secrets are set, you can deploy the Ignition module to Sepolia: + +::::tabsgroup{options=npm,pnpm} + +:::tab{value=npm} + +``` +npx hardhat ignition deploy --network sepolia ignition/modules/Counter.ts +``` + +::: + +:::tab{value=pnpm} + +``` +pnpm hardhat ignition deploy --network sepolia ignition/modules/Counter.ts +``` + +::: + +:::: + +Enter your password to decrypt the private key, confirm that you want to deploy to Sepolia, and wait until Hardhat Ignition finishes the deployment. After this, if you repeat the command, Ignition will detect that the module has already been deployed and won't send any new transactions. + +Secrets are only decrypted when needed, which means you only need to enter the password if a Hardhat task actually uses a secret. + +## Revamped build system + +The build system was completely redesigned in Hardhat 3 to make it more powerful and flexible. The new system includes **build profiles**, offers **better npm compatibility**, and adds **opt-in support for user remappings**. + +### Build profiles + +Different workflows need different compiler settings. **Build profiles**, a new feature in Hardhat 3, let you handle this easily. + +The sample project comes with two build profiles, `default` and `production`: + +```js +solidity: { + profiles: { + default: { + version: "0.8.28", + }, + production: { + version: "0.8.28", + settings: { + optimizer: { + enabled: true, + runs: 200, + }, + }, + }, + }, +} +``` + +The `default` profile disables the optimizer, making it ideal for development workflows that need fast compilation times. The `production` profile is an example for production workflows, where optimized code matters more than compilation speed. + +Tasks can choose to use a sensible build profile by default. For example, tasks that deploy contracts can rely on the `production` profile, while other tasks can use the `default` profile. You can also pass the `--build-profile` flag to choose which profile should be used. + +Build profiles don't need to be explicitly defined. If you include a Solidity configuration like you do in Hardhat 2, those settings will be used in the `default` profile: + +```js +solidity: { + version: "0.8.28", +} +``` + +### Full npm support + +The build system of Hardhat 3 is now fully integrated with npm: **anything that can be done with npm is supported**. In most cases, this won't affect you, but advanced scenarios that were previously difficult or unsupported now work out of the box. + +A difficult scenario in Hardhat 2 was handling conflicting transitive dependencies. Suppose you have a project with two dependencies, each of which depends on a different version of OpenZeppelin. This leads to conflicts that require complex manual workarounds. In Hardhat 3, this same scenario works automatically without any extra effort on your part. + +The new compilation system uses remappings internally to manage Solidity dependencies, but this complexity is hidden from you. **User-defined remappings are fully supported**, but using them is optional—there's no need to set them unless you want to. + +## Declarative configuration + +Hardhat 3 configuration is done via a TypeScript file, and it's now fully declarative. This contrasts with Hardhat 2, where some things are configured by the side effects of certain imports and function calls. + +For example, in Hardhat 2 you only need to import a plugin to enable it: + +```ts +// Hardhat 2 +import "some-hardhat-plugin"; +``` + +In Hardhat 3, you must explicitly add the imported plugin to the configuration object: + +```ts +// Hardhat 3 +import SomeHardhatPlugin from "some-hardhat-plugin"; + +const config: HardhatUserConfig = { + plugins: [SomeHardhatPlugin], + // ...other configuration... +}; +``` + +Although slightly more verbose, a fully declarative configuration has many advantages: + +- Faster load times, even with multiple plugins. +- Greater flexibility in building the configuration object, such as dynamically enabling or disabling plugins. +- The ability to create Hardhat environments at runtime, useful in advanced use cases. + +Leaving aside these differences and the options related to new features, the configuration is essentially the same as in Hardhat 2. + +## Powerful extensibility + +The main extensibility point of Hardhat 3, like in Hardhat 2, is the ability to create custom tasks. The following example defines an `accounts` task that prints the accounts in the network: + +```ts +import { task, HardhatUserConfig } from "hardhat/config"; + +const accountsTask = task("accounts", "Prints the list of accounts") + .setAction(async (taskArgs, { network }) => { + const { provider } = await network.connect(); + + const accounts = await provider.request({ method: "eth_accounts" }); + + console.log(accounts); + }) + .build(); + +const config: HardhatUserConfig = { + tasks: [accountsTask], + // ...other configuration... +}; +``` + +Defining this task is similar to how it's done in Hardhat 2, with two differences: + +- It needs to be included in the configuration object, just like plugins. +- The `build` function must be called at the end. + +Hardhat 3 also includes a new hook system that enables easy extension of core functionality and allows plugin authors to add their own extensibility points. + +## Closing words + +In this tutorial, we covered some of the biggest changes coming in Hardhat 3, including first-class Solidity tests, multichain support, a revamped build system, and more—all designed to make Ethereum development more powerful and flexible. + +This is an alpha release and things are still evolving. Your feedback is invaluable, whether it's about missing features, usability issues, or anything else. Share your thoughts in the [Hardhat 3 Alpha](https://hardhat.org/hardhat3-alpha-telegram-group) Telegram group or [open an issue](https://github.com/NomicFoundation/hardhat/issues/new?template=hardhat-3-alpha.yml) in our GitHub issue tracker. + +We'll continue refining Hardhat 3 in the alpha stage until all planned features are in place. Once complete, we'll release a beta version with comprehensive documentation and a migration guide to help projects transition smoothly. Thanks for trying it out, and stay tuned for updates!