diff --git a/.changeset/light-needles-visit.md b/.changeset/light-needles-visit.md new file mode 100644 index 00000000000..9532472080b --- /dev/null +++ b/.changeset/light-needles-visit.md @@ -0,0 +1,5 @@ +--- +"@data-client/test": patch +--- + +Use @testing-library/react-hooks act as it is fully compatible with 17,18,19 of React diff --git a/examples/github-app/package-lock.json b/examples/github-app/package-lock.json index efc79b7cac8..9f0ca1a40ab 100644 --- a/examples/github-app/package-lock.json +++ b/examples/github-app/package-lock.json @@ -18,8 +18,8 @@ "@js-temporal/polyfill": "^0.4.4", "antd": "5.16.4", "parse-link-header": "^2.0.0", - "react": "18.3.0", - "react-dom": "18.3.0", + "react": "18.3.1", + "react-dom": "18.3.1", "react-error-boundary": "^4.0.0", "react-markdown": "9.0.1", "rehype-highlight": "7.0.0", @@ -43,7 +43,7 @@ "@types/uuid": "^9.0.0", "@typescript-eslint/eslint-plugin": "7.7.1", "@typescript-eslint/parser": "7.7.1", - "react-refresh": "0.14.1", + "react-refresh": "0.14.2", "serve": "14.2.3", "webpack": "5.91.0", "webpack-cli": "5.1.4", @@ -15672,9 +15672,9 @@ } }, "node_modules/react": { - "version": "18.3.0", - "resolved": "https://registry.npmjs.org/react/-/react-18.3.0.tgz", - "integrity": "sha512-RPutkJftSAldDibyrjuku7q11d3oy6wKOyPe5K1HA/HwwrXcEqBdHsLypkC2FFYjP7bPUa6gbzSBhw4sY2JcDg==", + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react/-/react-18.3.1.tgz", + "integrity": "sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==", "dependencies": { "loose-envify": "^1.1.0" }, @@ -15736,15 +15736,15 @@ "license": "MIT" }, "node_modules/react-dom": { - "version": "18.3.0", - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.3.0.tgz", - "integrity": "sha512-zaKdLBftQJnvb7FtDIpZtsAIb2MZU087RM8bRDZU8LVCCFYjPTsDZJNFUWPcVz3HFSN1n/caxi0ca4B/aaVQGQ==", + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.3.1.tgz", + "integrity": "sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==", "dependencies": { "loose-envify": "^1.1.0", - "scheduler": "^0.23.1" + "scheduler": "^0.23.2" }, "peerDependencies": { - "react": "^18.3.0" + "react": "^18.3.1" } }, "node_modules/react-error-boundary": { @@ -15850,9 +15850,9 @@ } }, "node_modules/react-refresh": { - "version": "0.14.1", - "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.14.1.tgz", - "integrity": "sha512-iZiRCtNGY3QYP3pYOSSBOvQmBpQTcJccr/VcK2blpJrpPTUDjeN51mxm5nsrkCzBwsbGUj+TN9q2oPz5E13FLg==", + "version": "0.14.2", + "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.14.2.tgz", + "integrity": "sha512-jCvmsr+1IUSMUyzOkRcvnVbX3ZYC6g9TDrDbFuFmRDq7PD4yaGbLKNQL6k2jnArV8hjYxh7hVhAZB6s9HDGpZA==", "dev": true, "engines": { "node": ">=0.10.0" @@ -16439,9 +16439,9 @@ } }, "node_modules/scheduler": { - "version": "0.23.1", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.1.tgz", - "integrity": "sha512-5GKS5JGfiah1O38Vfa9srZE4s3wdHbwjlCrvIookrg2FO9aIwKLOJXuJQFlEfNcVSOXuaL2hzDeY20uVXcUtrw==", + "version": "0.23.2", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.2.tgz", + "integrity": "sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==", "dependencies": { "loose-envify": "^1.1.0" } diff --git a/examples/github-app/package.json b/examples/github-app/package.json index 83ceef20e46..d6c37e43e0c 100644 --- a/examples/github-app/package.json +++ b/examples/github-app/package.json @@ -40,7 +40,7 @@ "@types/uuid": "^9.0.0", "@typescript-eslint/eslint-plugin": "7.7.1", "@typescript-eslint/parser": "7.7.1", - "react-refresh": "0.14.1", + "react-refresh": "0.14.2", "serve": "14.2.3", "webpack": "5.91.0", "webpack-cli": "5.1.4", @@ -56,8 +56,8 @@ "@js-temporal/polyfill": "^0.4.4", "antd": "5.16.4", "parse-link-header": "^2.0.0", - "react": "18.3.0", - "react-dom": "18.3.0", + "react": "18.3.1", + "react-dom": "18.3.1", "react-error-boundary": "^4.0.0", "react-markdown": "9.0.1", "rehype-highlight": "7.0.0", diff --git a/examples/nextjs/package.json b/examples/nextjs/package.json index 82e6da764ec..83757e8b9f7 100644 --- a/examples/nextjs/package.json +++ b/examples/nextjs/package.json @@ -20,8 +20,8 @@ "@types/react-dom": "18.3.0", "classnames": "^2.3.2", "next": "14.2.3", - "react": "18.3.0", - "react-dom": "18.3.0", + "react": "18.3.1", + "react-dom": "18.3.1", "redux": "^5.0.0", "typescript": "^5.1.6", "uuid": "^9.0.1" diff --git a/examples/todo-app/package-lock.json b/examples/todo-app/package-lock.json index 93b9e73c7e6..4a985ed0319 100644 --- a/examples/todo-app/package-lock.json +++ b/examples/todo-app/package-lock.json @@ -12,8 +12,8 @@ "@data-client/endpoint": "^0.11.0", "@data-client/react": "^0.11.0", "@data-client/rest": "^0.11.0", - "react": "18.3.0", - "react-dom": "18.3.0", + "react": "18.3.1", + "react-dom": "18.3.1", "uuid": "^9.0.0" }, "devDependencies": { @@ -27,7 +27,7 @@ "@linaria/shaker": "5.0.3", "@types/react-dom": "18.3.0", "@types/uuid": "^9.0.0", - "react-refresh": "0.14.1", + "react-refresh": "0.14.2", "webpack": "5.91.0", "webpack-cli": "5.1.4", "webpack-dev-server": "5.0.4" @@ -12515,9 +12515,9 @@ } }, "node_modules/react": { - "version": "18.3.0", - "resolved": "https://registry.npmjs.org/react/-/react-18.3.0.tgz", - "integrity": "sha512-RPutkJftSAldDibyrjuku7q11d3oy6wKOyPe5K1HA/HwwrXcEqBdHsLypkC2FFYjP7bPUa6gbzSBhw4sY2JcDg==", + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react/-/react-18.3.1.tgz", + "integrity": "sha512-wS+hAgJShR0KhEvPJArfuPVN1+Hz1t0Y6n5jLrGQbkb4urgPE/0Rve+1kMB1v/oWgHgm4WIcV+i7F2pTVj+2iQ==", "dependencies": { "loose-envify": "^1.1.0" }, @@ -12579,15 +12579,15 @@ "license": "MIT" }, "node_modules/react-dom": { - "version": "18.3.0", - "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.3.0.tgz", - "integrity": "sha512-zaKdLBftQJnvb7FtDIpZtsAIb2MZU087RM8bRDZU8LVCCFYjPTsDZJNFUWPcVz3HFSN1n/caxi0ca4B/aaVQGQ==", + "version": "18.3.1", + "resolved": "https://registry.npmjs.org/react-dom/-/react-dom-18.3.1.tgz", + "integrity": "sha512-5m4nQKp+rZRb09LNH59GM4BxTh9251/ylbKIbpe7TpGxfJ+9kv6BLkLBXIjjspbgbnIBNqlI23tRnTWT0snUIw==", "dependencies": { "loose-envify": "^1.1.0", - "scheduler": "^0.23.1" + "scheduler": "^0.23.2" }, "peerDependencies": { - "react": "^18.3.0" + "react": "^18.3.1" } }, "node_modules/react-error-overlay": { @@ -12608,9 +12608,9 @@ } }, "node_modules/react-refresh": { - "version": "0.14.1", - "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.14.1.tgz", - "integrity": "sha512-iZiRCtNGY3QYP3pYOSSBOvQmBpQTcJccr/VcK2blpJrpPTUDjeN51mxm5nsrkCzBwsbGUj+TN9q2oPz5E13FLg==", + "version": "0.14.2", + "resolved": "https://registry.npmjs.org/react-refresh/-/react-refresh-0.14.2.tgz", + "integrity": "sha512-jCvmsr+1IUSMUyzOkRcvnVbX3ZYC6g9TDrDbFuFmRDq7PD4yaGbLKNQL6k2jnArV8hjYxh7hVhAZB6s9HDGpZA==", "dev": true, "engines": { "node": ">=0.10.0" @@ -13083,9 +13083,9 @@ } }, "node_modules/scheduler": { - "version": "0.23.1", - "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.1.tgz", - "integrity": "sha512-5GKS5JGfiah1O38Vfa9srZE4s3wdHbwjlCrvIookrg2FO9aIwKLOJXuJQFlEfNcVSOXuaL2hzDeY20uVXcUtrw==", + "version": "0.23.2", + "resolved": "https://registry.npmjs.org/scheduler/-/scheduler-0.23.2.tgz", + "integrity": "sha512-UOShsPwz7NrMUqhR6t0hWjFduvOzbtv7toDH1/hIrfRNIDBnnBWd0CwJTGvTpngVlmwGCdP9/Zl/tVrDqcuYzQ==", "dependencies": { "loose-envify": "^1.1.0" } diff --git a/examples/todo-app/package.json b/examples/todo-app/package.json index 41ffbba99fb..aaad70e7841 100644 --- a/examples/todo-app/package.json +++ b/examples/todo-app/package.json @@ -35,7 +35,7 @@ "@linaria/shaker": "5.0.3", "@types/react-dom": "18.3.0", "@types/uuid": "^9.0.0", - "react-refresh": "0.14.1", + "react-refresh": "0.14.2", "webpack": "5.91.0", "webpack-cli": "5.1.4", "webpack-dev-server": "5.0.4" @@ -44,8 +44,8 @@ "@data-client/endpoint": "^0.11.0", "@data-client/react": "^0.11.0", "@data-client/rest": "^0.11.0", - "react": "18.3.0", - "react-dom": "18.3.0", + "react": "18.3.1", + "react-dom": "18.3.1", "uuid": "^9.0.0" }, "packageManager": "yarn@4.1.1" diff --git a/package.json b/package.json index 3984731b58d..1c7db6c49a3 100644 --- a/package.json +++ b/package.json @@ -92,12 +92,12 @@ "node-fetch": "^3.3.0", "npm-run-all": "^4.1.5", "prettier": "3.2.5", - "react": "18.3.0", - "react-dom": "18.3.0", + "react": "18.3.1", + "react-dom": "18.3.1", "react-native": "0.74.0", "react-native-safe-area-context": "^4.4.1", "react-native-screens": "^3.18.2", - "react-test-renderer": "18.3.0", + "react-test-renderer": "18.3.1", "redux": "5.0.1", "rimraf": "^5.0.0", "rollup": "2.79.1", diff --git a/packages/react/src/hooks/__tests__/useController/fetch.tsx b/packages/react/src/hooks/__tests__/useController/fetch.tsx index 5ddd2cc0f2b..86f6a8ab0a6 100644 --- a/packages/react/src/hooks/__tests__/useController/fetch.tsx +++ b/packages/react/src/hooks/__tests__/useController/fetch.tsx @@ -1,13 +1,16 @@ import { ResolveType } from '@data-client/core'; import { CacheProvider } from '@data-client/react'; import { CacheProvider as ExternalCacheProvider } from '@data-client/redux'; -import { act } from '@testing-library/react-hooks'; import { CoolerArticle, FutureArticleResource } from '__tests__/new'; import nock from 'nock'; import { useCache, useSuspense } from '../..'; // relative imports to avoid circular dependency in tsconfig references -import { makeRenderDataClient, FixtureEndpoint } from '../../../../../test'; +import { + makeRenderDataClient, + FixtureEndpoint, + act, +} from '../../../../../test'; import useController from '../../useController'; export const payload = { diff --git a/packages/react/src/hooks/__tests__/useController/reset.tsx b/packages/react/src/hooks/__tests__/useController/reset.tsx index ced3f6027f0..598bdd20d55 100644 --- a/packages/react/src/hooks/__tests__/useController/reset.tsx +++ b/packages/react/src/hooks/__tests__/useController/reset.tsx @@ -1,9 +1,9 @@ import { CacheProvider } from '@data-client/react'; import { makeRenderDataClient } from '@data-client/test'; +import { act } from '@data-client/test'; import { FixtureEndpoint } from '@data-client/test/mockState'; import { waitFor } from '@testing-library/react'; import { renderHook } from '@testing-library/react-hooks'; -import { act } from '@testing-library/react-hooks'; import { CoolerArticleDetail, FutureArticleResource } from '__tests__/new'; import nock from 'nock'; import { useEffect } from 'react'; diff --git a/packages/react/src/hooks/__tests__/useSuspense.web.tsx b/packages/react/src/hooks/__tests__/useSuspense.web.tsx index ff57ac2c42f..f7c484f3275 100644 --- a/packages/react/src/hooks/__tests__/useSuspense.web.tsx +++ b/packages/react/src/hooks/__tests__/useSuspense.web.tsx @@ -16,7 +16,7 @@ import { import { normalize } from '@data-client/normalizr'; import { jest } from '@jest/globals'; import { Temporal } from '@js-temporal/polyfill'; -import { render, act } from '@testing-library/react'; +import { render } from '@testing-library/react'; import { CoolerArticleResource, InvalidIfStaleArticleResource, @@ -44,7 +44,7 @@ import { ControllerContext, StateContext, } from '../..'; -import { makeRenderDataClient, mockInitialState } from '../../../../test'; +import { makeRenderDataClient, mockInitialState, act } from '../../../../test'; import { articlesPages, payload, users, nested } from '../test-fixtures'; import useSuspense from '../useSuspense'; diff --git a/packages/test/src/makeRenderDataClient/renderHook.cts b/packages/test/src/makeRenderDataClient/renderHook.cts index d02a1dbfc88..513c1253588 100644 --- a/packages/test/src/makeRenderDataClient/renderHook.cts +++ b/packages/test/src/makeRenderDataClient/renderHook.cts @@ -6,9 +6,8 @@ import type { Queries, waitForOptions, RenderHookOptions, + act as ActType, } from '@testing-library/react'; -import React from 'react'; -import type { act as reactAct } from 'react-dom/test-utils'; import { USE18 } from './use18.cjs'; @@ -18,13 +17,10 @@ export const renderHook: RenderHook = : (require('@testing-library/react-hooks').renderHook as any); export default renderHook; -type ActType = - typeof reactAct extends undefined ? (callback: () => void) => void - : typeof reactAct; - -export const act: ActType = - Object.hasOwn(React, 'act') ? (React as any).act - : USE18 ? (require('./render18HookWrapped.js').act as any) +// this is for react native + react web compatibility, not actually 18 compatibility +export const act: typeof ActType = + USE18 ? + require('./render18HookWrapped.js').act : (require('@testing-library/react-hooks').act as any); export type { RenderHookOptions } from '@testing-library/react'; diff --git a/yarn.lock b/yarn.lock index ffd3f734e15..9cee3c10b2a 100644 --- a/yarn.lock +++ b/yarn.lock @@ -24965,15 +24965,15 @@ __metadata: languageName: node linkType: hard -"react-dom@npm:18.3.0, react-dom@npm:^18.2.0": - version: 18.3.0 - resolution: "react-dom@npm:18.3.0" +"react-dom@npm:18.3.1, react-dom@npm:^18.2.0": + version: 18.3.1 + resolution: "react-dom@npm:18.3.1" dependencies: loose-envify: "npm:^1.1.0" - scheduler: "npm:^0.23.1" + scheduler: "npm:^0.23.2" peerDependencies: - react: ^18.3.0 - checksum: 10c0/5072767a5d67e242579e5ed46094bf5665385fcfc50584e818273ba668f768348bfd9101841fa3986635635b1238a7a5b2d28b73b134ebbe58a415311afd60d4 + react: ^18.3.1 + checksum: 10c0/a752496c1941f958f2e8ac56239172296fcddce1365ce45222d04a1947e0cc5547df3e8447f855a81d6d39f008d7c32eab43db3712077f09e3f67c4874973e85 languageName: node linkType: hard @@ -25054,10 +25054,10 @@ __metadata: languageName: node linkType: hard -"react-is@npm:^16.12.0 || ^17.0.0 || ^18.0.0, react-is@npm:^18.0.0, react-is@npm:^18.3.0": - version: 18.3.0 - resolution: "react-is@npm:18.3.0" - checksum: 10c0/88fed0b155686de74699d8815115be449b15b17ec78e0d6df994af5b9d02d0661fd5688a9ef43fd0a140b8db1e39786b611803addf413477209820e2d7ac793e +"react-is@npm:^16.12.0 || ^17.0.0 || ^18.0.0, react-is@npm:^18.0.0, react-is@npm:^18.3.1": + version: 18.3.1 + resolution: "react-is@npm:18.3.1" + checksum: 10c0/f2f1e60010c683479e74c63f96b09fb41603527cd131a9959e2aee1e5a8b0caf270b365e5ca77d4a6b18aae659b60a86150bb3979073528877029b35aecd2072 languageName: node linkType: hard @@ -25200,9 +25200,9 @@ __metadata: linkType: hard "react-refresh@npm:*, react-refresh@npm:^0.14.0": - version: 0.14.1 - resolution: "react-refresh@npm:0.14.1" - checksum: 10c0/2ec3be9be8a66595968bce983dd1a3ac9b31baa61cb693ab0fc6ea1944fda39265cc17da9acc257e3f3aa7e7786a396f1bc5e18a1f8f55edbdc03f12c7e56596 + version: 0.14.2 + resolution: "react-refresh@npm:0.14.2" + checksum: 10c0/875b72ef56b147a131e33f2abd6ec059d1989854b3ff438898e4f9310bfcc73acff709445b7ba843318a953cb9424bcc2c05af2b3d80011cee28f25aef3e2ebb languageName: node linkType: hard @@ -25266,25 +25266,25 @@ __metadata: languageName: node linkType: hard -"react-test-renderer@npm:18.3.0": - version: 18.3.0 - resolution: "react-test-renderer@npm:18.3.0" +"react-test-renderer@npm:18.3.1": + version: 18.3.1 + resolution: "react-test-renderer@npm:18.3.1" dependencies: - react-is: "npm:^18.3.0" + react-is: "npm:^18.3.1" react-shallow-renderer: "npm:^16.15.0" - scheduler: "npm:^0.23.1" + scheduler: "npm:^0.23.2" peerDependencies: - react: ^18.3.0 - checksum: 10c0/69c3d4a7d43df7de3562ea684fa497f1465a1015ee053ee78984fe0677aa881b2df70f574e27d99b4934500166feda342097cb5740545357218aae3b0905ceaa + react: ^18.3.1 + checksum: 10c0/c633558ef9af33bc68f0c4dbb5163a004c4fb9eade7bd0a7cfc0355fb367f36bd9d96533c90b7e85a146be6c525113a15f58683d269e0177ad77e2b04d4fe51c languageName: node linkType: hard -"react@npm:18.3.0, react@npm:^18.2.0": - version: 18.3.0 - resolution: "react@npm:18.3.0" +"react@npm:18.3.1, react@npm:^18.2.0": + version: 18.3.1 + resolution: "react@npm:18.3.1" dependencies: loose-envify: "npm:^1.1.0" - checksum: 10c0/ad87bbfdb0c5466148c657da18b0d5458e835389fc591d59840f0e6ec797a004073a01c8cdbff1767a8774c7219054a56f74dacd67bdbb849f1314e427999268 + checksum: 10c0/283e8c5efcf37802c9d1ce767f302dd569dd97a70d9bb8c7be79a789b9902451e0d16334b05d73299b20f048cbc3c7d288bbbde10b701fa194e2089c237dbea3 languageName: node linkType: hard @@ -26454,12 +26454,12 @@ __metadata: node-fetch: "npm:^3.3.0" npm-run-all: "npm:^4.1.5" prettier: "npm:3.2.5" - react: "npm:18.3.0" - react-dom: "npm:18.3.0" + react: "npm:18.3.1" + react-dom: "npm:18.3.1" react-native: "npm:0.74.0" react-native-safe-area-context: "npm:^4.4.1" react-native-screens: "npm:^3.18.2" - react-test-renderer: "npm:18.3.0" + react-test-renderer: "npm:18.3.1" redux: "npm:5.0.1" rimraf: "npm:^5.0.0" rollup: "npm:2.79.1" @@ -26666,12 +26666,12 @@ __metadata: languageName: node linkType: hard -"scheduler@npm:^0.23.1": - version: 0.23.1 - resolution: "scheduler@npm:0.23.1" +"scheduler@npm:^0.23.2": + version: 0.23.2 + resolution: "scheduler@npm:0.23.2" dependencies: loose-envify: "npm:^1.1.0" - checksum: 10c0/cfda827a445fb57192e05275040eccc7c5e2749b98f15559520c7f6539d89d75633bb8b6c1cedf56ca0546630b72d0958bf00b63e2b8f9296e87d0d9d2d50e35 + checksum: 10c0/26383305e249651d4c58e6705d5f8425f153211aef95f15161c151f7b8de885f24751b377e4a0b3dd42cce09aad3f87a61dab7636859c0d89b7daf1a1e2a5c78 languageName: node linkType: hard