}
})
+ describe('dynamic anchor', () => {
+ test('two consecutive components', () => {
+ const Comp = {
+ render() {
+ return createTextVNode('foo')
+ },
+ }
+ const { vnode, container } = mountWithHydration(
+ `<div><span></span>foo<!--[[-->foo<!--]]--><span></span></div>`,
+ () => h('div', null, [h('span'), h(Comp), h(Comp), h('span')]),
+ )
+ expect(vnode.el).toBe(container.firstChild)
+ expect(`Hydration children mismatch`).not.toHaveBeenWarned()
+ })
+
+ test('multiple consecutive components', () => {
+ const Comp = {
+ render() {
+ return createTextVNode('foo')
+ },
+ }
+ const { vnode, container } = mountWithHydration(
+ `<div><span></span>foo<!--[[-->foo<!--]]-->foo<span></span></div>`,
+ () => h('div', null, [h('span'), h(Comp), h(Comp), h(Comp), h('span')]),
+ )
+ expect(vnode.el).toBe(container.firstChild)
+ expect(`Hydration children mismatch`).not.toHaveBeenWarned()
+ })
+ })
+
+ test('hmr reload child wrapped in KeepAlive', async () => {
+ const id = 'child-reload'
+ const Child = {
+ __hmrId: id,
+ template: `<div>foo</div>`,
+ }
+ createRecord(id, Child)
+
+ const appId = 'test-app-id'
+ const App = {
+ __hmrId: appId,
+ components: { Child },
+ template: `
+ <div>
+ <KeepAlive>
+ <Child />
+ </KeepAlive>
+ </div>
+ `,
+ }
+
+ const root = document.createElement('div')
+ root.innerHTML = await renderToString(h(App))
+ createSSRApp(App).mount(root)
+ expect(root.innerHTML).toBe('<div><div>foo</div></div>')
+
+ reload(id, {
+ __hmrId: id,
+ template: `<div>bar</div>`,
+ })
+ await nextTick()
+ expect(root.innerHTML).toBe('<div><div>bar</div></div>')
+ })
+
+ test('hmr root reload', async () => {
+ const appId = 'test-app-id'
+ const App = {
+ __hmrId: appId,
+ template: `<div>foo</div>`,
+ }
+
+ const root = document.createElement('div')
+ root.innerHTML = await renderToString(h(App))
+ createSSRApp(App).mount(root)
+ expect(root.innerHTML).toBe('<div>foo</div>')
+
+ reload(appId, {
+ __hmrId: appId,
+ template: `<div>bar</div>`,
+ })
+ await nextTick()
+ expect(root.innerHTML).toBe('<div>bar</div>')
+ })
+
describe('mismatch handling', () => {
test('text node', () => {
const { container } = mountWithHydration(`foo`, () => 'bar')
devDependencies:
'@babel/parser':
specifier: 'catalog:'
- version: 7.26.10
+ version: 7.27.5
'@babel/types':
specifier: 'catalog:'
- version: 7.26.10
+ version: 7.27.6
'@rollup/plugin-alias':
specifier: ^5.1.1
- version: 5.1.1(rollup@4.37.0)
+ version: 5.1.1(rollup@4.44.0)
'@rollup/plugin-commonjs':
specifier: ^28.0.3
- version: 28.0.3(rollup@4.37.0)
+ version: 28.0.6(rollup@4.44.0)
'@rollup/plugin-json':
specifier: ^6.1.0
- version: 6.1.0(rollup@4.37.0)
+ version: 6.1.0(rollup@4.44.0)
'@rollup/plugin-node-resolve':
specifier: ^16.0.1
- version: 16.0.1(rollup@4.37.0)
+ version: 16.0.1(rollup@4.44.0)
'@rollup/plugin-replace':
specifier: 5.0.4
- version: 5.0.4(rollup@4.37.0)
+ version: 5.0.4(rollup@4.44.0)
'@swc/core':
- specifier: ^1.11.12
- version: 1.11.12
+ specifier: ^1.11.24
- version: 1.12.3
++ version: 1.12.4
'@types/hash-sum':
specifier: ^1.0.2
version: 1.0.2
cpu: [x64]
os: [win32]
- '@swc/core-darwin-arm64@1.11.12':
- resolution: {integrity: sha512-x+iljeyIaVq7VCAy9pM0rqAb9GKA1cqDkqCxgFDxH3rcH+ykZa12vkDlTwysgkfLV8pr0KhCRHkwY+iAqPbO9g==}
- '@swc/core-darwin-arm64@1.12.3':
- resolution: {integrity: sha512-QCV9vQ/s27AMxm8j8MTDL/nDoiEMrANiENRrWnb0Fxvz/O39CajPVShp/W7HlOkzt1GYtUXPdQJpSKylugfrWw==}
++ '@swc/core-darwin-arm64@1.12.4':
++ resolution: {integrity: sha512-HihKfeitjZU2ab94Zf893sxzFryLKX0TweGsNXXOLNtkSMLw50auuYfpRM0BOL9/uXXtuCWgRIF6P030SAX5xQ==}
engines: {node: '>=10'}
cpu: [arm64]
os: [darwin]
- '@swc/core-darwin-x64@1.11.12':
- resolution: {integrity: sha512-DwTXPdhJ/+scUR1iWttu3p0q8b5omF71xWFCw6UC99QBJQ4femmRtZNacgdiBkxZ5IbUlxd8m5UzMBc/+H5rWw==}
- '@swc/core-darwin-x64@1.12.3':
- resolution: {integrity: sha512-LylCMfzGhdvl5tyKaTT9ePetHUX7wSsST7hxWiHzS+cUMj7FnhcfdEr6kcNVT7y1RJn3fCvuv7T98ZB+T2q3HA==}
++ '@swc/core-darwin-x64@1.12.4':
++ resolution: {integrity: sha512-meYCXHyYb6RDdu2N5PNAf0EelyxPBFhRcVo4kBFLuvuNb0m6EUg///VWy8MUMXq9/s9uzGS9kJVXXdRdr/d6FA==}
engines: {node: '>=10'}
cpu: [x64]
os: [darwin]
- '@swc/core-linux-arm-gnueabihf@1.11.12':
- resolution: {integrity: sha512-ls9b3lX2x3tnJKGn6zSDFK1ohdmdUkE6nwqrVmdzqAwr/Q5i2ij/dmkOFCloItc2PHNVtRGGsC4+FYSm1EBLjg==}
- '@swc/core-linux-arm-gnueabihf@1.12.3':
- resolution: {integrity: sha512-DQODb7S+q+pwQY41Azcavwb2rb4rGxP70niScRDxB9X68hHOM9D0w9fxzC+Nr3AHcPSmVJUYUIiq5h38O5hVgQ==}
++ '@swc/core-linux-arm-gnueabihf@1.12.4':
++ resolution: {integrity: sha512-szfDbf7mE8V64of0q/LSqbk+em+T+TD3uqnH40Z7Qu/aL8vi5CHgyLjWG2SLkLLpyjgkAUF6AKrupgnBYcC2NA==}
engines: {node: '>=10'}
cpu: [arm]
os: [linux]
- '@swc/core-linux-arm64-gnu@1.11.12':
- resolution: {integrity: sha512-F0nMLl5kYbew5GjHq7B21poE5VOPgSsoQ0VEXd4Fji3rR0d0gLoK2r+JP92XmpRxAzdzpdak1DQczWMyf2BQAQ==}
- '@swc/core-linux-arm64-gnu@1.12.3':
- resolution: {integrity: sha512-nTxtJSq78AjeaQBueYImoFBs5j7qXbgOxtirpyt8jE29NQBd0VFzDzRBhkr6I9jq0hNiChgMkqBN4eUkEQjytg==}
++ '@swc/core-linux-arm64-gnu@1.12.4':
++ resolution: {integrity: sha512-n0IY76w+Scx8m3HIVRvLkoResuwsQgjDfAk9bxn99dq4leQO+mE0fkPl0Yw/1BIsPh+kxGfopIJH9zsZ1Z2YrA==}
engines: {node: '>=10'}
cpu: [arm64]
os: [linux]
- libc: [glibc]
- '@swc/core-linux-arm64-musl@1.11.12':
- resolution: {integrity: sha512-3dlHowBgYBgi23ZBSvFHe/tD3PowEhxfVAy08NckWBeaG/e4dyrYMhAiccfuy6jkDYXEF1L2DtpRtxGImxoaPg==}
- '@swc/core-linux-arm64-musl@1.12.3':
- resolution: {integrity: sha512-lBGvC5UgPSxqLr/y1NZxQhyRQ7nXy3/Ec1Z47YNXtqtpKiG1EcOGPyS0UZgwiYQkXqq8NBFMHnyHmpKnXTvRDA==}
++ '@swc/core-linux-arm64-musl@1.12.4':
++ resolution: {integrity: sha512-wE5jmFi5cEQyLy8WmCWmNwfKETrnzy2D8YNi/xpYWpLPWqPhcelpa6tswkfYlbsMmmOh7hQNoTba1QdGu0jvHQ==}
engines: {node: '>=10'}
cpu: [arm64]
os: [linux]
- libc: [musl]
- '@swc/core-linux-x64-gnu@1.11.12':
- resolution: {integrity: sha512-ToEWzLA5lXlYCbGNzMow6+uy4zhpXKQyFb3RHM8AYVb0n4pNPWvwF+8ybWDimeGBBaHJLgRQsUMuJ4NV6urSrA==}
- '@swc/core-linux-x64-gnu@1.12.3':
- resolution: {integrity: sha512-61wZ8hwxNYzBY9MCWB50v90ICzdIhOuPk1O1qXswz9AXw5O6iQStEBHQ1rozPkfQ/rmhepk0pOf/6LCwssJOwg==}
++ '@swc/core-linux-x64-gnu@1.12.4':
++ resolution: {integrity: sha512-6S50Xd/7ePjEwrXyHMxpKTZ+KBrgUwMA8hQPbArUOwH4S5vHBr51heL0iXbUkppn1bkSr0J0IbOove5hzn+iqQ==}
engines: {node: '>=10'}
cpu: [x64]
os: [linux]
- libc: [glibc]
- '@swc/core-linux-x64-musl@1.11.12':
- resolution: {integrity: sha512-N5xF+MDZr79e8gvVXX3YP1bMeaRL16Kst/R7bGUQvvCq1UGD86qMUtSr5KfCl0h5SNKP2YKtkN98HQLnGEikow==}
- '@swc/core-linux-x64-musl@1.12.3':
- resolution: {integrity: sha512-NNeBiTpCgWt80vumTKVoaj6Fa/ZjUcaNQNM7np3PIgB8EbuXfyztboV7vUxpkmD/lUgsk8GlEFYViHvo6VMefQ==}
++ '@swc/core-linux-x64-musl@1.12.4':
++ resolution: {integrity: sha512-hbYRyaHhC13vYKuGG5BrAG5fjjWEQFfQetuFp/4QKEoXDzdnabJoixxWTQACDL3m0JW32nJ+gUzsYIPtFYkwXg==}
engines: {node: '>=10'}
cpu: [x64]
os: [linux]
- libc: [musl]
- '@swc/core-win32-arm64-msvc@1.11.12':
- resolution: {integrity: sha512-/PYiyYWSQRtMoOamMfhAfq0y3RWk9LpUZ49yetJn2XI85TRkL5u2DTLLNkTPvoTiCfo0eZOJF9t5b7Z6ly0iHQ==}
- '@swc/core-win32-arm64-msvc@1.12.3':
- resolution: {integrity: sha512-fxraM7exaPb1/W0CoHW45EFNOQUQh0nonBEcNFm2iv095mziBwttyxZyQBoDkQocpkd5NtsZw3xW5FTBPnn+Vw==}
++ '@swc/core-win32-arm64-msvc@1.12.4':
++ resolution: {integrity: sha512-e6EbfjPL8GA/bb1lc9Omtxjlz+1ThTsAuBsy4Q3Kpbuh6B3jclg8KzxU/6t91v23wG593mieTyR5f3Pr7X3AWw==}
engines: {node: '>=10'}
cpu: [arm64]
os: [win32]
- '@swc/core-win32-ia32-msvc@1.11.12':
- resolution: {integrity: sha512-Dxm6W4p0YVNIPnYh/Kf/9zPeaD6sVAGDQN+2c52l4m/4gR5aDgE+xg6k5lAt4ok7LDXInL3n1nwYEG7Tc4JcSQ==}
- '@swc/core-win32-ia32-msvc@1.12.3':
- resolution: {integrity: sha512-FFIhMPXIDjRcewomwbYGPvem7Fj76AsuzbRahnAyp+OzJwrrtxVmra/kyUCfj4kix7vdGByY0WvVfiVCf5b7Mg==}
++ '@swc/core-win32-ia32-msvc@1.12.4':
++ resolution: {integrity: sha512-RG2FzmllBTUf4EksANlIvLckcBrLZEA0t13LIa6L213UZKQfEuDNHezqESgoVhJMg2S/tWauitATOCFgZNSmjg==}
engines: {node: '>=10'}
cpu: [ia32]
os: [win32]
- '@swc/core-win32-x64-msvc@1.11.12':
- resolution: {integrity: sha512-PP8RSJTcda5nUHJGkbKeQ20OC+L2LxcbjYpyha1OqIFyu/qWG9zMMYVaTLKJL7zsJ14pIM/mpS3u+CJARQ+Hzw==}
- '@swc/core-win32-x64-msvc@1.12.3':
- resolution: {integrity: sha512-Sf4iSg+IYT5AzFSDDmii08DfeKcvtkVxIuo+uS8BJMbiLjFNjgMkkVlBthknGyJcSK15ncg9248XjnM4jU8DZA==}
++ '@swc/core-win32-x64-msvc@1.12.4':
++ resolution: {integrity: sha512-oRHKnZlR83zaMeVUCmHENa4j5uNRAWbmEpjYbzRcfC45LPFNWKGWGAGERLx0u87XMUtTGqnVYxnBTHN/rzDHOw==}
engines: {node: '>=10'}
cpu: [x64]
os: [win32]
- '@swc/core@1.11.12':
- resolution: {integrity: sha512-Jwx9JH1O6Vm7BS9AEPLlquJNSy6Lbt/kiJIlxSslDuBLeDJD13lXQfitvazqgRwGEHx1QmwEq8mc0OSristtRw==}
- '@swc/core@1.12.3':
- resolution: {integrity: sha512-c4NeXW8P3gPqcFwtm+4aH+F2Cj5KJLMiLaKhSj3mpv19glq+jmekomdktAw/VHyjsXlsmouOeNWrk8rVlkCRsg==}
++ '@swc/core@1.12.4':
++ resolution: {integrity: sha512-hn30ebV4njAn0NAUM+3a0qCF+MJgqTNSrfA/hUAbC6TVjOQy2OYGQwkUvCu/V7S2+rZxrUsTpKOnZ7qqECZV9Q==}
engines: {node: '>=10'}
peerDependencies:
- '@swc/helpers': '*'
+ '@swc/helpers': '>=0.5.17'
peerDependenciesMeta:
'@swc/helpers':
optional: true
'@types/resolve': 1.20.2
deepmerge: 4.3.1
is-module: 1.0.0
- resolve: 1.22.8
+ resolve: 1.22.10
optionalDependencies:
- rollup: 4.37.0
+ rollup: 4.44.0
- '@rollup/plugin-replace@5.0.4(rollup@4.37.0)':
+ '@rollup/plugin-replace@5.0.4(rollup@4.44.0)':
dependencies:
- '@rollup/pluginutils': 5.1.0(rollup@4.37.0)
+ '@rollup/pluginutils': 5.2.0(rollup@4.44.0)
magic-string: 0.30.17
optionalDependencies:
- rollup: 4.37.0
+ rollup: 4.44.0
- '@rollup/pluginutils@5.1.0(rollup@4.37.0)':
+ '@rollup/pluginutils@5.2.0(rollup@4.44.0)':
dependencies:
- '@types/estree': 1.0.6
+ '@types/estree': 1.0.8
estree-walker: 2.0.2
- picomatch: 2.3.1
+ picomatch: 4.0.2
optionalDependencies:
- rollup: 4.37.0
+ rollup: 4.44.0
- '@rollup/rollup-android-arm-eabi@4.37.0':
+ '@rollup/rollup-android-arm-eabi@4.44.0':
optional: true
- '@rollup/rollup-android-arm64@4.37.0':
+ '@rollup/rollup-android-arm64@4.44.0':
optional: true
- '@rollup/rollup-darwin-arm64@4.37.0':
+ '@rollup/rollup-darwin-arm64@4.44.0':
optional: true
- '@rollup/rollup-darwin-x64@4.37.0':
+ '@rollup/rollup-darwin-x64@4.44.0':
optional: true
- '@rollup/rollup-freebsd-arm64@4.37.0':
+ '@rollup/rollup-freebsd-arm64@4.44.0':
optional: true
- '@rollup/rollup-freebsd-x64@4.37.0':
+ '@rollup/rollup-freebsd-x64@4.44.0':
optional: true
- '@rollup/rollup-linux-arm-gnueabihf@4.37.0':
+ '@rollup/rollup-linux-arm-gnueabihf@4.44.0':
optional: true
- '@rollup/rollup-linux-arm-musleabihf@4.37.0':
+ '@rollup/rollup-linux-arm-musleabihf@4.44.0':
optional: true
- '@rollup/rollup-linux-arm64-gnu@4.37.0':
+ '@rollup/rollup-linux-arm64-gnu@4.44.0':
optional: true
- '@rollup/rollup-linux-arm64-musl@4.37.0':
+ '@rollup/rollup-linux-arm64-musl@4.44.0':
optional: true
- '@rollup/rollup-linux-loongarch64-gnu@4.37.0':
+ '@rollup/rollup-linux-loongarch64-gnu@4.44.0':
optional: true
- '@rollup/rollup-linux-powerpc64le-gnu@4.37.0':
+ '@rollup/rollup-linux-powerpc64le-gnu@4.44.0':
optional: true
- '@rollup/rollup-linux-riscv64-gnu@4.37.0':
+ '@rollup/rollup-linux-riscv64-gnu@4.44.0':
optional: true
- '@rollup/rollup-linux-riscv64-musl@4.37.0':
+ '@rollup/rollup-linux-riscv64-musl@4.44.0':
optional: true
- '@rollup/rollup-linux-s390x-gnu@4.37.0':
+ '@rollup/rollup-linux-s390x-gnu@4.44.0':
optional: true
- '@rollup/rollup-linux-x64-gnu@4.37.0':
+ '@rollup/rollup-linux-x64-gnu@4.44.0':
optional: true
- '@rollup/rollup-linux-x64-musl@4.37.0':
+ '@rollup/rollup-linux-x64-musl@4.44.0':
optional: true
- '@rollup/rollup-win32-arm64-msvc@4.37.0':
+ '@rollup/rollup-win32-arm64-msvc@4.44.0':
optional: true
- '@rollup/rollup-win32-ia32-msvc@4.37.0':
+ '@rollup/rollup-win32-ia32-msvc@4.44.0':
optional: true
- '@rollup/rollup-win32-x64-msvc@4.37.0':
+ '@rollup/rollup-win32-x64-msvc@4.44.0':
optional: true
- '@swc/core-darwin-arm64@1.11.12':
- '@swc/core-darwin-arm64@1.12.3':
++ '@swc/core-darwin-arm64@1.12.4':
optional: true
- '@swc/core-darwin-x64@1.11.12':
- '@swc/core-darwin-x64@1.12.3':
++ '@swc/core-darwin-x64@1.12.4':
optional: true
- '@swc/core-linux-arm-gnueabihf@1.11.12':
- '@swc/core-linux-arm-gnueabihf@1.12.3':
++ '@swc/core-linux-arm-gnueabihf@1.12.4':
optional: true
- '@swc/core-linux-arm64-gnu@1.11.12':
- '@swc/core-linux-arm64-gnu@1.12.3':
++ '@swc/core-linux-arm64-gnu@1.12.4':
optional: true
- '@swc/core-linux-arm64-musl@1.11.12':
- '@swc/core-linux-arm64-musl@1.12.3':
++ '@swc/core-linux-arm64-musl@1.12.4':
optional: true
- '@swc/core-linux-x64-gnu@1.11.12':
- '@swc/core-linux-x64-gnu@1.12.3':
++ '@swc/core-linux-x64-gnu@1.12.4':
optional: true
- '@swc/core-linux-x64-musl@1.11.12':
- '@swc/core-linux-x64-musl@1.12.3':
++ '@swc/core-linux-x64-musl@1.12.4':
optional: true
- '@swc/core-win32-arm64-msvc@1.11.12':
- '@swc/core-win32-arm64-msvc@1.12.3':
++ '@swc/core-win32-arm64-msvc@1.12.4':
optional: true
- '@swc/core-win32-ia32-msvc@1.11.12':
- '@swc/core-win32-ia32-msvc@1.12.3':
++ '@swc/core-win32-ia32-msvc@1.12.4':
optional: true
- '@swc/core-win32-x64-msvc@1.11.12':
- '@swc/core-win32-x64-msvc@1.12.3':
++ '@swc/core-win32-x64-msvc@1.12.4':
optional: true
- '@swc/core@1.11.12':
- '@swc/core@1.12.3':
++ '@swc/core@1.12.4':
dependencies:
'@swc/counter': 0.1.3
- '@swc/types': 0.1.19
+ '@swc/types': 0.1.23
optionalDependencies:
- '@swc/core-darwin-arm64': 1.11.12
- '@swc/core-darwin-x64': 1.11.12
- '@swc/core-linux-arm-gnueabihf': 1.11.12
- '@swc/core-linux-arm64-gnu': 1.11.12
- '@swc/core-linux-arm64-musl': 1.11.12
- '@swc/core-linux-x64-gnu': 1.11.12
- '@swc/core-linux-x64-musl': 1.11.12
- '@swc/core-win32-arm64-msvc': 1.11.12
- '@swc/core-win32-ia32-msvc': 1.11.12
- '@swc/core-win32-x64-msvc': 1.11.12
- '@swc/core-darwin-arm64': 1.12.3
- '@swc/core-darwin-x64': 1.12.3
- '@swc/core-linux-arm-gnueabihf': 1.12.3
- '@swc/core-linux-arm64-gnu': 1.12.3
- '@swc/core-linux-arm64-musl': 1.12.3
- '@swc/core-linux-x64-gnu': 1.12.3
- '@swc/core-linux-x64-musl': 1.12.3
- '@swc/core-win32-arm64-msvc': 1.12.3
- '@swc/core-win32-ia32-msvc': 1.12.3
- '@swc/core-win32-x64-msvc': 1.12.3
++ '@swc/core-darwin-arm64': 1.12.4
++ '@swc/core-darwin-x64': 1.12.4
++ '@swc/core-linux-arm-gnueabihf': 1.12.4
++ '@swc/core-linux-arm64-gnu': 1.12.4
++ '@swc/core-linux-arm64-musl': 1.12.4
++ '@swc/core-linux-x64-gnu': 1.12.4
++ '@swc/core-linux-x64-musl': 1.12.4
++ '@swc/core-win32-arm64-msvc': 1.12.4
++ '@swc/core-win32-ia32-msvc': 1.12.4
++ '@swc/core-win32-x64-msvc': 1.12.4
'@swc/counter@0.1.3': {}