From f3f4ce57415be0a3e1cd3be76e35cc1e5b62272b Mon Sep 17 00:00:00 2001 From: Rich Harris Date: Wed, 10 Jul 2024 12:12:07 -0700 Subject: [PATCH] feat: simplify HMR logic (#12391) --- .changeset/polite-tomatoes-trade.md | 5 +++ .../3-transform/client/transform-client.js | 39 +++++-------------- .../hmr/_expected/client/index.svelte.js | 12 ++---- 3 files changed, 17 insertions(+), 39 deletions(-) create mode 100644 .changeset/polite-tomatoes-trade.md diff --git a/.changeset/polite-tomatoes-trade.md b/.changeset/polite-tomatoes-trade.md new file mode 100644 index 0000000000..3164e9a231 --- /dev/null +++ b/.changeset/polite-tomatoes-trade.md @@ -0,0 +1,5 @@ +--- +'svelte': patch +--- + +feat: simpler HMR logic 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 6685f75cf3..9b23998349 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 @@ -437,36 +437,15 @@ export function client_component(source, analysis, options) { ); } - body.push( - component, - b.if( - b.id('import.meta.hot'), - b.block([ - b.const(b.id('s'), b.call('$.source', b.id(analysis.name))), - b.const(b.id('filename'), b.member(b.id(analysis.name), b.id('filename'))), - b.const(b.id('accept'), b.arrow([b.id('module')], b.block(accept_fn_body))), - b.stmt(b.assignment('=', b.id(analysis.name), b.call('$.hmr', b.id('s')))), - b.stmt( - b.assignment('=', b.member(b.id(analysis.name), b.id('filename')), b.id('filename')) - ), - b.if( - b.id('import.meta.hot.acceptExports'), - b.block([ - b.stmt( - b.call( - 'import.meta.hot.acceptExports', - b.array([b.literal('default')]), - b.id('accept') - ) - ) - ]), - b.block([b.stmt(b.call('import.meta.hot.accept', b.id('accept')))]) - ) - ]) - ), - - b.export_default(b.id(analysis.name)) - ); + const hmr = b.block([ + b.const(b.id('s'), b.call('$.source', b.id(analysis.name))), + b.const(b.id('filename'), b.member(b.id(analysis.name), b.id('filename'))), + b.stmt(b.assignment('=', b.id(analysis.name), b.call('$.hmr', b.id('s')))), + b.stmt(b.assignment('=', b.member(b.id(analysis.name), b.id('filename')), b.id('filename'))), + b.stmt(b.call('import.meta.hot.accept', b.arrow([b.id('module')], b.block(accept_fn_body)))) + ]); + + body.push(component, b.if(b.id('import.meta.hot'), hmr), b.export_default(b.id(analysis.name))); } else { body.push(b.export_default(component)); } diff --git a/packages/svelte/tests/snapshot/samples/hmr/_expected/client/index.svelte.js b/packages/svelte/tests/snapshot/samples/hmr/_expected/client/index.svelte.js index 5446bb3355..18e1185e8f 100644 --- a/packages/svelte/tests/snapshot/samples/hmr/_expected/client/index.svelte.js +++ b/packages/svelte/tests/snapshot/samples/hmr/_expected/client/index.svelte.js @@ -13,18 +13,12 @@ if (import.meta.hot) { const s = $.source(Hmr); const filename = Hmr.filename; - const accept = (module) => { - $.set(s, module.default); - }; - Hmr = $.hmr(s); Hmr.filename = filename; - if (import.meta.hot.acceptExports) { - import.meta.hot.acceptExports(["default"], accept); - } else { - import.meta.hot.accept(accept); - } + import.meta.hot.accept((module) => { + $.set(s, module.default); + }); } export default Hmr; \ No newline at end of file