diff --git a/.changeset/soft-insects-walk.md b/.changeset/soft-insects-walk.md new file mode 100644 index 0000000..e0aea52 --- /dev/null +++ b/.changeset/soft-insects-walk.md @@ -0,0 +1,6 @@ +--- +'@formspree/react': major +'@formspree/core': minor +--- + +Upgrade to react 19 diff --git a/examples/cra-demo/package.json b/examples/cra-demo/package.json index a4675a7..a3f1acb 100644 --- a/examples/cra-demo/package.json +++ b/examples/cra-demo/package.json @@ -23,16 +23,16 @@ }, "dependencies": { "@formspree/react": "*", - "react": "^18.2.0", + "react": "^19.0.0", "react-copy-to-clipboard": "^5.1.0", - "react-dom": "^18.2.0", + "react-dom": "^19.0.0", "react-google-recaptcha-v3": "^1.10.1", "react-scripts": "5.0.1", "web-vitals": "^3.4.0" }, "devDependencies": { - "@types/react": "^18.0.15", + "@types/react": "^19.0.0", "@types/react-copy-to-clipboard": "^5.0.3", - "@types/react-dom": "^18.0.6" + "@types/react-dom": "^19.0.0" } } diff --git a/package.json b/package.json index 83eb34b..54ab749 100644 --- a/package.json +++ b/package.json @@ -18,6 +18,9 @@ "typecheck": "turbo run typecheck", "version-packages": "changeset version" }, + "resolutions": { + "@types/react": "^19.0.0" + }, "devDependencies": { "@babel/core": "^7.22.5", "@babel/preset-env": "^7.22.5", diff --git a/packages/formspree-core/package.json b/packages/formspree-core/package.json index f3f4105..9e28936 100644 --- a/packages/formspree-core/package.json +++ b/packages/formspree-core/package.json @@ -33,7 +33,7 @@ "typecheck": "tsc --noEmit" }, "dependencies": { - "@stripe/stripe-js": "^1.35.0" + "@stripe/stripe-js": "^5.5.0" }, "publishConfig": { "access": "public", diff --git a/packages/formspree-react/package.json b/packages/formspree-react/package.json index a9ec617..8cdf9dc 100644 --- a/packages/formspree-react/package.json +++ b/packages/formspree-react/package.json @@ -33,24 +33,24 @@ }, "dependencies": { "@formspree/core": "^3.0.2", - "@stripe/react-stripe-js": "^1.7.1", - "@stripe/stripe-js": "^1.35.0" + "@stripe/react-stripe-js": "^3.1.1", + "@stripe/stripe-js": "^5.5.0" }, "devDependencies": { "@babel/preset-react": "^7.22.5", "@swc/core": "^1.3.61", "@testing-library/dom": "^9.3.0", - "@testing-library/react": "^14.0.0", + "@testing-library/react": "^16.1.0", "@testing-library/user-event": "^14.4.3", - "@types/react": "^18.0.15", - "@types/react-dom": "^18.0.6", + "@types/react": "^19.0.0", + "@types/react-dom": "^19.0.0", "eslint-plugin-react-hooks": "^4.3.0", - "react": "^18.2.0", - "react-dom": "^18.2.0" + "react": "^19.0.0", + "react-dom": "^19.0.0" }, "peerDependencies": { - "react": "^16.8 || ^17.0 || ^18.0", - "react-dom": "^16.8 || ^17.0 || ^18.0" + "react": "^16.8 || ^17.0 || ^18.0 || ^19.0", + "react-dom": "^16.8 || ^17.0 || ^18.0 || ^19.0" }, "publishConfig": { "access": "public", diff --git a/packages/formspree-react/src/context.tsx b/packages/formspree-react/src/context.tsx index 5f4bf95..76e727b 100644 --- a/packages/formspree-react/src/context.tsx +++ b/packages/formspree-react/src/context.tsx @@ -1,6 +1,6 @@ import { createClient, getDefaultClient, type Client } from '@formspree/core'; import { Elements } from '@stripe/react-stripe-js'; -import { loadStripe } from '@stripe/stripe-js/pure.js'; +import { loadStripe } from '@stripe/stripe-js'; import React, { useContext, useEffect, diff --git a/packages/formspree-react/test/context.test.tsx b/packages/formspree-react/test/context.test.tsx index feca7a2..0d08786 100644 --- a/packages/formspree-react/test/context.test.tsx +++ b/packages/formspree-react/test/context.test.tsx @@ -1,12 +1,11 @@ import { useStripe } from '@stripe/react-stripe-js'; -import type { Stripe } from '@stripe/stripe-js'; -import { loadStripe } from '@stripe/stripe-js/pure.js'; +import { loadStripe, type Stripe } from '@stripe/stripe-js'; import { render, renderHook, waitFor } from '@testing-library/react'; import React from 'react'; import { CardElement, FormspreeProvider, useFormspree } from '../src'; import { createMockStripe } from './mockStripe'; -jest.mock('@stripe/stripe-js/pure.js'); +jest.mock('@stripe/stripe-js'); describe('FormspreeProvider', () => { describe('default', () => { diff --git a/packages/formspree-react/test/useSubmit.test.tsx b/packages/formspree-react/test/useSubmit.test.tsx index cbd01f2..f167cd2 100644 --- a/packages/formspree-react/test/useSubmit.test.tsx +++ b/packages/formspree-react/test/useSubmit.test.tsx @@ -1,10 +1,10 @@ import { isSubmissionError, type SubmissionError } from '@formspree/core'; -import type { - PaymentIntentResult, - PaymentMethodResult, - Stripe, +import { + loadStripe, + type PaymentIntentResult, + type PaymentMethodResult, + type Stripe, } from '@stripe/stripe-js'; -import { loadStripe } from '@stripe/stripe-js/pure.js'; import { render, screen, waitFor } from '@testing-library/react'; import userEvent from '@testing-library/user-event'; import React from 'react'; @@ -16,7 +16,7 @@ import { } from '../src'; import { createMockStripe } from './mockStripe'; -jest.mock('@stripe/stripe-js/pure.js'); +jest.mock('@stripe/stripe-js'); describe('useSubmit', () => { const mockedFetch = jest.spyOn(window, 'fetch'); diff --git a/yarn.lock b/yarn.lock index fb6b26b..0ee08e1 100644 --- a/yarn.lock +++ b/yarn.lock @@ -3152,17 +3152,17 @@ dependencies: "@sinonjs/commons" "^1.7.0" -"@stripe/react-stripe-js@^1.7.1": - version "1.16.5" - resolved "https://registry.yarnpkg.com/@stripe/react-stripe-js/-/react-stripe-js-1.16.5.tgz#51cf862b50ca91ae6193c77a5bec889e81047f10" - integrity sha512-lVPW3IfwdacyS22pP+nBB6/GNFRRhT/4jfgAK6T2guQmtzPwJV1DogiGGaBNhiKtSY18+yS8KlHSu+PvZNclvQ== +"@stripe/react-stripe-js@^3.1.1": + version "3.1.1" + resolved "https://registry.yarnpkg.com/@stripe/react-stripe-js/-/react-stripe-js-3.1.1.tgz#78a2575683637f87c965a81cc1e0f626138f20f1" + integrity sha512-+JzYFgUivVD7koqYV7LmLlt9edDMAwKH7XhZAHFQMo7NeRC+6D2JmQGzp9tygWerzwttwFLlExGp4rAOvD6l9g== dependencies: prop-types "^15.7.2" -"@stripe/stripe-js@^1.35.0": - version "1.54.0" - resolved "https://registry.yarnpkg.com/@stripe/stripe-js/-/stripe-js-1.54.0.tgz#f92f6b646533776a41bc62b650d2a03f1e282af8" - integrity sha512-nElTXkS+nMfDNMkWfLmyeqHQfMGJ1JjrjAVMibV61Oc/rYdUv0cKRYCi1l4ivZ5SySB3vQLcLolxbKBkbNznZA== +"@stripe/stripe-js@^5.5.0": + version "5.5.0" + resolved "https://registry.yarnpkg.com/@stripe/stripe-js/-/stripe-js-5.5.0.tgz#ae01b0258b9c3f874fd15766260a67fb6726fb1b" + integrity sha512-lkfjyAd34aeMpTKKcEVfy8IUyEsjuAT3t9EXr5yZDtdIUncnZpedl/xLV16Dkd4z+fQwixScsCCDxSMNtBOgpQ== "@surma/rollup-plugin-off-main-thread@^2.2.3": version "2.2.3" @@ -3343,7 +3343,7 @@ "@swc/core-win32-ia32-msvc" "1.3.61" "@swc/core-win32-x64-msvc" "1.3.61" -"@testing-library/dom@^9.0.0", "@testing-library/dom@^9.3.0": +"@testing-library/dom@^9.3.0": version "9.3.0" resolved "https://registry.yarnpkg.com/@testing-library/dom/-/dom-9.3.0.tgz#ed8ce10aa5e05eb6eaf0635b5b8975d889f66075" integrity sha512-Dffe68pGwI6WlLRYR2I0piIkyole9cSBH5jGQKCGMRpHW5RHCqAUaqc2Kv0tUyd4dU4DLPKhJIjyKOnjv4tuUw== @@ -3357,14 +3357,12 @@ lz-string "^1.5.0" pretty-format "^27.0.2" -"@testing-library/react@^14.0.0": - version "14.0.0" - resolved "https://registry.yarnpkg.com/@testing-library/react/-/react-14.0.0.tgz#59030392a6792450b9ab8e67aea5f3cc18d6347c" - integrity sha512-S04gSNJbYE30TlIMLTzv6QCTzt9AqIF5y6s6SzVFILNcNvbV/jU96GeiTPillGQo+Ny64M/5PV7klNYYgv5Dfg== +"@testing-library/react@^16.1.0": + version "16.1.0" + resolved "https://registry.yarnpkg.com/@testing-library/react/-/react-16.1.0.tgz#aa0c61398bac82eaf89776967e97de41ac742d71" + integrity sha512-Q2ToPvg0KsVL0ohND9A3zLJWcOXXcO8IDu3fj11KhNt0UlCWyFyvnCIBkd12tidB2lkiVRG8VFqdhcqhqnAQtg== dependencies: "@babel/runtime" "^7.12.5" - "@testing-library/dom" "^9.0.0" - "@types/react-dom" "^18.0.0" "@testing-library/user-event@^14.4.3": version "14.4.3" @@ -3612,11 +3610,6 @@ resolved "https://registry.yarnpkg.com/@types/prettier/-/prettier-2.7.3.tgz#3e51a17e291d01d17d3fc61422015a933af7a08f" integrity sha512-+68kP9yzs4LMp7VNh8gdzMSPZFL44MLGqiHWvttYJe+6qnuVr4Ek9wSBQoveqY/r+LwjCcU29kNVkidwim+kYA== -"@types/prop-types@*": - version "15.7.5" - resolved "https://registry.yarnpkg.com/@types/prop-types/-/prop-types-15.7.5.tgz#5f19d2b85a98e9558036f6a3cacc8819420f05cf" - integrity sha512-JCB8C6SnDoQf0cNycqd/35A7MjcnK+ZTqE7judS6o7utxUCg6imJg3QK2qzHKszlTjcj2cn+NwMB2i96ubpj7w== - "@types/q@^1.5.1": version "1.5.5" resolved "https://registry.yarnpkg.com/@types/q/-/q-1.5.5.tgz#75a2a8e7d8ab4b230414505d92335d1dcb53a6df" @@ -3632,27 +3625,23 @@ resolved "https://registry.yarnpkg.com/@types/range-parser/-/range-parser-1.2.4.tgz#cd667bcfdd025213aafb7ca5915a932590acdcdc" integrity sha512-EEhsLsD6UsDM1yFhAvy0Cjr6VwmpMWqFBCb9w07wVugF7w9nfajxLuVmngTIpgS6svCnm6Vaw+MZhoDCKnOfsw== -"@types/react-copy-to-clipboard@^5.0.3": - version "5.0.4" - resolved "https://registry.yarnpkg.com/@types/react-copy-to-clipboard/-/react-copy-to-clipboard-5.0.4.tgz#558f2c38a97f53693e537815f6024f1e41e36a7e" - integrity sha512-otTJsJpofYAeaIeOwV5xBUGpo6exXG2HX7X4nseToCB2VgPEBxGBHCm/FecZ676doNR7HCSTVtmohxfG2b3/yQ== +"@types/react-copy-to-clipboard@^5.0.7": + version "5.0.7" + resolved "https://registry.yarnpkg.com/@types/react-copy-to-clipboard/-/react-copy-to-clipboard-5.0.7.tgz#0cb724d4228f1c2f8f5675671b3971c8801d5f45" + integrity sha512-Gft19D+as4M+9Whq1oglhmK49vqPhcLzk8WfvfLvaYMIPYanyfLy0+CwFucMJfdKoSFyySPmkkWn8/E6voQXjQ== dependencies: "@types/react" "*" -"@types/react-dom@^18.0.0", "@types/react-dom@^18.0.6": - version "18.2.4" - resolved "https://registry.yarnpkg.com/@types/react-dom/-/react-dom-18.2.4.tgz#13f25bfbf4e404d26f62ac6e406591451acba9e0" - integrity sha512-G2mHoTMTL4yoydITgOGwWdWMVd8sNgyEP85xVmMKAPUBwQWm9wBPQUmvbeF4V3WBY1P7mmL4BkjQ0SqUpf1snw== - dependencies: - "@types/react" "*" +"@types/react-dom@^19.0.0": + version "19.0.2" + resolved "https://registry.yarnpkg.com/@types/react-dom/-/react-dom-19.0.2.tgz#ad21f9a1ee881817995fd3f7fd33659c87e7b1b7" + integrity sha512-c1s+7TKFaDRRxr1TxccIX2u7sfCnc3RxkVyBIUA2lCpyqCF+QoAwQ/CBg7bsMdVwP120HEH143VQezKtef5nCg== -"@types/react@*", "@types/react@^18.0.15": - version "18.2.7" - resolved "https://registry.yarnpkg.com/@types/react/-/react-18.2.7.tgz#dfb4518042a3117a045b8c222316f83414a783b3" - integrity sha512-ojrXpSH2XFCmHm7Jy3q44nXDyN54+EYKP2lBhJ2bqfyPj6cIUW/FZW/Csdia34NQgq7KYcAlHi5184m4X88+yw== +"@types/react@*", "@types/react@^19.0.0": + version "19.0.2" + resolved "https://registry.yarnpkg.com/@types/react/-/react-19.0.2.tgz#9363e6b3ef898c471cb182dd269decc4afc1b4f6" + integrity sha512-USU8ZI/xyKJwFTpjSVIrSeHBVAGagkHQKPNbxeWwql/vDmnTIBgx+TJnhFnj1NXgz8XfprU0egV2dROLGpsBEg== dependencies: - "@types/prop-types" "*" - "@types/scheduler" "*" csstype "^3.0.2" "@types/resolve@1.17.1": @@ -3667,11 +3656,6 @@ resolved "https://registry.yarnpkg.com/@types/retry/-/retry-0.12.0.tgz#2b35eccfcee7d38cd72ad99232fbd58bffb3c84d" integrity sha512-wWKOClTTiizcZhXnPY4wikVAwmdYHp8q6DmC+EJUzAMsycb7HB32Kh9RN4+0gExjmPmZSAQjgURXIGATPegAvA== -"@types/scheduler@*": - version "0.16.3" - resolved "https://registry.yarnpkg.com/@types/scheduler/-/scheduler-0.16.3.tgz#cef09e3ec9af1d63d2a6cc5b383a737e24e6dcf5" - integrity sha512-5cJ8CB4yAx7BH1oMvdU0Jh9lrEXyPkar6F9G/ERswkCuvP4KQZfZkSjcMbAICCpQTN4OuZn8tz0HiKv9TGZgrQ== - "@types/semver@^6.0.0": version "6.2.3" resolved "https://registry.yarnpkg.com/@types/semver/-/semver-6.2.3.tgz#5798ecf1bec94eaa64db39ee52808ec0693315aa" @@ -8877,7 +8861,7 @@ log-update@^4.0.0: slice-ansi "^4.0.0" wrap-ansi "^6.2.0" -loose-envify@^1.1.0, loose-envify@^1.4.0: +loose-envify@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf" integrity sha512-lyuxPGr/Wfhrlem2CL/UcnUc1zcqKAImBDzukY7Y5F/yQiNdko6+fRLevlw1HgMySw7f611UIY408EtxRSoK3Q== @@ -10419,13 +10403,12 @@ react-dev-utils@^12.0.1: strip-ansi "^6.0.1" text-table "^0.2.0" -react-dom@^18.2.0: - version "18.2.0" - resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-18.2.0.tgz#22aaf38708db2674ed9ada224ca4aa708d821e3d" - integrity sha512-6IMTriUmvsjHUjNtEDudZfuDQUoWXVxKHhlEGSk81n4YFS+r/Kl99wXiwlVXtPBtJenozv2P+hxDsw9eA7Xo6g== +react-dom@^19.0.0: + version "19.0.0" + resolved "https://registry.yarnpkg.com/react-dom/-/react-dom-19.0.0.tgz#43446f1f01c65a4cd7f7588083e686a6726cfb57" + integrity sha512-4GV5sHFG0e/0AD4X+ySy6UJd3jVl1iNsNHdpad0qhABJ11twS3TTBnseqsKurKcsNqCEFeGL3uLpVChpIO3QfQ== dependencies: - loose-envify "^1.1.0" - scheduler "^0.23.0" + scheduler "^0.25.0" react-error-overlay@^6.0.11: version "6.0.11" @@ -10514,12 +10497,10 @@ react-scripts@5.0.1: optionalDependencies: fsevents "^2.3.2" -react@^18.2.0: - version "18.2.0" - resolved "https://registry.yarnpkg.com/react/-/react-18.2.0.tgz#555bd98592883255fa00de14f1151a917b5d77d5" - integrity sha512-/3IjMdb2L9QbBdWiW5e3P2/npwMBaU9mHCSCUzNln0ZCYbcfTsGbTJrU/kGemdH2IWmB2ioZ+zkxtmq6g09fGQ== - dependencies: - loose-envify "^1.1.0" +react@^19.0.0: + version "19.0.0" + resolved "https://registry.yarnpkg.com/react/-/react-19.0.0.tgz#6e1969251b9f108870aa4bff37a0ce9ddfaaabdd" + integrity sha512-V8AVnmPIICiWpGfm6GLzCR/W5FXLchHop40W4nXBmdlEceh16rCN8O8LNWm5bh5XUX91fh7KpA+W0TgMKmgTpQ== read-cache@^1.0.0: version "1.0.0" @@ -10884,12 +10865,10 @@ saxes@^6.0.0: dependencies: xmlchars "^2.2.0" -scheduler@^0.23.0: - version "0.23.0" - resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.23.0.tgz#ba8041afc3d30eb206a487b6b384002e4e61fdfe" - integrity sha512-CtuThmgHNg7zIZWAXi3AsyIzA3n4xx7aNyjwC2VJldO2LMVDhFK+63xGqq6CsJH4rTAt6/M+N4GhZiDYPx9eUw== - dependencies: - loose-envify "^1.1.0" +scheduler@^0.25.0: + version "0.25.0" + resolved "https://registry.yarnpkg.com/scheduler/-/scheduler-0.25.0.tgz#336cd9768e8cceebf52d3c80e3dcf5de23e7e015" + integrity sha512-xFVuu11jh+xcO7JOAGJNOXld8/TcEHK/4CituBUeUb5hqxJLj9YuemAEuvm9gQ/+pgXYfbQuqAkiYu+u7YEsNA== schema-utils@2.7.0: version "2.7.0"