mirror of https://github.com/sveltejs/svelte
commit
34d3d7735c
@ -0,0 +1,5 @@
|
||||
---
|
||||
'svelte': patch
|
||||
---
|
||||
|
||||
fix: ensure proper HMR updates for dynamic components
|
||||
@ -0,0 +1,5 @@
|
||||
---
|
||||
'svelte': patch
|
||||
---
|
||||
|
||||
fix: defer error boundary rendering in forks
|
||||
@ -0,0 +1,33 @@
|
||||
import { tick } from 'svelte';
|
||||
import { test } from '../../test';
|
||||
|
||||
export default test({
|
||||
async test({ assert, target }) {
|
||||
const [show, commit] = target.querySelectorAll('button');
|
||||
|
||||
show.click();
|
||||
await tick();
|
||||
|
||||
assert.htmlEqual(
|
||||
target.innerHTML,
|
||||
`
|
||||
<button>show</button>
|
||||
<button>commit</button>
|
||||
<button>discard</button>
|
||||
`
|
||||
);
|
||||
|
||||
commit.click();
|
||||
await tick();
|
||||
|
||||
assert.htmlEqual(
|
||||
target.innerHTML,
|
||||
`
|
||||
<button>show</button>
|
||||
<button>commit</button>
|
||||
<button>discard</button>
|
||||
failed
|
||||
`
|
||||
);
|
||||
}
|
||||
});
|
||||
@ -0,0 +1,18 @@
|
||||
<script>
|
||||
import { fork } from 'svelte';
|
||||
let show = $state(false);
|
||||
let f;
|
||||
</script>
|
||||
|
||||
<button onclick={() => f = fork(() => show = true)}>show</button>
|
||||
<button onclick={() => f.commit()}>commit</button>
|
||||
<button onclick={() => f.discard()}>discard</button>
|
||||
|
||||
<svelte:boundary>
|
||||
{#if show}
|
||||
{await Promise.reject('boom')}
|
||||
{/if}
|
||||
{#snippet failed()}
|
||||
failed
|
||||
{/snippet}
|
||||
</svelte:boundary>
|
||||
@ -0,0 +1 @@
|
||||
component
|
||||
@ -0,0 +1,30 @@
|
||||
import { flushSync } from 'svelte';
|
||||
import { HMR } from 'svelte/internal/client';
|
||||
import { test } from '../../test';
|
||||
|
||||
export default test({
|
||||
compileOptions: {
|
||||
dev: true,
|
||||
hmr: true
|
||||
},
|
||||
|
||||
async test({ assert, target }) {
|
||||
const [btn] = target.querySelectorAll('button');
|
||||
|
||||
btn.click();
|
||||
flushSync();
|
||||
assert.htmlEqual(target.innerHTML, `<button>show</button> component`);
|
||||
|
||||
// Simulate HMR swap on the child component.
|
||||
const hidden = './_output/client/Component' + '.svelte.js';
|
||||
const mod = await import(/* vite-ignore */ hidden);
|
||||
const hmr_data = mod.default[HMR];
|
||||
const fake_incoming = {
|
||||
// Fake a new component, else HMR source's equality check will ignore the update
|
||||
[HMR]: { fn: /** @param {any} args */ (...args) => hmr_data.fn(...args), current: null }
|
||||
};
|
||||
hmr_data.update(fake_incoming);
|
||||
flushSync();
|
||||
assert.htmlEqual(target.innerHTML, `<button>show</button> component`);
|
||||
}
|
||||
});
|
||||
@ -0,0 +1,9 @@
|
||||
<script>
|
||||
import Component from "./Component.svelte";
|
||||
|
||||
let C = $state(null);
|
||||
</script>
|
||||
|
||||
<button onclick={() => C = Component}>show</button>
|
||||
|
||||
<C />
|
||||
File diff suppressed because it is too large
Load Diff
Loading…
Reference in new issue