mirror of
https://github.com/nuxt/nuxt.git
synced 2024-11-22 05:35:13 +00:00
fix(nuxt): exclude data-v
attrs from server component props (#23095)
This commit is contained in:
parent
dfdebf2919
commit
3f9fa008d9
@ -7,11 +7,14 @@ export const createServerComponent = (name: string) => {
|
|||||||
inheritAttrs: false,
|
inheritAttrs: false,
|
||||||
props: { lazy: Boolean },
|
props: { lazy: Boolean },
|
||||||
setup (props, { attrs, slots }) {
|
setup (props, { attrs, slots }) {
|
||||||
return () => h(NuxtIsland, {
|
return () => {
|
||||||
name,
|
return h(NuxtIsland, {
|
||||||
lazy: props.lazy,
|
name,
|
||||||
props: attrs
|
lazy: props.lazy,
|
||||||
}, slots)
|
// #23051 - remove data-v attributes
|
||||||
|
props: Object.fromEntries(Object.entries(attrs).filter(([key]) => !key.startsWith('data-v-')))
|
||||||
|
}, slots)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
})
|
})
|
||||||
}
|
}
|
||||||
|
41
test/nuxt/nuxt-island.test.ts
Normal file
41
test/nuxt/nuxt-island.test.ts
Normal file
@ -0,0 +1,41 @@
|
|||||||
|
import { describe, expect, it, vi } from 'vitest'
|
||||||
|
import { h } from 'vue'
|
||||||
|
import { createServerComponent } from '../../packages/nuxt/src/components/runtime/server-component'
|
||||||
|
|
||||||
|
vi.mock('vue', async (original) => {
|
||||||
|
const vue = await original<typeof import('vue')>()
|
||||||
|
return {
|
||||||
|
...vue,
|
||||||
|
h: vi.fn(vue.h)
|
||||||
|
}
|
||||||
|
})
|
||||||
|
|
||||||
|
describe('runtime server component', () => {
|
||||||
|
it('expect no data-v- attrbutes #23051', () => {
|
||||||
|
// @ts-expect-error mock
|
||||||
|
vi.mocked(h).mockImplementation(() => null)
|
||||||
|
|
||||||
|
// @ts-expect-error test setup
|
||||||
|
createServerComponent('DummyName').setup!({
|
||||||
|
lazy: false
|
||||||
|
}, {
|
||||||
|
attrs: {
|
||||||
|
'data-v-123': '',
|
||||||
|
test: 1
|
||||||
|
},
|
||||||
|
slots: {},
|
||||||
|
emit: vi.fn(),
|
||||||
|
expose: vi.fn()
|
||||||
|
})()
|
||||||
|
|
||||||
|
expect(h).toHaveBeenCalledOnce()
|
||||||
|
if (!vi.mocked(h).mock.lastCall) { throw new Error('no last call') }
|
||||||
|
expect(vi.mocked(h).mock.lastCall![1]?.props).toBeTypeOf('object')
|
||||||
|
expect(Object.keys(vi.mocked(h).mock.lastCall![1]?.props)).not.toContain('data-v-123')
|
||||||
|
expect(vi.mocked(h).mock.lastCall![1]?.props).toMatchInlineSnapshot(`
|
||||||
|
{
|
||||||
|
"test": 1,
|
||||||
|
}
|
||||||
|
`)
|
||||||
|
})
|
||||||
|
})
|
Loading…
Reference in New Issue
Block a user