diff --git a/.changeset/clever-turtles-wink.md b/.changeset/clever-turtles-wink.md
deleted file mode 100644
index 6ff21f4d91..0000000000
--- a/.changeset/clever-turtles-wink.md
+++ /dev/null
@@ -1,5 +0,0 @@
----
-'svelte': patch
----
-
-chore: simplify batch logic
diff --git a/.changeset/rude-frogs-train.md b/.changeset/rude-frogs-train.md
new file mode 100644
index 0000000000..06da5dcc1e
--- /dev/null
+++ b/.changeset/rude-frogs-train.md
@@ -0,0 +1,5 @@
+---
+'svelte': patch
+---
+
+fix: track the user's getter of `bind:this`
diff --git a/.changeset/spicy-rabbits-drive.md b/.changeset/spicy-rabbits-drive.md
new file mode 100644
index 0000000000..01834294e1
--- /dev/null
+++ b/.changeset/spicy-rabbits-drive.md
@@ -0,0 +1,5 @@
+---
+'svelte': patch
+---
+
+fix: generate correct SSR code for the case where `pending` is an attribute
diff --git a/.changeset/wicked-goats-begin.md b/.changeset/wicked-goats-begin.md
new file mode 100644
index 0000000000..04a22aa310
--- /dev/null
+++ b/.changeset/wicked-goats-begin.md
@@ -0,0 +1,5 @@
+---
+'svelte': patch
+---
+
+fix: generate correct code for `each` blocks with async body
diff --git a/.github/workflows/ecosystem-ci-trigger.yml b/.github/workflows/ecosystem-ci-trigger.yml
index 7753b606e1..8a6d1bf345 100644
--- a/.github/workflows/ecosystem-ci-trigger.yml
+++ b/.github/workflows/ecosystem-ci-trigger.yml
@@ -4,19 +4,20 @@ on:
issue_comment:
types: [created]
+permissions: {}
+
jobs:
trigger:
runs-on: ubuntu-latest
if: github.repository == 'sveltejs/svelte' && github.event.issue.pull_request && startsWith(github.event.comment.body, '/ecosystem-ci run')
permissions:
- issues: write # to add / delete reactions
+ issues: write # to add / delete reactions, post comments
pull-requests: write # to read PR data, and to add labels
actions: read # to check workflow status
contents: read # to clone the repo
steps:
- - name: monitor action permissions
- - name: check user authorization # user needs triage permission
- uses: actions/github-script@v7
+ - name: Check User Permissions
+ uses: actions/github-script@v8
id: check-permissions
with:
script: |
@@ -55,7 +56,7 @@ jobs:
}
- name: Get PR Data
- uses: actions/github-script@v7
+ uses: actions/github-script@v8
id: get-pr-data
with:
script: |
@@ -65,6 +66,37 @@ jobs:
repo: context.repo.repo,
pull_number: context.issue.number
})
+
+ const commentCreatedAt = new Date(context.payload.comment.created_at)
+ const commitPushedAt = new Date(pr.head.repo.pushed_at)
+
+ console.log(`Comment created at: ${commentCreatedAt.toISOString()}`)
+ console.log(`PR last pushed at: ${commitPushedAt.toISOString()}`)
+
+ // Check if any commits were pushed after the comment was created
+ if (commitPushedAt > commentCreatedAt) {
+ const errorMsg = [
+ '⚠️ Security warning: PR was updated after the trigger command was posted.',
+ '',
+ `Comment posted at: ${commentCreatedAt.toISOString()}`,
+ `PR last pushed at: ${commitPushedAt.toISOString()}`,
+ '',
+ 'This could indicate an attempt to inject code after approval.',
+ 'Please review the latest changes and re-run /ecosystem-ci run if they are acceptable.'
+ ].join('\n')
+
+ core.setFailed(errorMsg)
+
+ await github.rest.issues.createComment({
+ owner: context.repo.owner,
+ repo: context.repo.repo,
+ issue_number: context.issue.number,
+ body: errorMsg
+ })
+
+ throw new Error('PR was pushed to after comment was created')
+ }
+
return {
num: context.issue.number,
branchName: pr.head.ref,
@@ -83,15 +115,16 @@ jobs:
svelte-ecosystem-ci
- name: Trigger Downstream Workflow
- uses: actions/github-script@v7
+ uses: actions/github-script@v8
id: trigger
env:
COMMENT: ${{ github.event.comment.body }}
+ PR_DATA: ${{ steps.get-pr-data.outputs.result }}
with:
github-token: ${{ steps.generate-token.outputs.token }}
script: |
const comment = process.env.COMMENT.trim()
- const prData = ${{ steps.get-pr-data.outputs.result }}
+ const prData = JSON.parse(process.env.PR_DATA)
const suite = comment.split('\n')[0].replace(/^\/ecosystem-ci run/, '').trim()
diff --git a/.github/workflows/pkg.pr.new.yml b/.github/workflows/pkg.pr.new.yml
index b1ba217e5a..49303f1684 100644
--- a/.github/workflows/pkg.pr.new.yml
+++ b/.github/workflows/pkg.pr.new.yml
@@ -1,6 +1,8 @@
name: Publish Any Commit
on: [push, pull_request]
+permissions: {}
+
jobs:
build:
permissions: {}
diff --git a/documentation/docs/01-introduction/02-getting-started.md b/documentation/docs/01-introduction/02-getting-started.md
index e97a46ad34..2ad22c8469 100644
--- a/documentation/docs/01-introduction/02-getting-started.md
+++ b/documentation/docs/01-introduction/02-getting-started.md
@@ -15,11 +15,11 @@ Don't worry if you don't know Svelte yet! You can ignore all the nice features S
## Alternatives to SvelteKit
-You can also use Svelte directly with Vite by running `npm create vite@latest` and selecting the `svelte` option. With this, `npm run build` will generate HTML, JS, and CSS files inside the `dist` directory using [vite-plugin-svelte](https://github.com/sveltejs/vite-plugin-svelte). In most cases, you will probably need to [choose a routing library](faq#Is-there-a-router) as well.
+You can also use Svelte directly with Vite by running `npm create vite@latest` and selecting the `svelte` option. With this, `npm run build` will generate HTML, JS, and CSS files inside the `dist` directory using [vite-plugin-svelte](https://github.com/sveltejs/vite-plugin-svelte). In most cases, you will probably need to [choose a routing library](/packages#routing) as well.
>[!NOTE] Vite is often used in standalone mode to build [single page apps (SPAs)](../kit/glossary#SPA), which you can also [build with SvelteKit](../kit/single-page-apps).
-There are also plugins for [Rollup](https://github.com/sveltejs/rollup-plugin-svelte), [Webpack](https://github.com/sveltejs/svelte-loader) [and a few others](https://sveltesociety.dev/packages?category=build-plugins), but we recommend Vite.
+There are also [plugins for other bundlers](/packages#bundler-plugins), but we recommend Vite.
## Editor tooling
diff --git a/documentation/docs/03-template-syntax/12-bind.md b/documentation/docs/03-template-syntax/12-bind.md
index de57815687..be84969b87 100644
--- a/documentation/docs/03-template-syntax/12-bind.md
+++ b/documentation/docs/03-template-syntax/12-bind.md
@@ -95,7 +95,7 @@ Since 5.6.0, if an `` has a `defaultValue` and is part of a form, it will
## ``
-Checkbox and radio inputs can be bound with `bind:checked`:
+Checkbox inputs can be bound with `bind:checked`:
```svelte