diff --git a/package.json b/package.json index 955b006b811..cf1a0bfaaf2 100644 --- a/package.json +++ b/package.json @@ -27,7 +27,7 @@ "lint": "nx run-many --target=lint", "test": "nx run-many --target=test", "build": "NX_TUI=false nx run-many --target=build --parallel=5 --projects=tag:type:pkg", - "build:pkg": "NX_TUI=false nx run-many --targets=build --projects=tag:type:pkg --skip-nx-cache", + "build:pkg": "rm -rf ./node_modules/.cache && NX_TUI=false nx run-many --targets=build --projects=tag:type:pkg --skip-nx-cache", "test:pkg": "NX_TUI=false nx run-many --targets=test --projects=tag:type:pkg --skip-nx-cache", "lint-fix": "nx format:write --uncommitted", "trigger-release": "node -e 'import(\"open\").then(open => open.default(\"https://github.com/module-federation/core/actions/workflows/trigger-release.yml\"))'", @@ -83,9 +83,6 @@ "lodash.get": "4.4.2", "openai": "^4.72.0", "rambda": "7.5.0", - "react": "18.3.1", - "react-dom": "18.3.1", - "react-router-dom": "6.26.2", "regenerator-runtime": "0.14.1", "sharp": "^0.33.4", "storybook": "9.0.9", @@ -155,8 +152,6 @@ "@types/node": "18.16.9", "@types/node-fetch": "2.6.11", "@types/pidusage": "2.0.5", - "@types/react": "18.3.11", - "@types/react-dom": "18.3.0", "@types/webpack-sources": "3.2.3", "@typescript-eslint/eslint-plugin": "7.18.0", "@typescript-eslint/parser": "7.18.0", diff --git a/packages/bridge/bridge-react/.swcrc b/packages/bridge/bridge-react/.swcrc new file mode 100644 index 00000000000..be753c14ea4 --- /dev/null +++ b/packages/bridge/bridge-react/.swcrc @@ -0,0 +1,37 @@ +{ + "jsc": { + "target": "es2017", + "parser": { + "syntax": "typescript", + "tsx": true, + "decorators": true, + "dynamicImport": true + }, + "transform": { + "react": { + "pragma": "React.createElement", + "pragmaFrag": "React.Fragment", + "throwIfNamespace": true, + "development": false, + "useBuiltins": false, + "refresh": false, + "runtime": "classic" + }, + "decoratorMetadata": true, + "legacyDecorator": true + }, + "keepClassNames": true, + "externalHelpers": true, + "loose": true + }, + "module": { + "type": "es6" + }, + "sourceMaps": true, + "exclude": [ + "jest.config.ts", + "./src/jest-setup.ts$", + "./**/jest-setup.ts$", + ".*.js$" + ] +} \ No newline at end of file diff --git a/packages/bridge/bridge-react/__tests__/bridge.spec.tsx b/packages/bridge/bridge-react/__tests__/bridge.spec.tsx index 9e29a1b59a2..48f39edc08b 100644 --- a/packages/bridge/bridge-react/__tests__/bridge.spec.tsx +++ b/packages/bridge/bridge-react/__tests__/bridge.spec.tsx @@ -1,5 +1,12 @@ import React from 'react'; -import { assert, describe, it } from 'vitest'; +import { + describe, + it, + expect, + beforeEach, + afterEach, + jest, +} from '@jest/globals'; import { createBridgeComponent, createRemoteAppComponent } from '../src'; import { act, @@ -28,11 +35,12 @@ describe('bridge', () => { rootComponent: Component, })(); - lifeCycle.render({ - dom: containerInfo?.container, + await act(async () => { + lifeCycle.render({ + dom: containerInfo?.container, + }); + await sleep(200); }); - - await sleep(200); expect(document.querySelector('#container')!.innerHTML).toContain( '
life cycle render
', ); @@ -66,7 +74,9 @@ describe('bridge', () => { ); expect(getHtml(container)).toMatch('loading'); - await sleep(200); + await act(async () => { + await sleep(200); + }); expect(getHtml(container)).toMatch('life cycle render'); expect(getHtml(container)).toMatch('hello world'); }); @@ -97,14 +107,16 @@ describe('bridge', () => { ); expect(getHtml(container)).toMatch('loading'); - await sleep(200); + await act(async () => { + await sleep(200); + }); expect(getHtml(container)).toMatch('life cycle render'); expect(getHtml(container)).toMatch('hello world'); expect(ref.current).not.toBeNull(); }); it('createRemoteAppComponent with custom createRoot prop', async () => { - const renderMock = vi.fn(); + const renderMock = jest.fn(); function Component({ props }: { props?: Record }) { return
life cycle render {props?.msg}
; @@ -114,7 +126,7 @@ describe('bridge', () => { createRoot: () => { return { render: renderMock, - unmount: vi.fn(), + unmount: jest.fn(), }; }, }); @@ -131,7 +143,9 @@ describe('bridge', () => { const { container } = render(); expect(getHtml(container)).toMatch('loading'); - await sleep(200); + await act(async () => { + await sleep(200); + }); expect(renderMock).toHaveBeenCalledTimes(1); }); }); diff --git a/packages/bridge/bridge-react/__tests__/createLazyComponent.spec.tsx b/packages/bridge/bridge-react/__tests__/createLazyComponent.spec.tsx index e1922c20263..fc9c64ec141 100644 --- a/packages/bridge/bridge-react/__tests__/createLazyComponent.spec.tsx +++ b/packages/bridge/bridge-react/__tests__/createLazyComponent.spec.tsx @@ -1,6 +1,16 @@ +// Mocking dependencies +jest.mock('@module-federation/runtime', () => ({ + getInstance: jest.fn(), +})); +jest.mock('../src/lazy/utils', () => ({ + getLoadedRemoteInfos: jest.fn(), + getDataFetchMapKey: jest.fn(), + fetchData: jest.fn(), +})); + import React, { Suspense } from 'react'; import { render, screen, waitFor } from '@testing-library/react'; -import { describe, it, expect, vi, beforeEach } from 'vitest'; +import { describe, it, expect, jest, beforeEach } from '@jest/globals'; import { createLazyComponent, collectSSRAssets, @@ -8,15 +18,6 @@ import { import * as runtime from '@module-federation/runtime'; import * as utils from '../src/lazy/utils'; -// Mocking dependencies -vi.mock('@module-federation/runtime'); -vi.mock('../src/lazy/utils'); - -const mockGetInstance = runtime.getInstance as vi.Mock; -const mockGetLoadedRemoteInfos = utils.getLoadedRemoteInfos as vi.Mock; -const mockGetDataFetchMapKey = utils.getDataFetchMapKey as vi.Mock; -const mockFetchData = utils.fetchData as vi.Mock; - const MockComponent = () =>
Mock Component
; const LoadingComponent = () =>
Loading...
; const ErrorComponent = () =>
Error!
; @@ -25,14 +26,14 @@ describe('createLazyComponent', () => { let mockInstance: any; beforeEach(() => { - vi.clearAllMocks(); + jest.clearAllMocks(); mockInstance = { name: 'host-app', options: { version: '1.0.0' }, - getModuleInfo: vi.fn(), + getModuleInfo: jest.fn(), }; - mockGetInstance.mockReturnValue(mockInstance); - mockGetLoadedRemoteInfos.mockReturnValue({ + (runtime.getInstance as any).mockReturnValue(mockInstance); + (utils.getLoadedRemoteInfos as any).mockReturnValue({ name: 'remoteApp', alias: 'remote', expose: './Component', @@ -52,11 +53,11 @@ describe('createLazyComponent', () => { }, entryGlobalName: 'remoteApp', }); - mockGetDataFetchMapKey.mockReturnValue('data-fetch-key'); + (utils.getDataFetchMapKey as any).mockReturnValue('data-fetch-key'); }); it('should render loading component then the actual component', async () => { - const loader = vi.fn().mockResolvedValue({ + const loader = jest.fn().mockResolvedValue({ default: MockComponent, [Symbol.for('mf_module_id')]: 'remoteApp/Component', }); @@ -82,9 +83,9 @@ describe('createLazyComponent', () => { }); it('should render fallback component on data fetch error', async () => { - mockFetchData.mockRejectedValue(new Error('Data fetch failed')); + (utils.fetchData as any).mockRejectedValue(new Error('Data fetch failed')); const LazyComponentWithDataFetch = createLazyComponent({ - loader: vi.fn().mockResolvedValue({ + loader: jest.fn().mockResolvedValue({ default: MockComponent, [Symbol.for('mf_module_id')]: 'remoteApp/Component', }), @@ -101,14 +102,14 @@ describe('createLazyComponent', () => { }); it('should fetch data and pass it to the component', async () => { - const loader = vi.fn().mockResolvedValue({ + const loader = jest.fn().mockResolvedValue({ default: (props: { mfData: any }) => (
Data: {JSON.stringify(props.mfData)}
), [Symbol.for('mf_module_id')]: 'remoteApp/Component', }); const mockData = { message: 'Hello' }; - mockFetchData.mockResolvedValue(mockData); + (utils.fetchData as any).mockResolvedValue(mockData); const LazyComponent = createLazyComponent({ loader, @@ -131,12 +132,12 @@ describe('collectSSRAssets', () => { let mockInstance: any; beforeEach(() => { - vi.clearAllMocks(); + jest.clearAllMocks(); mockInstance = { name: 'host-app', options: { version: '1.0.0' }, }; - mockGetInstance.mockReturnValue(mockInstance); + (runtime.getInstance as any).mockReturnValue(mockInstance); }); it('should return an empty array if instance is not available', () => { @@ -148,7 +149,7 @@ describe('collectSSRAssets', () => { }); it('should return an empty array if module info is not found', () => { - mockGetLoadedRemoteInfos.mockReturnValue(undefined); + (utils.getLoadedRemoteInfos as any).mockReturnValue(undefined); const assets = collectSSRAssets({ id: 'test/expose', instance: mockInstance, @@ -157,7 +158,7 @@ describe('collectSSRAssets', () => { }); it('should collect CSS and JS assets for SSR', () => { - mockGetLoadedRemoteInfos.mockReturnValue({ + (utils.getLoadedRemoteInfos as any).mockReturnValue({ name: 'remoteApp', expose: './Component', snapshot: { diff --git a/packages/bridge/bridge-react/__tests__/prefetch.spec.ts b/packages/bridge/bridge-react/__tests__/prefetch.spec.ts index 3f0582c30d7..2f7117160cd 100644 --- a/packages/bridge/bridge-react/__tests__/prefetch.spec.ts +++ b/packages/bridge/bridge-react/__tests__/prefetch.spec.ts @@ -1,26 +1,42 @@ -import { vi, describe, it, expect, beforeEach } from 'vitest'; -import { prefetch } from '../src/lazy/data-fetch/prefetch'; -import * as utils from '../src/lazy/utils'; -import logger from '../src/lazy/logger'; -import helpers from '@module-federation/runtime/helpers'; +import { describe, it, expect, beforeEach, jest } from '@jest/globals'; // Mock dependencies -vi.mock('../src/lazy/logger'); -vi.mock('../src/lazy/utils'); -vi.mock('@module-federation/runtime/helpers', () => ({ +jest.mock('../src/lazy/logger', () => ({ + default: { + error: jest.fn(), + }, +})); +jest.mock('../src/lazy/utils', () => ({ + getDataFetchMap: jest.fn(), + getDataFetchInfo: jest.fn(), +})); +jest.mock('@module-federation/runtime/helpers', () => ({ default: { utils: { - matchRemoteWithNameAndExpose: vi.fn(), - getRemoteInfo: vi.fn(), + matchRemoteWithNameAndExpose: jest.fn(), + getRemoteInfo: jest.fn(), }, }, })); +import { prefetch } from '../src/lazy/data-fetch/prefetch'; +import * as utils from '../src/lazy/utils'; +import logger from '../src/lazy/logger'; +import helpers from '@module-federation/runtime/helpers'; + describe('prefetch', () => { let mockInstance: any; beforeEach(() => { - vi.clearAllMocks(); + jest.clearAllMocks(); + + // Set up logger mock + (logger.error as jest.Mock) = jest.fn(); + + // Set up helpers mock + (helpers.utils.matchRemoteWithNameAndExpose as jest.Mock) = jest.fn(); + (helpers.utils.getRemoteInfo as jest.Mock) = jest.fn(); + mockInstance = { name: 'host', options: { @@ -34,13 +50,13 @@ describe('prefetch', () => { ], }, snapshotHandler: { - loadRemoteSnapshotInfo: vi.fn(), + loadRemoteSnapshotInfo: jest.fn(), }, remoteHandler: { hooks: { lifecycle: { generatePreloadAssets: { - emit: vi.fn(), + emit: jest.fn(), }, }, }, @@ -63,7 +79,7 @@ describe('prefetch', () => { }); it('should log an error if remote is not found', async () => { - (helpers.utils.matchRemoteWithNameAndExpose as vi.Mock).mockReturnValue( + (helpers.utils.matchRemoteWithNameAndExpose as jest.Mock).mockReturnValue( undefined, ); await prefetch({ id: 'nonexistent/component', instance: mockInstance }); @@ -77,33 +93,31 @@ describe('prefetch', () => { remote: { name: 'remote1', alias: 'remote1_alias' }, expose: './component1', }; - (helpers.utils.matchRemoteWithNameAndExpose as vi.Mock).mockReturnValue( - mockRemoteInfo, - ); + helpers.utils.matchRemoteWithNameAndExpose.mockReturnValue(mockRemoteInfo); ( - mockInstance.snapshotHandler.loadRemoteSnapshotInfo as vi.Mock + mockInstance.snapshotHandler.loadRemoteSnapshotInfo as jest.Mock ).mockResolvedValue({ remoteSnapshot: {}, globalSnapshot: {}, }); - (helpers.utils.getRemoteInfo as vi.Mock).mockReturnValue({}); + helpers.utils.getRemoteInfo.mockReturnValue({}); - const mockDataFetchFn = vi + const mockDataFetchFn = jest .fn() .mockResolvedValue({ data: 'prefetched data' }); - const mockGetDataFetchGetter = vi.fn().mockResolvedValue(mockDataFetchFn); + const mockGetDataFetchGetter = jest.fn().mockResolvedValue(mockDataFetchFn); const mockDataFetchMap = { 'remote1_alias@remote1/component1': [ [mockGetDataFetchGetter, 'GET', undefined], ], }; - (utils.getDataFetchMap as vi.Mock).mockReturnValue(mockDataFetchMap); - (utils.getDataFetchInfo as vi.Mock).mockReturnValue({ + (utils.getDataFetchMap as any).mockReturnValue(mockDataFetchMap); + (utils.getDataFetchInfo as any).mockReturnValue({ name: 'remote1', alias: 'remote1_alias', id: 'remote1/component1', }); - (utils.getDataFetchMapKey as vi.Mock).mockReturnValue( + (utils.getDataFetchMapKey as jest.Mock).mockReturnValue( 'remote1_alias@remote1/component1', ); @@ -132,16 +146,14 @@ describe('prefetch', () => { remote: { name: 'remote1', alias: 'remote1_alias' }, expose: './component1', }; - (helpers.utils.matchRemoteWithNameAndExpose as vi.Mock).mockReturnValue( - mockRemoteInfo, - ); + helpers.utils.matchRemoteWithNameAndExpose.mockReturnValue(mockRemoteInfo); ( - mockInstance.snapshotHandler.loadRemoteSnapshotInfo as vi.Mock + mockInstance.snapshotHandler.loadRemoteSnapshotInfo as jest.Mock ).mockResolvedValue({ remoteSnapshot: {}, globalSnapshot: {}, }); - (utils.getDataFetchMap as vi.Mock).mockReturnValue(undefined); + (utils.getDataFetchMap as any).mockReturnValue(undefined); await prefetch({ id: 'remote1/component1', diff --git a/packages/bridge/bridge-react/__tests__/router.spec.tsx b/packages/bridge/bridge-react/__tests__/router.spec.tsx index 1ebead47446..d11e291a564 100644 --- a/packages/bridge/bridge-react/__tests__/router.spec.tsx +++ b/packages/bridge/bridge-react/__tests__/router.spec.tsx @@ -1,4 +1,4 @@ -import { assert, describe, it } from 'vitest'; +import { describe, it, expect } from '@jest/globals'; import { render } from '@testing-library/react'; import React from 'react'; import { diff --git a/packages/bridge/bridge-react/jest.config.cjs b/packages/bridge/bridge-react/jest.config.cjs new file mode 100644 index 00000000000..b090617eed3 --- /dev/null +++ b/packages/bridge/bridge-react/jest.config.cjs @@ -0,0 +1,42 @@ +/* eslint-disable */ +const { readFileSync } = require('fs'); + +// Reading the SWC compilation config and remove the "exclude" +// for the test files to be compiled by SWC +const { exclude: _, ...swcJestConfig } = JSON.parse( + readFileSync(`${__dirname}/.swcrc`, 'utf-8'), +); + +// disable .swcrc look-up by SWC core because we're passing in swcJestConfig ourselves. +// If we do not disable this, SWC Core will read .swcrc and won't transform our test files due to "exclude" +swcJestConfig.swcrc ??= false; + +module.exports = { + clearMocks: true, + cache: false, + testEnvironment: 'jsdom', + coveragePathIgnorePatterns: ['__tests__', '/node_modules/'], + globals: { + __DEV__: true, + __TEST__: true, + __BROWSER__: false, + __VERSION__: '"unknown"', + __APP_VERSION__: '"0.0.0"', + }, + preset: 'ts-jest', + transformIgnorePatterns: [ + // Change MODULE_NAME_HERE to your module that isn't being compiled + '/node_modules/(?!((@byted/garfish-)|(byted-tea-sdk))).+\\.js$', + ], + transform: { + '^.+\\.(t|j)sx?$': ['@swc/jest', swcJestConfig], + }, + rootDir: __dirname, + testMatch: ['/__tests__/**/**.spec.[jt]s?(x)'], + testPathIgnorePatterns: ['/node_modules/'], + setupFilesAfterEnv: ['/__tests__/setupTests.ts'], + setupFiles: ['/jest.setup.js'], + moduleNameMapper: { + '^@/(.*)$': '/src/$1', + }, +}; diff --git a/packages/bridge/bridge-react/jest.setup.js b/packages/bridge/bridge-react/jest.setup.js new file mode 100644 index 00000000000..c0d642525a6 --- /dev/null +++ b/packages/bridge/bridge-react/jest.setup.js @@ -0,0 +1,16 @@ +// Polyfills for Node.js environment +const { TextEncoder, TextDecoder } = require('util'); + +global.TextEncoder = TextEncoder; +global.TextDecoder = TextDecoder; + +// Additional polyfills for jsdom environment +Object.defineProperty(window, 'TextEncoder', { + writable: true, + value: TextEncoder, +}); + +Object.defineProperty(window, 'TextDecoder', { + writable: true, + value: TextDecoder, +}); diff --git a/packages/bridge/bridge-react/package.json b/packages/bridge/bridge-react/package.json index eb9e8df4664..7e25f0815ff 100644 --- a/packages/bridge/bridge-react/package.json +++ b/packages/bridge/bridge-react/package.json @@ -110,7 +110,7 @@ "devDependencies": { "@testing-library/react": "15.0.7", "@testing-library/jest-dom": "6.6.3", - "@types/react": "18.2.79", + "@types/react": "18.3.11", "@types/react-dom": "18.3.0", "@vitejs/plugin-react": "^4.3.3", "@vitejs/plugin-vue": "^5.0.4", diff --git a/packages/bridge/bridge-react/project.json b/packages/bridge/bridge-react/project.json index c25e1ab6e81..7874ff88fc1 100644 --- a/packages/bridge/bridge-react/project.json +++ b/packages/bridge/bridge-react/project.json @@ -12,15 +12,17 @@ } }, "test": { - "executor": "nx:run-commands", + "executor": "@nx/jest:jest", + "outputs": ["{workspaceRoot}/coverage/{projectRoot}"], "options": { - "parallel": false, - "commands": [ - { - "command": "vitest run -c packages/bridge/bridge-react/vitest.config.ts", - "forwardAllArgs": false - } - ] + "jestConfig": "packages/bridge/bridge-react/jest.config.cjs", + "passWithNoTests": true + }, + "configurations": { + "ci": { + "ci": true, + "codeCoverage": true + } } } } diff --git a/packages/bridge/bridge-react/tsconfig.json b/packages/bridge/bridge-react/tsconfig.json index 0846dd1f090..cf6fd041afe 100644 --- a/packages/bridge/bridge-react/tsconfig.json +++ b/packages/bridge/bridge-react/tsconfig.json @@ -22,7 +22,7 @@ "strict": true, "moduleResolution": "node", "lib": ["esnext", "dom"], - "jsx": "preserve", + "jsx": "react-jsx", "esModuleInterop": true, "allowSyntheticDefaultImports": true, "sourceMap": true, diff --git a/packages/bridge/bridge-react/vitest.config.ts b/packages/bridge/bridge-react/vitest.config.ts index d7b24ea48ea..f6e2db0cbc4 100644 --- a/packages/bridge/bridge-react/vitest.config.ts +++ b/packages/bridge/bridge-react/vitest.config.ts @@ -12,8 +12,17 @@ export default defineConfig({ }, resolve: { extensions: ['.mjs', '.js', '.ts', '.jsx', '.tsx', '.json'], + alias: { + 'react/jsx-dev-runtime': 'react/jsx-dev-runtime.js', + 'react/jsx-runtime': 'react/jsx-runtime.js', + }, }, - plugins: [react(), nxViteTsPaths()], + plugins: [ + react({ + jsxRuntime: 'classic', + }), + nxViteTsPaths(), + ], test: { environment: 'jsdom', include: [ diff --git a/packages/bridge/bridge-shared/package.json b/packages/bridge/bridge-shared/package.json index 13b1a6769e9..115b7db66d7 100644 --- a/packages/bridge/bridge-shared/package.json +++ b/packages/bridge/bridge-shared/package.json @@ -22,6 +22,7 @@ }, "devDependencies": { "@types/node": "~16.11.7", + "@types/react": "^18.3.11", "@vitejs/plugin-vue": "^5.0.4", "@vitejs/plugin-vue-jsx": "^4.0.0", "typescript": "^5.2.2", diff --git a/packages/bridge/vue3-bridge/package.json b/packages/bridge/vue3-bridge/package.json index 1b1545b6e63..943b38a57e1 100644 --- a/packages/bridge/vue3-bridge/package.json +++ b/packages/bridge/vue3-bridge/package.json @@ -42,6 +42,7 @@ "@module-federation/runtime": "workspace:*" }, "devDependencies": { + "@types/react": "^18.3.11", "@vitejs/plugin-vue": "^5.0.4", "@vitejs/plugin-vue-jsx": "^4.0.0", "typescript": "^5.2.2", diff --git a/packages/modernjs/package.json b/packages/modernjs/package.json index 5e57e7b4a13..70b7d69199a 100644 --- a/packages/modernjs/package.json +++ b/packages/modernjs/package.json @@ -138,7 +138,9 @@ "@modern-js/server-runtime": "2.68.2", "@modern-js/module-tools": "2.68.2", "@modern-js/runtime": "2.68.2", - "@modern-js/tsconfig": "2.68.2" + "@modern-js/tsconfig": "2.68.2", + "@types/react": "^18.3.11", + "@types/react-dom": "^18.3.0" }, "peerDependencies": { "react": ">=17", diff --git a/packages/nextjs-mf/package.json b/packages/nextjs-mf/package.json index a5fbca4050a..c18333aa807 100644 --- a/packages/nextjs-mf/package.json +++ b/packages/nextjs-mf/package.json @@ -49,7 +49,9 @@ "@module-federation/webpack-bundler-runtime": "workspace:*" }, "devDependencies": { - "@types/btoa": "^1.2.5" + "@types/btoa": "^1.2.5", + "@types/react": "^18.3.11", + "@types/react-dom": "^18.3.0" }, "peerDependencies": { "webpack": "^5.40.0", diff --git a/packages/sdk/project.json b/packages/sdk/project.json index c86b1c5ff16..405a2dd75e3 100644 --- a/packages/sdk/project.json +++ b/packages/sdk/project.json @@ -16,7 +16,7 @@ "project": "packages/sdk/package.json", "additionalEntryPoints": ["packages/sdk/src/normalize-webpack-path.ts"], "rollupConfig": "packages/sdk/rollup.config.cjs", - "compiler": "swc", + "compiler": "tsc", "generatePackageJson": false, "format": ["cjs", "esm"], "useLegacyTypescriptPlugin": false diff --git a/packages/utilities/package.json b/packages/utilities/package.json index 0f4e4b1cdcb..5a490be4eea 100644 --- a/packages/utilities/package.json +++ b/packages/utilities/package.json @@ -18,7 +18,9 @@ "directory": "packages/utilities" }, "devDependencies": { - "react": "18.3.1" + "react": "18.3.1", + "@types/react": "^18.3.11", + "@types/react-dom": "^18.3.0" }, "dependencies": { "@module-federation/sdk": "workspace:*" diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index f454fc97da0..6302b7afde1 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -49,15 +49,6 @@ importers: rambda: specifier: 7.5.0 version: 7.5.0 - react: - specifier: 18.3.1 - version: 18.3.1 - react-dom: - specifier: 18.3.1 - version: 18.3.1(react@18.3.1) - react-router-dom: - specifier: 6.26.2 - version: 6.26.2(react-dom@18.3.1)(react@18.3.1) regenerator-runtime: specifier: 0.14.1 version: 0.14.1 @@ -226,7 +217,7 @@ importers: version: 0.5.9(tailwindcss@3.4.13) '@testing-library/react': specifier: 16.1.0 - version: 16.1.0(@testing-library/dom@10.4.0)(@types/react-dom@18.3.0)(@types/react@18.3.11)(react-dom@18.3.1)(react@18.3.1) + version: 16.1.0(@testing-library/dom@10.4.0)(@types/react@18.3.11)(react-dom@18.3.1)(react@18.3.1) '@types/adm-zip': specifier: 0.5.5 version: 0.5.5 @@ -263,12 +254,6 @@ importers: '@types/pidusage': specifier: 2.0.5 version: 2.0.5 - '@types/react': - specifier: 18.3.11 - version: 18.3.11 - '@types/react-dom': - specifier: 18.3.0 - version: 18.3.0 '@types/webpack-sources': specifier: 3.2.3 version: 3.2.3 @@ -2232,10 +2217,10 @@ importers: version: 6.6.3 '@testing-library/react': specifier: 15.0.7 - version: 15.0.7(@types/react@18.2.79)(react-dom@18.3.1)(react@18.3.1) + version: 15.0.7(@types/react@18.3.11)(react-dom@18.3.1)(react@18.3.1) '@types/react': - specifier: 18.2.79 - version: 18.2.79 + specifier: 18.3.11 + version: 18.3.11 '@types/react-dom': specifier: 18.3.0 version: 18.3.0 @@ -2300,6 +2285,9 @@ importers: '@types/node': specifier: ~16.11.7 version: 16.11.68 + '@types/react': + specifier: ^18.3.11 + version: 18.3.11 '@vitejs/plugin-vue': specifier: ^5.0.4 version: 5.1.4(vite@5.4.18)(vue@3.5.13) @@ -2331,6 +2319,9 @@ importers: specifier: workspace:* version: link:../../sdk devDependencies: + '@types/react': + specifier: ^18.3.11 + version: 18.3.11 '@vitejs/plugin-vue': specifier: ^5.0.4 version: 5.1.4(vite@5.4.18)(vue@3.5.10) @@ -2875,6 +2866,12 @@ importers: '@rsbuild/core': specifier: 1.3.21 version: 1.3.21 + '@types/react': + specifier: ^18.3.11 + version: 18.3.11 + '@types/react-dom': + specifier: ^18.3.0 + version: 18.3.0 packages/native-federation-tests: dependencies: @@ -2964,6 +2961,12 @@ importers: '@types/btoa': specifier: ^1.2.5 version: 1.2.5 + '@types/react': + specifier: ^18.3.11 + version: 18.3.11 + '@types/react-dom': + specifier: ^18.3.0 + version: 18.3.0 packages/node: dependencies: @@ -3230,6 +3233,12 @@ importers: specifier: ^5.40.0 version: 5.93.0(@swc/core@1.7.26)(esbuild@0.25.0)(webpack-cli@5.1.4) devDependencies: + '@types/react': + specifier: ^18.3.11 + version: 18.3.11 + '@types/react-dom': + specifier: ^18.3.0 + version: 18.3.0 react: specifier: 18.3.1 version: 18.3.1 @@ -15313,6 +15322,7 @@ packages: /@remix-run/router@1.19.2: resolution: {integrity: sha512-baiMx18+IMuD1yyvOGaHM9QrVUPGGG0jC+z+IPHnRJWUAUvaKuWKyE8gjDj2rzv3sz9zOGoRSPgeBVHRhZnBlA==} engines: {node: '>=14.0.0'} + dev: true /@remix-run/router@1.20.0: resolution: {integrity: sha512-mUnk8rPJBI9loFDZ+YzPGdeniYK+FTmRD1TMCz7ev2SNIozyKKpnGgsxO34u6Z4z/t0ITuu7voi/AshfsGsgFg==} @@ -19850,7 +19860,7 @@ packages: react-test-renderer: 18.3.1(react@18.3.1) dev: true - /@testing-library/react@15.0.7(@types/react@18.2.79)(react-dom@18.3.1)(react@18.3.1): + /@testing-library/react@15.0.7(@types/react@18.3.11)(react-dom@18.3.1)(react@18.3.1): resolution: {integrity: sha512-cg0RvEdD1TIhhkm1IeYMQxrzy0MtUNfa3minv4MjbgcYzJAZ7yD0i0lwoPOTPr+INtiXFezt2o8xMSnyHhEn2Q==} engines: {node: '>=18'} peerDependencies: @@ -19863,13 +19873,13 @@ packages: dependencies: '@babel/runtime': 7.25.7 '@testing-library/dom': 10.4.0 - '@types/react': 18.2.79 + '@types/react': 18.3.11 '@types/react-dom': 18.3.0 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) dev: true - /@testing-library/react@16.1.0(@testing-library/dom@10.4.0)(@types/react-dom@18.3.0)(@types/react@18.3.11)(react-dom@18.3.1)(react@18.3.1): + /@testing-library/react@16.1.0(@testing-library/dom@10.4.0)(@types/react@18.3.11)(react-dom@18.3.1)(react@18.3.1): resolution: {integrity: sha512-Q2ToPvg0KsVL0ohND9A3zLJWcOXXcO8IDu3fj11KhNt0UlCWyFyvnCIBkd12tidB2lkiVRG8VFqdhcqhqnAQtg==} engines: {node: '>=18'} peerDependencies: @@ -19887,7 +19897,6 @@ packages: '@babel/runtime': 7.26.0 '@testing-library/dom': 10.4.0 '@types/react': 18.3.11 - '@types/react-dom': 18.3.0 react: 18.3.1 react-dom: 18.3.1(react@18.3.1) dev: true @@ -41135,19 +41144,6 @@ packages: react-router: 6.24.1(react@19.0.0) dev: false - /react-router-dom@6.26.2(react-dom@18.3.1)(react@18.3.1): - resolution: {integrity: sha512-z7YkaEW0Dy35T3/QKPYB1LjMK2R1fxnHO8kWpUMTBdfVzZrWOiY9a7CtN8HqdWtDUWd5FY6Dl8HFsqVwH4uOtQ==} - engines: {node: '>=14.0.0'} - peerDependencies: - react: '>=16.8' - react-dom: '>=16.8' - dependencies: - '@remix-run/router': 1.19.2 - react: 18.3.1 - react-dom: 18.3.1(react@18.3.1) - react-router: 6.26.2(react@18.3.1) - dev: false - /react-router-dom@6.27.0(react-dom@18.3.1)(react@18.3.1): resolution: {integrity: sha512-+bvtFWMC0DgAFrfKXKG9Fc+BcXWRUO1aJIihbB79xaeq0v5UzfvnM5houGUm1Y461WVRcgAQ+Clh5rdb1eCx4g==} engines: {node: '>=14.0.0'} @@ -41245,6 +41241,7 @@ packages: dependencies: '@remix-run/router': 1.19.2 react: 18.3.1 + dev: true /react-router@6.27.0(react@18.3.1): resolution: {integrity: sha512-YA+HGZXz4jaAkVoYBE98VQl+nVzI+cVI2Oj/06F5ZM+0u3TgedN9Y9kmMRo2mnkSK2nCpNQn0DVob4HCsY/WLw==} @@ -47197,7 +47194,7 @@ packages: '@types/node': 18.16.9 esbuild: 0.21.5 less: 4.3.0 - postcss: 8.5.3 + postcss: 8.5.4 rollup: 4.40.0 stylus: 0.64.0 optionalDependencies: