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: