diff --git a/.changeset/swift-queens-begin.md b/.changeset/swift-queens-begin.md new file mode 100644 index 0000000000..01413c71d4 --- /dev/null +++ b/.changeset/swift-queens-begin.md @@ -0,0 +1,5 @@ +--- +'svelte': patch +--- + +feat: support HMR with custom elements diff --git a/packages/svelte/src/compiler/phases/3-transform/client/transform-client.js b/packages/svelte/src/compiler/phases/3-transform/client/transform-client.js index f9ae37ba40..c7ec37a326 100644 --- a/packages/svelte/src/compiler/phases/3-transform/client/transform-client.js +++ b/packages/svelte/src/compiler/phases/3-transform/client/transform-client.js @@ -593,7 +593,15 @@ export function client_component(analysis, options) { // If a tag name is provided, call `customElements.define`, otherwise leave to the user if (typeof ce !== 'boolean' && typeof ce.tag === 'string') { - body.push(b.stmt(b.call('customElements.define', b.literal(ce.tag), create_ce))); + const define = b.stmt(b.call('customElements.define', b.literal(ce.tag), create_ce)); + + if (options.hmr) { + body.push( + b.if(b.binary('==', b.call('customElements.get', b.literal(ce.tag)), b.null), define) + ); + } else { + body.push(define); + } } else { body.push(b.stmt(create_ce)); }