diff --git a/packages/extension/package.json b/packages/extension/package.json index 5d3f1650d3..8dc3bf2077 100644 --- a/packages/extension/package.json +++ b/packages/extension/package.json @@ -52,7 +52,8 @@ "@metamask/ocap-kernel": "workspace:^", "@metamask/streams": "workspace:^", "@metamask/utils": "^11.4.0", - "react-dom": "^18.3.1", + "react": "^17.0.2", + "react-dom": "^17.0.2", "ses": "^1.13.0" }, "devDependencies": { @@ -67,8 +68,8 @@ "@playwright/test": "^1.51.1", "@testing-library/jest-dom": "^6.6.3", "@types/chrome": "^0.0.313", - "@types/react": "^18.3.1", - "@types/react-dom": "^18.3.1", + "@types/react": "^17.0.11", + "@types/react-dom": "^17.0.11", "@typescript-eslint/eslint-plugin": "^8.29.0", "@typescript-eslint/parser": "^8.29.0", "@typescript-eslint/utils": "^8.29.0", diff --git a/packages/extension/src/popup.test.tsx b/packages/extension/src/popup.test.tsx index d0777ec14d..e50028aa18 100644 --- a/packages/extension/src/popup.test.tsx +++ b/packages/extension/src/popup.test.tsx @@ -1,11 +1,9 @@ import { App } from '@metamask/kernel-ui'; -import { createRoot } from 'react-dom/client'; +import { render } from 'react-dom'; import { describe, it, expect, vi, beforeEach } from 'vitest'; -vi.mock('react-dom/client', () => ({ - createRoot: vi.fn(() => ({ - render: vi.fn(), - })), +vi.mock('react-dom', () => ({ + render: vi.fn(), })); vi.mock('@metamask/kernel-ui', () => ({ @@ -22,10 +20,10 @@ describe('popup', () => { root.id = 'root'; document.body.appendChild(root); await import('./popup.tsx'); - expect(createRoot).toHaveBeenCalledWith(root); - const mockRoot = vi.mocked(createRoot).mock.results[0]?.value; - expect(mockRoot.render).toHaveBeenCalledWith(expect.any(Object)); - const renderCall = mockRoot.render.mock.calls[0][0]; - expect(renderCall.type).toBe(App); + expect(render).toHaveBeenCalledWith(expect.any(Object), root); + const renderArgs = vi.mocked(render).mock.calls[0]; + expect(renderArgs).toBeDefined(); + expect(renderArgs?.[0]).toBeDefined(); + expect((renderArgs?.[0] as unknown as React.ReactElement)?.type).toBe(App); }); }); diff --git a/packages/extension/src/popup.tsx b/packages/extension/src/popup.tsx index 26862da148..d7a7fc48b3 100644 --- a/packages/extension/src/popup.tsx +++ b/packages/extension/src/popup.tsx @@ -1,7 +1,6 @@ import '@metamask/kernel-ui/styles.css'; import { App } from '@metamask/kernel-ui'; -import { createRoot } from 'react-dom/client'; +import { createElement } from 'react'; +import { render } from 'react-dom'; -// @ts-expect-error - our root element is not null -const root = createRoot(document.getElementById('root')); -root.render(); +render(createElement(App), document.getElementById('root')); diff --git a/packages/kernel-ui/package.json b/packages/kernel-ui/package.json index c5b8fc95fd..a57350ab44 100644 --- a/packages/kernel-ui/package.json +++ b/packages/kernel-ui/package.json @@ -65,8 +65,8 @@ "@metamask/logger": "workspace:^", "@metamask/ocap-kernel": "workspace:^", "@metamask/utils": "^11.4.0", - "react": "^18.3.1", - "react-dom": "^18.3.1", + "react": "^17.0.2", + "react-dom": "^17.0.2", "ses": "^1.13.0" }, "devDependencies": { @@ -76,15 +76,15 @@ "@metamask/eslint-config-nodejs": "^14.0.0", "@metamask/eslint-config-typescript": "^14.0.0", "@ocap/test-utils": "workspace:^", - "@testing-library/dom": "^10.4.0", "@testing-library/jest-dom": "^6.6.3", - "@testing-library/react": "^16.3.0", + "@testing-library/react": "^12.1.5", + "@testing-library/react-hooks": "^8.0.1", "@testing-library/user-event": "^14.6.1", "@ts-bridge/cli": "^0.6.3", "@ts-bridge/shims": "^0.1.1", "@types/chrome": "^0.0.313", - "@types/react": "^18.3.1", - "@types/react-dom": "^18.3.1", + "@types/react": "^17.0.11", + "@types/react-dom": "^17.0.11", "@typescript-eslint/eslint-plugin": "^8.29.0", "@typescript-eslint/parser": "^8.29.0", "@typescript-eslint/utils": "^8.29.0", diff --git a/packages/kernel-ui/src/context/PanelContext.test.tsx b/packages/kernel-ui/src/context/PanelContext.test.tsx index 1494a69577..059442d045 100644 --- a/packages/kernel-ui/src/context/PanelContext.test.tsx +++ b/packages/kernel-ui/src/context/PanelContext.test.tsx @@ -1,4 +1,5 @@ -import { renderHook, waitFor } from '@testing-library/react'; +import { waitFor } from '@testing-library/react'; +import { renderHook } from '@testing-library/react-hooks'; import { describe, it, expect, vi } from 'vitest'; vi.mock('@metamask/kernel-utils', () => ({ @@ -27,10 +28,6 @@ describe('PanelContext', () => { const { PanelProvider, usePanelContext } = await import( './PanelContext.tsx' ); - const payload = { - method: 'getStatus', - params: [], - }; const response = { success: true }; mockSendMessage.mockResolvedValueOnce(response); vi.mocked( @@ -43,8 +40,10 @@ describe('PanelContext', () => { ), }); - const actualResponse = await result.current.callKernelMethod(payload); - expect(mockSendMessage).toHaveBeenCalledWith(payload); + const actualResponse = await result.current.callKernelMethod({ + method: 'getStatus', + params: [], + }); expect(actualResponse).toBe(response); }); @@ -52,10 +51,6 @@ describe('PanelContext', () => { const { PanelProvider, usePanelContext } = await import( './PanelContext.tsx' ); - const payload = { - method: 'getStatus', - params: [], - }; const errorResponse = { error: 'Test error' }; mockSendMessage.mockResolvedValueOnce(errorResponse); vi.mocked( @@ -68,9 +63,12 @@ describe('PanelContext', () => { ), }); - await expect(result.current.callKernelMethod(payload)).rejects.toThrow( - JSON.stringify(errorResponse.error), - ); + await expect( + result.current.callKernelMethod({ + method: 'getStatus', + params: [], + }), + ).rejects.toThrow(JSON.stringify(errorResponse.error)); expect( vi.mocked(await import('../services/logger.ts')).logger.error, ).toHaveBeenCalledWith( @@ -83,10 +81,6 @@ describe('PanelContext', () => { const { PanelProvider, usePanelContext } = await import( './PanelContext.tsx' ); - const payload = { - method: 'getStatus', - params: [], - }; const error = new Error('Network error'); mockSendMessage.mockRejectedValueOnce(error); const { result } = renderHook(() => usePanelContext(), { @@ -96,9 +90,12 @@ describe('PanelContext', () => { ), }); - await expect(result.current.callKernelMethod(payload)).rejects.toThrow( - error, - ); + await expect( + result.current.callKernelMethod({ + method: 'getStatus', + params: [], + }), + ).rejects.toThrow(error); expect( vi.mocked(await import('../services/logger.ts')).logger.error, ).toHaveBeenCalledWith(`Error: ${error.message}`, 'error'); @@ -108,14 +105,6 @@ describe('PanelContext', () => { const { PanelProvider, usePanelContext } = await import( './PanelContext.tsx' ); - const firstPayload = { - method: 'getStatus', - params: [], - }; - const secondPayload = { - method: 'getStatus', - params: [], - }; // Use a promise that we control to ensure the first request is still in progress let resolveFirstRequest!: (value: { success: boolean }) => void; @@ -136,12 +125,17 @@ describe('PanelContext', () => { }); // Start the first request but don't await it - const firstRequestPromiseResult = - result.current.callKernelMethod(firstPayload); + const firstRequestPromiseResult = result.current.callKernelMethod({ + method: 'getStatus', + params: [], + }); // Try to make a second request while the first is still processing await expect( - result.current.callKernelMethod(secondPayload), + result.current.callKernelMethod({ + method: 'getStatus', + params: [], + }), ).rejects.toThrow('A request is already in progress'); // Resolve the first request to clean up @@ -176,17 +170,8 @@ describe('PanelContext', () => { describe('usePanelContext', () => { it('should throw error when used outside of PanelProvider', async () => { const { usePanelContext } = await import('./PanelContext.tsx'); - - // Use a try-catch block to verify the error - let caughtError: Error | null = null; - try { - renderHook(() => usePanelContext()); - } catch (error) { - caughtError = error as Error; - } - - // Expect the error to be thrown - expect(caughtError).toStrictEqual( + const { result } = renderHook(() => usePanelContext()); + expect(result.error).toStrictEqual( new Error('usePanelContext must be used within a PanelProvider'), ); }); diff --git a/packages/kernel-ui/src/hooks/useDatabase.test.ts b/packages/kernel-ui/src/hooks/useDatabase.test.ts index eb7f53878d..d112ec6131 100644 --- a/packages/kernel-ui/src/hooks/useDatabase.test.ts +++ b/packages/kernel-ui/src/hooks/useDatabase.test.ts @@ -1,4 +1,5 @@ -import { renderHook, waitFor } from '@testing-library/react'; +import { waitFor } from '@testing-library/react'; +import { renderHook } from '@testing-library/react-hooks'; import { describe, it, expect, vi, beforeEach } from 'vitest'; import { useDatabase } from './useDatabase.ts'; diff --git a/packages/kernel-ui/src/hooks/useKernelActions.test.ts b/packages/kernel-ui/src/hooks/useKernelActions.test.ts index 4441e3b167..463ab0483f 100644 --- a/packages/kernel-ui/src/hooks/useKernelActions.test.ts +++ b/packages/kernel-ui/src/hooks/useKernelActions.test.ts @@ -1,5 +1,6 @@ import clusterConfig from '@metamask/kernel-browser-runtime/default-cluster' assert { type: 'json' }; -import { renderHook, waitFor } from '@testing-library/react'; +import { waitFor } from '@testing-library/react'; +import { renderHook } from '@testing-library/react-hooks'; import { describe, it, expect, vi, beforeEach } from 'vitest'; vi.mock('../context/PanelContext.tsx', () => ({ diff --git a/packages/kernel-ui/src/hooks/useRegistry.test.ts b/packages/kernel-ui/src/hooks/useRegistry.test.ts index 9c420b9681..7f4c6e6bbf 100644 --- a/packages/kernel-ui/src/hooks/useRegistry.test.ts +++ b/packages/kernel-ui/src/hooks/useRegistry.test.ts @@ -1,4 +1,5 @@ -import { renderHook, waitFor } from '@testing-library/react'; +import { waitFor } from '@testing-library/react'; +import { renderHook } from '@testing-library/react-hooks'; import { describe, it, expect, vi, beforeEach } from 'vitest'; import { useRegistry } from './useRegistry.ts'; diff --git a/packages/kernel-ui/src/hooks/useStatusPolling.test.ts b/packages/kernel-ui/src/hooks/useStatusPolling.test.ts index 5b51aa3ca1..04145ae587 100644 --- a/packages/kernel-ui/src/hooks/useStatusPolling.test.ts +++ b/packages/kernel-ui/src/hooks/useStatusPolling.test.ts @@ -1,5 +1,6 @@ import clusterConfig from '@metamask/kernel-browser-runtime/default-cluster' assert { type: 'json' }; -import { renderHook, waitFor } from '@testing-library/react'; +import { waitFor } from '@testing-library/react'; +import { renderHook } from '@testing-library/react-hooks'; import { describe, it, expect, vi, beforeEach, afterEach } from 'vitest'; vi.mock('../services/logger.ts', () => ({ diff --git a/packages/kernel-ui/src/hooks/useStream.test.ts b/packages/kernel-ui/src/hooks/useStream.test.ts index bb7a055da4..abab756e96 100644 --- a/packages/kernel-ui/src/hooks/useStream.test.ts +++ b/packages/kernel-ui/src/hooks/useStream.test.ts @@ -1,4 +1,5 @@ -import { renderHook, waitFor } from '@testing-library/react'; +import { waitFor } from '@testing-library/react'; +import { renderHook } from '@testing-library/react-hooks'; import { describe, it, expect, vi } from 'vitest'; import { useStream } from './useStream.ts'; diff --git a/packages/kernel-ui/src/hooks/useVats.test.ts b/packages/kernel-ui/src/hooks/useVats.test.ts index c0c3b7abd9..ff1c0243cd 100644 --- a/packages/kernel-ui/src/hooks/useVats.test.ts +++ b/packages/kernel-ui/src/hooks/useVats.test.ts @@ -1,6 +1,7 @@ import type { VatConfig } from '@metamask/ocap-kernel'; import { setupOcapKernelMock } from '@ocap/test-utils'; -import { renderHook, waitFor } from '@testing-library/react'; +import { waitFor } from '@testing-library/react'; +import { renderHook } from '@testing-library/react-hooks'; import { describe, it, expect, vi, beforeEach } from 'vitest'; import type { PanelContextType } from '../context/PanelContext.tsx'; diff --git a/vitest.config.ts b/vitest.config.ts index 487dc15bf6..40657562fe 100644 --- a/vitest.config.ts +++ b/vitest.config.ts @@ -80,10 +80,10 @@ export default defineConfig({ lines: 100, }, 'packages/extension/**': { - statements: 5.88, + statements: 3.03, functions: 0, branches: 100, - lines: 5.88, + lines: 3.03, }, 'packages/kernel-browser-runtime/**': { statements: 78, diff --git a/yarn.lock b/yarn.lock index 479048b991..b0a5735615 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2241,15 +2241,15 @@ __metadata: "@metamask/ocap-kernel": "workspace:^" "@metamask/utils": "npm:^11.4.0" "@ocap/test-utils": "workspace:^" - "@testing-library/dom": "npm:^10.4.0" "@testing-library/jest-dom": "npm:^6.6.3" - "@testing-library/react": "npm:^16.3.0" + "@testing-library/react": "npm:^12.1.5" + "@testing-library/react-hooks": "npm:^8.0.1" "@testing-library/user-event": "npm:^14.6.1" "@ts-bridge/cli": "npm:^0.6.3" "@ts-bridge/shims": "npm:^0.1.1" "@types/chrome": "npm:^0.0.313" - "@types/react": "npm:^18.3.1" - "@types/react-dom": "npm:^18.3.1" + "@types/react": "npm:^17.0.11" + "@types/react-dom": "npm:^17.0.11" "@typescript-eslint/eslint-plugin": "npm:^8.29.0" "@typescript-eslint/parser": "npm:^8.29.0" "@typescript-eslint/utils": "npm:^8.29.0" @@ -2266,8 +2266,8 @@ __metadata: eslint-plugin-promise: "npm:^7.2.1" jsdom: "npm:^26.0.0" prettier: "npm:^3.5.3" - react: "npm:^18.3.1" - react-dom: "npm:^18.3.1" + react: "npm:^17.0.2" + react-dom: "npm:^17.0.2" rimraf: "npm:^6.0.1" ses: "npm:^1.13.0" typedoc: "npm:^0.28.1" @@ -3082,8 +3082,8 @@ __metadata: "@playwright/test": "npm:^1.51.1" "@testing-library/jest-dom": "npm:^6.6.3" "@types/chrome": "npm:^0.0.313" - "@types/react": "npm:^18.3.1" - "@types/react-dom": "npm:^18.3.1" + "@types/react": "npm:^17.0.11" + "@types/react-dom": "npm:^17.0.11" "@typescript-eslint/eslint-plugin": "npm:^8.29.0" "@typescript-eslint/parser": "npm:^8.29.0" "@typescript-eslint/utils": "npm:^8.29.0" @@ -3101,7 +3101,8 @@ __metadata: jsdom: "npm:^26.0.0" playwright: "npm:^1.51.1" prettier: "npm:^3.5.3" - react-dom: "npm:^18.3.1" + react: "npm:^17.0.2" + react-dom: "npm:^17.0.2" rimraf: "npm:^6.0.1" rollup: "npm:^4.39.0" rollup-plugin-sourcemaps2: "npm:^0.5.0" @@ -3988,6 +3989,22 @@ __metadata: languageName: node linkType: hard +"@testing-library/dom@npm:^8.0.0": + version: 8.20.1 + resolution: "@testing-library/dom@npm:8.20.1" + dependencies: + "@babel/code-frame": "npm:^7.10.4" + "@babel/runtime": "npm:^7.12.5" + "@types/aria-query": "npm:^5.0.1" + aria-query: "npm:5.1.3" + chalk: "npm:^4.1.0" + dom-accessibility-api: "npm:^0.5.9" + lz-string: "npm:^1.5.0" + pretty-format: "npm:^27.0.2" + checksum: 10/6c7a92fcc89931ef62a9a92dacec09b3e5ee5c3aba2171aa8de6c7504927b7c9364d73d2ed87b72447d6783108c1c92c207d16f788de64c69bc97059d7105e3c + languageName: node + linkType: hard + "@testing-library/jest-dom@npm:^6.6.3": version: 6.6.3 resolution: "@testing-library/jest-dom@npm:6.6.3" @@ -4003,23 +4020,39 @@ __metadata: languageName: node linkType: hard -"@testing-library/react@npm:^16.3.0": - version: 16.3.0 - resolution: "@testing-library/react@npm:16.3.0" +"@testing-library/react-hooks@npm:^8.0.1": + version: 8.0.1 + resolution: "@testing-library/react-hooks@npm:8.0.1" dependencies: "@babel/runtime": "npm:^7.12.5" + react-error-boundary: "npm:^3.1.0" peerDependencies: - "@testing-library/dom": ^10.0.0 - "@types/react": ^18.0.0 || ^19.0.0 - "@types/react-dom": ^18.0.0 || ^19.0.0 - react: ^18.0.0 || ^19.0.0 - react-dom: ^18.0.0 || ^19.0.0 + "@types/react": ^16.9.0 || ^17.0.0 + react: ^16.9.0 || ^17.0.0 + react-dom: ^16.9.0 || ^17.0.0 + react-test-renderer: ^16.9.0 || ^17.0.0 peerDependenciesMeta: "@types/react": optional: true - "@types/react-dom": + react-dom: optional: true - checksum: 10/0ee9e31dd0d2396a924682d0e61a4ecc6bfab8eaff23dbf8a72c3c2ce22c116fa578148baeb4de75b968ef99d22e6e6aa0a00dba40286f71184918bb6bb5b06a + react-test-renderer: + optional: true + checksum: 10/f7b69373feebe99bc7d60595822cc5c00a1a5a4801bc4f99b597256a5c1d23c45a51f359051dd8a7bdffcc23b26f324c582e9433c25804934fd351a886812790 + languageName: node + linkType: hard + +"@testing-library/react@npm:^12.1.5": + version: 12.1.5 + resolution: "@testing-library/react@npm:12.1.5" + dependencies: + "@babel/runtime": "npm:^7.12.5" + "@testing-library/dom": "npm:^8.0.0" + "@types/react-dom": "npm:<18.0.0" + peerDependencies: + react: <18.0.0 + react-dom: <18.0.0 + checksum: 10/24ea6ed298ae65c374b3068974359371f551fa1ffdeb5de9853432856ff63b71576d8bbfa8ee1e45d4fa214c2135e49561bafc9b11528cecc8a7943e2a942255 languageName: node linkType: hard @@ -4295,22 +4328,23 @@ __metadata: languageName: node linkType: hard -"@types/react-dom@npm:^18.3.1": - version: 18.3.6 - resolution: "@types/react-dom@npm:18.3.6" +"@types/react-dom@npm:<18.0.0, @types/react-dom@npm:^17.0.11": + version: 17.0.26 + resolution: "@types/react-dom@npm:17.0.26" peerDependencies: - "@types/react": ^18.0.0 - checksum: 10/ae179355401c64423d39946eda22c5f7f74c94ce61c21505024d4d82c33853ec40bc9b370f75e4a7750b0524aba4d95a43fcc328d8d14684dc2abb41ba529de8 + "@types/react": ^17.0.0 + checksum: 10/86be1faf019b58f2b470a037c291c9c9efa5cf8b3927bfec436d83b12dd7a6a0369554c567c4ca8b59e1ee341b835c1b272cd0340628cbbea75ec43168858e5b languageName: node linkType: hard -"@types/react@npm:^18.3.1": - version: 18.3.20 - resolution: "@types/react@npm:18.3.20" +"@types/react@npm:^17.0.11": + version: 17.0.87 + resolution: "@types/react@npm:17.0.87" dependencies: "@types/prop-types": "npm:*" + "@types/scheduler": "npm:^0.16" csstype: "npm:^3.0.2" - checksum: 10/020c51e63b60862e6d772f0cdea0b9441182eedab6289dabd8add0708ded62003834c4e7c6f23a1ccd3ca9486b46296057c3f881c34261a0483765351f8d0bc3 + checksum: 10/9da3af7ccb620b3a9ade45cb12ab6f5a1705b1e8d358cca65d2256d182af2c4795c4ddcff584b78f8771f5ea9b811d76cf6b47a72ac65ec8f779a66d8ef49c3e languageName: node linkType: hard @@ -4321,6 +4355,13 @@ __metadata: languageName: node linkType: hard +"@types/scheduler@npm:^0.16": + version: 0.16.8 + resolution: "@types/scheduler@npm:0.16.8" + checksum: 10/6c091b096daa490093bf30dd7947cd28e5b2cd612ec93448432b33f724b162587fed9309a0acc104d97b69b1d49a0f3fc755a62282054d62975d53d7fd13472d + languageName: node + linkType: hard + "@types/semver@npm:^7.3.6": version: 7.7.0 resolution: "@types/semver@npm:7.7.0" @@ -5052,6 +5093,15 @@ __metadata: languageName: node linkType: hard +"aria-query@npm:5.1.3": + version: 5.1.3 + resolution: "aria-query@npm:5.1.3" + dependencies: + deep-equal: "npm:^2.0.5" + checksum: 10/e5da608a7c4954bfece2d879342b6c218b6b207e2d9e5af270b5e38ef8418f02d122afdc948b68e32649b849a38377785252059090d66fa8081da95d1609c0d2 + languageName: node + linkType: hard + "aria-query@npm:5.3.0": version: 5.3.0 resolution: "aria-query@npm:5.3.0" @@ -5068,7 +5118,7 @@ __metadata: languageName: node linkType: hard -"array-buffer-byte-length@npm:^1.0.1, array-buffer-byte-length@npm:^1.0.2": +"array-buffer-byte-length@npm:^1.0.0, array-buffer-byte-length@npm:^1.0.1, array-buffer-byte-length@npm:^1.0.2": version: 1.0.2 resolution: "array-buffer-byte-length@npm:1.0.2" dependencies: @@ -5467,7 +5517,7 @@ __metadata: languageName: node linkType: hard -"call-bind@npm:^1.0.7, call-bind@npm:^1.0.8": +"call-bind@npm:^1.0.2, call-bind@npm:^1.0.5, call-bind@npm:^1.0.7, call-bind@npm:^1.0.8": version: 1.0.8 resolution: "call-bind@npm:1.0.8" dependencies: @@ -6077,6 +6127,32 @@ __metadata: languageName: node linkType: hard +"deep-equal@npm:^2.0.5": + version: 2.2.3 + resolution: "deep-equal@npm:2.2.3" + dependencies: + array-buffer-byte-length: "npm:^1.0.0" + call-bind: "npm:^1.0.5" + es-get-iterator: "npm:^1.1.3" + get-intrinsic: "npm:^1.2.2" + is-arguments: "npm:^1.1.1" + is-array-buffer: "npm:^3.0.2" + is-date-object: "npm:^1.0.5" + is-regex: "npm:^1.1.4" + is-shared-array-buffer: "npm:^1.0.2" + isarray: "npm:^2.0.5" + object-is: "npm:^1.1.5" + object-keys: "npm:^1.1.1" + object.assign: "npm:^4.1.4" + regexp.prototype.flags: "npm:^1.5.1" + side-channel: "npm:^1.0.4" + which-boxed-primitive: "npm:^1.0.2" + which-collection: "npm:^1.0.1" + which-typed-array: "npm:^1.1.13" + checksum: 10/1ce49d0b71d0f14d8ef991a742665eccd488dfc9b3cada069d4d7a86291e591c92d2589c832811dea182b4015736b210acaaebce6184be356c1060d176f5a05f + languageName: node + linkType: hard + "deep-extend@npm:^0.6.0": version: 0.6.0 resolution: "deep-extend@npm:0.6.0" @@ -6589,6 +6665,23 @@ __metadata: languageName: node linkType: hard +"es-get-iterator@npm:^1.1.3": + version: 1.1.3 + resolution: "es-get-iterator@npm:1.1.3" + dependencies: + call-bind: "npm:^1.0.2" + get-intrinsic: "npm:^1.1.3" + has-symbols: "npm:^1.0.3" + is-arguments: "npm:^1.1.1" + is-map: "npm:^2.0.2" + is-set: "npm:^2.0.2" + is-string: "npm:^1.0.7" + isarray: "npm:^2.0.5" + stop-iteration-iterator: "npm:^1.0.0" + checksum: 10/bc2194befbe55725f9489098626479deee3c801eda7e83ce0dff2eb266a28dc808edb9b623ff01d31ebc1328f09d661333d86b601036692c2e3c1a6942319433 + languageName: node + linkType: hard + "es-iterator-helpers@npm:^1.2.1": version: 1.2.1 resolution: "es-iterator-helpers@npm:1.2.1" @@ -7645,7 +7738,7 @@ __metadata: languageName: node linkType: hard -"get-intrinsic@npm:^1.2.4, get-intrinsic@npm:^1.2.5, get-intrinsic@npm:^1.2.6, get-intrinsic@npm:^1.2.7, get-intrinsic@npm:^1.3.0": +"get-intrinsic@npm:^1.1.3, get-intrinsic@npm:^1.2.2, get-intrinsic@npm:^1.2.4, get-intrinsic@npm:^1.2.5, get-intrinsic@npm:^1.2.6, get-intrinsic@npm:^1.2.7, get-intrinsic@npm:^1.3.0": version: 1.3.0 resolution: "get-intrinsic@npm:1.3.0" dependencies: @@ -8257,7 +8350,17 @@ __metadata: languageName: node linkType: hard -"is-array-buffer@npm:^3.0.4, is-array-buffer@npm:^3.0.5": +"is-arguments@npm:^1.1.1": + version: 1.2.0 + resolution: "is-arguments@npm:1.2.0" + dependencies: + call-bound: "npm:^1.0.2" + has-tostringtag: "npm:^1.0.2" + checksum: 10/471a8ef631b8ee8829c43a8ab05c081700c0e25180c73d19f3bf819c1a8448c426a9e8e601f278973eca68966384b16ceb78b8c63af795b099cd199ea5afc457 + languageName: node + linkType: hard + +"is-array-buffer@npm:^3.0.2, is-array-buffer@npm:^3.0.4, is-array-buffer@npm:^3.0.5": version: 3.0.5 resolution: "is-array-buffer@npm:3.0.5" dependencies: @@ -8470,7 +8573,7 @@ __metadata: languageName: node linkType: hard -"is-map@npm:^2.0.3": +"is-map@npm:^2.0.2, is-map@npm:^2.0.3": version: 2.0.3 resolution: "is-map@npm:2.0.3" checksum: 10/8de7b41715b08bcb0e5edb0fb9384b80d2d5bcd10e142188f33247d19ff078abaf8e9b6f858e2302d8d05376a26a55cd23a3c9f8ab93292b02fcd2cc9e4e92bb @@ -8522,7 +8625,7 @@ __metadata: languageName: node linkType: hard -"is-regex@npm:^1.2.1": +"is-regex@npm:^1.1.4, is-regex@npm:^1.2.1": version: 1.2.1 resolution: "is-regex@npm:1.2.1" dependencies: @@ -8534,14 +8637,14 @@ __metadata: languageName: node linkType: hard -"is-set@npm:^2.0.3": +"is-set@npm:^2.0.2, is-set@npm:^2.0.3": version: 2.0.3 resolution: "is-set@npm:2.0.3" checksum: 10/5685df33f0a4a6098a98c72d94d67cad81b2bc72f1fb2091f3d9283c4a1c582123cd709145b02a9745f0ce6b41e3e43f1c944496d1d74d4ea43358be61308669 languageName: node linkType: hard -"is-shared-array-buffer@npm:^1.0.4": +"is-shared-array-buffer@npm:^1.0.2, is-shared-array-buffer@npm:^1.0.4": version: 1.0.4 resolution: "is-shared-array-buffer@npm:1.0.4" dependencies: @@ -10245,6 +10348,16 @@ __metadata: languageName: node linkType: hard +"object-is@npm:^1.1.5": + version: 1.1.6 + resolution: "object-is@npm:1.1.6" + dependencies: + call-bind: "npm:^1.0.7" + define-properties: "npm:^1.2.1" + checksum: 10/4f6f544773a595da21c69a7531e0e1d6250670f4e09c55f47eb02c516035cfcb1b46ceb744edfd3ecb362309dbccb6d7f88e43bf42e4d4595ac10a329061053a + languageName: node + linkType: hard + "object-keys@npm:^1.1.1": version: 1.1.1 resolution: "object-keys@npm:1.1.1" @@ -11144,15 +11257,27 @@ __metadata: languageName: node linkType: hard -"react-dom@npm:^18.3.1": - version: 18.3.1 - resolution: "react-dom@npm:18.3.1" +"react-dom@npm:^17.0.2": + version: 17.0.2 + resolution: "react-dom@npm:17.0.2" dependencies: loose-envify: "npm:^1.1.0" - scheduler: "npm:^0.23.2" + object-assign: "npm:^4.1.1" + scheduler: "npm:^0.20.2" peerDependencies: - react: ^18.3.1 - checksum: 10/3f4b73a3aa083091173b29812b10394dd06f4ac06aff410b74702cfb3aa29d7b0ced208aab92d5272919b612e5cda21aeb1d54191848cf6e46e9e354f3541f81 + react: 17.0.2 + checksum: 10/0b3836131a64da8b1c2c852cc28b09c21a738c33c7a8d6021ac20d5619d753c8ee5fff8f97c95f2fc33053e44c2cbce9657453e21c55900164e6e0c3e955e826 + languageName: node + linkType: hard + +"react-error-boundary@npm:^3.1.0": + version: 3.1.4 + resolution: "react-error-boundary@npm:3.1.4" + dependencies: + "@babel/runtime": "npm:^7.12.5" + peerDependencies: + react: ">=16.13.1" + checksum: 10/7418637bf352b88f35ff3798e6faa094ee046df9d422fc08f54c017892c3c0738dac661ba3d64d97209464e7a60e7fbbeffdbeaee5edc38f3aaf5f1f4a8bf610 languageName: node linkType: hard @@ -11190,12 +11315,13 @@ __metadata: languageName: node linkType: hard -"react@npm:^18.3.1": - version: 18.3.1 - resolution: "react@npm:18.3.1" +"react@npm:^17.0.2": + version: 17.0.2 + resolution: "react@npm:17.0.2" dependencies: loose-envify: "npm:^1.1.0" - checksum: 10/261137d3f3993eaa2368a83110466fc0e558bc2c7f7ae7ca52d94f03aac945f45146bd85e5f481044db1758a1dbb57879e2fcdd33924e2dde1bdc550ce73f7bf + object-assign: "npm:^4.1.1" + checksum: 10/ece60c31c1d266d132783aaaffa185d2e4c9b4db144f853933ec690cee1e0600c8929a1dd0a9e79323eea8e2df636c9a06d40f6cfdc9f797f65225433e67f707 languageName: node linkType: hard @@ -11286,7 +11412,7 @@ __metadata: languageName: node linkType: hard -"regexp.prototype.flags@npm:^1.5.3": +"regexp.prototype.flags@npm:^1.5.1, regexp.prototype.flags@npm:^1.5.3": version: 1.5.4 resolution: "regexp.prototype.flags@npm:1.5.4" dependencies: @@ -11671,12 +11797,13 @@ __metadata: languageName: node linkType: hard -"scheduler@npm:^0.23.2": - version: 0.23.2 - resolution: "scheduler@npm:0.23.2" +"scheduler@npm:^0.20.2": + version: 0.20.2 + resolution: "scheduler@npm:0.20.2" dependencies: loose-envify: "npm:^1.1.0" - checksum: 10/e8d68b89d18d5b028223edf090092846868a765a591944760942b77ea1f69b17235f7e956696efbb62c8130ab90af7e0949bfb8eba7896335507317236966bc9 + object-assign: "npm:^4.1.1" + checksum: 10/898917fa475386953d998add9107c04bf2c335eee86172833995dee126d12a68bee3c29edbd61fa0bcbcb8ee511c422eaab23b86b02f95aab26ecfaed8df5e64 languageName: node linkType: hard @@ -11874,7 +12001,7 @@ __metadata: languageName: node linkType: hard -"side-channel@npm:^1.0.6, side-channel@npm:^1.1.0": +"side-channel@npm:^1.0.4, side-channel@npm:^1.0.6, side-channel@npm:^1.1.0": version: 1.1.0 resolution: "side-channel@npm:1.1.0" dependencies: @@ -12153,6 +12280,16 @@ __metadata: languageName: node linkType: hard +"stop-iteration-iterator@npm:^1.0.0": + version: 1.1.0 + resolution: "stop-iteration-iterator@npm:1.1.0" + dependencies: + es-errors: "npm:^1.3.0" + internal-slot: "npm:^1.1.0" + checksum: 10/ff36c4db171ee76c936ccfe9541946b77017f12703d4c446652017356816862d3aa029a64e7d4c4ceb484e00ed4a81789333896390d808458638f3a216aa1f41 + languageName: node + linkType: hard + "stream-to-it@npm:^1.0.1": version: 1.0.1 resolution: "stream-to-it@npm:1.0.1" @@ -13482,7 +13619,7 @@ __metadata: languageName: node linkType: hard -"which-boxed-primitive@npm:^1.1.0, which-boxed-primitive@npm:^1.1.1": +"which-boxed-primitive@npm:^1.0.2, which-boxed-primitive@npm:^1.1.0, which-boxed-primitive@npm:^1.1.1": version: 1.1.1 resolution: "which-boxed-primitive@npm:1.1.1" dependencies: @@ -13516,7 +13653,7 @@ __metadata: languageName: node linkType: hard -"which-collection@npm:^1.0.2": +"which-collection@npm:^1.0.1, which-collection@npm:^1.0.2": version: 1.0.2 resolution: "which-collection@npm:1.0.2" dependencies: @@ -13528,7 +13665,7 @@ __metadata: languageName: node linkType: hard -"which-typed-array@npm:^1.1.16, which-typed-array@npm:^1.1.18": +"which-typed-array@npm:^1.1.13, which-typed-array@npm:^1.1.16, which-typed-array@npm:^1.1.18": version: 1.1.19 resolution: "which-typed-array@npm:1.1.19" dependencies: