diff --git a/biome.json b/biome.json index 8f91911ef..d5aa8b025 100644 --- a/biome.json +++ b/biome.json @@ -1,5 +1,5 @@ { - "$schema": "https://biomejs.dev/schemas/2.2.2/schema.json", + "$schema": "https://biomejs.dev/schemas/2.2.4/schema.json", "assist": { "actions": { "source": { "organizeImports": "on" } } }, "vcs": { "enabled": true, @@ -70,5 +70,27 @@ "useHookAtTopLevel": "off" } } - } + }, + "overrides": [ + { + "includes": ["e2e/mock/tests/mockHoist.test.ts"], + "assist": { + "actions": { + "source": { + "organizeImports": "off" + } + } + } + }, + { + "includes": ["e2e/__mocks__/is-url.js", "e2e/__mocks__/redux-cjs.ts"], + "linter": { + "rules": { + "style": { + "useFilenamingConvention": "off" + } + } + } + } + ] } diff --git a/e2e/__mocks__/is-url.js b/e2e/__mocks__/is-url.js new file mode 100644 index 000000000..4551826e3 --- /dev/null +++ b/e2e/__mocks__/is-url.js @@ -0,0 +1,4 @@ +const { rs } = require('@rstest/core'); + +module.exports = () => 'is-url mock'; +module.exports.fn = rs.fn(); diff --git a/e2e/__mocks__/redux-cjs.ts b/e2e/__mocks__/redux-cjs.ts new file mode 100644 index 000000000..34c84f1ae --- /dev/null +++ b/e2e/__mocks__/redux-cjs.ts @@ -0,0 +1,6 @@ +const { rs } = require('@rstest/core'); + +module.exports = { + isAction: rs.fn(), + mocked: 'redux_yes', +}; diff --git a/e2e/basic/test/index.test.ts b/e2e/basic/test/index.test.ts index acc0c215d..53881f527 100644 --- a/e2e/basic/test/index.test.ts +++ b/e2e/basic/test/index.test.ts @@ -24,8 +24,8 @@ describe('Index', () => { }); it('should use require.resolve correctly', async () => { - expect( - require.resolve('../src/index.ts').endsWith('index.ts'), - ).toBeTruthy(); + const resolved = require.resolve('../src/index.ts'); + // TODO: can't write as require.resolve('../src/index.ts').endsWith('index.ts') + expect(resolved.endsWith('index.ts')).toBeTruthy(); }); }); diff --git a/e2e/dom/fixtures/package.json b/e2e/dom/fixtures/package.json index 9af86a17c..5a7319fa4 100644 --- a/e2e/dom/fixtures/package.json +++ b/e2e/dom/fixtures/package.json @@ -12,7 +12,7 @@ "react-dom": "^19.1.1" }, "devDependencies": { - "@rsbuild/core": "1.5.0", + "@rsbuild/core": "1.6.0-beta.0", "@rsbuild/plugin-react": "^1.4.0", "@testing-library/jest-dom": "^6.8.0", "@testing-library/dom": "^10.4.1", diff --git a/e2e/lifecycle/timeout.test.ts b/e2e/lifecycle/timeout.test.ts index 5a50fad1c..03dd0b1ec 100644 --- a/e2e/lifecycle/timeout.test.ts +++ b/e2e/lifecycle/timeout.test.ts @@ -34,7 +34,7 @@ describe('test timeout', () => { ), ).toBeTruthy(); expect( - logs.find((log) => log.includes('timeout.test.ts:4:10')), + logs.find((log) => log.includes('timeout.test.ts:4:1')), ).toBeTruthy(); expect( logs.find((log) => log.includes('Test Files 1 failed')), diff --git a/e2e/mock/src/bar.ts b/e2e/mock/src/bar.ts new file mode 100644 index 000000000..9f1738685 --- /dev/null +++ b/e2e/mock/src/bar.ts @@ -0,0 +1 @@ +export const bar = 'bar'; diff --git a/e2e/mock/src/baz.ts b/e2e/mock/src/baz.ts new file mode 100644 index 000000000..6061cf077 --- /dev/null +++ b/e2e/mock/src/baz.ts @@ -0,0 +1 @@ +export const baz = 'baz'; diff --git a/e2e/mock/src/d.ts b/e2e/mock/src/d.ts index 6b464fc50..e05773071 100644 --- a/e2e/mock/src/d.ts +++ b/e2e/mock/src/d.ts @@ -1 +1,3 @@ -export const d: number = 4; +export const d1: number = 1; +export const d2: number = 2; +export const d3: number = 3; diff --git a/e2e/mock/src/foo.ts b/e2e/mock/src/foo.ts new file mode 100644 index 000000000..3329a7d97 --- /dev/null +++ b/e2e/mock/src/foo.ts @@ -0,0 +1 @@ +export const foo = 'foo'; diff --git a/e2e/mock/src/readSomeFile.ts b/e2e/mock/src/readSomeFile.ts index 8a2f737ac..332357c72 100644 --- a/e2e/mock/src/readSomeFile.ts +++ b/e2e/mock/src/readSomeFile.ts @@ -1,5 +1,5 @@ -import { readFileSync } from 'node:fs'; +import * as fs from 'node:fs'; export function readSomeFile(path: string) { - return readFileSync(path, 'utf-8'); + return fs?.readFileSync?.(path, 'utf-8'); } diff --git a/e2e/mock/src/sum.ts b/e2e/mock/src/sum.ts new file mode 100644 index 000000000..b734b0652 --- /dev/null +++ b/e2e/mock/src/sum.ts @@ -0,0 +1,4 @@ +import { bar } from './bar'; +import { foo } from './foo'; + +export const sum = foo + bar; diff --git a/e2e/mock/tests/barrel.test.ts b/e2e/mock/tests/barrel.test.ts new file mode 100644 index 000000000..513065eed --- /dev/null +++ b/e2e/mock/tests/barrel.test.ts @@ -0,0 +1,11 @@ +import { expect, it, rs } from '@rstest/core'; +import { baz } from '../src/baz'; +import { sum } from '../src/sum'; + +rs.mock('../src/foo', () => { + return { foo: baz }; +}); + +it('sum', () => { + expect(sum).toBe('bazbar'); +}); diff --git a/e2e/mock/tests/doMock.test.ts b/e2e/mock/tests/doMock.test.ts index 15951786d..af31b3033 100644 --- a/e2e/mock/tests/doMock.test.ts +++ b/e2e/mock/tests/doMock.test.ts @@ -1,5 +1,4 @@ import { expect, rs, test } from '@rstest/core'; -import { sleep } from '../../scripts/utils'; test('doMock works', async () => { const { increment: incrementWith1 } = await import('../src/increment'); @@ -32,8 +31,7 @@ test('the second doMock can override the first doMock', async () => { }); test('the third doMock can override the second doMock', async () => { - rs.doMock('../src/increment', async () => { - await sleep(500); + rs.doMock('../src/increment', () => { return { increment: (num: number) => num + 100, }; @@ -43,8 +41,7 @@ test('the third doMock can override the second doMock', async () => { expect(incrementWith1(1)).toBe(101); - rs.doMock('../src/increment', async () => { - await sleep(500); + rs.doMock('../src/increment', () => { return { increment: (num: number) => num + 200, }; diff --git a/e2e/mock/tests/doMockRequire.test.ts b/e2e/mock/tests/doMockRequire.test.ts index f17feee4b..99e815666 100644 --- a/e2e/mock/tests/doMockRequire.test.ts +++ b/e2e/mock/tests/doMockRequire.test.ts @@ -9,7 +9,6 @@ test('doMockRequire works', () => { })); const { increment: incrementWith10 } = require('../src/increment'); - expect(incrementWith10(1)).toBe(11); }); @@ -30,3 +29,25 @@ test('the second doMockRequire can override the first doMockRequire', () => { expect(incrementWith20(1)).toBe(21); }); + +test('the third doMockRequire can override the second doMockRequire', () => { + rs.doMockRequire('../src/increment', () => { + return { + increment: (num: number) => num + 100, + }; + }); + + const { increment: incrementWith1 } = require('../src/increment'); + + expect(incrementWith1(1)).toBe(101); + + rs.doMockRequire('../src/increment', () => { + return { + increment: (num: number) => num + 200, + }; + }); + + const { increment: incrementWith20 } = require('../src/increment'); + + expect(incrementWith20(1)).toBe(201); +}); diff --git a/e2e/mock/tests/importActual.test.ts b/e2e/mock/tests/importActual.test.ts index 032b1db29..e29b64e6a 100644 --- a/e2e/mock/tests/importActual.test.ts +++ b/e2e/mock/tests/importActual.test.ts @@ -1,6 +1,10 @@ import { expect, it, rs } from '@rstest/core'; +import axiosActual from 'axios' with { rstest: 'importActual' }; import axios from 'axios'; +import { b as bActual } from '../src/b' with { rstest: 'importActual' }; +import { b } from '../src/b'; +// #region axios rs.mock('axios'); it('mocked axios (axios is externalized)', async () => { @@ -11,10 +15,38 @@ it('mocked axios (axios is externalized)', async () => { expect(axios.post).toBeUndefined(); }); -it('use `importActual` to import actual axios', async () => { - const ax = await rs.importActual('axios'); - expect(rs.isMockFunction(ax.get)).toBe(false); +it('use `importActual` attributes to import actual axios', () => { + expect(rs.isMockFunction(axiosActual.get)).toBe(false); // @ts-expect-error - expect(ax.mocked).toBeUndefined(); - expect(typeof ax.AxiosHeaders).toBe('function'); + expect(axiosActual.mocked).toBeUndefined(); + expect(typeof axiosActual.AxiosHeaders).toBe('function'); }); + +it('use `rs.importActual` to import actual axios', async () => { + const axiosRsActual = await rs.importActual('axios'); + expect(rs.isMockFunction(axiosRsActual.get)).toBe(false); + // @ts-expect-error + expect(axiosRsActual.mocked).toBeUndefined(); + expect(typeof axiosRsActual.AxiosHeaders).toBe('function'); +}); +// #endregion + +// #region ../src/b +rs.mock('../src/b', () => { + return { b: 'b_mocked' }; +}); + +it('mocked ../src/b', () => { + expect(b).toBe('b_mocked'); +}); + +it('use `importActual` to import actual ../src/b', () => { + expect(bActual).toBe(2); +}); + +it('use `rs.importActual` to import actual ../src/b', async () => { + const { b: bRsActual } = + await rs.importActual('../src/b'); + expect(bRsActual).toBe(2); +}); +// #endregion diff --git a/e2e/mock/tests/importMock.test.ts b/e2e/mock/tests/importMock.test.ts new file mode 100644 index 000000000..ff15dfcec --- /dev/null +++ b/e2e/mock/tests/importMock.test.ts @@ -0,0 +1,12 @@ +import { expect, rs, test } from '@rstest/core'; +import * as redux from 'redux'; + +test('importMock works', async () => { + const { default: redux } = await rs.importMock('redux'); + await redux.isAction('string'); + expect(redux.isAction).toHaveBeenCalledWith('string'); +}); + +test('actual redux is not mocked (ESM)', async () => { + expect(rs.isMockFunction(redux.isAction)).toBe(false); +}); diff --git a/e2e/mock/tests/loadMock.test.ts b/e2e/mock/tests/loadMock.test.ts deleted file mode 100644 index 60cbc46f2..000000000 --- a/e2e/mock/tests/loadMock.test.ts +++ /dev/null @@ -1,23 +0,0 @@ -import { expect, rs, test } from '@rstest/core'; -import * as redux from 'redux'; - -test('importMock works', async () => { - const { default: rx } = await rs.importMock('redux'); - await rx.isAction('string'); - expect(rx.isAction).toHaveBeenCalledWith('string'); -}); - -test('actual redux is not mocked (ESM)', async () => { - expect(rs.isMockFunction(redux.isAction)).toBe(false); -}); - -test('requireMock works', async () => { - const rx = rs.requireMock('redux').default; - await rx.isAction('string'); - expect(rx.isAction).toHaveBeenCalledWith('string'); -}); - -test('actual redux is not mocked (CJS)', async () => { - const rx = require('redux'); - expect(rs.isMockFunction(rx.isAction)).toBe(false); -}); diff --git a/e2e/mock/tests/mock.test.ts b/e2e/mock/tests/mock.test.ts index 839bcc8ae..1e33a1d26 100644 --- a/e2e/mock/tests/mock.test.ts +++ b/e2e/mock/tests/mock.test.ts @@ -1,26 +1,31 @@ import { expect, it, rs } from '@rstest/core'; +import * as originalAxios from 'axios' with { rstest: 'importActual' }; +import * as axios from 'axios'; import redux from 'redux'; -import { sleep } from '../../scripts/utils'; -import { d } from '../src/d'; +import { d1, d2 } from '../src/d' with { rstest: 'importActual' }; +import { d3 } from '../src/d'; // To test async mocking factory. -rs.mock('../src/d', async () => { - await sleep(1000); +rs.mock('../src/d', () => { return { - d: rs.fn(), + d1, + d2, + d3: rs.fn(), }; }); -it('mocked d', async () => { +it('mocked d', () => { // @ts-expect-error: It has been mocked. - d('string1'); - expect(d).toHaveBeenCalledWith('string1'); + d3('string1'); + expect(d3).toHaveBeenCalledWith('string1'); + expect(d1).toBe(1); + expect(d2).toBe(2); }); // manual mock rs.mock('redux'); -it('mocked redux', async () => { +it('mocked redux', () => { redux.isAction('string'); expect(redux.isAction).toHaveBeenCalledWith('string'); // @ts-expect-error: It has been mocked. @@ -28,18 +33,21 @@ it('mocked redux', async () => { }); // mock factory -rs.mock('axios', async () => { - const originalAxios = await rs.importActual('axios'); +rs.mock('axios', () => { + // partial mock return { ...originalAxios, - post: rs.fn(), + aaa: rs.fn(), }; }); it('mocked axios', async () => { - const axios = await import('axios'); // @ts-expect-error - expect(rs.isMockFunction(axios.post)).toBe(true); + expect(rs.isMockFunction(axios.aaa)).toBe(true); // @ts-expect-error - expect(rs.isMockFunction(axios.get)).toBe(false); + expect(rs.isMockFunction(axios.bbb)).toBe(false); + // @ts-expect-error + expect(originalAxios.aaa).toBeUndefined(); + // @ts-expect-error + expect(originalAxios.bbb).toBeUndefined(); }); diff --git a/e2e/mock/tests/mockHoist.test.ts b/e2e/mock/tests/mockHoist.test.ts index fa62baa12..072174b57 100644 --- a/e2e/mock/tests/mockHoist.test.ts +++ b/e2e/mock/tests/mockHoist.test.ts @@ -1,17 +1,19 @@ import { expect, it, rs } from '@rstest/core'; -import { c } from '../src/c'; -import { d } from '../src/d'; +// NOTE: '../src/d' MUST imported ahead of '../src/c' to avoid circular dependency +import { d1 } from '../src/d'; +// @ts-expect-error +import { c, dd } from '../src/c'; + +it('mocked c', async () => { + // @ts-expect-error + c('c'); + expect(c).toHaveBeenCalledWith('c'); + expect(dd).toBe(1); +}); rs.mock('../src/c', () => { return { c: rs.fn(), - d, + dd: d1, }; }); - -it('mocked c', async () => { - // @ts-expect-error: It has been mocked. - c('c'); - expect(c).toHaveBeenCalledWith('c'); - expect(d).toBe(4); -}); diff --git a/e2e/mock/tests/mockRequire.test.ts b/e2e/mock/tests/mockRequire.test.ts index eb43fca33..6d8c67403 100644 --- a/e2e/mock/tests/mockRequire.test.ts +++ b/e2e/mock/tests/mockRequire.test.ts @@ -1,10 +1,10 @@ import { expect, it, rs } from '@rstest/core'; -rs.mockRequire('redux'); +rs.mockRequire('is-url'); -it('mocked redux', () => { - const redux = require('redux').default; - redux.isAction('string'); - expect(redux.isAction).toHaveBeenCalledWith('string'); - expect(redux.mocked).toBe('redux_yes'); +it('mocked is-url', () => { + const isUrl = require('is-url'); + isUrl.fn('string'); + expect(isUrl.fn).toHaveBeenCalledWith('string'); + expect(isUrl()).toBe('is-url mock'); }); diff --git a/e2e/mock/tests/mockTypedArg.test.ts b/e2e/mock/tests/mockTypedArg.test.ts index b19c73d4b..d08aa8b14 100644 --- a/e2e/mock/tests/mockTypedArg.test.ts +++ b/e2e/mock/tests/mockTypedArg.test.ts @@ -1,9 +1,9 @@ import { expect, it, rs } from '@rstest/core'; import { b } from '../src/b'; -import { d } from '../src/d'; +import { d1 } from '../src/d'; // b -rs.mock(import('../src/b'), async () => { +rs.mock(import('../src/b'), () => { return { b: 222, }; @@ -24,12 +24,12 @@ it('mocked c', async () => { }); // d -rs.mock<{ d: number }>('../src/d', async () => { +rs.mock<{ d1: number }>('../src/d', () => { return { - d: 444, + d1: 444, }; }); it('mocked d', async () => { - expect(d).toBe(444); + expect(d1).toBe(444); }); diff --git a/e2e/mock/tests/reduxMocked.test.ts b/e2e/mock/tests/reduxMocked.test.ts index f370735ef..e3d4870d0 100644 --- a/e2e/mock/tests/reduxMocked.test.ts +++ b/e2e/mock/tests/reduxMocked.test.ts @@ -16,13 +16,10 @@ it('importActual works', async () => { expect(typeof rx.applyMiddleware).toBe('function'); }); -it('requireActual and importActual works together', async () => { - // const rxEsm = await rs.importActual('redux'); +// TODO: fix `rs.requireActual` parser bug. +it.todo('requireActual and importActual works together', async () => { const rxCjs = rs.requireActual('redux'); expect(rs.isMockFunction(rxCjs.isAction)).toBe(false); expect(typeof rxCjs.applyMiddleware).toBe('function'); - - // TODO: https://github.com/web-infra-dev/rspack/pull/11111 breaks resolved module in external function, - // which will be fixed in the near future. - // expect(rxEsm.compose).not.toBe(rxCjs.compose); + expect(redux.compose).not.toBe(rxCjs.compose); }); diff --git a/e2e/mock/tests/requireActual.test.ts b/e2e/mock/tests/requireActual.test.ts deleted file mode 100644 index 3487e6016..000000000 --- a/e2e/mock/tests/requireActual.test.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { expect, it, rs } from '@rstest/core'; - -const axios = require('axios').default; - -rs.mockRequire('axios'); - -it('mocked axios (axios is externalized)', async () => { - await axios.get('string'); - expect(axios.get).toHaveBeenCalledWith('string'); - expect(axios.mocked).toBe('axios_mocked'); - expect(axios.post).toBeUndefined(); -}); - -it('use `requireActual` to require actual axios', async () => { - const originalAxios = await rs.requireActual('axios'); - expect(rs.isMockFunction(originalAxios.get)).toBe(false); - expect(originalAxios.mocked).toBeUndefined(); - expect(typeof originalAxios.AxiosHeaders).toBe('function'); -}); diff --git a/e2e/mock/tests/requireMock.test.ts b/e2e/mock/tests/requireMock.test.ts new file mode 100644 index 000000000..fa1ddb668 --- /dev/null +++ b/e2e/mock/tests/requireMock.test.ts @@ -0,0 +1,12 @@ +import { expect, rs, test } from '@rstest/core'; + +test('requireMock works', async () => { + const redux = rs.requireMock('redux-cjs'); + await redux.isAction('string'); + expect(redux.isAction).toHaveBeenCalledWith('string'); +}); + +test('actual redux is not mocked (CJS)', async () => { + const redux = require('redux'); + expect(rs.isMockFunction(redux.isAction)).toBe(false); +}); diff --git a/e2e/package.json b/e2e/package.json index d4a0c035c..e56108ca1 100644 --- a/e2e/package.json +++ b/e2e/package.json @@ -7,12 +7,14 @@ "typecheck": "tsc --noEmit" }, "devDependencies": { - "@rsbuild/core": "1.5.0", + "@rsbuild/core": "1.6.0-beta.0", "@rslib/core": "0.13.3", "@rstest/core": "workspace:*", "@rstest/tsconfig": "workspace:*", "@types/jest-image-snapshot": "^6.4.0", "axios": "^1.12.2", + "is-url": "^1.2.4", + "@types/is-url": "^1.2.32", "jest-image-snapshot": "^6.5.1", "memfs": "^4.42.0", "pathe": "^2.0.3", @@ -21,5 +23,8 @@ "strip-ansi": "^7.1.2", "tinyexec": "^1.0.1", "typescript": "^5.9.2" + }, + "dependencies": { + "@types/is-url": "^1.2.32" } } diff --git a/e2e/projects/fixtures/packages/client/package.json b/e2e/projects/fixtures/packages/client/package.json index 22e7f83a8..602f5ddfb 100644 --- a/e2e/projects/fixtures/packages/client/package.json +++ b/e2e/projects/fixtures/packages/client/package.json @@ -12,7 +12,7 @@ "react-dom": "^19.1.1" }, "devDependencies": { - "@rsbuild/core": "1.5.0", + "@rsbuild/core": "1.6.0-beta.0", "@rsbuild/plugin-react": "^1.4.0", "@testing-library/jest-dom": "^6.8.0", "@testing-library/dom": "^10.4.1", diff --git a/e2e/rstestEnv.d.ts b/e2e/rstestEnv.d.ts index 38b3bc935..62ed0e33b 100644 --- a/e2e/rstestEnv.d.ts +++ b/e2e/rstestEnv.d.ts @@ -1,2 +1 @@ -/// /// diff --git a/e2e/test-api/fixtures/moduleNotFound.test.ts b/e2e/test-api/fixtures/moduleNotFound.test.ts index 93ea66adf..4dc46cc9b 100644 --- a/e2e/test-api/fixtures/moduleNotFound.test.ts +++ b/e2e/test-api/fixtures/moduleNotFound.test.ts @@ -21,6 +21,6 @@ it('test expectNotFound error', async () => { it('test expectNotFound error', async () => { await expect(unexpectNotFound()).rejects.toThrowError( - /Cannot find module 'aaa'/, + '[Rstest] Cannot find module "aaa"', ); }); diff --git a/e2e/tsconfig.json b/e2e/tsconfig.json index e2223ae1a..9dfc7e571 100644 --- a/e2e/tsconfig.json +++ b/e2e/tsconfig.json @@ -9,5 +9,5 @@ "allowImportingTsExtensions": true }, "include": ["./"], - "exclude": ["vue/", "projects/fixtures/"] + "exclude": ["vue/", "projects/fixtures/", "globals/fixtures/"] } diff --git a/e2e/vue/fixtures/package.json b/e2e/vue/fixtures/package.json index 8458b968a..1a1992ce6 100644 --- a/e2e/vue/fixtures/package.json +++ b/e2e/vue/fixtures/package.json @@ -12,9 +12,9 @@ }, "devDependencies": { "@rstest/core": "workspace:*", - "@rsbuild/core": "1.5.0", + "@rsbuild/core": "1.6.0-beta.0", "@rsbuild/plugin-babel": "^1.0.6", - "@rsbuild/plugin-vue": "^1.1.2", + "@rsbuild/plugin-vue": "^1.2.0", "@rsbuild/plugin-vue-jsx": "^1.1.1", "@vue/test-utils": "^2.4.6", "@vue/compiler-dom": "^3.5.21", diff --git a/e2e/watch/index.test.ts b/e2e/watch/index.test.ts index 161c90281..7797803f1 100644 --- a/e2e/watch/index.test.ts +++ b/e2e/watch/index.test.ts @@ -10,7 +10,9 @@ rs.setConfig({ retry: 3, }); -describe('watch', () => { +// TODO: The following error occurs only on Windows CI. It should appear in the Rspack version range from 1.5.0 to 1.6.0-beta.0. +// Error: EBUSY: resource busy or locked, rmdir 'D:\a\rstest\rstest\e2e\watch\fixtures-test-0' +describe.skipIf(process.platform === 'win32')('watch', () => { it('test files should be ran when create / update / delete', async () => { const { fs } = await prepareFixtures({ fixturesPath: `${__dirname}/fixtures`, @@ -48,7 +50,10 @@ describe('watch', () => { await cli.waitForStdout('Duration'); expect(cli.stdout).toMatch('Tests 2 passed'); - expect(cli.stdout).toMatch(/Test files to re-run.*:\n.*bar\.test\.ts\n\n/); + // Updated as the shared module `src/index.ts` is extracted into another chunk. + expect(cli.stdout).toMatch( + /Test files to re-run.*:\n.*bar\.test\.ts\n.*index\.test\.ts\n\n/, + ); // update cli.resetStd(); @@ -65,8 +70,11 @@ describe('watch', () => { cli.resetStd(); fs.delete('./fixtures-test-0/bar.test.ts'); await cli.waitForStdout('Duration'); - expect(cli.stdout).toMatch('No test files need re-run.'); expect(cli.stdout).toMatch('Test Files 1 passed'); + // Updated as extracting the shared module `src/index.ts` is into another chunk in reverted. + expect(cli.stdout).toMatch( + /Test files to re-run.*:\n.*index\.test\.ts\n\n/, + ); cli.exec.kill(); }); diff --git a/examples/react/package.json b/examples/react/package.json index 40526b7ed..86c5b53ff 100644 --- a/examples/react/package.json +++ b/examples/react/package.json @@ -13,7 +13,7 @@ "react-dom": "^19.1.1" }, "devDependencies": { - "@rsbuild/core": "1.5.0", + "@rsbuild/core": "1.6.0-beta.0", "@rsbuild/plugin-react": "^1.4.0", "@testing-library/dom": "^10.4.1", "@testing-library/jest-dom": "^6.8.0", diff --git a/examples/react/src/App.tsx b/examples/react/src/App.tsx index dff175123..61b021d7c 100644 --- a/examples/react/src/App.tsx +++ b/examples/react/src/App.tsx @@ -1,9 +1,11 @@ import './App.css'; +import { h2Title } from './module'; const App = () => { return (

Rsbuild with React

+

{h2Title()}

Start building amazing things with Rsbuild.

); diff --git a/examples/react/src/module.ts b/examples/react/src/module.ts new file mode 100644 index 000000000..85df6d9a7 --- /dev/null +++ b/examples/react/src/module.ts @@ -0,0 +1 @@ +export const h2Title = () => 'example'; diff --git a/examples/react/test/App.test.tsx b/examples/react/test/App.test.tsx index 965fb3af7..c8eb50162 100644 --- a/examples/react/test/App.test.tsx +++ b/examples/react/test/App.test.tsx @@ -1,12 +1,19 @@ -import { expect, test } from '@rstest/core'; +import { expect, rs, test } from '@rstest/core'; import { render, screen } from '@testing-library/react'; import App from '../src/App'; +rs.mock('../src/module', () => ({ + h2Title: () => 'mocked', +})); + test('should render App correctly', async () => { render(); - const element = screen.getByText('Rsbuild with React'); + const h1 = screen.getByText('Rsbuild with React'); + expect(h1.tagName).toBe('H1'); + expect(h1).toBeInTheDocument(); - expect(element.tagName).toBe('H1'); - expect(element).toBeInTheDocument(); + const h2 = screen.getByText('mocked'); + expect(h2.tagName).toBe('H2'); + expect(h2).toBeInTheDocument(); }); diff --git a/package.json b/package.json index c1e16d7b7..bb72168c2 100644 --- a/package.json +++ b/package.json @@ -33,10 +33,10 @@ "devDependencies": { "@biomejs/biome": "^2.2.4", "@changesets/cli": "^2.29.7", - "@rstest/coverage-istanbul": "workspace:*", "@rsdoctor/rspack-plugin": "^1.2.3", "@rslint/core": "^0.1.13", "@rstest/core": "workspace:*", + "@rstest/coverage-istanbul": "workspace:*", "@types/fs-extra": "^11.0.4", "@types/node": "^22.16.5", "check-dependency-version-consistency": "^5.0.1", diff --git a/packages/core/package.json b/packages/core/package.json index d3aa4c007..aa672653d 100644 --- a/packages/core/package.json +++ b/packages/core/package.json @@ -54,7 +54,7 @@ }, "dependencies": { "@types/chai": "^5.2.2", - "@rsbuild/core": "1.5.0", + "@rsbuild/core": "1.6.0-beta.0", "tinypool": "^1.1.1" }, "devDependencies": { diff --git a/packages/core/rslib.config.ts b/packages/core/rslib.config.ts index 9ff28940d..58d7cb06e 100644 --- a/packages/core/rslib.config.ts +++ b/packages/core/rslib.config.ts @@ -1,4 +1,4 @@ -import { defineConfig } from '@rslib/core'; +import { defineConfig, rspack } from '@rslib/core'; import { licensePlugin } from './licensePlugin'; const isBuildWatch = process.argv.includes('--watch'); @@ -78,7 +78,21 @@ export default defineConfig({ tools: { rspack: { // fix licensePlugin watch error: ResourceData has been dropped by Rust. - plugins: isBuildWatch ? [] : [licensePlugin()], + plugins: [ + new rspack.CopyRspackPlugin({ + patterns: [ + { + from: 'src/core/plugins/mockRuntimeCode.js', + to: 'mockRuntimeCode.js', + }, + { + from: 'src/core/plugins/importActualLoader.mjs', + to: 'importActualLoader.mjs', + }, + ], + }), + isBuildWatch ? null : licensePlugin(), + ].filter(Boolean), }, }, }, diff --git a/packages/core/src/core/plugins/importActualLoader.mjs b/packages/core/src/core/plugins/importActualLoader.mjs new file mode 100644 index 000000000..bee437b09 --- /dev/null +++ b/packages/core/src/core/plugins/importActualLoader.mjs @@ -0,0 +1,2 @@ +// This loader only creates a doppelganger of the module and directly returns the source code. +export default (source) => source; diff --git a/packages/core/src/core/plugins/mockRuntime.ts b/packages/core/src/core/plugins/mockRuntime.ts index 47214aa7b..4c7325e04 100644 --- a/packages/core/src/core/plugins/mockRuntime.ts +++ b/packages/core/src/core/plugins/mockRuntime.ts @@ -1,114 +1,26 @@ +import fs from 'node:fs'; +import path from 'node:path'; +import { fileURLToPath } from 'node:url'; import type { RsbuildPlugin, Rspack } from '@rsbuild/core'; +const __dirname = path.dirname(fileURLToPath(import.meta.url)); + class MockRuntimeRspackPlugin { apply(compiler: Rspack.Compiler) { const { RuntimeModule } = compiler.webpack; + class RetestImportRuntimeModule extends RuntimeModule { constructor() { super('rstest runtime'); } override generate() { - // Rstest runtime code should be prefixed with `rstest_` to avoid conflicts with other runtimes. - return ` -if (typeof __webpack_require__ === 'undefined') { - return; -} - -const originalRequire = __webpack_require__; -__webpack_require__ = function(...args) { - try { - return originalRequire(...args); - } catch (e) { - const errMsg = e.message ?? e.toString(); - if (errMsg.includes('__webpack_modules__[moduleId] is not a function')) { - throw new Error(\`Cannot find module '\${args[0]}'\`) - } - throw e; - } -}; - -Object.keys(originalRequire).forEach(key => { - __webpack_require__[key] = originalRequire[key]; -}); - -__webpack_require__.rstest_original_modules = {}; - -__webpack_require__.rstest_reset_modules = () => { - const mockedIds = Object.keys(__webpack_require__.rstest_original_modules) - Object.keys(__webpack_module_cache__).forEach(id => { - // Do not reset mocks registry. - if (!mockedIds.includes(id)) { - delete __webpack_module_cache__[id]; - } - }); -} - -__webpack_require__.rstest_unmock = (id) => { - delete __webpack_module_cache__[id] -} - -__webpack_require__.rstest_require_actual = __webpack_require__.rstest_import_actual = (id) => { - const originalModule = __webpack_require__.rstest_original_modules[id]; - // Use fallback module if the module is not mocked. - const fallbackMod = __webpack_require__(id); - return originalModule ? originalModule : fallbackMod; -} - -__webpack_require__.rstest_exec = async (id, modFactory) => { - if (__webpack_module_cache__) { - let asyncFactory = __webpack_module_cache__[id]; - if (asyncFactory && asyncFactory.constructor.name === 'AsyncFunction') { - await asyncFactory(); - } - } -}; - -__webpack_require__.rstest_mock = (id, modFactory) => { - let requiredModule = undefined - try { - requiredModule = __webpack_require__(id); - } catch { - // TODO: non-resolved module - } finally { - __webpack_require__.rstest_original_modules[id] = requiredModule; - } - if (typeof modFactory === 'string' || typeof modFactory === 'number') { - __webpack_module_cache__[id] = { exports: __webpack_require__(modFactory) }; - } else if (typeof modFactory === 'function') { - if (modFactory.constructor.name === 'AsyncFunction') { - __webpack_module_cache__[id] = async () => { - const exports = await modFactory(); - __webpack_require__.r(exports); - __webpack_module_cache__[id] = { exports, id, loaded: true }; - } - } else { - const exports = modFactory(); - __webpack_require__.r(exports); - __webpack_module_cache__[id] = { exports, id, loaded: true }; - } - } -}; - -__webpack_require__.rstest_do_mock = (id, modFactory) => { - let requiredModule = undefined - try { - requiredModule = __webpack_require__(id); - } catch { - // TODO: non-resolved module - } finally { - __webpack_require__.rstest_original_modules[id] = requiredModule; - } - if (typeof modFactory === 'string' || typeof modFactory === 'number') { - __webpack_module_cache__[id] = { exports: __webpack_require__(modFactory) }; - } else if (typeof modFactory === 'function') { - const exports = modFactory(); - __webpack_require__.r(exports); - __webpack_module_cache__[id] = { exports, id, loaded: true }; - } -}; + const code = fs.readFileSync( + path.join(__dirname, './mockRuntimeCode.js'), + 'utf8', + ); -`; + return code; } } diff --git a/packages/core/src/core/plugins/mockRuntimeCode.js b/packages/core/src/core/plugins/mockRuntimeCode.js new file mode 100644 index 000000000..c6a4987cc --- /dev/null +++ b/packages/core/src/core/plugins/mockRuntimeCode.js @@ -0,0 +1,160 @@ +/** biome-ignore-all lint/complexity/useArrowFunction: */ +// Rstest runtime code should be prefixed with `rstest_` to avoid conflicts with other runtimes. + +const originalWebpackRequire = __webpack_require__; +__webpack_require__ = function (...args) { + try { + return originalWebpackRequire(...args); + } catch (e) { + const errMsg = e.message ?? e.toString(); + if (errMsg.includes('__webpack_modules__[moduleId] is not a function')) { + throw new Error(`[Rstest] Cannot find module "${args[0]}"`); + } + throw e; + } +}; + +Object.keys(originalWebpackRequire).forEach((key) => { + __webpack_require__[key] = originalWebpackRequire[key]; +}); + +__webpack_require__.rstest_original_modules = {}; +__webpack_require__.rstest_original_module_factories = {}; + +//#region rs.unmock +__webpack_require__.rstest_unmock = (id) => { + const originalModuleFactory = + __webpack_require__.rstest_original_module_factories[id]; + + if (originalModuleFactory) { + __webpack_modules__[id] = originalModuleFactory; + } + + delete __webpack_module_cache__[id]; +}; +//#endregion + +//#region rs.doUnmock +__webpack_require__.rstest_do_unmock = __webpack_require__.rstest_unmock; +//#endregion + +//#region rs.requireActual +__webpack_require__.rstest_require_actual = + __webpack_require__.rstest_import_actual = (id) => { + const originalModule = __webpack_require__.rstest_original_modules[id]; + // Use fallback module if the module is not mocked. + const fallbackMod = __webpack_require__(id); + return originalModule ? originalModule : fallbackMod; + }; +//#endregion + +// #region rs.mock +__webpack_require__.rstest_mock = (id, modFactory) => { + let requiredModule = undefined; + try { + requiredModule = __webpack_require__(id); + } catch { + // TODO: non-resolved module + } finally { + __webpack_require__.rstest_original_modules[id] = requiredModule; + __webpack_require__.rstest_original_module_factories[id] = + __webpack_modules__[id]; + } + if (typeof modFactory === 'string' || typeof modFactory === 'number') { + __webpack_module_cache__[id] = { exports: __webpack_require__(modFactory) }; + } else if (typeof modFactory === 'function') { + const finalModFactory = function ( + __unused_webpack_module, + __webpack_exports__, + __webpack_require__, + ) { + __webpack_require__.r(__webpack_exports__); + const res = modFactory(); + for (const key in res) { + __webpack_require__.d(__webpack_exports__, { + [key]: () => res[key], + }); + } + }; + + __webpack_modules__[id] = finalModFactory; + delete __webpack_module_cache__[id]; + } +}; +// #endregion + +// #region rs.mockRequire +__webpack_require__.rstest_mock_require = (id, modFactory) => { + let requiredModule = undefined; + try { + requiredModule = __webpack_require__(id); + } catch { + // TODO: non-resolved module + } finally { + __webpack_require__.rstest_original_modules[id] = requiredModule; + __webpack_require__.rstest_original_module_factories[id] = + __webpack_modules__[id]; + } + if (typeof modFactory === 'string' || typeof modFactory === 'number') { + __webpack_module_cache__[id] = { exports: __webpack_require__(modFactory) }; + } else if (typeof modFactory === 'function') { + const exports = modFactory(); + __webpack_require__.r(exports); + __webpack_module_cache__[id] = { exports, id, loaded: true }; + } +}; +// #endregion + +// #region rs.doMock +__webpack_require__.rstest_do_mock = (id, modFactory) => { + let requiredModule = undefined; + try { + requiredModule = __webpack_require__(id); + } catch { + // TODO: non-resolved module + } finally { + __webpack_require__.rstest_original_modules[id] = requiredModule; + __webpack_require__.rstest_original_module_factories[id] = + __webpack_modules__[id]; + } + if (typeof modFactory === 'string' || typeof modFactory === 'number') { + __webpack_module_cache__[id] = { exports: __webpack_require__(modFactory) }; + } else if (typeof modFactory === 'function') { + const exports = modFactory(); + __webpack_require__.r(exports); + __webpack_module_cache__[id] = { exports, id, loaded: true }; + } +}; + +// #region rs.doMockRequire +__webpack_require__.rstest_do_mock_require = (id, modFactory) => { + let requiredModule = undefined; + try { + requiredModule = __webpack_require__(id); + } catch { + // TODO: non-resolved module + } finally { + __webpack_require__.rstest_original_modules[id] = requiredModule; + __webpack_require__.rstest_original_module_factories[id] = + __webpack_modules__[id]; + } + if (typeof modFactory === 'string' || typeof modFactory === 'number') { + __webpack_module_cache__[id] = { exports: __webpack_require__(modFactory) }; + } else if (typeof modFactory === 'function') { + const exports = modFactory(); + __webpack_require__.r(exports); + __webpack_module_cache__[id] = { exports, id, loaded: true }; + } +}; + +//#region rs.reset_modules +__webpack_require__.rstest_reset_modules = () => { + const mockedIds = Object.keys(__webpack_require__.rstest_original_modules); + Object.keys(__webpack_module_cache__).forEach((id) => { + // Do not reset mocks registry. + if (!mockedIds.includes(id)) { + delete __webpack_module_cache__[id]; + } + }); +}; +//#endregion diff --git a/packages/core/src/core/rsbuild.ts b/packages/core/src/core/rsbuild.ts index 5883fc61b..2507a47c3 100644 --- a/packages/core/src/core/rsbuild.ts +++ b/packages/core/src/core/rsbuild.ts @@ -1,3 +1,4 @@ +import { fileURLToPath } from 'node:url'; import { createRsbuild, type ManifestData, @@ -5,6 +6,7 @@ import { logger as RsbuildLogger, type RsbuildPlugin, type Rspack, + rspack, } from '@rsbuild/core'; import path from 'pathe'; import type { @@ -23,6 +25,8 @@ import { pluginInspect } from './plugins/inspect'; import { pluginMockRuntime } from './plugins/mockRuntime'; import { pluginCacheControl } from './plugins/moduleCacheControl'; +const __dirname = path.dirname(fileURLToPath(import.meta.url)); + type TestEntryToChunkHashes = { name: string; /** key is chunk name, value is chunk hash */ @@ -279,6 +283,21 @@ export const createRsbuildServer = async ({ const rstestCompilerPlugin: RsbuildPlugin = { name: 'rstest:compiler', setup: (api) => { + api.modifyBundlerChain((chain) => { + chain + .plugin('RemoveDuplicateModulesPlugin') + .use(rspack.experiments.RemoveDuplicateModulesPlugin); + + // add mock-loader to this rule + chain.module + .rule('rstest-mock-module-doppelgangers') + .test(/\.(?:js|jsx|mjs|cjs|ts|tsx|mts|cts)$/) + .with({ rstest: 'importActual' }) + .use('import-actual-loader') + .loader(path.resolve(__dirname, './importActualLoader.mjs')) + .end(); + }); + api.onAfterCreateCompiler(({ compiler }) => { // outputFileSystem to be updated later by `rsbuild-dev-middleware` rspackCompiler = compiler; diff --git a/packages/core/src/types/config.ts b/packages/core/src/types/config.ts index 8891b8e9b..64a73bc91 100644 --- a/packages/core/src/types/config.ts +++ b/packages/core/src/types/config.ts @@ -192,7 +192,6 @@ export interface RstestConfig { * @default false */ restoreMocks?: boolean; - /** * The number of milliseconds after which a test or suite is considered slow and reported as such in the results. * @default 300 diff --git a/packages/core/tests/core/__snapshots__/rsbuild.test.ts.snap b/packages/core/tests/core/__snapshots__/rsbuild.test.ts.snap index 7c8778aa0..71659076b 100644 --- a/packages/core/tests/core/__snapshots__/rsbuild.test.ts.snap +++ b/packages/core/tests/core/__snapshots__/rsbuild.test.ts.snap @@ -7,7 +7,8 @@ exports[`prepareRsbuild > should generate rspack config correctly (jsdom) 1`] = "entry": {}, "experiments": { "asyncWebAssembly": true, - "inlineEnum": true, + "inlineConst": false, + "inlineEnum": false, "lazyBarrel": true, "rspackFuture": { "bundlerInfo": { @@ -37,6 +38,7 @@ exports[`prepareRsbuild > should generate rspack config correctly (jsdom) 1`] = "javascript": { "exportsPresence": "error", "importDynamic": false, + "inlineConst": false, "requireAsExpression": false, "requireDynamic": false, "requireResolve": false, @@ -171,7 +173,7 @@ exports[`prepareRsbuild > should generate rspack config correctly (jsdom) 1`] = }, "rspackExperiments": { "collectTypeScriptInfo": { - "exportedEnum": true, + "exportedEnum": false, "typeExports": true, }, }, @@ -225,7 +227,7 @@ exports[`prepareRsbuild > should generate rspack config correctly (jsdom) 1`] = }, "rspackExperiments": { "collectTypeScriptInfo": { - "exportedEnum": true, + "exportedEnum": false, "typeExports": true, }, }, @@ -429,11 +431,6 @@ exports[`prepareRsbuild > should generate rspack config correctly (jsdom) 1`] = "_args": [ { "import.meta.env": "process.env", - "import.meta.env.ASSET_PREFIX": """", - "import.meta.env.BASE_URL": ""/"", - "import.meta.env.DEV": false, - "import.meta.env.MODE": ""none"", - "import.meta.env.PROD": false, "import.meta.rstest": "global['@rstest/core']", "process.env.ASSET_PREFIX": """", "process.env.BASE_URL": ""/"", @@ -530,7 +527,8 @@ exports[`prepareRsbuild > should generate rspack config correctly (node) 1`] = ` "entry": {}, "experiments": { "asyncWebAssembly": true, - "inlineEnum": true, + "inlineConst": false, + "inlineEnum": false, "lazyBarrel": true, "rspackFuture": { "bundlerInfo": { @@ -561,6 +559,7 @@ exports[`prepareRsbuild > should generate rspack config correctly (node) 1`] = ` "javascript": { "exportsPresence": "error", "importDynamic": false, + "inlineConst": false, "requireAsExpression": false, "requireDynamic": false, "requireResolve": false, @@ -695,7 +694,7 @@ exports[`prepareRsbuild > should generate rspack config correctly (node) 1`] = ` }, "rspackExperiments": { "collectTypeScriptInfo": { - "exportedEnum": true, + "exportedEnum": false, "typeExports": true, }, }, @@ -749,7 +748,7 @@ exports[`prepareRsbuild > should generate rspack config correctly (node) 1`] = ` }, "rspackExperiments": { "collectTypeScriptInfo": { - "exportedEnum": true, + "exportedEnum": false, "typeExports": true, }, }, @@ -942,11 +941,6 @@ exports[`prepareRsbuild > should generate rspack config correctly (node) 1`] = ` "_args": [ { "import.meta.env": "process.env", - "import.meta.env.ASSET_PREFIX": """", - "import.meta.env.BASE_URL": ""/"", - "import.meta.env.DEV": false, - "import.meta.env.MODE": ""none"", - "import.meta.env.PROD": false, "import.meta.rstest": "global['@rstest/core']", "process.env.ASSET_PREFIX": """", "process.env.BASE_URL": ""/"", @@ -1045,7 +1039,8 @@ exports[`prepareRsbuild > should generate rspack config correctly in watch mode "entry": [Function], "experiments": { "asyncWebAssembly": true, - "inlineEnum": true, + "inlineConst": false, + "inlineEnum": false, "lazyBarrel": true, "rspackFuture": { "bundlerInfo": { @@ -1076,6 +1071,7 @@ exports[`prepareRsbuild > should generate rspack config correctly in watch mode "javascript": { "exportsPresence": "error", "importDynamic": false, + "inlineConst": false, "requireAsExpression": false, "requireDynamic": false, "requireResolve": false, @@ -1210,7 +1206,7 @@ exports[`prepareRsbuild > should generate rspack config correctly in watch mode }, "rspackExperiments": { "collectTypeScriptInfo": { - "exportedEnum": true, + "exportedEnum": false, "typeExports": true, }, }, @@ -1264,7 +1260,7 @@ exports[`prepareRsbuild > should generate rspack config correctly in watch mode }, "rspackExperiments": { "collectTypeScriptInfo": { - "exportedEnum": true, + "exportedEnum": false, "typeExports": true, }, }, @@ -1457,11 +1453,6 @@ exports[`prepareRsbuild > should generate rspack config correctly in watch mode "_args": [ { "import.meta.env": "process.env", - "import.meta.env.ASSET_PREFIX": """", - "import.meta.env.BASE_URL": ""/"", - "import.meta.env.DEV": false, - "import.meta.env.MODE": ""none"", - "import.meta.env.PROD": false, "import.meta.rstest": "global['@rstest/core']", "process.env.ASSET_PREFIX": """", "process.env.BASE_URL": ""/"", @@ -1568,7 +1559,8 @@ exports[`prepareRsbuild > should generate rspack config correctly with projects "entry": {}, "experiments": { "asyncWebAssembly": true, - "inlineEnum": true, + "inlineConst": false, + "inlineEnum": false, "lazyBarrel": true, "rspackFuture": { "bundlerInfo": { @@ -1598,6 +1590,7 @@ exports[`prepareRsbuild > should generate rspack config correctly with projects "javascript": { "exportsPresence": "error", "importDynamic": false, + "inlineConst": false, "requireAsExpression": false, "requireDynamic": false, "requireResolve": false, @@ -1732,7 +1725,7 @@ exports[`prepareRsbuild > should generate rspack config correctly with projects }, "rspackExperiments": { "collectTypeScriptInfo": { - "exportedEnum": true, + "exportedEnum": false, "typeExports": true, }, }, @@ -1786,7 +1779,7 @@ exports[`prepareRsbuild > should generate rspack config correctly with projects }, "rspackExperiments": { "collectTypeScriptInfo": { - "exportedEnum": true, + "exportedEnum": false, "typeExports": true, }, }, @@ -1990,11 +1983,6 @@ exports[`prepareRsbuild > should generate rspack config correctly with projects "_args": [ { "import.meta.env": "process.env", - "import.meta.env.ASSET_PREFIX": """", - "import.meta.env.BASE_URL": ""/"", - "import.meta.env.DEV": false, - "import.meta.env.MODE": ""none"", - "import.meta.env.PROD": false, "import.meta.rstest": "global['@rstest/core']", "process.env.ASSET_PREFIX": """", "process.env.BASE_URL": ""/"", @@ -2091,7 +2079,8 @@ exports[`prepareRsbuild > should generate rspack config correctly with projects "entry": {}, "experiments": { "asyncWebAssembly": true, - "inlineEnum": true, + "inlineConst": false, + "inlineEnum": false, "lazyBarrel": true, "rspackFuture": { "bundlerInfo": { @@ -2122,6 +2111,7 @@ exports[`prepareRsbuild > should generate rspack config correctly with projects "javascript": { "exportsPresence": "error", "importDynamic": false, + "inlineConst": false, "requireAsExpression": false, "requireDynamic": false, "requireResolve": false, @@ -2256,7 +2246,7 @@ exports[`prepareRsbuild > should generate rspack config correctly with projects }, "rspackExperiments": { "collectTypeScriptInfo": { - "exportedEnum": true, + "exportedEnum": false, "typeExports": true, }, }, @@ -2310,7 +2300,7 @@ exports[`prepareRsbuild > should generate rspack config correctly with projects }, "rspackExperiments": { "collectTypeScriptInfo": { - "exportedEnum": true, + "exportedEnum": false, "typeExports": true, }, }, @@ -2514,11 +2504,6 @@ exports[`prepareRsbuild > should generate rspack config correctly with projects "_args": [ { "import.meta.env": "process.env", - "import.meta.env.ASSET_PREFIX": """", - "import.meta.env.BASE_URL": ""/"", - "import.meta.env.DEV": false, - "import.meta.env.MODE": ""none"", - "import.meta.env.PROD": false, "import.meta.rstest": "global['@rstest/core']", "process.env.ASSET_PREFIX": """", "process.env.BASE_URL": ""/"", @@ -2667,7 +2652,7 @@ exports[`prepareRsbuild > should generate swc config correctly with user customi }, "rspackExperiments": { "collectTypeScriptInfo": { - "exportedEnum": true, + "exportedEnum": false, "typeExports": true, }, }, diff --git a/packages/vscode/package.json b/packages/vscode/package.json index e84736371..f828b5507 100644 --- a/packages/vscode/package.json +++ b/packages/vscode/package.json @@ -65,7 +65,7 @@ "package:vsce": "npm run build && vsce package" }, "devDependencies": { - "@rsbuild/core": "1.5.0", + "@rsbuild/core": "1.6.0-beta.0", "@rslib/core": "0.13.3", "@rstest/core": "workspace:*", "@swc/core": "^1.13.5", diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index dc7418bb0..2a3a98b05 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -18,7 +18,7 @@ importers: version: 2.29.7(@types/node@22.18.6) '@rsdoctor/rspack-plugin': specifier: ^1.2.3 - version: 1.2.3(@rsbuild/core@1.5.10)(@rspack/core@1.5.5(@swc/helpers@0.5.17))(webpack@5.101.2(@swc/core@1.13.5(@swc/helpers@0.5.17))) + version: 1.2.3(@rsbuild/core@1.5.17)(@rspack/core@1.5.8(@swc/helpers@0.5.17))(webpack@5.102.1(@swc/core@1.13.5(@swc/helpers@0.5.17))) '@rslint/core': specifier: ^0.1.13 version: 0.1.13 @@ -72,10 +72,14 @@ importers: version: 5.9.2 e2e: + dependencies: + '@types/is-url': + specifier: ^1.2.32 + version: 1.2.32 devDependencies: '@rsbuild/core': - specifier: 1.5.0 - version: 1.5.0 + specifier: 1.6.0-beta.0 + version: 1.6.0-beta.0 '@rslib/core': specifier: 0.13.3 version: 0.13.3(@microsoft/api-extractor@7.52.13(@types/node@22.18.6))(typescript@5.9.2) @@ -91,6 +95,9 @@ importers: axios: specifier: ^1.12.2 version: 1.12.2 + is-url: + specifier: ^1.2.4 + version: 1.2.4 jest-image-snapshot: specifier: ^6.5.1 version: 6.5.1 @@ -136,11 +143,11 @@ importers: version: 19.1.1(react@19.1.1) devDependencies: '@rsbuild/core': - specifier: 1.5.0 - version: 1.5.0 + specifier: 1.6.0-beta.0 + version: 1.6.0-beta.0 '@rsbuild/plugin-react': specifier: ^1.4.0 - version: 1.4.0(@rsbuild/core@1.5.0) + version: 1.4.0(@rsbuild/core@1.6.0-beta.0) '@testing-library/dom': specifier: ^10.4.1 version: 10.4.1 @@ -238,11 +245,11 @@ importers: version: 19.1.1(react@19.1.1) devDependencies: '@rsbuild/core': - specifier: 1.5.0 - version: 1.5.0 + specifier: 1.6.0-beta.0 + version: 1.6.0-beta.0 '@rsbuild/plugin-react': specifier: ^1.4.0 - version: 1.4.0(@rsbuild/core@1.5.0) + version: 1.4.0(@rsbuild/core@1.6.0-beta.0) '@testing-library/dom': specifier: ^10.4.1 version: 10.4.1 @@ -296,7 +303,7 @@ importers: devDependencies: '@rsbuild/plugin-react': specifier: ^1.4.0 - version: 1.4.0(@rsbuild/core@1.5.10) + version: 1.4.0(@rsbuild/core@1.6.0-beta.0) '@types/react': specifier: ^19.1.13 version: 19.1.13 @@ -323,17 +330,17 @@ importers: version: 3.5.21(typescript@5.9.2) devDependencies: '@rsbuild/core': - specifier: 1.5.0 - version: 1.5.0 + specifier: 1.6.0-beta.0 + version: 1.6.0-beta.0 '@rsbuild/plugin-babel': specifier: ^1.0.6 - version: 1.0.6(@rsbuild/core@1.5.0) + version: 1.0.6(@rsbuild/core@1.6.0-beta.0) '@rsbuild/plugin-vue': - specifier: ^1.1.2 - version: 1.1.2(@rsbuild/core@1.5.0)(@swc/core@1.13.5(@swc/helpers@0.5.17))(vue@3.5.21(typescript@5.9.2)) + specifier: ^1.2.0 + version: 1.2.0(@rsbuild/core@1.6.0-beta.0)(@swc/core@1.13.5(@swc/helpers@0.5.17))(vue@3.5.21(typescript@5.9.2)) '@rsbuild/plugin-vue-jsx': specifier: ^1.1.1 - version: 1.1.1(@babel/core@7.28.3)(@rsbuild/core@1.5.0) + version: 1.1.1(@babel/core@7.28.3)(@rsbuild/core@1.6.0-beta.0) '@rstest/core': specifier: workspace:* version: link:../../../packages/core @@ -378,11 +385,11 @@ importers: version: 19.1.1(react@19.1.1) devDependencies: '@rsbuild/core': - specifier: 1.5.0 - version: 1.5.0 + specifier: 1.6.0-beta.0 + version: 1.6.0-beta.0 '@rsbuild/plugin-react': specifier: ^1.4.0 - version: 1.4.0(@rsbuild/core@1.5.0) + version: 1.4.0(@rsbuild/core@1.6.0-beta.0) '@testing-library/dom': specifier: ^10.4.1 version: 10.4.1 @@ -408,8 +415,8 @@ importers: packages/core: dependencies: '@rsbuild/core': - specifier: 1.5.0 - version: 1.5.0 + specifier: 1.6.0-beta.0 + version: 1.6.0-beta.0 '@types/chai': specifier: ^5.2.2 version: 5.2.2 @@ -515,7 +522,7 @@ importers: version: 4.0.3 webpack-license-plugin: specifier: ^4.5.1 - version: 4.5.1(webpack@5.101.2(@swc/core@1.13.5(@swc/helpers@0.5.17))) + version: 4.5.1(webpack@5.102.1(@swc/core@1.13.5(@swc/helpers@0.5.17))) packages/coverage-istanbul: dependencies: @@ -566,8 +573,8 @@ importers: packages/vscode: devDependencies: '@rsbuild/core': - specifier: 1.5.0 - version: 1.5.0 + specifier: 1.6.0-beta.0 + version: 1.6.0-beta.0 '@rslib/core': specifier: 0.13.3 version: 0.13.3(@microsoft/api-extractor@7.52.13(@types/node@22.18.6))(typescript@5.9.2) @@ -623,7 +630,7 @@ importers: devDependencies: '@rsbuild/plugin-sass': specifier: ^1.4.0 - version: 1.4.0(@rsbuild/core@1.5.10) + version: 1.4.0(@rsbuild/core@1.6.0-beta.0) '@rspress/core': specifier: ^2.0.0-beta.32 version: 2.0.0-beta.33(@types/react@19.1.13) @@ -656,10 +663,10 @@ importers: version: 19.1.1(react@19.1.1) rsbuild-plugin-google-analytics: specifier: ^1.0.4 - version: 1.0.4(@rsbuild/core@1.5.10) + version: 1.0.4(@rsbuild/core@1.6.0-beta.0) rsbuild-plugin-open-graph: specifier: ^1.1.0 - version: 1.1.0(@rsbuild/core@1.5.10) + version: 1.1.0(@rsbuild/core@1.6.0-beta.0) rspress-plugin-font-open-sans: specifier: ^1.0.3 version: 1.0.3(@rspress/core@2.0.0-beta.33(@types/react@19.1.13)) @@ -1331,26 +1338,44 @@ packages: '@module-federation/error-codes@0.18.0': resolution: {integrity: sha512-Woonm8ehyVIUPXChmbu80Zj6uJkC0dD9SJUZ/wOPtO8iiz/m+dkrOugAuKgoiR6qH4F+yorWila954tBz4uKsQ==} + '@module-federation/error-codes@0.20.0': + resolution: {integrity: sha512-pwKqIFXHG72AaXjtptZb+l5VOO3O7JQMVZ4txFhBH4H/BMu7o1LRBONllTisVmojLHOC/RQpBrxXSGrC64LC4w==} + '@module-federation/runtime-core@0.18.0': resolution: {integrity: sha512-ZyYhrDyVAhUzriOsVfgL6vwd+5ebYm595Y13KeMf6TKDRoUHBMTLGQ8WM4TDj8JNsy7LigncK8C03fn97of0QQ==} + '@module-federation/runtime-core@0.20.0': + resolution: {integrity: sha512-M/0F/Ed6o1eCC5gKW3V3QtbxeNZ1w0Y7r6NKNacnwKKC12Nn7Ty9Rg1Kjw2B13EUqP8Qs2Y2IwmBEApy7cFLMw==} + '@module-federation/runtime-tools@0.18.0': resolution: {integrity: sha512-fSga9o4t1UfXNV/Kh6qFvRyZpPp3EHSPRISNeyT8ZoTpzDNiYzhtw0BPUSSD8m6C6XQh2s/11rI4g80UY+d+hA==} + '@module-federation/runtime-tools@0.20.0': + resolution: {integrity: sha512-5NimrYQyYr8hBl48YVU+w6bzl9uWDKNq3IEqYDgYljTYlupbVqsH2MJTf2A+c95nuCycjHS0vp5B3rnJ3Kdotg==} + '@module-federation/runtime@0.18.0': resolution: {integrity: sha512-+C4YtoSztM7nHwNyZl6dQKGUVJdsPrUdaf3HIKReg/GQbrt9uvOlUWo2NXMZ8vDAnf/QRrpSYAwXHmWDn9Obaw==} + '@module-federation/runtime@0.20.0': + resolution: {integrity: sha512-9vHE27aLCWbvzUfYWCTCsNbx4IQ5MtK3f340s4swQofTKj0Qv5dJ6gRIwmHk3DqvH5/1FZoQi3FYMCmrThiGrg==} + '@module-federation/sdk@0.18.0': resolution: {integrity: sha512-Lo/Feq73tO2unjmpRfyyoUkTVoejhItXOk/h5C+4cistnHbTV8XHrW/13fD5e1Iu60heVdAhhelJd6F898Ve9A==} + '@module-federation/sdk@0.20.0': + resolution: {integrity: sha512-bBFGA07PpfioJLY0DITVe+szGwLtFad+8R4rb5bPFKCZPZsKqLKwMB9tSsdHeieFPSc+1v20s6wq+R1DiWe56Q==} + '@module-federation/webpack-bundler-runtime@0.18.0': resolution: {integrity: sha512-TEvErbF+YQ+6IFimhUYKK3a5wapD90d90sLsNpcu2kB3QGT7t4nIluE25duXuZDVUKLz86tEPrza/oaaCWTpvQ==} + '@module-federation/webpack-bundler-runtime@0.20.0': + resolution: {integrity: sha512-TB0v5FRjfpL5fR8O5L4L3FTKJsb4EsflK8aNkdrJ46Tm/MR+PvL4SEx/AXpnsY+g/zkGRkiz10vwF0/RgMh6fQ==} + '@napi-rs/wasm-runtime@0.2.4': resolution: {integrity: sha512-9zESzOO5aDByvhIAsOy9TbpZ0Ur2AJbUI7UT73kcUTS2mxAMHOBaa1st/jAymNoCtvrit99kkzT1FZuXVcgfIQ==} - '@napi-rs/wasm-runtime@1.0.5': - resolution: {integrity: sha512-TBr9Cf9onSAS2LQ2+QHx6XcC6h9+RIzJgbqG3++9TUZSH204AwEy5jg3BTQ0VATsyoGj4ee49tN/y6rvaOOtcg==} + '@napi-rs/wasm-runtime@1.0.7': + resolution: {integrity: sha512-SeDnOO0Tk7Okiq6DbXmmBODgOAb9dp9gjlphokTUxmt8U3liIP1ZsozBahH69j/RJv+Rfs6IwUKHTgQYJ/HBAw==} '@nodelib/fs.scandir@2.1.5': resolution: {integrity: sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==} @@ -1514,13 +1539,13 @@ packages: resolution: {integrity: sha512-O3rHJzAQKamUz1fvE0Qaw0xSFqsA/yafi2iqeE0pvdFtCO1viYx8QL6f3Ln/aCCTLxs68SLf0KPM9eSeM8yBnA==} engines: {node: '>=14.0.0'} - '@rsbuild/core@1.5.0': - resolution: {integrity: sha512-C4TNndcgIQTDbBvdlSLbfuMGH9i66SJlsWkA6AVElwF7RI39lwZ5gIbP+v+l3W8HwcZ78a6iIu88ZEm1FuTSvA==} + '@rsbuild/core@1.5.17': + resolution: {integrity: sha512-tHa4puv+pEooQvSewu/K5sm270nkVPcP07Ioz1c+fbFCrFpiZWV5XumgznilS80097glUrieN+9xTbIHGXjThQ==} engines: {node: '>=18.12.0'} hasBin: true - '@rsbuild/core@1.5.10': - resolution: {integrity: sha512-8FDZhtw18XRfCDEZjzt6Xi9ZR+oYpIj7d1AfGX+BVDzLpDCoAHJ/4dWy0ryl8ADssZeezY9JPqKWfTfVJEpc9Q==} + '@rsbuild/core@1.6.0-beta.0': + resolution: {integrity: sha512-NIp8w1/Zho+IZDwuqJIZoMH1vD2srbGQT0OGR8FGgn05MVt3ktsdxv6NOR7WynQGiPXztVluSAIBYSFKJDjecQ==} engines: {node: '>=18.12.0'} hasBin: true @@ -1555,8 +1580,8 @@ packages: '@rsbuild/core': optional: true - '@rsbuild/plugin-vue@1.1.2': - resolution: {integrity: sha512-GOWDqZj2BigTNXtwx/EjnwTZvesJI2EPQYQe3hDnxzNJInrRtol4E8/SKpwNGORSpMWbClQWUx8/pDaVPWEWWw==} + '@rsbuild/plugin-vue@1.2.0': + resolution: {integrity: sha512-1oN7sAlW2HewZEFei89eKBJFAXGYkiLdco77CrJsqtRMeNowWHXlr3FqDDrqgjMKHSv+Pckiz8KCh7khqbud+A==} peerDependencies: '@rsbuild/core': 1.x @@ -1641,112 +1666,112 @@ packages: cpu: [x64] os: [win32] - '@rspack/binding-darwin-arm64@1.5.0': - resolution: {integrity: sha512-7909YLNnKf0BYxiCpCWOk13WyWS4493Kxk1NQwy9KPLY9ydQExk84KVsix2NuNBaI8Pnk3aVLBPJiSNXtHLjnA==} + '@rspack/binding-darwin-arm64@1.5.8': + resolution: {integrity: sha512-spJfpOSN3f7V90ic45/ET2NKB2ujAViCNmqb0iGurMNQtFRq+7Kd+jvVKKGXKBHBbsQrFhidSWbbqy2PBPGK8g==} cpu: [arm64] os: [darwin] - '@rspack/binding-darwin-arm64@1.5.5': - resolution: {integrity: sha512-Kg3ywEZHLX+aROfTQ5tMOv+Ud+8b4jk8ruUgsi0W8oBkEkR5xBdhFa9vcf6pzy+gfoLCnEI68U9i8ttm+G0csA==} + '@rspack/binding-darwin-arm64@1.6.0-beta.0': + resolution: {integrity: sha512-iRza6XmLT0obDwlaFvZ/LUJ3FqbcZnwA48C1bwCUlDnM+9uVFInCrcHkOjKuXnNcWBBJvNmLDWA5XYWzjtbXsw==} cpu: [arm64] os: [darwin] - '@rspack/binding-darwin-x64@1.5.0': - resolution: {integrity: sha512-poGuQsGKCMQqSswgrz8X+frqMVTdmtzUDyvi/p9BLwW+2DwWgmywU8jwE+BYtjfWp1tErBSTlLxmEPQTdcIQgQ==} + '@rspack/binding-darwin-x64@1.5.8': + resolution: {integrity: sha512-YFOzeL1IBknBcri8vjUp43dfUBylCeQnD+9O9p0wZmLAw7DtpN5JEOe2AkGo8kdTqJjYKI+cczJPKIw6lu1LWw==} cpu: [x64] os: [darwin] - '@rspack/binding-darwin-x64@1.5.5': - resolution: {integrity: sha512-uoGTYnlYW8m47yiDCKvXOehhAOH12wlePJq4sbUbBoHmG07vbDw7fUqnvy2k8319NTVEpMJWGoKyisgI09/uMQ==} + '@rspack/binding-darwin-x64@1.6.0-beta.0': + resolution: {integrity: sha512-4rHw6IHpWO04C22lEQK34vk6H+CtBkVQK9pEoA4gr+zMX8H+Bfl8liVQgeaAgwRqD7ipDo3jXGLaakVGktDexw==} cpu: [x64] os: [darwin] - '@rspack/binding-linux-arm64-gnu@1.5.0': - resolution: {integrity: sha512-Bvmk8h3tRhN9UgOtH+vK0SgFM3qEO36eJz7oddOl4lJQxBf2GNA87bGtkMtX+AVPz/PUn7r82uWxrlVNQHAbFg==} + '@rspack/binding-linux-arm64-gnu@1.5.8': + resolution: {integrity: sha512-UAWCsOnpkvy8eAVRo0uipbHXDhnoDq5zmqWTMhpga0/a3yzCp2e+fnjZb/qnFNYb5MeL0O1mwMOYgn1M3oHILQ==} cpu: [arm64] os: [linux] - '@rspack/binding-linux-arm64-gnu@1.5.5': - resolution: {integrity: sha512-KgVN3TeUJ3iNwwOX3JGY4arvoLHX94eItJ4TeOSyetRiSJUrQI0evP16i5kIh+n+p7mVnXmfUS944Gl+uNsJmg==} + '@rspack/binding-linux-arm64-gnu@1.6.0-beta.0': + resolution: {integrity: sha512-ww45NhAOreOYRFpjf1TYRvNQYLOMr/LodFZA1yI5MLRCSYMgvWuv6B1WIY7o3pLaGWeY/H+zf89JTpR2rNn25g==} cpu: [arm64] os: [linux] - '@rspack/binding-linux-arm64-musl@1.5.0': - resolution: {integrity: sha512-bH7UwkbACDYT37YnN9kkhaF9niFFK9ndcdNvYFFr1oUT4W9Ie3V9b41EXijqp3pyh0mDSeeLPFY0aEx1t3e7Pw==} + '@rspack/binding-linux-arm64-musl@1.5.8': + resolution: {integrity: sha512-GnSvGT4GjokPSD45cTtE+g7LgghuxSP1MRmvd+Vp/I8pnxTVSTsebRod4TAqyiv+l11nuS8yqNveK9qiOkBLWw==} cpu: [arm64] os: [linux] - '@rspack/binding-linux-arm64-musl@1.5.5': - resolution: {integrity: sha512-1gKthlCQinXtWar6Hl9Il6BQ/NgYBH0NVuUsjjf85ejD/cTPQENKyIpGvVa1rSIHSfnG/XujUbruHAeY9mEHCA==} + '@rspack/binding-linux-arm64-musl@1.6.0-beta.0': + resolution: {integrity: sha512-nxkqLF8vz62NR65wxxMpdRDXce6q36R3BHvibyXlElSbSPSPL0n7gsOW2yMeCB5q812DRkzm2c9RNkpQ8nfXwQ==} cpu: [arm64] os: [linux] - '@rspack/binding-linux-x64-gnu@1.5.0': - resolution: {integrity: sha512-xZ5dwNrE5KtpQyMd9israpJTcTQ3UYUUq23fTcNc79xE5aspkGixDFAYoql4YkhO0O+JWRmdSaFAn6jD+IQWQA==} + '@rspack/binding-linux-x64-gnu@1.5.8': + resolution: {integrity: sha512-XLxh5n/pzUfxsugz/8rVBv+Tx2nqEM+9rharK69kfooDsQNKyz7PANllBQ/v4svJ+W0BRHnDL4qXSGdteZeEjA==} cpu: [x64] os: [linux] - '@rspack/binding-linux-x64-gnu@1.5.5': - resolution: {integrity: sha512-haPFg4M9GwpSI5g9BQhKUNdzCKDvFexIUkLiAHBjFU9iWQTEcI9VfYPixestOIwzUv7E34rHM+jAsmRGWdgmXw==} + '@rspack/binding-linux-x64-gnu@1.6.0-beta.0': + resolution: {integrity: sha512-xfOzI6+TeLZFJ8I1siOguIlyf5m0ABWPAStPY2Wm4EIEhJz+dr5PTWa5V6DlXZkUfV/6E5ZAQGZmgcgOR+DPHw==} cpu: [x64] os: [linux] - '@rspack/binding-linux-x64-musl@1.5.0': - resolution: {integrity: sha512-mv65jYvcyYPkPZJ9kjSvTAcH0o7C5jfICWCQcMmN1tCGD3b8gmf9GqSZ8e+W/JkuvrJ05qTo/PvEq9nhu+pNIg==} + '@rspack/binding-linux-x64-musl@1.5.8': + resolution: {integrity: sha512-gE0+MZmwF+01p9/svpEESkzkLpBkVUG2o03YMpwXYC/maeRRhWvF8BJ7R3i/Ls/jFGSE87dKX5NbRLVzqksq/w==} cpu: [x64] os: [linux] - '@rspack/binding-linux-x64-musl@1.5.5': - resolution: {integrity: sha512-oUny56JEkCZvIu4n8/P7IPLPNtJnL89EDhxHINH87XLBY3OOgo8JHELR11Zj9SFWiGNsRcLqi+Q78tWa0ligBQ==} + '@rspack/binding-linux-x64-musl@1.6.0-beta.0': + resolution: {integrity: sha512-OauuEH2P4ZXQ6vCnNZZocmxUJCTdmyUyZYHBzd+cK62uGzXcGGBp+R74grfmwThL+b4rFI2IupxMCLcDOop0zg==} cpu: [x64] os: [linux] - '@rspack/binding-wasm32-wasi@1.5.0': - resolution: {integrity: sha512-8rVpl6xfaAFJgo1wCd+emksfl+/8nlehrtkmjY9bj79Ou+kp07L9e1B+UU0jfs8e7aLPntQuF68kzLHwYLzWIQ==} + '@rspack/binding-wasm32-wasi@1.5.8': + resolution: {integrity: sha512-cfg3niNHeJuxuml1Vy9VvaJrI/5TakzoaZvKX2g5S24wfzR50Eyy4JAsZ+L2voWQQp1yMJbmPYPmnTCTxdJQBQ==} cpu: [wasm32] - '@rspack/binding-wasm32-wasi@1.5.5': - resolution: {integrity: sha512-tRgxBgIXaBKBH/0KlwvyqbIMqQrg8jKOyFOEQseEE7Oqs2M9KkJ7Vp5QN11u3NvZ9nz5GbZxmVGBMkdj9Gth1w==} + '@rspack/binding-wasm32-wasi@1.6.0-beta.0': + resolution: {integrity: sha512-0sSaIM39lSNthIvZsDA7WDnwdP4/4rRH4QyN4/DLUOCdci5xUSUSz/MsRXA+smI41qu4sh9yU/jRT8pq9bSWAQ==} cpu: [wasm32] - '@rspack/binding-win32-arm64-msvc@1.5.0': - resolution: {integrity: sha512-dWSmNm+GR6WSkOwbhlUcot4Oqwyon+1PRZ9E0vIMFHKGvESf9CQjgHAX0QE9G0kJmRM5x3I16J4x44Kw3W/98Q==} + '@rspack/binding-win32-arm64-msvc@1.5.8': + resolution: {integrity: sha512-7i3ZTHFXKfU/9Jm9XhpMkrdkxO7lfeYMNVEGkuU5dyBfRMQj69dRgPL7zJwc2plXiqu9LUOl+TwDNTjap7Q36g==} cpu: [arm64] os: [win32] - '@rspack/binding-win32-arm64-msvc@1.5.5': - resolution: {integrity: sha512-wGWd2yluoFdQgtkIbny6FoHnzahTk+o9RzrptjeS1u/NV1lKrWzmWhwZojMGOUqPiaukZKaziOEo7gpRn2XbEQ==} + '@rspack/binding-win32-arm64-msvc@1.6.0-beta.0': + resolution: {integrity: sha512-QqtnwHhpst37I3eQtx1FqpWCQCkigg2M73QUDvjhCE+opb1X46XK+kZOyt5qO0fKRdOgtxTcTVLLzRUWuT4t4A==} cpu: [arm64] os: [win32] - '@rspack/binding-win32-ia32-msvc@1.5.0': - resolution: {integrity: sha512-YtOrFEkwhO3Y3sY6Jq0OOYPY7NBTNYuwJ6epTgzPEDGs2cBnwZfzhq0jmD/koWtv1L9+twX95vKosBdauF0tNA==} + '@rspack/binding-win32-ia32-msvc@1.5.8': + resolution: {integrity: sha512-7ZPPWO11J+soea1+mnfaPpQt7GIodBM7A86dx6PbXgVEoZmetcWPrCF2NBfXxQWOKJ9L3RYltC4z+ZyXRgMOrw==} cpu: [ia32] os: [win32] - '@rspack/binding-win32-ia32-msvc@1.5.5': - resolution: {integrity: sha512-Ikml8AQkzjPCG24vTO4pG2bpJ8vp93jVEgo9X9uYjO2vQbIp5QSOmeZOTM7tXCf8AfTfHEF/yAdE/pR/+tXXGQ==} + '@rspack/binding-win32-ia32-msvc@1.6.0-beta.0': + resolution: {integrity: sha512-Bi8fcihGY8QEgo+u8S3JeD41OLIs1/b4lYYAKOUVmpwJeN0lTlT7oMVikD2bLLpPs+gUkinTeeoUjwx0YWlGlA==} cpu: [ia32] os: [win32] - '@rspack/binding-win32-x64-msvc@1.5.0': - resolution: {integrity: sha512-V4fcPVYWJgDkIkSsFwmUdwC9lkL8+1dzDOwyTWe6KW2MYHF2D148WPHNyVVE6gum12TShpbIsh0j4NiiMhkMtw==} + '@rspack/binding-win32-x64-msvc@1.5.8': + resolution: {integrity: sha512-N/zXQgzIxME3YUzXT8qnyzxjqcnXudWOeDh8CAG9zqTCnCiy16SFfQ/cQgEoLlD9geQntV6jx2GbDDI5kpDGMQ==} cpu: [x64] os: [win32] - '@rspack/binding-win32-x64-msvc@1.5.5': - resolution: {integrity: sha512-m2059ms0i/GIQGWTlZ5GI6SWpuMFAPMsWlhXLk2LZRIydhi+N/YPkmc33lFRTlDA3QpKDCvowvCvIIA7g6WSlg==} + '@rspack/binding-win32-x64-msvc@1.6.0-beta.0': + resolution: {integrity: sha512-h7EltjtoAI2ohKxurD09uoXoe94nHiqcozca4Z7sB+f1RaBnc9U3RmddCVkENGZ2YFDx77fC6bayu2WkdY2YIw==} cpu: [x64] os: [win32] - '@rspack/binding@1.5.0': - resolution: {integrity: sha512-UGXQmwEu2gdO+tnGv2q4rOWJdWioy6dlLXeZOLYAZVh3mrfKJhZWtDEygX9hCdE5thWNRTlEvx30QQchJAszIQ==} + '@rspack/binding@1.5.8': + resolution: {integrity: sha512-/91CzhRl9r5BIQCgGsS7jA6MDbw1I2BQpbfcUUdkdKl2P79K3Zo/Mw/TvKzS86catwLaUQEgkGRmYawOfPg7ow==} - '@rspack/binding@1.5.5': - resolution: {integrity: sha512-JkB943uBU0lABnKG/jdO+gg3/eeO9CEQMR/1dL6jSU9GTxaNf3XIVc05RhRC7qoVsiXuhSMMFxWyV0hyHxp2bA==} + '@rspack/binding@1.6.0-beta.0': + resolution: {integrity: sha512-8CoJCSkWhhgAcmymvkvXb6fHV1zfRnx68mW/tFD/pN2BzwLrAqzvq9PUhJw0MLq4Dg+RIYG6xjzDDp3fkt574Q==} - '@rspack/core@1.5.0': - resolution: {integrity: sha512-eEtiKV+CUcAtnt1K+eiHDzmBXQcNM8CfCXOzr0+gHGp4w4Zks2B8RF36sYD03MM2bg8VRXXsf0MicQ8FvRMCOg==} + '@rspack/core@1.5.8': + resolution: {integrity: sha512-sUd2LfiDhqYVfvknuoz0+/c+wSpn693xotnG5g1CSWKZArbtwiYzBIVnNlcHGmuoBRsnj/TkSq8dTQ7gwfBroQ==} engines: {node: '>=18.12.0'} peerDependencies: '@swc/helpers': '>=0.5.1' @@ -1754,8 +1779,8 @@ packages: '@swc/helpers': optional: true - '@rspack/core@1.5.5': - resolution: {integrity: sha512-AOIuMktK6X/xHAjJ/0QJ2kbSkILXj641GCPE+EOfWO27ODA8fHPArKbyz5AVGVePV3aUfEo2VFcsNzP67VBEPA==} + '@rspack/core@1.6.0-beta.0': + resolution: {integrity: sha512-wrGg90zjX5/cf2hKh2La0q3++twOBnk6z2WkWWcd1Jz5F9OcbHWyn+9yGHJI921A0AziC0pv7P1MmucmG3e7fA==} engines: {node: '>=18.12.0'} peerDependencies: '@swc/helpers': '>=0.5.1' @@ -2157,6 +2182,9 @@ packages: '@types/hast@3.0.4': resolution: {integrity: sha512-WPs+bbQw5aCj+x6laNGWLH3wviHtoCv/P3+otBhbOhJgG8qtpdAMlTCxLtsTWA7LH1Oh/bFCHsBn0TPS5m30EQ==} + '@types/is-url@1.2.32': + resolution: {integrity: sha512-46VLdbWI8Sc+hPexQ6NLNR2YpoDyDZIpASHkJQ2Yr+Kf9Giw6LdCTkwOdsnHKPQeh7xTjTmSnxbE8qpxYuCiHA==} + '@types/istanbul-lib-coverage@2.0.6': resolution: {integrity: sha512-2QF/t/auWm0lsy8XtKVPG19v3sSOQlJe/YHZgfjb/KBBHOGSV+J2q/S671rcq9uTBrLAXmZpqJiaQbMT+zNU1w==} @@ -2622,6 +2650,10 @@ packages: resolution: {integrity: sha512-lGe34o6EHj9y3Kts9R4ZYs/Gr+6N7MCaMlIFA3F1R2O5/m7K06AxfSeO5530PEERE6/WyEg3lsuyw4GHlPZHog==} engines: {node: ^4.5.0 || >= 5.9} + baseline-browser-mapping@2.8.18: + resolution: {integrity: sha512-UYmTpOBwgPScZpS4A+YbapwWuBwasxvO/2IOHArSsAhL/+ZdmATBXTex3t+l2hXwLVYK382ibr/nKoY9GKe86w==} + hasBin: true + better-path-resolve@1.0.0: resolution: {integrity: sha512-pbnl5XzGBdrFU/wT4jqmJVPn2B6UHPBOhzMQkY/SPUPB6QtUXtmBHBIwCbXJol93mOpGMnQyP/+BB19q04xj7g==} engines: {node: '>=4'} @@ -2675,8 +2707,8 @@ packages: browserslist-to-es-version@1.0.0: resolution: {integrity: sha512-i6dR03ClGy9ti97FSa4s0dpv01zW/t5VbvGjFfTLsrRQFsPgSeyGkCrlU7BTJuI5XDHVY5S2JgDnDsvQXifJ8w==} - browserslist@4.24.5: - resolution: {integrity: sha512-FDToo4Wo82hIdgc1CQ+NQD0hEhmpPjrZ3hiUgwgOG6IuTdlpr8jdjyG24P6cNP1yJpTLzS5OcGgSw0xmDU1/Tw==} + browserslist@4.26.3: + resolution: {integrity: sha512-lAUU+02RFBuCKQPj/P6NgjlbCnLBMp4UtgTx7vNHd3XSIJF87s9a5rA3aH2yw3GS9DqZAUbOtZdCCiZeVRqt0w==} engines: {node: ^6 || ^7 || ^8 || ^9 || ^10 || ^11 || ^12 || >=13.7} hasBin: true @@ -2724,8 +2756,8 @@ packages: resolution: {integrity: sha512-Gmy6FhYlCY7uOElZUSbxo2UCDH8owEk996gkbrpsgGtrJLM3J7jGxl9Ic7Qwwj4ivOE5AWZWRMecDdF7hqGjFA==} engines: {node: '>=10'} - caniuse-lite@1.0.30001718: - resolution: {integrity: sha512-AflseV1ahcSunK53NfEs9gFWgOEmzr0f+kaMFA4xiLZlr9Hzt7HxcSpIFcnNCUkz6R6dWKa54rUz3HUmI3nVcw==} + caniuse-lite@1.0.30001751: + resolution: {integrity: sha512-A0QJhug0Ly64Ii3eIqHu5X51ebln3k4yTUkY1j8drqpWHVreg/VLijN48cZ1bYPiqOQuqpkIKnzr/Ul8V+p6Cw==} ccount@2.0.1: resolution: {integrity: sha512-eyrF0jiFpY+3drT6383f1qhkbGsLSifNAjA61IUjZjmLCWjItY6LB9ft9YhoDgwfmclB2zhu51Lc7+95b8NRAg==} @@ -2883,8 +2915,8 @@ packages: copy-to-clipboard@3.3.3: resolution: {integrity: sha512-2KV8NhB5JqC3ky0r9PMCAZKbUHSwtEo4CwCs0KXgruG43gX5PMqDEBbVU4OUzw2MuAWUfsuFmWvEKG5QRfSnJA==} - core-js@3.45.1: - resolution: {integrity: sha512-L4NPsJlCfZsPeXukyzHFlg/i7IIVwHSItR0wg0FLNqYClJ4MQYTYLbC7EkjKYRLZF2iof2MUgN0EGy7MdQFChg==} + core-js@3.46.0: + resolution: {integrity: sha512-vDMm9B0xnqqZ8uSBpZ8sNtRtOdmfShrvT6h2TuQGLs0Is+cR0DYbj/KWP6ALVNbWPpqA/qPLoOuppJN07humpA==} core-util-is@1.0.3: resolution: {integrity: sha512-ZQBvi1DcpJ4GDqanjucZ2Hj3wEO5pZDS89BWbkcrvdxksJorwUDDZamX9ldFkp9aw2lmBDLgkObEA4DWNJ9FYQ==} @@ -3104,8 +3136,8 @@ packages: ee-first@1.1.1: resolution: {integrity: sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==} - electron-to-chromium@1.5.150: - resolution: {integrity: sha512-rOOkP2ZUMx1yL4fCxXQKDHQ8ZXwisb2OycOQVKHgvB3ZI4CvehOd4y2tfnnLDieJ3Zs1RL1Dlp3cMkyIn7nnXA==} + electron-to-chromium@1.5.237: + resolution: {integrity: sha512-icUt1NvfhGLar5lSWH3tHNzablaA5js3HVHacQimfP8ViEBOQv+L7DKEuHdbTZ0SKCO1ogTJTIL1Gwk9S6Qvcg==} emoji-regex@10.5.0: resolution: {integrity: sha512-lb49vf1Xzfx080OKA0o6l8DQQpV+6Vg95zyCJX9VB/BqKYlhG7N4wgROUUHRA+ZPUefLnteQOad7z1kT2bV7bg==} @@ -3513,9 +3545,6 @@ packages: resolution: {integrity: sha512-NqADB8VjPFLM2V0VvHUewwwsw0ZWBaIdgo+ieHtK3hasLz4qeCRjYcqfB6AQrBggRKppKF8L52/VqdVsO47Dlw==} engines: {node: '>= 0.4'} - hash-sum@2.0.0: - resolution: {integrity: sha512-WdZTbAByD+pHfl/g9QSsBIIwy8IT+EsPiKDs0KNX+zSHhdDLFKdZu0BQHljvO+0QI/BasbMSUa8wYNCZTvhslg==} - hasown@2.0.2: resolution: {integrity: sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==} engines: {node: '>= 0.4'} @@ -3770,6 +3799,9 @@ packages: resolution: {integrity: sha512-mE00Gnza5EEB3Ds0HfMyllZzbBrmLOX3vfWoj9A9PEnTfratQ/BcaJOuMhnkhjXvb2+FkY3VuHqtAGpTPmglFQ==} engines: {node: '>=18'} + is-url@1.2.4: + resolution: {integrity: sha512-ITvGim8FhRiYe4IQ5uHSkj7pVaPDrCTkNd3yq3cV7iZAcJdHTUMPMEHcqSOy9xZ9qFenQCvi+2wjH9a1nXqHww==} + is-windows@1.0.2: resolution: {integrity: sha512-eXK1UInq2bPmjyX6e3VHIzMLobc4J94i4AWn+Hpq3OU5KkrRC96OAcR3PRJ/pGu6m8TRnBHP9dkXQVsT/COVIA==} engines: {node: '>=0.10.0'} @@ -3863,8 +3895,8 @@ packages: resolution: {integrity: sha512-7vuh85V5cdDofPyxn58nrPjBktZo0u9x1g8WtjQol+jZDaE+fhN+cIvTj11GndBnMnyfrUOG1sZQxCdjKh+DKg==} engines: {node: '>= 10.13.0'} - jiti@2.5.1: - resolution: {integrity: sha512-twQoecYPiVA5K/h6SxtORw/Bs3ar+mLUtoPSc7iMXzQzK8d7eJ/R09wmTwAjiamETn1cXYPGfNnu7DMoHgu12w==} + jiti@2.6.1: + resolution: {integrity: sha512-ekilCSN1jwRvIbgeg/57YFh8qQDNbwDb9xT/qu2DAHbFFZUicIl4ygVaAvzveMhMVr3LnpSKTNnwt8PoOfmKhQ==} hasBin: true jju@1.4.0: @@ -3972,8 +4004,8 @@ packages: linkify-it@5.0.0: resolution: {integrity: sha512-5aHCbzQRADcdP+ATqnDuhhJ/MRIqDkZX5pyjFHRRysS8vZ5AbqGEoFIb6pYHPZ+L/OC2Lc+xT8uHVVR5CAK/wQ==} - loader-runner@4.3.0: - resolution: {integrity: sha512-3R/1M+yS3j5ou80Me59j7F9IMs4PXs3VqRrm0TU3AbKPxlmpoY1TNscJV/oGJXo8qCatFGTfDbY6W6ipGOYXfg==} + loader-runner@4.3.1: + resolution: {integrity: sha512-IWqP2SCPhyVFTBtRcgMHdzlf9ul25NwaFx4wCEH/KjAXuuHY4yNjvPXsBokp8jCB936PyWRaPKUNh8NvylLp2Q==} engines: {node: '>=6.11.5'} loader-utils@2.0.4: @@ -4380,8 +4412,8 @@ packages: node-machine-id@1.1.12: resolution: {integrity: sha512-QNABxbrPa3qEIfrE6GOJ7BYIuignnJw7iQ2YPbc3Nla1HzRJjXzZOiikfF8m7eAMfichLt3M4VgLOetqgDmgGQ==} - node-releases@2.0.19: - resolution: {integrity: sha512-xxOWJsBKtzAq7DY0J+DTzuz58K8e7sJbdgwkbMWQe8UYB6ekmsQ45q0M/tJDsGaZmbC+l7n57UV8Hl5tHxO9uw==} + node-releases@2.0.25: + resolution: {integrity: sha512-4auku8B/vw5psvTiiN9j1dAOsXvMoGqJuKJcR+dTdqiXEK20mMTk1UEo3HS16LeGQsVG6+qKTPM9u/qQ2LqATA==} node-sarif-builder@3.2.0: resolution: {integrity: sha512-kVIOdynrF2CRodHZeP/97Rh1syTUHBNiw17hUCIVhlhEsWlfJm19MuO56s4MdKbr22xWx6mzMnNAgXzVlIYM9Q==} @@ -4907,6 +4939,18 @@ packages: rslog@1.2.11: resolution: {integrity: sha512-YgMMzQf6lL9q4rD9WS/lpPWxVNJ1ttY9+dOXJ0+7vJrKCAOT4GH0EiRnBi9mKOitcHiOwjqJPV1n/HRqqgZmOQ==} + rspack-vue-loader@17.4.4: + resolution: {integrity: sha512-T4rkTZWg9hC7DZapTaJcIphser4ogsTffH/rwnX0pwMpNKjv1XKLBPa5Icd/xNPOh1NiKVxoxcT+gb8NQliukA==} + peerDependencies: + '@vue/compiler-sfc': '*' + vue: '*' + webpack: ^4.1.0 || ^5.0.0-0 + peerDependenciesMeta: + '@vue/compiler-sfc': + optional: true + vue: + optional: true + rspress-plugin-font-open-sans@1.0.3: resolution: {integrity: sha512-17i7uUqvyy5k51ggZJ5xoP9duqC2W76GcBviIu400VXXAQEZx3JzZWPcGz9gGmVaFHAkH19NtZK0EYKfneX4rw==} peerDependencies: @@ -5058,8 +5102,8 @@ packages: scheduler@0.26.0: resolution: {integrity: sha512-NlHwttCI/l5gCPR3D1nNXtWABUmBwvZpEQiD4IXSbIDq8BzLIK/7Ir5gTFSGZDUu37K5cMNp0hFtzO38sC7gWA==} - schema-utils@4.3.2: - resolution: {integrity: sha512-Gn/JaSk/Mt9gYubxTtSn/QCV4em9mpAPiR1rqy/Ocu19u/G9J5WWdNoUT4SiV6mFC3y6cxyFcFwdzPM3FgxGAQ==} + schema-utils@4.3.3: + resolution: {integrity: sha512-eflK8wEtyOE6+hsaRVPxvUKYCpRgzLqDTb8krvAsRIwOGlHoSgYLgBXoubGgLd2fT41/OUYdb48v4k4WWHQurA==} engines: {node: '>= 10.13.0'} secretlint@10.2.2: @@ -5360,6 +5404,10 @@ packages: resolution: {integrity: sha512-Re10+NauLTMCudc7T5WLFLAwDhQ0JWdrMK+9B2M8zR5hRExKmsRDCBA7/aV/pNJFltmBFO5BAMlQFi/vq3nKOg==} engines: {node: '>=6'} + tapable@2.3.0: + resolution: {integrity: sha512-g9ljZiwki/LfxmQADO3dEY1CbpmXT5Hm2fJ+QaGKwSXUylMybePR7/67YW7jOrrvjEgL1Fmz5kzyAjWVWLlucg==} + engines: {node: '>=6'} + tar-fs@2.1.3: resolution: {integrity: sha512-090nwYJDmlhwFwEW3QQl+vaNnxsO2yVsd45eTKRBzSzu+hlb1w2K9inVq5b0ngXuLVqQ4ApvsUHHnu/zQNkWAg==} @@ -5391,8 +5439,8 @@ packages: uglify-js: optional: true - terser@5.43.1: - resolution: {integrity: sha512-+6erLbBm0+LROX2sPXlUYx/ux5PyE9K/a92Wrt6oA+WDAoFTdpHE5tCYCI5PNzq2y8df4rA+QgHLJuR4jNymsg==} + terser@5.44.0: + resolution: {integrity: sha512-nIVck8DK+GM/0Frwd+nIhZ84pR/BX7rmXMfYwyg+Sri5oGVE99/E3KvXqpC2xHFxyqXyGHTKBSioxxplrO4I4w==} engines: {node: '>=10'} hasBin: true @@ -5646,18 +5694,6 @@ packages: vue-component-type-helpers@2.2.12: resolution: {integrity: sha512-YbGqHZ5/eW4SnkPNR44mKVc6ZKQoRs/Rux1sxC6rdwXb4qpbOSYfDr9DsTHolOTGmIKgM9j141mZbBeg05R1pw==} - vue-loader@17.4.2: - resolution: {integrity: sha512-yTKOA4R/VN4jqjw4y5HrynFL8AK0Z3/Jt7eOJXEitsm0GMRHDBjCfCiuTiLP7OESvsZYo2pATCWhDqxC5ZrM6w==} - peerDependencies: - '@vue/compiler-sfc': '*' - vue: '*' - webpack: ^4.1.0 || ^5.0.0-0 - peerDependenciesMeta: - '@vue/compiler-sfc': - optional: true - vue: - optional: true - vue@3.5.21: resolution: {integrity: sha512-xxf9rum9KtOdwdRkiApWL+9hZEMWE90FHh8yS1+KJAiWYh+iGWV1FquPjoO9VUHQ+VIhsCXNNyZ5Sf4++RVZBA==} peerDependencies: @@ -5700,8 +5736,8 @@ packages: resolution: {integrity: sha512-yd1RBzSGanHkitROoPFd6qsrxt+oFhg/129YzheDGqeustzX0vTZJZsSsQjVQC4yzBQ56K55XU8gaNCtIzOnTg==} engines: {node: '>=10.13.0'} - webpack@5.101.2: - resolution: {integrity: sha512-4JLXU0tD6OZNVqlwzm3HGEhAHufSiyv+skb7q0d2367VDMzrU1Q/ZeepvkcHH0rZie6uqEtTQQe0OEOOluH3Mg==} + webpack@5.102.1: + resolution: {integrity: sha512-7h/weGm9d/ywQ6qzJ+Xy+r9n/3qgp/thalBbpOi5i223dPXKi04IBtqPN9nTd+jBc7QKfvDbaBnFipYp4sJAUQ==} engines: {node: '>=10.13.0'} hasBin: true peerDependencies: @@ -6134,7 +6170,7 @@ snapshots: dependencies: '@babel/compat-data': 7.28.0 '@babel/helper-validator-option': 7.27.1 - browserslist: 4.24.5 + browserslist: 4.26.3 lru-cache: 5.1.1 semver: 6.3.1 @@ -6730,36 +6766,61 @@ snapshots: '@module-federation/error-codes@0.18.0': {} + '@module-federation/error-codes@0.20.0': {} + '@module-federation/runtime-core@0.18.0': dependencies: '@module-federation/error-codes': 0.18.0 '@module-federation/sdk': 0.18.0 + '@module-federation/runtime-core@0.20.0': + dependencies: + '@module-federation/error-codes': 0.20.0 + '@module-federation/sdk': 0.20.0 + '@module-federation/runtime-tools@0.18.0': dependencies: '@module-federation/runtime': 0.18.0 '@module-federation/webpack-bundler-runtime': 0.18.0 + '@module-federation/runtime-tools@0.20.0': + dependencies: + '@module-federation/runtime': 0.20.0 + '@module-federation/webpack-bundler-runtime': 0.20.0 + '@module-federation/runtime@0.18.0': dependencies: '@module-federation/error-codes': 0.18.0 '@module-federation/runtime-core': 0.18.0 '@module-federation/sdk': 0.18.0 + '@module-federation/runtime@0.20.0': + dependencies: + '@module-federation/error-codes': 0.20.0 + '@module-federation/runtime-core': 0.20.0 + '@module-federation/sdk': 0.20.0 + '@module-federation/sdk@0.18.0': {} + '@module-federation/sdk@0.20.0': {} + '@module-federation/webpack-bundler-runtime@0.18.0': dependencies: '@module-federation/runtime': 0.18.0 '@module-federation/sdk': 0.18.0 + '@module-federation/webpack-bundler-runtime@0.20.0': + dependencies: + '@module-federation/runtime': 0.20.0 + '@module-federation/sdk': 0.20.0 + '@napi-rs/wasm-runtime@0.2.4': dependencies: '@emnapi/core': 1.5.0 '@emnapi/runtime': 1.5.0 '@tybys/wasm-util': 0.9.0 - '@napi-rs/wasm-runtime@1.0.5': + '@napi-rs/wasm-runtime@1.0.7': dependencies: '@emnapi/core': 1.5.0 '@emnapi/runtime': 1.5.0 @@ -6880,29 +6941,29 @@ snapshots: '@remix-run/router@1.23.0': {} - '@rsbuild/core@1.5.0': + '@rsbuild/core@1.5.17': dependencies: - '@rspack/core': 1.5.0(@swc/helpers@0.5.17) + '@rspack/core': 1.5.8(@swc/helpers@0.5.17) '@rspack/lite-tapable': 1.0.1 '@swc/helpers': 0.5.17 - core-js: 3.45.1 - jiti: 2.5.1 + core-js: 3.46.0 + jiti: 2.6.1 - '@rsbuild/core@1.5.10': + '@rsbuild/core@1.6.0-beta.0': dependencies: - '@rspack/core': 1.5.5(@swc/helpers@0.5.17) + '@rspack/core': 1.6.0-beta.0(@swc/helpers@0.5.17) '@rspack/lite-tapable': 1.0.1 '@swc/helpers': 0.5.17 - core-js: 3.45.1 - jiti: 2.5.1 + core-js: 3.46.0 + jiti: 2.6.1 - '@rsbuild/plugin-babel@1.0.6(@rsbuild/core@1.5.0)': + '@rsbuild/plugin-babel@1.0.6(@rsbuild/core@1.6.0-beta.0)': dependencies: '@babel/core': 7.28.3 '@babel/plugin-proposal-decorators': 7.28.0(@babel/core@7.28.3) '@babel/plugin-transform-class-properties': 7.27.1(@babel/core@7.28.3) '@babel/preset-typescript': 7.27.1(@babel/core@7.28.3) - '@rsbuild/core': 1.5.0 + '@rsbuild/core': 1.6.0-beta.0 '@types/babel__core': 7.20.5 deepmerge: 4.3.1 reduce-configs: 1.1.1 @@ -6910,7 +6971,7 @@ snapshots: transitivePeerDependencies: - supports-color - '@rsbuild/plugin-check-syntax@1.3.0(@rsbuild/core@1.5.10)': + '@rsbuild/plugin-check-syntax@1.3.0(@rsbuild/core@1.5.17)': dependencies: acorn: 8.15.0 browserslist-to-es-version: 1.0.0 @@ -6918,49 +6979,49 @@ snapshots: picocolors: 1.1.1 source-map: 0.7.4 optionalDependencies: - '@rsbuild/core': 1.5.10 + '@rsbuild/core': 1.5.17 - '@rsbuild/plugin-react@1.4.0(@rsbuild/core@1.5.0)': + '@rsbuild/plugin-react@1.4.0(@rsbuild/core@1.5.17)': dependencies: - '@rsbuild/core': 1.5.0 + '@rsbuild/core': 1.5.17 '@rspack/plugin-react-refresh': 1.5.0(react-refresh@0.17.0) react-refresh: 0.17.0 transitivePeerDependencies: - webpack-hot-middleware - '@rsbuild/plugin-react@1.4.0(@rsbuild/core@1.5.10)': + '@rsbuild/plugin-react@1.4.0(@rsbuild/core@1.6.0-beta.0)': dependencies: - '@rsbuild/core': 1.5.10 + '@rsbuild/core': 1.6.0-beta.0 '@rspack/plugin-react-refresh': 1.5.0(react-refresh@0.17.0) react-refresh: 0.17.0 transitivePeerDependencies: - webpack-hot-middleware - '@rsbuild/plugin-sass@1.4.0(@rsbuild/core@1.5.10)': + '@rsbuild/plugin-sass@1.4.0(@rsbuild/core@1.6.0-beta.0)': dependencies: - '@rsbuild/core': 1.5.10 + '@rsbuild/core': 1.6.0-beta.0 deepmerge: 4.3.1 loader-utils: 2.0.4 postcss: 8.5.6 reduce-configs: 1.1.1 sass-embedded: 1.90.0 - '@rsbuild/plugin-vue-jsx@1.1.1(@babel/core@7.28.3)(@rsbuild/core@1.5.0)': + '@rsbuild/plugin-vue-jsx@1.1.1(@babel/core@7.28.3)(@rsbuild/core@1.6.0-beta.0)': dependencies: - '@rsbuild/plugin-babel': 1.0.6(@rsbuild/core@1.5.0) + '@rsbuild/plugin-babel': 1.0.6(@rsbuild/core@1.6.0-beta.0) '@vue/babel-plugin-jsx': 1.5.0(@babel/core@7.28.3) babel-plugin-vue-jsx-hmr: 1.0.0 optionalDependencies: - '@rsbuild/core': 1.5.0 + '@rsbuild/core': 1.6.0-beta.0 transitivePeerDependencies: - '@babel/core' - supports-color - '@rsbuild/plugin-vue@1.1.2(@rsbuild/core@1.5.0)(@swc/core@1.13.5(@swc/helpers@0.5.17))(vue@3.5.21(typescript@5.9.2))': + '@rsbuild/plugin-vue@1.2.0(@rsbuild/core@1.6.0-beta.0)(@swc/core@1.13.5(@swc/helpers@0.5.17))(vue@3.5.21(typescript@5.9.2))': dependencies: - '@rsbuild/core': 1.5.0 - vue-loader: 17.4.2(vue@3.5.21(typescript@5.9.2))(webpack@5.101.2(@swc/core@1.13.5(@swc/helpers@0.5.17))) - webpack: 5.101.2(@swc/core@1.13.5(@swc/helpers@0.5.17)) + '@rsbuild/core': 1.6.0-beta.0 + rspack-vue-loader: 17.4.4(vue@3.5.21(typescript@5.9.2))(webpack@5.102.1(@swc/core@1.13.5(@swc/helpers@0.5.17))) + webpack: 5.102.1(@swc/core@1.13.5(@swc/helpers@0.5.17)) transitivePeerDependencies: - '@swc/core' - '@vue/compiler-sfc' @@ -6971,13 +7032,13 @@ snapshots: '@rsdoctor/client@1.2.3': {} - '@rsdoctor/core@1.2.3(@rsbuild/core@1.5.10)(@rspack/core@1.5.5(@swc/helpers@0.5.17))(webpack@5.101.2(@swc/core@1.13.5(@swc/helpers@0.5.17)))': + '@rsdoctor/core@1.2.3(@rsbuild/core@1.5.17)(@rspack/core@1.5.8(@swc/helpers@0.5.17))(webpack@5.102.1(@swc/core@1.13.5(@swc/helpers@0.5.17)))': dependencies: - '@rsbuild/plugin-check-syntax': 1.3.0(@rsbuild/core@1.5.10) - '@rsdoctor/graph': 1.2.3(@rspack/core@1.5.5(@swc/helpers@0.5.17))(webpack@5.101.2(@swc/core@1.13.5(@swc/helpers@0.5.17))) - '@rsdoctor/sdk': 1.2.3(@rspack/core@1.5.5(@swc/helpers@0.5.17))(webpack@5.101.2(@swc/core@1.13.5(@swc/helpers@0.5.17))) - '@rsdoctor/types': 1.2.3(@rspack/core@1.5.5(@swc/helpers@0.5.17))(webpack@5.101.2(@swc/core@1.13.5(@swc/helpers@0.5.17))) - '@rsdoctor/utils': 1.2.3(@rspack/core@1.5.5(@swc/helpers@0.5.17))(webpack@5.101.2(@swc/core@1.13.5(@swc/helpers@0.5.17))) + '@rsbuild/plugin-check-syntax': 1.3.0(@rsbuild/core@1.5.17) + '@rsdoctor/graph': 1.2.3(@rspack/core@1.5.8(@swc/helpers@0.5.17))(webpack@5.102.1(@swc/core@1.13.5(@swc/helpers@0.5.17))) + '@rsdoctor/sdk': 1.2.3(@rspack/core@1.5.8(@swc/helpers@0.5.17))(webpack@5.102.1(@swc/core@1.13.5(@swc/helpers@0.5.17))) + '@rsdoctor/types': 1.2.3(@rspack/core@1.5.8(@swc/helpers@0.5.17))(webpack@5.102.1(@swc/core@1.13.5(@swc/helpers@0.5.17))) + '@rsdoctor/utils': 1.2.3(@rspack/core@1.5.8(@swc/helpers@0.5.17))(webpack@5.102.1(@swc/core@1.13.5(@swc/helpers@0.5.17))) axios: 1.12.2 browserslist-load-config: 1.0.0 enhanced-resolve: 5.12.0 @@ -6996,10 +7057,10 @@ snapshots: - utf-8-validate - webpack - '@rsdoctor/graph@1.2.3(@rspack/core@1.5.5(@swc/helpers@0.5.17))(webpack@5.101.2(@swc/core@1.13.5(@swc/helpers@0.5.17)))': + '@rsdoctor/graph@1.2.3(@rspack/core@1.5.8(@swc/helpers@0.5.17))(webpack@5.102.1(@swc/core@1.13.5(@swc/helpers@0.5.17)))': dependencies: - '@rsdoctor/types': 1.2.3(@rspack/core@1.5.5(@swc/helpers@0.5.17))(webpack@5.101.2(@swc/core@1.13.5(@swc/helpers@0.5.17))) - '@rsdoctor/utils': 1.2.3(@rspack/core@1.5.5(@swc/helpers@0.5.17))(webpack@5.101.2(@swc/core@1.13.5(@swc/helpers@0.5.17))) + '@rsdoctor/types': 1.2.3(@rspack/core@1.5.8(@swc/helpers@0.5.17))(webpack@5.102.1(@swc/core@1.13.5(@swc/helpers@0.5.17))) + '@rsdoctor/utils': 1.2.3(@rspack/core@1.5.8(@swc/helpers@0.5.17))(webpack@5.102.1(@swc/core@1.13.5(@swc/helpers@0.5.17))) lodash.unionby: 4.8.0 source-map: 0.7.4 transitivePeerDependencies: @@ -7007,16 +7068,16 @@ snapshots: - supports-color - webpack - '@rsdoctor/rspack-plugin@1.2.3(@rsbuild/core@1.5.10)(@rspack/core@1.5.5(@swc/helpers@0.5.17))(webpack@5.101.2(@swc/core@1.13.5(@swc/helpers@0.5.17)))': + '@rsdoctor/rspack-plugin@1.2.3(@rsbuild/core@1.5.17)(@rspack/core@1.5.8(@swc/helpers@0.5.17))(webpack@5.102.1(@swc/core@1.13.5(@swc/helpers@0.5.17)))': dependencies: - '@rsdoctor/core': 1.2.3(@rsbuild/core@1.5.10)(@rspack/core@1.5.5(@swc/helpers@0.5.17))(webpack@5.101.2(@swc/core@1.13.5(@swc/helpers@0.5.17))) - '@rsdoctor/graph': 1.2.3(@rspack/core@1.5.5(@swc/helpers@0.5.17))(webpack@5.101.2(@swc/core@1.13.5(@swc/helpers@0.5.17))) - '@rsdoctor/sdk': 1.2.3(@rspack/core@1.5.5(@swc/helpers@0.5.17))(webpack@5.101.2(@swc/core@1.13.5(@swc/helpers@0.5.17))) - '@rsdoctor/types': 1.2.3(@rspack/core@1.5.5(@swc/helpers@0.5.17))(webpack@5.101.2(@swc/core@1.13.5(@swc/helpers@0.5.17))) - '@rsdoctor/utils': 1.2.3(@rspack/core@1.5.5(@swc/helpers@0.5.17))(webpack@5.101.2(@swc/core@1.13.5(@swc/helpers@0.5.17))) + '@rsdoctor/core': 1.2.3(@rsbuild/core@1.5.17)(@rspack/core@1.5.8(@swc/helpers@0.5.17))(webpack@5.102.1(@swc/core@1.13.5(@swc/helpers@0.5.17))) + '@rsdoctor/graph': 1.2.3(@rspack/core@1.5.8(@swc/helpers@0.5.17))(webpack@5.102.1(@swc/core@1.13.5(@swc/helpers@0.5.17))) + '@rsdoctor/sdk': 1.2.3(@rspack/core@1.5.8(@swc/helpers@0.5.17))(webpack@5.102.1(@swc/core@1.13.5(@swc/helpers@0.5.17))) + '@rsdoctor/types': 1.2.3(@rspack/core@1.5.8(@swc/helpers@0.5.17))(webpack@5.102.1(@swc/core@1.13.5(@swc/helpers@0.5.17))) + '@rsdoctor/utils': 1.2.3(@rspack/core@1.5.8(@swc/helpers@0.5.17))(webpack@5.102.1(@swc/core@1.13.5(@swc/helpers@0.5.17))) lodash: 4.17.21 optionalDependencies: - '@rspack/core': 1.5.5(@swc/helpers@0.5.17) + '@rspack/core': 1.5.8(@swc/helpers@0.5.17) transitivePeerDependencies: - '@rsbuild/core' - bufferutil @@ -7025,12 +7086,12 @@ snapshots: - utf-8-validate - webpack - '@rsdoctor/sdk@1.2.3(@rspack/core@1.5.5(@swc/helpers@0.5.17))(webpack@5.101.2(@swc/core@1.13.5(@swc/helpers@0.5.17)))': + '@rsdoctor/sdk@1.2.3(@rspack/core@1.5.8(@swc/helpers@0.5.17))(webpack@5.102.1(@swc/core@1.13.5(@swc/helpers@0.5.17)))': dependencies: '@rsdoctor/client': 1.2.3 - '@rsdoctor/graph': 1.2.3(@rspack/core@1.5.5(@swc/helpers@0.5.17))(webpack@5.101.2(@swc/core@1.13.5(@swc/helpers@0.5.17))) - '@rsdoctor/types': 1.2.3(@rspack/core@1.5.5(@swc/helpers@0.5.17))(webpack@5.101.2(@swc/core@1.13.5(@swc/helpers@0.5.17))) - '@rsdoctor/utils': 1.2.3(@rspack/core@1.5.5(@swc/helpers@0.5.17))(webpack@5.101.2(@swc/core@1.13.5(@swc/helpers@0.5.17))) + '@rsdoctor/graph': 1.2.3(@rspack/core@1.5.8(@swc/helpers@0.5.17))(webpack@5.102.1(@swc/core@1.13.5(@swc/helpers@0.5.17))) + '@rsdoctor/types': 1.2.3(@rspack/core@1.5.8(@swc/helpers@0.5.17))(webpack@5.102.1(@swc/core@1.13.5(@swc/helpers@0.5.17))) + '@rsdoctor/utils': 1.2.3(@rspack/core@1.5.8(@swc/helpers@0.5.17))(webpack@5.102.1(@swc/core@1.13.5(@swc/helpers@0.5.17))) '@types/fs-extra': 11.0.4 body-parser: 1.20.3 cors: 2.8.5 @@ -7049,20 +7110,20 @@ snapshots: - utf-8-validate - webpack - '@rsdoctor/types@1.2.3(@rspack/core@1.5.5(@swc/helpers@0.5.17))(webpack@5.101.2(@swc/core@1.13.5(@swc/helpers@0.5.17)))': + '@rsdoctor/types@1.2.3(@rspack/core@1.5.8(@swc/helpers@0.5.17))(webpack@5.102.1(@swc/core@1.13.5(@swc/helpers@0.5.17)))': dependencies: '@types/connect': 3.4.38 '@types/estree': 1.0.5 '@types/tapable': 2.2.7 source-map: 0.7.4 optionalDependencies: - '@rspack/core': 1.5.5(@swc/helpers@0.5.17) - webpack: 5.101.2(@swc/core@1.13.5(@swc/helpers@0.5.17)) + '@rspack/core': 1.5.8(@swc/helpers@0.5.17) + webpack: 5.102.1(@swc/core@1.13.5(@swc/helpers@0.5.17)) - '@rsdoctor/utils@1.2.3(@rspack/core@1.5.5(@swc/helpers@0.5.17))(webpack@5.101.2(@swc/core@1.13.5(@swc/helpers@0.5.17)))': + '@rsdoctor/utils@1.2.3(@rspack/core@1.5.8(@swc/helpers@0.5.17))(webpack@5.102.1(@swc/core@1.13.5(@swc/helpers@0.5.17)))': dependencies: '@babel/code-frame': 7.26.2 - '@rsdoctor/types': 1.2.3(@rspack/core@1.5.5(@swc/helpers@0.5.17))(webpack@5.101.2(@swc/core@1.13.5(@swc/helpers@0.5.17))) + '@rsdoctor/types': 1.2.3(@rspack/core@1.5.8(@swc/helpers@0.5.17))(webpack@5.102.1(@swc/core@1.13.5(@swc/helpers@0.5.17))) '@types/estree': 1.0.5 acorn: 8.15.0 acorn-import-attributes: 1.9.5(acorn@8.15.0) @@ -7085,8 +7146,8 @@ snapshots: '@rslib/core@0.13.3(@microsoft/api-extractor@7.52.13(@types/node@22.18.6))(typescript@5.9.2)': dependencies: - '@rsbuild/core': 1.5.10 - rsbuild-plugin-dts: 0.13.3(@microsoft/api-extractor@7.52.13(@types/node@22.18.6))(@rsbuild/core@1.5.10)(typescript@5.9.2) + '@rsbuild/core': 1.5.17 + rsbuild-plugin-dts: 0.13.3(@microsoft/api-extractor@7.52.13(@types/node@22.18.6))(@rsbuild/core@1.5.17)(typescript@5.9.2) optionalDependencies: '@microsoft/api-extractor': 7.52.13(@types/node@22.18.6) typescript: 5.9.2 @@ -7120,108 +7181,108 @@ snapshots: '@rslint/win32-x64@0.1.13': optional: true - '@rspack/binding-darwin-arm64@1.5.0': + '@rspack/binding-darwin-arm64@1.5.8': optional: true - '@rspack/binding-darwin-arm64@1.5.5': + '@rspack/binding-darwin-arm64@1.6.0-beta.0': optional: true - '@rspack/binding-darwin-x64@1.5.0': + '@rspack/binding-darwin-x64@1.5.8': optional: true - '@rspack/binding-darwin-x64@1.5.5': + '@rspack/binding-darwin-x64@1.6.0-beta.0': optional: true - '@rspack/binding-linux-arm64-gnu@1.5.0': + '@rspack/binding-linux-arm64-gnu@1.5.8': optional: true - '@rspack/binding-linux-arm64-gnu@1.5.5': + '@rspack/binding-linux-arm64-gnu@1.6.0-beta.0': optional: true - '@rspack/binding-linux-arm64-musl@1.5.0': + '@rspack/binding-linux-arm64-musl@1.5.8': optional: true - '@rspack/binding-linux-arm64-musl@1.5.5': + '@rspack/binding-linux-arm64-musl@1.6.0-beta.0': optional: true - '@rspack/binding-linux-x64-gnu@1.5.0': + '@rspack/binding-linux-x64-gnu@1.5.8': optional: true - '@rspack/binding-linux-x64-gnu@1.5.5': + '@rspack/binding-linux-x64-gnu@1.6.0-beta.0': optional: true - '@rspack/binding-linux-x64-musl@1.5.0': + '@rspack/binding-linux-x64-musl@1.5.8': optional: true - '@rspack/binding-linux-x64-musl@1.5.5': + '@rspack/binding-linux-x64-musl@1.6.0-beta.0': optional: true - '@rspack/binding-wasm32-wasi@1.5.0': + '@rspack/binding-wasm32-wasi@1.5.8': dependencies: - '@napi-rs/wasm-runtime': 1.0.5 + '@napi-rs/wasm-runtime': 1.0.7 optional: true - '@rspack/binding-wasm32-wasi@1.5.5': + '@rspack/binding-wasm32-wasi@1.6.0-beta.0': dependencies: - '@napi-rs/wasm-runtime': 1.0.5 + '@napi-rs/wasm-runtime': 1.0.7 optional: true - '@rspack/binding-win32-arm64-msvc@1.5.0': + '@rspack/binding-win32-arm64-msvc@1.5.8': optional: true - '@rspack/binding-win32-arm64-msvc@1.5.5': + '@rspack/binding-win32-arm64-msvc@1.6.0-beta.0': optional: true - '@rspack/binding-win32-ia32-msvc@1.5.0': + '@rspack/binding-win32-ia32-msvc@1.5.8': optional: true - '@rspack/binding-win32-ia32-msvc@1.5.5': + '@rspack/binding-win32-ia32-msvc@1.6.0-beta.0': optional: true - '@rspack/binding-win32-x64-msvc@1.5.0': + '@rspack/binding-win32-x64-msvc@1.5.8': optional: true - '@rspack/binding-win32-x64-msvc@1.5.5': + '@rspack/binding-win32-x64-msvc@1.6.0-beta.0': optional: true - '@rspack/binding@1.5.0': + '@rspack/binding@1.5.8': optionalDependencies: - '@rspack/binding-darwin-arm64': 1.5.0 - '@rspack/binding-darwin-x64': 1.5.0 - '@rspack/binding-linux-arm64-gnu': 1.5.0 - '@rspack/binding-linux-arm64-musl': 1.5.0 - '@rspack/binding-linux-x64-gnu': 1.5.0 - '@rspack/binding-linux-x64-musl': 1.5.0 - '@rspack/binding-wasm32-wasi': 1.5.0 - '@rspack/binding-win32-arm64-msvc': 1.5.0 - '@rspack/binding-win32-ia32-msvc': 1.5.0 - '@rspack/binding-win32-x64-msvc': 1.5.0 - - '@rspack/binding@1.5.5': + '@rspack/binding-darwin-arm64': 1.5.8 + '@rspack/binding-darwin-x64': 1.5.8 + '@rspack/binding-linux-arm64-gnu': 1.5.8 + '@rspack/binding-linux-arm64-musl': 1.5.8 + '@rspack/binding-linux-x64-gnu': 1.5.8 + '@rspack/binding-linux-x64-musl': 1.5.8 + '@rspack/binding-wasm32-wasi': 1.5.8 + '@rspack/binding-win32-arm64-msvc': 1.5.8 + '@rspack/binding-win32-ia32-msvc': 1.5.8 + '@rspack/binding-win32-x64-msvc': 1.5.8 + + '@rspack/binding@1.6.0-beta.0': optionalDependencies: - '@rspack/binding-darwin-arm64': 1.5.5 - '@rspack/binding-darwin-x64': 1.5.5 - '@rspack/binding-linux-arm64-gnu': 1.5.5 - '@rspack/binding-linux-arm64-musl': 1.5.5 - '@rspack/binding-linux-x64-gnu': 1.5.5 - '@rspack/binding-linux-x64-musl': 1.5.5 - '@rspack/binding-wasm32-wasi': 1.5.5 - '@rspack/binding-win32-arm64-msvc': 1.5.5 - '@rspack/binding-win32-ia32-msvc': 1.5.5 - '@rspack/binding-win32-x64-msvc': 1.5.5 - - '@rspack/core@1.5.0(@swc/helpers@0.5.17)': + '@rspack/binding-darwin-arm64': 1.6.0-beta.0 + '@rspack/binding-darwin-x64': 1.6.0-beta.0 + '@rspack/binding-linux-arm64-gnu': 1.6.0-beta.0 + '@rspack/binding-linux-arm64-musl': 1.6.0-beta.0 + '@rspack/binding-linux-x64-gnu': 1.6.0-beta.0 + '@rspack/binding-linux-x64-musl': 1.6.0-beta.0 + '@rspack/binding-wasm32-wasi': 1.6.0-beta.0 + '@rspack/binding-win32-arm64-msvc': 1.6.0-beta.0 + '@rspack/binding-win32-ia32-msvc': 1.6.0-beta.0 + '@rspack/binding-win32-x64-msvc': 1.6.0-beta.0 + + '@rspack/core@1.5.8(@swc/helpers@0.5.17)': dependencies: '@module-federation/runtime-tools': 0.18.0 - '@rspack/binding': 1.5.0 + '@rspack/binding': 1.5.8 '@rspack/lite-tapable': 1.0.1 optionalDependencies: '@swc/helpers': 0.5.17 - '@rspack/core@1.5.5(@swc/helpers@0.5.17)': + '@rspack/core@1.6.0-beta.0(@swc/helpers@0.5.17)': dependencies: - '@module-federation/runtime-tools': 0.18.0 - '@rspack/binding': 1.5.5 + '@module-federation/runtime-tools': 0.20.0 + '@rspack/binding': 1.6.0-beta.0 '@rspack/lite-tapable': 1.0.1 optionalDependencies: '@swc/helpers': 0.5.17 @@ -7238,8 +7299,8 @@ snapshots: dependencies: '@mdx-js/mdx': 3.1.1 '@mdx-js/react': 3.1.1(@types/react@19.1.13)(react@19.1.1) - '@rsbuild/core': 1.5.10 - '@rsbuild/plugin-react': 1.4.0(@rsbuild/core@1.5.10) + '@rsbuild/core': 1.5.17 + '@rsbuild/plugin-react': 1.4.0(@rsbuild/core@1.5.17) '@rspress/mdx-rs': 0.6.6 '@rspress/runtime': 2.0.0-beta.33 '@rspress/shared': 2.0.0-beta.33 @@ -7343,7 +7404,7 @@ snapshots: '@rspress/shared@2.0.0-beta.33': dependencies: - '@rsbuild/core': 1.5.10 + '@rsbuild/core': 1.5.17 '@shikijs/rehype': 3.12.2 gray-matter: 4.0.3 lodash-es: 4.17.21 @@ -7754,6 +7815,8 @@ snapshots: dependencies: '@types/unist': 3.0.3 + '@types/is-url@1.2.32': {} + '@types/istanbul-lib-coverage@2.0.6': {} '@types/istanbul-lib-instrument@1.7.8': @@ -7848,7 +7911,7 @@ snapshots: '@types/tapable@2.2.7': dependencies: - tapable: 2.2.2 + tapable: 2.3.0 '@types/tough-cookie@4.0.5': {} @@ -8345,6 +8408,8 @@ snapshots: base64id@2.0.0: {} + baseline-browser-mapping@2.8.18: {} + better-path-resolve@1.0.0: dependencies: is-windows: 1.0.2 @@ -8407,14 +8472,15 @@ snapshots: browserslist-to-es-version@1.0.0: dependencies: - browserslist: 4.24.5 + browserslist: 4.26.3 - browserslist@4.24.5: + browserslist@4.26.3: dependencies: - caniuse-lite: 1.0.30001718 - electron-to-chromium: 1.5.150 - node-releases: 2.0.19 - update-browserslist-db: 1.1.3(browserslist@4.24.5) + baseline-browser-mapping: 2.8.18 + caniuse-lite: 1.0.30001751 + electron-to-chromium: 1.5.237 + node-releases: 2.0.25 + update-browserslist-db: 1.1.3(browserslist@4.26.3) buffer-builder@0.2.0: {} @@ -8463,7 +8529,7 @@ snapshots: camelcase@6.3.0: {} - caniuse-lite@1.0.30001718: {} + caniuse-lite@1.0.30001751: {} ccount@2.0.1: {} @@ -8626,7 +8692,7 @@ snapshots: dependencies: toggle-selection: 1.0.6 - core-js@3.45.1: {} + core-js@3.46.0: {} core-util-is@1.0.3: {} @@ -8818,7 +8884,7 @@ snapshots: ee-first@1.1.1: {} - electron-to-chromium@1.5.150: {} + electron-to-chromium@1.5.237: {} emoji-regex@10.5.0: {} @@ -8860,12 +8926,12 @@ snapshots: enhanced-resolve@5.12.0: dependencies: graceful-fs: 4.2.11 - tapable: 2.2.2 + tapable: 2.3.0 enhanced-resolve@5.18.3: dependencies: graceful-fs: 4.2.11 - tapable: 2.2.2 + tapable: 2.3.0 enquirer@2.3.6: dependencies: @@ -9239,8 +9305,6 @@ snapshots: dependencies: has-symbols: 1.1.0 - hash-sum@2.0.0: {} - hasown@2.0.2: dependencies: function-bind: 1.1.2 @@ -9539,6 +9603,8 @@ snapshots: is-unicode-supported@2.1.0: {} + is-url@1.2.4: {} + is-windows@1.0.2: {} is-wsl@2.2.0: @@ -9662,7 +9728,7 @@ snapshots: merge-stream: 2.0.0 supports-color: 8.1.1 - jiti@2.5.1: {} + jiti@2.6.1: {} jju@1.4.0: {} @@ -9793,7 +9859,7 @@ snapshots: dependencies: uc.micro: 2.1.0 - loader-runner@4.3.0: {} + loader-runner@4.3.1: {} loader-utils@2.0.4: dependencies: @@ -10449,7 +10515,7 @@ snapshots: node-machine-id@1.1.12: {} - node-releases@2.0.19: {} + node-releases@2.0.25: {} node-sarif-builder@3.2.0: dependencies: @@ -11046,24 +11112,32 @@ snapshots: rrweb-cssom@0.8.0: {} - rsbuild-plugin-dts@0.13.3(@microsoft/api-extractor@7.52.13(@types/node@22.18.6))(@rsbuild/core@1.5.10)(typescript@5.9.2): + rsbuild-plugin-dts@0.13.3(@microsoft/api-extractor@7.52.13(@types/node@22.18.6))(@rsbuild/core@1.5.17)(typescript@5.9.2): dependencies: '@ast-grep/napi': 0.37.0 - '@rsbuild/core': 1.5.10 + '@rsbuild/core': 1.5.17 optionalDependencies: '@microsoft/api-extractor': 7.52.13(@types/node@22.18.6) typescript: 5.9.2 - rsbuild-plugin-google-analytics@1.0.4(@rsbuild/core@1.5.10): + rsbuild-plugin-google-analytics@1.0.4(@rsbuild/core@1.6.0-beta.0): optionalDependencies: - '@rsbuild/core': 1.5.10 + '@rsbuild/core': 1.6.0-beta.0 - rsbuild-plugin-open-graph@1.1.0(@rsbuild/core@1.5.10): + rsbuild-plugin-open-graph@1.1.0(@rsbuild/core@1.6.0-beta.0): optionalDependencies: - '@rsbuild/core': 1.5.10 + '@rsbuild/core': 1.6.0-beta.0 rslog@1.2.11: {} + rspack-vue-loader@17.4.4(vue@3.5.21(typescript@5.9.2))(webpack@5.102.1(@swc/core@1.13.5(@swc/helpers@0.5.17))): + dependencies: + chalk: 4.1.2 + watchpack: 2.4.4 + webpack: 5.102.1(@swc/core@1.13.5(@swc/helpers@0.5.17)) + optionalDependencies: + vue: 3.5.21(typescript@5.9.2) + rspress-plugin-font-open-sans@1.0.3(@rspress/core@2.0.0-beta.33(@types/react@19.1.13)): dependencies: '@rspress/core': 2.0.0-beta.33(@types/react@19.1.13) @@ -11191,7 +11265,7 @@ snapshots: scheduler@0.26.0: {} - schema-utils@4.3.2: + schema-utils@4.3.3: dependencies: '@types/json-schema': 7.0.15 ajv: 8.17.1 @@ -11526,6 +11600,8 @@ snapshots: tapable@2.2.2: {} + tapable@2.3.0: {} + tar-fs@2.1.3: dependencies: chownr: 1.1.4 @@ -11549,18 +11625,18 @@ snapshots: ansi-escapes: 7.1.0 supports-hyperlinks: 3.2.0 - terser-webpack-plugin@5.3.14(@swc/core@1.13.5(@swc/helpers@0.5.17))(webpack@5.101.2(@swc/core@1.13.5(@swc/helpers@0.5.17))): + terser-webpack-plugin@5.3.14(@swc/core@1.13.5(@swc/helpers@0.5.17))(webpack@5.102.1(@swc/core@1.13.5(@swc/helpers@0.5.17))): dependencies: '@jridgewell/trace-mapping': 0.3.31 jest-worker: 27.5.1 - schema-utils: 4.3.2 + schema-utils: 4.3.3 serialize-javascript: 6.0.2 - terser: 5.43.1 - webpack: 5.101.2(@swc/core@1.13.5(@swc/helpers@0.5.17)) + terser: 5.44.0 + webpack: 5.102.1(@swc/core@1.13.5(@swc/helpers@0.5.17)) optionalDependencies: '@swc/core': 1.13.5(@swc/helpers@0.5.17) - terser@5.43.1: + terser@5.44.0: dependencies: '@jridgewell/source-map': 0.3.11 acorn: 8.15.0 @@ -11735,9 +11811,9 @@ snapshots: upath@2.0.1: {} - update-browserslist-db@1.1.3(browserslist@4.24.5): + update-browserslist-db@1.1.3(browserslist@4.26.3): dependencies: - browserslist: 4.24.5 + browserslist: 4.26.3 escalade: 3.2.0 picocolors: 1.1.1 @@ -11787,15 +11863,6 @@ snapshots: vue-component-type-helpers@2.2.12: {} - vue-loader@17.4.2(vue@3.5.21(typescript@5.9.2))(webpack@5.101.2(@swc/core@1.13.5(@swc/helpers@0.5.17))): - dependencies: - chalk: 4.1.2 - hash-sum: 2.0.0 - watchpack: 2.4.4 - webpack: 5.101.2(@swc/core@1.13.5(@swc/helpers@0.5.17)) - optionalDependencies: - vue: 3.5.21(typescript@5.9.2) - vue@3.5.21(typescript@5.9.2): dependencies: '@vue/compiler-dom': 3.5.21 @@ -11827,18 +11894,18 @@ snapshots: webidl-conversions@7.0.0: {} - webpack-license-plugin@4.5.1(webpack@5.101.2(@swc/core@1.13.5(@swc/helpers@0.5.17))): + webpack-license-plugin@4.5.1(webpack@5.102.1(@swc/core@1.13.5(@swc/helpers@0.5.17))): dependencies: chalk: 5.4.1 lodash: 4.17.21 needle: 3.3.1 spdx-expression-validate: 2.0.0 - webpack: 5.101.2(@swc/core@1.13.5(@swc/helpers@0.5.17)) + webpack: 5.102.1(@swc/core@1.13.5(@swc/helpers@0.5.17)) webpack-sources: 3.3.3 webpack-sources@3.3.3: {} - webpack@5.101.2(@swc/core@1.13.5(@swc/helpers@0.5.17)): + webpack@5.102.1(@swc/core@1.13.5(@swc/helpers@0.5.17)): dependencies: '@types/eslint-scope': 3.7.7 '@types/estree': 1.0.8 @@ -11848,7 +11915,7 @@ snapshots: '@webassemblyjs/wasm-parser': 1.14.1 acorn: 8.15.0 acorn-import-phases: 1.0.4(acorn@8.15.0) - browserslist: 4.24.5 + browserslist: 4.26.3 chrome-trace-event: 1.0.4 enhanced-resolve: 5.18.3 es-module-lexer: 1.7.0 @@ -11857,12 +11924,12 @@ snapshots: glob-to-regexp: 0.4.1 graceful-fs: 4.2.11 json-parse-even-better-errors: 2.3.1 - loader-runner: 4.3.0 + loader-runner: 4.3.1 mime-types: 2.1.35 neo-async: 2.6.2 - schema-utils: 4.3.2 - tapable: 2.2.2 - terser-webpack-plugin: 5.3.14(@swc/core@1.13.5(@swc/helpers@0.5.17))(webpack@5.101.2(@swc/core@1.13.5(@swc/helpers@0.5.17))) + schema-utils: 4.3.3 + tapable: 2.3.0 + terser-webpack-plugin: 5.3.14(@swc/core@1.13.5(@swc/helpers@0.5.17))(webpack@5.102.1(@swc/core@1.13.5(@swc/helpers@0.5.17))) watchpack: 2.4.4 webpack-sources: 3.3.3 transitivePeerDependencies: diff --git a/website/docs/en/api/rstest/mockModules.mdx b/website/docs/en/api/rstest/mockModules.mdx index 6c77d4b03..ec06bf1e8 100644 --- a/website/docs/en/api/rstest/mockModules.mdx +++ b/website/docs/en/api/rstest/mockModules.mdx @@ -8,7 +8,7 @@ Rstest supports mocking modules, which allows you to replace the implementation ## rs.mock -- **Type**: `(moduleName: string | Promise, moduleFactory?: (() => Promise> | Partial)) => void` +- **Type**: `(moduleName: string | Promise, moduleFactory?: (() => Partial)) => void` When calling `rs.mock`, Rstest will mock and replace the module specified in the first parameter. `rs.mock` will determine how to handle the mocked module based on whether a second mock factory function is provided, as explained in detail below. @@ -16,7 +16,7 @@ When calling `rs.mock`, Rstest will mock and replace the module specified in the Based on the second parameter provided, `rs.mock` has two behaviors: -1. If a factory function is provided as the second parameter to `rs.mock`, the module will be replaced with the return value of the factory function (the factory function can be async, use the awaited return value) as the implementation of the mocked module. +1. If a factory function is provided as the second parameter to `rs.mock`, the module will be replaced with the return value of the factory function as the implementation of the mocked module.
@@ -81,7 +81,7 @@ Based on the second parameter provided, `rs.mock` has two behaviors: ```ts // Compared to rs.mock('../src/b', ...) the type is enhanced. - rs.mock(import('../src/b'), async () => { + rs.mock(import('../src/b'), () => { return { b: 222, }; @@ -90,7 +90,7 @@ Based on the second parameter provided, `rs.mock` has two behaviors: ## rs.doMock -- **Type**: `(moduleName: string | Promise, moduleFactory?: (() => Promise> | Partial)) => void` +- **Type**: `(moduleName: string | Promise, moduleFactory?: (() => Partial)) => void` Similar to `rs.mock`, `rs.doMock` also mocks modules, but it is not hoisted to the top of the module. It is called when it's executed, which means that if a module has already been imported before calling `rs.doMock`, that module will not be mocked, while modules imported after calling `rs.doMock` will be mocked. @@ -114,15 +114,29 @@ Similar to `rs.mock`, `rs.doMock` also mocks modules, but it is not hoisted to t - **Type**: `>(path: string) => Promise` -Imports the original module regardless of whether it has been mocked. If you want to partially mock a module, you can use `rs.importActual` to get the original module's implementation and merge it with the mock implementation for partial mocking. +Loads the original implementation of a module even if it has already been mocked. Use `rs.importActual` when you want a partial mock so you can merge the real exports with your overrides. ```ts title="src/sum.test.ts" -rs.mock('./sum', async () => { - const originalModule = await rs.importActual('./sum'); - return { ...originalModule, sum2: rs.fn() }; +rs.mock('./sum'); + +it('test', async () => { + const actualModule = await rs.importActual('./sum'); + expect(actualModule.sum(1, 2)).toBe(3); }); ``` +Rstest also exposes a synchronous `importActual` option for static imports. Add the [import attribute](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/import/with) `with { rstest: 'importActual' }` to load the real module as the file evaluates: + +```ts title="src/api.test.ts" +import * as apiActual from './api' with { rstest: 'importActual' }; + +// Partially mock the './api' module +rs.mock('./api', () => ({ + ...apiActual, + fetchUser: rs.fn().mockResolvedValue({ id: 'mocked' }), +})); +``` + ## rs.importMock - **Type**: `>(path: string) => Promise` diff --git a/website/docs/zh/api/rstest/mockModules.mdx b/website/docs/zh/api/rstest/mockModules.mdx index 6eee774d3..115b6c7b2 100644 --- a/website/docs/zh/api/rstest/mockModules.mdx +++ b/website/docs/zh/api/rstest/mockModules.mdx @@ -8,7 +8,7 @@ Rstest 支持对模块进行 mock,这使得你可以在测试中替换模块 ## rs.mock -- **类型:**: `(moduleName: string | Promise, moduleFactory?: (() => Promise> | Partial)) => void` +- **类型:**: `(moduleName: string | Promise, moduleFactory?: (() => Partial)) => void` 调用 `rs.mock` 时,Rstest 会对第一个参数对应的模块进行 mock 替换。`rs.mock` 将根据是否提供了第二个 mock 工厂函数来决定如何处理被 mock 的模块,下面会详细介绍这两种情况。 @@ -16,7 +16,7 @@ Rstest 支持对模块进行 mock,这使得你可以在测试中替换模块 根据提供的第二个参数,`rs.mock` 有两种行为: -1. 如果 `rs.mock` 方法的第二个参数提供了一个工厂函数,则替换为工厂函数的返回值(工厂函数可以是异步函数,取异步函数 await 后的返回值)作为被 mock 的模块的实现。 +1. 如果 `rs.mock` 方法的第二个参数提供了一个工厂函数,则替换为工厂函数的返回值作为被 mock 的模块的实现。
@@ -81,7 +81,7 @@ Rstest 支持对模块进行 mock,这使得你可以在测试中替换模块 ```ts // Compared to rs.mock('../src/b', ...) the type is enhanced. - rs.mock(import('../src/b'), async () => { + rs.mock(import('../src/b'), () => { return { b: 222, }; @@ -90,7 +90,7 @@ Rstest 支持对模块进行 mock,这使得你可以在测试中替换模块 ## rs.doMock -- **类型:**: `(moduleName: string | Promise, moduleFactory?: (() => Promise> | Partial)) => void` +- **类型:**: `(moduleName: string | Promise, moduleFactory?: (() => Partial)) => void` 与 `rs.mock` 类似,`rs.doMock` 也会 mock 模块,但它不会被提升到模块顶部。它会在被执行到时调用,这意味着,如果在调用 `rs.doMock` 之前已经导入了模块,则该模块不会被 mock,而在调用 `rs.doMock` 之后导入的模块会被 mock。 @@ -117,12 +117,26 @@ Rstest 支持对模块进行 mock,这使得你可以在测试中替换模块 无视一个模块是否被 mock,导入其原始的模块。如果你想 mock 模块的部分实现,可以使用 `rs.importActual` 来获取原始模块的实现与 mock 的实现进行合并进行部分 mock。 ```ts title="src/sum.test.ts" -rs.mock('./sum', async () => { - const originalModule = await rs.importActual('./sum'); - return { ...originalModule, sum2: rs.fn() }; +rs.mock('./sum'); + +it('test', async () => { + const actualModule = await rs.importActual('./sum'); + expect(actualModule.sum(1, 2)).toBe(3); }); ``` +Rstest 也提供了同步的 `importActual` 能力,允许你在同步的 `import` 语句中导入未被 mock 的模块实现。使用方法是在 `import` 语句中添加 `with { rstest: 'importActual' }` 的 [import attributes](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Statements/import/with): + +```ts title="src/api.test.ts" +import * as apiActual from './api' with { rstest: 'importActual' }; + +// Partially mock the './api' module +rs.mock('./api', () => ({ + ...apiActual, + fetchUser: rs.fn().mockResolvedValue({ id: 'mocked' }), +})); +``` + ## rs.importMock - **类型:**: `>(path: string) => Promise`