mirror of https://github.com/sveltejs/svelte
commit
d7e01b7634
@ -0,0 +1,5 @@
|
|||||||
|
---
|
||||||
|
'svelte': patch
|
||||||
|
---
|
||||||
|
|
||||||
|
fix: handle parens in template expressions more robustly
|
||||||
@ -0,0 +1,5 @@
|
|||||||
|
---
|
||||||
|
'svelte': patch
|
||||||
|
---
|
||||||
|
|
||||||
|
fix: correct types for `ontoggle` on `<details>` elements
|
||||||
@ -0,0 +1,5 @@
|
|||||||
|
---
|
||||||
|
'svelte': patch
|
||||||
|
---
|
||||||
|
|
||||||
|
fix: unskip branches of earlier batches after commit
|
||||||
@ -0,0 +1,5 @@
|
|||||||
|
---
|
||||||
|
'svelte': patch
|
||||||
|
---
|
||||||
|
|
||||||
|
fix: skip rebase logic in non-async mode
|
||||||
@ -0,0 +1,5 @@
|
|||||||
|
---
|
||||||
|
'svelte': patch
|
||||||
|
---
|
||||||
|
|
||||||
|
fix: don't reset status of uninitialized deriveds
|
||||||
@ -0,0 +1 @@
|
|||||||
|
{(/**/ 42)}
|
||||||
@ -0,0 +1,61 @@
|
|||||||
|
{
|
||||||
|
"css": null,
|
||||||
|
"js": [],
|
||||||
|
"start": 0,
|
||||||
|
"end": 11,
|
||||||
|
"type": "Root",
|
||||||
|
"fragment": {
|
||||||
|
"type": "Fragment",
|
||||||
|
"nodes": [
|
||||||
|
{
|
||||||
|
"type": "ExpressionTag",
|
||||||
|
"start": 0,
|
||||||
|
"end": 11,
|
||||||
|
"expression": {
|
||||||
|
"type": "Literal",
|
||||||
|
"start": 7,
|
||||||
|
"end": 9,
|
||||||
|
"loc": {
|
||||||
|
"start": {
|
||||||
|
"line": 1,
|
||||||
|
"column": 7
|
||||||
|
},
|
||||||
|
"end": {
|
||||||
|
"line": 1,
|
||||||
|
"column": 9
|
||||||
|
}
|
||||||
|
},
|
||||||
|
"value": 42,
|
||||||
|
"raw": "42",
|
||||||
|
"leadingComments": [
|
||||||
|
{
|
||||||
|
"type": "Block",
|
||||||
|
"value": "",
|
||||||
|
"start": 2,
|
||||||
|
"end": 6
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"options": null,
|
||||||
|
"comments": [
|
||||||
|
{
|
||||||
|
"type": "Block",
|
||||||
|
"value": "",
|
||||||
|
"start": 2,
|
||||||
|
"end": 6,
|
||||||
|
"loc": {
|
||||||
|
"start": {
|
||||||
|
"line": 1,
|
||||||
|
"column": 2
|
||||||
|
},
|
||||||
|
"end": {
|
||||||
|
"line": 1,
|
||||||
|
"column": 6
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
||||||
@ -0,0 +1,8 @@
|
|||||||
|
<svelte:options customElement={{
|
||||||
|
tag: "my-inner",
|
||||||
|
props: { value: { reflect: true }}
|
||||||
|
}} />
|
||||||
|
<script>
|
||||||
|
export let value;
|
||||||
|
</script>
|
||||||
|
{value}
|
||||||
@ -0,0 +1,20 @@
|
|||||||
|
import { tick } from 'svelte';
|
||||||
|
import { test } from '../../test';
|
||||||
|
|
||||||
|
export default test({
|
||||||
|
async test({ assert, target }) {
|
||||||
|
await tick();
|
||||||
|
const [btn] = target.querySelectorAll('button');
|
||||||
|
|
||||||
|
btn.click();
|
||||||
|
await tick();
|
||||||
|
assert.htmlEqual(
|
||||||
|
target.innerHTML,
|
||||||
|
`
|
||||||
|
<button>inc</button>
|
||||||
|
<my-inner value="2"></my-inner>
|
||||||
|
2
|
||||||
|
`
|
||||||
|
);
|
||||||
|
}
|
||||||
|
});
|
||||||
@ -0,0 +1,12 @@
|
|||||||
|
<script>
|
||||||
|
import "./Inner.svelte"
|
||||||
|
let count = 1;
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<button on:click={() => count++}>inc</button>
|
||||||
|
<!-- updating value prop will cause a flushSync -->
|
||||||
|
<my-inner value={count}></my-inner>
|
||||||
|
<!-- updating count will cause an internal_set -->
|
||||||
|
{#each [count] as row}
|
||||||
|
{row}
|
||||||
|
{/each}
|
||||||
@ -0,0 +1,20 @@
|
|||||||
|
import { tick } from 'svelte';
|
||||||
|
import { test } from '../../test';
|
||||||
|
|
||||||
|
export default test({
|
||||||
|
async test({ assert, target }) {
|
||||||
|
const [, toggle] = target.querySelectorAll('button');
|
||||||
|
|
||||||
|
toggle?.click();
|
||||||
|
await tick();
|
||||||
|
assert.htmlEqual(target.innerHTML, `<button>0</button> <button>toggle</button> 0`);
|
||||||
|
|
||||||
|
toggle?.click();
|
||||||
|
await tick();
|
||||||
|
assert.htmlEqual(target.innerHTML, `<button>0</button> <button>toggle</button>`);
|
||||||
|
|
||||||
|
toggle?.click();
|
||||||
|
await tick();
|
||||||
|
assert.htmlEqual(target.innerHTML, `<button>0</button> <button>toggle</button> 0`);
|
||||||
|
}
|
||||||
|
});
|
||||||
@ -0,0 +1,13 @@
|
|||||||
|
<script>
|
||||||
|
import { fork } from 'svelte';
|
||||||
|
let show = $state(false);
|
||||||
|
let count = $state(0);
|
||||||
|
let d_count = $derived(count);
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<button onclick={() => count += 1}>{count}</button> <!-- just here so count is compiled as a source -->
|
||||||
|
<button onclick={() => fork(() => show = !show).commit()}>toggle</button>
|
||||||
|
|
||||||
|
{#if show}
|
||||||
|
{d_count}
|
||||||
|
{/if}
|
||||||
@ -0,0 +1,30 @@
|
|||||||
|
import { tick } from 'svelte';
|
||||||
|
import { test } from '../../test';
|
||||||
|
|
||||||
|
export default test({
|
||||||
|
async test({ assert, target }) {
|
||||||
|
await tick();
|
||||||
|
const [load, resolve] = target.querySelectorAll('button');
|
||||||
|
|
||||||
|
load.click();
|
||||||
|
await tick();
|
||||||
|
assert.htmlEqual(
|
||||||
|
target.innerHTML,
|
||||||
|
`
|
||||||
|
<button>load</button>
|
||||||
|
<button>resolve</button>
|
||||||
|
`
|
||||||
|
);
|
||||||
|
|
||||||
|
resolve.click();
|
||||||
|
await tick();
|
||||||
|
assert.htmlEqual(
|
||||||
|
target.innerHTML,
|
||||||
|
`
|
||||||
|
search search search search
|
||||||
|
<button>load</button>
|
||||||
|
<button>resolve</button>
|
||||||
|
`
|
||||||
|
);
|
||||||
|
}
|
||||||
|
});
|
||||||
@ -0,0 +1,40 @@
|
|||||||
|
<script>
|
||||||
|
let query = $state('');
|
||||||
|
// changing the query results in a new promise with loading initialized to true
|
||||||
|
const promise = $derived(push(query));
|
||||||
|
|
||||||
|
const resolvers = [];
|
||||||
|
function push(value) {
|
||||||
|
if (!value) return Promise.resolve(value);
|
||||||
|
|
||||||
|
const { promise, resolve } = Promise.withResolvers();
|
||||||
|
|
||||||
|
resolvers.push(() => {
|
||||||
|
// before resolving, set loading to false - this makes it run in a different batch
|
||||||
|
loading = false;
|
||||||
|
resolve(value);
|
||||||
|
});
|
||||||
|
|
||||||
|
let loading = $state(true);
|
||||||
|
Object.defineProperty(promise, 'loading', {
|
||||||
|
get() {
|
||||||
|
return loading;
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
|
return promise
|
||||||
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
{query} {await promise}
|
||||||
|
|
||||||
|
{#if !promise.loading}
|
||||||
|
{query}
|
||||||
|
{/if}
|
||||||
|
|
||||||
|
{#if !promise.loading}
|
||||||
|
{await query}
|
||||||
|
{/if}
|
||||||
|
|
||||||
|
<button onclick={() => query = 'search'}>load</button>
|
||||||
|
<button onclick={() => resolvers.shift()?.()}>resolve</button>
|
||||||
Loading…
Reference in new issue