mirror of https://github.com/sveltejs/svelte
selectedcontent-oninput-interfere
custom-condition
add-custom-renderer-flag
fix-interleaving
svelte-custom-renderer
main
dependabot/npm_and_yarn/immutable-4.3.9
chore-changelog-github
entangle-batches-2
oxfmt2
incremental-batches
simplify-boundary-error-handling
incremental-batches-perf-attempt
fix-18465
effect-tree-crosstalk-fix
portals
fix/preserve-css-comments-when-printing-an-ast
dependabot/npm_and_yarn/vite-7.3.5
dedupe-hydratables
remove-invariant-2
rolldown
remove-was-marked
svelte-custom-renderer-single-type-argument
elliott/test-target-again
elliott/test-target
test-annoying-store-behaviour
entangle-batches
batch-branches-fix
elliott/dom-clobbering-fix
remove-invariant
tweak-parser
fragmentless-branches
incremental-batches-was-marked
fork-never-write-to-v
agent-driven-perf-investigation
paoloricciuti/issue-17720-print-parse-code-produces-broken-code-ae5d2b
const-await-blockers-fix
async-svelte-map
async-svelte-set
async-blocking-and-merging
async-derived-coordinate-batches
config
runes-mode
stale-batch
always-populate-batch-values
async-svelte-set-alternative
eager-bind-this-teardown
freeze-destroyed-consts
eager-effect-rework
unified-async
best-practices-doc
version-packages-ecosystem-ci
defer-effects-in-pending-boundary
allow-recursive-derived
effect-active
ssr-error-boundary-class
oxlint
bindable-not-updated
hydrate-await-html
object-blockers
beforemount-callback
better-blockers
dependencies-set
elliott/break-out-css-parser
customizable-select-skip-hydration
gh-17393
clear-batch-between-runs
partial-components
allow-state-as-derived-init
hydratable-thenable
dedupe-stack-stuff
fork-methods
elliott/resources
async-each-fix
resource-type
remove-unowned-check
derived-reactivity-loss-fix-alt
gh-17012
state-eager-derived-block
customizable-select
parallelize-async-work
Rich-Harris-patch-1
boundary-batch-first-run
elliott/boundary-issues
elliott/effect-pending-correct-boundary
developer-guide
boundary-batch-nullpointer-fix-alt
legacy-api-hmr-bug
fix-15337
async-fixes-2
1000-reading-derived-effects
binding-fix-2
derived-reactions-maybe-dirty-marked
state-onchange
gh-16365
more-efficient-effect-schedule
source-to-state-in-class-belt-and-braces
warn-read-just-created-state
using-dispose
using
elliott/13891
thunkify-deriveds-on-server
fix-each-legacy-leak
same-fn-attachments
destructure-non-iterators
svelte-4
warn-attachments-legacy-member-access
attach-runes-mode
flush-sync
feat/devtool
binding-evt-without-context
state-onchange-roots
onframe
custom-render-shim-dom
elliott/create-reactive-function
host-docs
invalid-html-structure-error
svelte-element-element
read-old-values-in-teardown
props-id-hydration-markers
fix-props-wrong-value-onunmount
props-id-anywhere
async-changeset
async-fork
aa-coordination-resource
async-abort-signal
aa-coordination
aa
aa-fork
const-rune-usage-error
aaa
attachments-2
tracked
deps-tweak
dont-hoist-snippet-binding-group
ownership-function-bindings
docs-derived-memoized
event-delegation-fixes
fix-inspect-trace
fix-untrack-expose-unsafe
fix-pre-backslash-n
svelte-html
yield
opaque-rune
title-removal-fix
reactivity-boundary-docs
broken-slot-pruning
legacy-conditional-template
hydratable-flag
class-directive-enhancements
gh-14204
ts-strip-fix
migrate-conflict-runes
warning-message
update-store-docs
revert-13651-compile-warning
disclaimer
transition-out-effect-tracking
cleanup-non-render-effects-in-blocks
annotate-notes
migrate-svelte-component
css-migrate-blank
fix-import-run-space
gh-13270
gh-13256
table-td-autoopen
better-docs-for-css-injected
revert-13158-valid-ssr
derived-by-current-value
custom-formatter
gh-12624
omit-trailing-sibling-calls
gh-12084
state-link-fix
readonly-props
gh-12896
migrate-member-assignment
animation-params
feat/support-modern-ast-flag-on-repl
nolyfill
svelte-5-docs-proposal-wip
fix-memory-leak-
chore/bump-deps
snippet-work-cont
effect-active-derived-allow-unowned
runes-in-constructor
some-cleanup
fix-playground
better-snapshot
object-freeze-fix
context-ownership
props-bindable
effect-docs-2
blockless
remove-readonly-check
ttf-fix
remove-ttf-hack
derived-consumer-fix
compile-return-ast
rm-bytes
hoist-unmodified-var
puru/try-jsdelivr
benmccann-patch-2
elliott/add-variadic-snippets
proxied-state-set
dynamic-component-types
proxied-state-each-blocks
baseballyama-docs/string-event
tidy-up-analysis
svelte-4-base
fix-symlink
quicker-redirects
introducing-runes
versioned-docs
raw-hydration-mismatch
fix-stale-await-ctx
parse-regexp-no-paren
fix-dyn-component-test
ce-tick
feat/orama
parser-let-destructure
version-3
sites-examples
gh-3780
v2
svelte@5.56.8
svelte@5.56.7
svelte@5.56.6
svelte@5.56.5
svelte@5.56.4
svelte@5.56.3
svelte@5.56.2
svelte@5.56.1
svelte@5.56.0
svelte@5.55.10
svelte@5.55.9
svelte@5.55.8
svelte@5.55.7
svelte@5.55.6
svelte@5.55.5
svelte@5.55.4
svelte@5.55.3
svelte@5.55.2
svelte@5.55.1
svelte@5.55.0
svelte@5.54.1
svelte@5.54.0
svelte@5.53.13
svelte@5.53.12
svelte@5.53.11
svelte@5.53.10
svelte@5.53.9
svelte@5.53.8
svelte@5.53.7
svelte@5.53.6
svelte@5.53.5
svelte@5.53.4
svelte@5.53.3
svelte@5.53.2
svelte@5.53.1
svelte@5.53.0
svelte@5.52.0
svelte@5.51.5
svelte@5.51.4
svelte@5.51.3
svelte@5.51.2
svelte@5.51.1
svelte@5.51.0
svelte@5.50.3
svelte@5.50.2
svelte@5.50.1
svelte@5.50.0
svelte@5.49.2
svelte@5.49.1
svelte@5.49.0
svelte@5.48.5
svelte@5.48.4
svelte@5.48.3
svelte@5.48.2
svelte@5.48.1
svelte@5.48.0
svelte@5.47.1
svelte@5.47.0
svelte@5.46.4
svelte@5.46.3
svelte@5.46.1
svelte@5.46.0
svelte@5.45.10
svelte@5.45.9
svelte@5.45.8
svelte@5.45.7
svelte@5.45.6
svelte@5.45.5
svelte@5.45.4
svelte@5.45.3
svelte@5.45.2
svelte@5.45.1
svelte@5.45.0
svelte@5.44.1
svelte@5.44.0
svelte@5.43.15
svelte@5.43.14
svelte@5.43.13
svelte@5.43.12
svelte@5.43.11
svelte@5.43.10
svelte@5.43.9
svelte@5.43.8
svelte@5.43.7
svelte@5.43.6
svelte@5.43.5
svelte@5.43.4
svelte@5.43.3
svelte@5.43.2
svelte@5.43.1
svelte@5.43.0
svelte@5.42.3
svelte@5.42.2
svelte@5.42.1
svelte@5.42.0
svelte@5.41.4
svelte@5.41.3
svelte@5.41.2
svelte@5.41.1
svelte@5.41.0
svelte@5.40.2
svelte@5.40.1
svelte@5.40.0
svelte@5.39.13
svelte@5.39.12
svelte@5.39.11
svelte@5.39.10
svelte@5.39.9
svelte@5.39.8
svelte@5.39.7
svelte@5.39.6
svelte@5.39.5
svelte@5.39.4
svelte@5.39.3
svelte@5.39.2
svelte@5.39.1
svelte@5.39.0
svelte@5.38.10
svelte@5.38.9
svelte@5.38.8
svelte@5.38.7
svelte@5.38.6
svelte@5.38.5
svelte@5.38.3
svelte@5.38.2
svelte@5.38.1
svelte@5.38.0
svelte@5.37.3
svelte@5.37.2
svelte@5.37.1
svelte@5.37.0
svelte@5.36.17
svelte@5.36.16
svelte@5.36.15
svelte@5.36.14
svelte@5.36.13
svelte@5.36.12
svelte@5.36.10
svelte@5.36.9
svelte@5.36.8
svelte@5.36.7
svelte@5.36.6
svelte@5.36.5
svelte@5.36.4
svelte@5.36.3
svelte@5.36.2
svelte@5.36.1
svelte@5.36.0
svelte@5.35.7
svelte@5.35.6
svelte@5.35.5
svelte@5.35.4
svelte@5.35.3
svelte@5.35.2
svelte@5.35.1
svelte@5.35.0
svelte@5.34.9
svelte@5.34.8
svelte@5.34.7
svelte@5.34.6
svelte@5.34.5
svelte@5.34.4
svelte@5.34.3
svelte@5.34.2
svelte@5.34.1
svelte@5.34.0
svelte@5.33.19
svelte@5.33.18
svelte@5.33.17
svelte@5.33.16
svelte@5.33.15
svelte@5.33.14
svelte@5.33.13
svelte@5.33.12
svelte@5.33.11
svelte@5.33.10
svelte@5.33.9
svelte@5.33.8
svelte@5.33.7
svelte@5.33.6
svelte@5.33.5
svelte@5.33.4
svelte@5.33.3
svelte@5.33.2
svelte@5.33.1
svelte@5.33.0
svelte@5.32.2
svelte@5.32.1
svelte@4.2.20
svelte@5.32.0
svelte@5.31.1
svelte@5.31.0
svelte@5.30.2
svelte@5.30.1
svelte@5.30.0
svelte@5.29.0
svelte@5.28.7
svelte@5.28.6
svelte@5.28.5
svelte@5.28.4
svelte@5.28.3
svelte@5.28.2
svelte@5.28.1
svelte@5.28.0
svelte@5.27.3
svelte@5.27.2
svelte@5.27.1
svelte@5.27.0
svelte@5.26.3
svelte@5.26.2
svelte@5.26.1
svelte@5.26.0
svelte@5.25.12
svelte@5.25.11
svelte@5.25.10
svelte@5.25.9
svelte@5.25.8
svelte@5.25.7
svelte@5.25.6
svelte@5.25.5
svelte@5.25.4
svelte@5.25.3
svelte@5.25.2
svelte@5.25.1
svelte@5.25.0
svelte@5.24.1
svelte@5.24.0
svelte@5.23.2
svelte@5.23.1
svelte@5.23.0
svelte@5.22.6
svelte@5.22.5
svelte@5.22.4
svelte@5.22.3
svelte@5.22.2
svelte@5.22.1
svelte@5.22.0
svelte@5.21.0
svelte@5.20.5
svelte@5.20.4
svelte@5.20.3
svelte@5.20.2
svelte@5.20.1
svelte@5.20.0
svelte@5.19.10
svelte@5.19.9
svelte@5.19.8
svelte@5.19.7
svelte@5.19.6
svelte@5.19.5
svelte@5.19.4
svelte@5.19.3
svelte@5.19.2
svelte@5.19.1
svelte@5.19.0
svelte@5.18.0
svelte@5.17.5
svelte@5.17.4
svelte@5.17.3
svelte@5.17.2
svelte@5.17.1
svelte@5.17.0
svelte@5.16.6
svelte@5.16.5
svelte@5.16.4
svelte@5.16.3
svelte@5.16.2
svelte@5.16.1
svelte@5.16.0
svelte@5.15.0
svelte@5.14.6
svelte@5.14.5
svelte@5.14.4
svelte@5.14.3
svelte@5.14.2
svelte@5.14.1
svelte@5.14.0
svelte@5.13.0
svelte@5.12.0
svelte@5.11.3
svelte@5.11.2
svelte@5.11.1
svelte@5.11.0
svelte@5.10.1
svelte@5.10.0
svelte@5.9.1
svelte@5.9.0
svelte@5.8.1
svelte@5.8.0
svelte@5.7.1
svelte@5.7.0
svelte@5.6.2
svelte@5.6.1
svelte@5.6.0
svelte@5.5.4
svelte@5.5.3
svelte@5.5.2
svelte@5.5.0
svelte@5.4.0
svelte@5.3.2
svelte@5.3.1
svelte@5.3.0
svelte@5.2.12
svelte@5.2.11
svelte@5.2.10
svelte@5.2.9
svelte@5.2.8
svelte@5.2.7
svelte@5.2.6
svelte@5.2.5
svelte@5.2.4
svelte@5.2.3
svelte@5.2.2
svelte@5.2.1
svelte@5.2.0
svelte@5.1.17
svelte@5.1.16
svelte@5.1.15
svelte@5.1.14
svelte@5.1.13
svelte@5.1.12
svelte@5.1.11
svelte@5.1.10
svelte@5.1.9
svelte@5.1.8
svelte@5.1.7
svelte@5.1.6
svelte@5.1.5
svelte@5.1.4
svelte@5.1.3
svelte@5.1.2
svelte@5.1.1
svelte@5.1.0
svelte@5.0.5
svelte@5.0.4
svelte@5.0.3
svelte@5.0.2
svelte@5.0.1
svelte@5.0.0
svelte@5.0.0-next.272
svelte@5.0.0-next.271
svelte@5.0.0-next.270
svelte@5.0.0-next.269
svelte@5.0.0-next.268
svelte@5.0.0-next.267
svelte@5.0.0-next.266
svelte@5.0.0-next.265
svelte@5.0.0-next.264
svelte@5.0.0-next.263
svelte@5.0.0-next.262
svelte@5.0.0-next.260
svelte@5.0.0-next.259
svelte@5.0.0-next.258
svelte@5.0.0-next.257
svelte@5.0.0-next.256
svelte@5.0.0-next.255
svelte@5.0.0-next.254
svelte@5.0.0-next.253
svelte@5.0.0-next.252
svelte@5.0.0-next.251
svelte@5.0.0-next.250
svelte@5.0.0-next.249
svelte@5.0.0-next.248
svelte@5.0.0-next.247
svelte@5.0.0-next.246
svelte@5.0.0-next.245
svelte@5.0.0-next.244
svelte@5.0.0-next.243
svelte@5.0.0-next.242
svelte@5.0.0-next.241
svelte@5.0.0-next.240
svelte@5.0.0-next.239
svelte@5.0.0-next.238
svelte@5.0.0-next.237
svelte@5.0.0-next.236
svelte@4.2.19
svelte@5.0.0-next.235
svelte@5.0.0-next.234
svelte@5.0.0-next.233
svelte@5.0.0-next.232
svelte@5.0.0-next.231
svelte@5.0.0-next.230
svelte@5.0.0-next.229
svelte@5.0.0-next.228
svelte@5.0.0-next.227
svelte@5.0.0-next.226
svelte@5.0.0-next.225
svelte@5.0.0-next.224
svelte@5.0.0-next.223
svelte@5.0.0-next.222
svelte@5.0.0-next.221
svelte@5.0.0-next.220
svelte@5.0.0-next.219
svelte@5.0.0-next.218
svelte@5.0.0-next.217
svelte@5.0.0-next.216
svelte@5.0.0-next.215
svelte@5.0.0-next.214
svelte@5.0.0-next.213
svelte@5.0.0-next.212
svelte@5.0.0-next.211
svelte@5.0.0-next.210
svelte@5.0.0-next.208
svelte@5.0.0-next.207
svelte@5.0.0-next.206
svelte@5.0.0-next.205
svelte@5.0.0-next.204
svelte@5.0.0-next.203
svelte@5.0.0-next.202
svelte@5.0.0-next.201
svelte@5.0.0-next.200
svelte@5.0.0-next.199
svelte@5.0.0-next.198
svelte@5.0.0-next.197
svelte@5.0.0-next.196
svelte@5.0.0-next.195
svelte@5.0.0-next.194
svelte@5.0.0-next.193
svelte@5.0.0-next.192
svelte@5.0.0-next.191
svelte@5.0.0-next.190
svelte@5.0.0-next.189
svelte@5.0.0-next.188
svelte@5.0.0-next.187
svelte@5.0.0-next.186
svelte@5.0.0-next.185
svelte@5.0.0-next.184
svelte@5.0.0-next.183
svelte@5.0.0-next.182
svelte@5.0.0-next.181
svelte@5.0.0-next.180
svelte@5.0.0-next.179
svelte@5.0.0-next.178
svelte@5.0.0-next.177
svelte@5.0.0-next.176
svelte@5.0.0-next.175
svelte@5.0.0-next.174
svelte@5.0.0-next.173
svelte@5.0.0-next.172
svelte@5.0.0-next.171
svelte@5.0.0-next.170
svelte@5.0.0-next.169
svelte@5.0.0-next.168
svelte@5.0.0-next.167
svelte@5.0.0-next.166
svelte@5.0.0-next.165
svelte@5.0.0-next.164
svelte@5.0.0-next.163
svelte@5.0.0-next.160
svelte@5.0.0-next.159
svelte@5.0.0-next.158
svelte@5.0.0-next.157
svelte@5.0.0-next.155
svelte@5.0.0-next.154
svelte@5.0.0-next.153
svelte@5.0.0-next.152
svelte@5.0.0-next.151
svelte@4.2.18
svelte@5.0.0-next.150
svelte@5.0.0-next.149
svelte@5.0.0-next.148
svelte@5.0.0-next.147
svelte@5.0.0-next.144
svelte@5.0.0-next.143
svelte@5.0.0-next.142
svelte@5.0.0-next.141
svelte@5.0.0-next.140
svelte@5.0.0-next.139
svelte@5.0.0-next.138
svelte@5.0.0-next.137
svelte@5.0.0-next.136
svelte@5.0.0-next.135
svelte@5.0.0-next.134
svelte@5.0.0-next.133
svelte@5.0.0-next.132
svelte@4.2.17
svelte@5.0.0-next.131
svelte@5.0.0-next.130
svelte@5.0.0-next.129
svelte@5.0.0-next.128
svelte@5.0.0-next.127
svelte@5.0.0-next.126
svelte@5.0.0-next.125
svelte@4.2.16
svelte@5.0.0-next.123
svelte@5.0.0-next.121
svelte@5.0.0-next.120
svelte@5.0.0-next.119
svelte@5.0.0-next.118
svelte@5.0.0-next.117
svelte@5.0.0-next.116
svelte@5.0.0-next.115
svelte@5.0.0-next.114
svelte@5.0.0-next.113
svelte@5.0.0-next.112
svelte@5.0.0-next.111
svelte@5.0.0-next.110
svelte@5.0.0-next.109
svelte@5.0.0-next.108
svelte@4.2.15
svelte@5.0.0-next.107
svelte@5.0.0-next.106
svelte@5.0.0-next.105
svelte@5.0.0-next.104
svelte@5.0.0-next.103
svelte@5.0.0-next.102
svelte@4.2.14
svelte@5.0.0-next.101
svelte@5.0.0-next.100
svelte@5.0.0-next.99
svelte@5.0.0-next.98
svelte@5.0.0-next.97
svelte@4.2.13
svelte@5.0.0-next.96
svelte@5.0.0-next.95
svelte@5.0.0-next.94
svelte@5.0.0-next.93
svelte@5.0.0-next.92
svelte@5.0.0-next.91
svelte@5.0.0-next.90
svelte@5.0.0-next.89
svelte@5.0.0-next.88
svelte@5.0.0-next.87
svelte@5.0.0-next.86
svelte@5.0.0-next.85
svelte@5.0.0-next.84
svelte@5.0.0-next.83
svelte@5.0.0-next.82
svelte@5.0.0-next.81
svelte@5.0.0-next.80
svelte@5.0.0-next.79
svelte@5.0.0-next.78
svelte@5.0.0-next.77
svelte@5.0.0-next.76
svelte@5.0.0-next.75
svelte@5.0.0-next.74
svelte@5.0.0-next.73
svelte@5.0.0-next.72
svelte@5.0.0-next.71
svelte@5.0.0-next.70
svelte@5.0.0-next.69
svelte@5.0.0-next.68
svelte@5.0.0-next.67
svelte@5.0.0-next.66
svelte@4.2.12
svelte@5.0.0-next.65
svelte@5.0.0-next.64
svelte@5.0.0-next.63
svelte@5.0.0-next.62
svelte@5.0.0-next.61
svelte@5.0.0-next.60
svelte@5.0.0-next.59
svelte@5.0.0-next.58
svelte@5.0.0-next.57
svelte@5.0.0-next.56
svelte@5.0.0-next.55
svelte@4.2.11
svelte@5.0.0-next.54
svelte@5.0.0-next.53
svelte@5.0.0-next.52
svelte@5.0.0-next.51
svelte@5.0.0-next.50
svelte@5.0.0-next.49
svelte@5.0.0-next.48
svelte@5.0.0-next.47
svelte@4.2.10
svelte@5.0.0-next.46
svelte@5.0.0-next.45
svelte@5.0.0-next.44
svelte@5.0.0-next.43
svelte@5.0.0-next.42
svelte@5.0.0-next.41
svelte@5.0.0-next.40
svelte@5.0.0-next.39
svelte@5.0.0-next.38
svelte@5.0.0-next.37
svelte@4.2.9
svelte@5.0.0-next.36
svelte@5.0.0-next.35
svelte@5.0.0-next.34
svelte@5.0.0-next.33
svelte@5.0.0-next.32
svelte@5.0.0-next.31
svelte@5.0.0-next.30
svelte@5.0.0-next.29
svelte@5.0.0-next.28
svelte@5.0.0-next.27
svelte@5.0.0-next.26
svelte@5.0.0-next.25
svelte@5.0.0-next.24
svelte@5.0.0-next.23
svelte@5.0.0-next.22
svelte@5.0.0-next.21
svelte@5.0.0-next.20
svelte@5.0.0-next.19
svelte@5.0.0-next.18
svelte@5.0.0-next.17
svelte@5.0.0-next.16
svelte@4.2.8
svelte@5.0.0-next.15
svelte@5.0.0-next.14
svelte@5.0.0-next.13
svelte@5.0.0-next.12
svelte@5.0.0-next.11
svelte@5.0.0-next.10
svelte@5.0.0-next.9
svelte@4.2.7
svelte@4.2.6
svelte@5.0.0-next.8
svelte@5.0.0-next.7
svelte@5.0.0-next.6
svelte@5.0.0-next.5
svelte@4.2.5
svelte@4.2.4
svelte@5.0.0-next.4
svelte@5.0.0-next.3
svelte@5.0.0-next.2
svelte@5.0.0-next.1
svelte@4.2.3
svelte@4.2.2
svelte@4.2.1
svelte@4.2.0
svelte@4.1.2
svelte@4.1.1
svelte@4.1.0
svelte@4.0.5
svelte@4.0.4
svelte@4.0.3
svelte@4.0.2
svelte@4.0.1
svelte@4.0.0
svelte@4.0.0-next.3
v3.59.2
svelte@4.0.0-next.1
svelte@4.0.0-next.0
v3.59.1
v3.59.0
v3.58.0
v3.57.0
v3.56.0
v3.55.1
v3.55.0
v3.54.0
v3.53.1
v3.53.0
v3.52.0
v3.51.0
v3.50.1
v3.50.0
v3.49.0
v3.48.0
v3.47.0
v3.46.6
v3.46.5
v3.46.4
v3.46.3
v3.46.2
v3.46.1
v3.46.0
v3.45.0
v3.44.3
v3.44.2
v3.44.1
v3.44.0
v3.43.2
v3.43.1
v3.43.0
v3.42.6
v3.42.5
v3.42.4
v3.42.3
v3.42.2
v3.42.1
v3.42.0
v3.41.0
v3.40.3
v3.40.2
v3.40.1
v3.40.0
v3.39.0
v3.38.3
v3.38.2
v3.38.1
v3.38.0
v3.37.0
v3.36.0
v3.35.0
v3.34.0
v3.33.0
v3.32.3
v3.32.2
v3.32.1
v3.32.0
v3.31.2
v3.31.1
v3.31.0
v3.30.1
v3.30.0
v3.29.7
v3.29.6
v3.29.5
v3.29.4
v3.29.3
v3.29.2
v3.29.1
v3.29.0
v3.28.0
v3.27.0
v3.26.0
v3.25.1
v3.25.0
v3.24.1
v3.24.0
v3.23.2
v3.23.1
v3.23.0
v3.22.3
v3.22.2
v3.22.1
v3.22.0
v3.21.0
v3.20.1
v3.20.0
v3.19.2
v3.19.1
v3.19.0
v3.18.2
v3.18.1
v3.18.0
v3.17.3
v3.17.2
v3.17.1
v3.17.0
v3.16.7
v3.16.6
v3.16.5
v3.16.4
v3.16.3
v3.16.2
v3.16.1
v3.16.0
v3.15.0
v3.14.1
v3.14.0
v3.13.0
v3.12.1
v3.12.0
v3.11.0
v3.10.1
v3.10.0
v3.9.2
v3.9.1
v3.9.0
v3.8.1
v3.8.0
v3.7.1
v3.7.0
v3.6.11
v3.6.10
v3.6.9
v3.6.8
v3.6.7
v3.6.6
v3.6.5
v3.6.4
v3.6.3
v3.6.2
v3.6.1
v3.6.0
v3.5.4
v3.5.3
v3.5.2
v3.5.1
v3.5.0
v3.4.4
v3.4.3
v3.4.2
v3.4.1
v3.4.0
v3.3.0
v3.2.2
v3.2.1
v3.2.0
v3.1.0
v3.0.1
v3.0.0
v3.0.0-beta.24
v2.16.1
v2.16.0
v2.15.4
v2.15.3
v2.15.2
v2.15.1
v2.15.0
v2.14.3
v2.14.2
v2.14.1
v2.14.0
v2.13.5
v2.13.4
v2.13.3
v2.13.2
v2.13.1
v2.13.0
v2.12.1
v2.12.0
v2.11.0
v2.10.1
v2.10.0
v2.9.11
v2.9.10
v2.9.9
v2.9.8
v2.9.7
v2.9.6
v2.9.5
v2.9.4
v2.9.3
v2.9.2
v2.9.1
v2.9.0
v2.8.1
v2.8.0
v2.7.2
v2.7.1
v2.7.0
v2.6.6
v2.6.5
v2.6.4
v2.6.3
v2.6.2
v2.6.1
v2.6.0
v2.5.1
v2.5.0
v2.4.4
v2.4.3
v2.4.2
v2.4.1
v2.4.0
v2.3.0
v2.2.0
v2.1.1
v2.1.0
v2.0.0
v1.64.1
v1.64.0
v1.63.1
v1.63.0
v1.62.0
v1.61.0
v1.60.3
v1.60.2
v1.60.1
v1.60.0
v1.59.0
v1.58.5
v1.58.4
v1.58.3
v1.58.2
v1.58.1
v1.58.0
v1.57.4
v1.57.3
v1.57.2
v1.57.1
v1.57.0
v1.56.4
v1.56.3
v1.56.2
v1.56.1
v1.56.0
v1.55.1
v1.55.0
v1.54.2
v1.54.1
v1.54.0
v1.53.0
v1.52.0
v1.51.1
v1.51.0
v1.50.1
v1.50.0
v1.49.3
v1.49.2
v1.49.1
v1.49.0
v1.48.0
v1.47.2
v1.47.1
v1.47.0
v1.46.1
v1.46.0
v1.45.0
v1.44.2
v1.44.1
v1.44.0
v1.43.1
v1.43.0
v1.42.1
v1.42.0
v1.41.4
v1.41.3
v1.41.2
v1.41.1
v1.41.0
v1.40.2
v1.40.1
v1.40.0
v1.39.4
v1.39.3
v1.39.2
v1.39.1
v1.39.0
v1.38.0
v1.37.0
v1.36.0
v1.35.0
v1.34.0
v1.33.0
v1.32.0
v1.31.0
v1.30.0
v1.29.3
v1.29.2
v1.29.1
v1.29.0
v1.28.1
v1.28.0
v1.27.0
v1.26.2
v1.26.1
v1.26.0
v1.25.1
v1.25.0
v1.24.0
v1.23.4
v1.23.3
v1.23.2
v1.23.1
v1.23.0
v1.22.5
v1.22.4
v1.22.3
v1.22.2
v1.22.1
v1.22.0
v1.21.0
v1.20.2
v1.20.1
v1.20.0
v1.19.1
v1.19.0
v1.18.2
v1.18.1
v1.18.0
v1.17.2
v1.17.1
v1.17.0
v1.16.0
v1.15.1
v1.15.0
v1.14.1
v1.14.0
v1.13.7
v1.13.6
v1.13.5
v1.13.4
v1.13.3
v1.13.2
v1.13.1
v1.13.0
v1.12.1
v1.12.0
v1.11.4
v1.11.3
v1.11.2
v1.11.1
v1.11.0
v1.10.2
v1.10.1
v1.10.0
v1.9.1
v1.9.0
v1.8.1
v1.8.0
v1.7.1
v1.7.0
v1.6.11
v1.6.10
v1.6.9
v1.6.8
v1.6.7
v1.6.6
v1.6.5
v1.6.4
v1.6.3
v1.6.2
v1.6.1
v1.6.0
v1.5.0
v1.4.0
v1.3.1
v1.3.0
v1.2.5
v1.2.4
v1.2.3
v1.2.2
v1.2.1
v1.2.0
v1.1.3
v1.1.2
v1.1.1
v1.1.0
v1.0.7
v1.0.6
v1.0.5
v1.0.4
v1.0.3
v1.0.2
v1.0.1
v1.0.0
v0.3.0
v0.2.2
v0.2.1
v0.2.0
v0.1.1
v0.1.0
v0.0.2
${ noResults }
2616 Commits (add8d3fa487f3c72c2b09d55dece4dd190820b2c)
| Author | SHA1 | Message | Date |
|---|---|---|---|
|
|
add8d3fa48
|
Update .changeset/search-params-duplicate-set.md
|
2 months ago |
|
|
b65de1a348 |
Add search params duplicate update changeset
|
2 months ago |
|
|
70afafe18e
|
Version Packages (#18315)
This PR was opened by the [Changesets release](https://github.com/changesets/action) GitHub action. When you're ready to do a release, you can merge this and the packages will be published to npm automatically. If you're not ready to do a release yet, that's fine, whenever you add more changesets to main, this PR will be updated. # Releases ## svelte@5.56.0 ### Minor Changes - feat: allow declarations in the template ([#18282](https://github.com/sveltejs/svelte/pull/18282)) ### Patch Changes - perf: use `createElement` instead of `createElementNS` for HTML elements ([#18262](https://github.com/sveltejs/svelte/pull/18262)) - perf: store `current_sources` as a `Set` for O(1) membership checks ([#18278](https://github.com/sveltejs/svelte/pull/18278)) - perf: deduplicate identical hoisted templates within a component ([#18320](https://github.com/sveltejs/svelte/pull/18320)) - perf: hoist `rest_props` exclude list as a module-scope `Set` ([#18252](https://github.com/sveltejs/svelte/pull/18252)) Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> |
2 months ago |
|
|
2fae91af6d
|
perf: deduplicate identical hoisted templates within a component (#18320)
Byte-identical templates hoisted from different fragments, elements, or branches now share a single `$.from_html` factory instead of each emitting its own module-scope variable - this shrinks generated output and avoids redundant runtime template parsing. Dedup is keyed on `(content, flags)` and is skipped in dev mode (templates there are wrapped in `$.add_locations`, which embeds per-call-site info). ### Before submitting the PR, please make sure you do the following - [ ] It's really useful if your PR references an issue where it is discussed ahead of time. In many cases, features are absent for a reason. For large changes, please create an RFC: https://github.com/sveltejs/rfcs - [x] Prefix your PR title with `feat:`, `fix:`, `chore:`, or `docs:`. - [x] This message body should clearly illustrate what problems it solves. - [x] Ideally, include a test that fails without this PR but passes with it. - [x] If this PR changes code within `packages/svelte/src`, add a changeset (`npx changeset`). ### Tests and linting - [x] Run the tests with `pnpm test` and lint the project with `pnpm lint` --------- Co-authored-by: Claude Opus 4.8 (1M context) <noreply@anthropic.com> Co-authored-by: Rich Harris <rich.harris@vercel.com> |
2 months ago |
|
|
a40c745fd9
|
perf: hoist rest_props exclude list as a module-scope Set (#18252)
The compiler emitted an inline string array as the second argument to `$.rest_props(...)`, and the runtime did a linear `Array.prototype.includes` on it on every property access via the rest-props Proxy. The exclude list only depends on the component definition, not on the instance, so it can be hoisted to module scope and shared by every instance. Switching it to a `Set` at the same time makes each lookup O(1). For a component like `<Button ...rest />` rendered N times, this turns one per-instance allocation (plus a linear search on every rest-prop access) into one module-scope allocation plus O(1) lookups. The legacy `$$restProps` path is unchanged — it mutates the exclude list in its `deleteProperty` trap, so it can't share a hoisted Set across instances. --------- Co-authored-by: Rich Harris <rich.harris@vercel.com> |
2 months ago |
|
|
59d3a36f82
|
feat: allow declarations in the template (#18282)
Allows `{let/const ...}` declarations in all places (and more) where we
already allow `{@const ...}` (which will eventually get deprecated in
favor of this new feature).
Closes: #16490
Companion PRs:
- https://github.com/sveltejs/language-tools/pull/3033
- https://github.com/sveltejs/prettier-plugin-svelte/pull/533
- https://github.com/sveltejs/eslint-plugin-svelte/pull/1533
- https://github.com/sveltejs/svelte-eslint-parser/pull/891
---------
Co-authored-by: Rich Harris <rich.harris@vercel.com>
|
2 months ago |
|
|
a9916053d9
|
perf: use createElement instead of createElementNS for HTML elements (#18262)
## Summary
The current wrapper always calls `document.createElementNS(namespace ??
NAMESPACE_HTML, tag, options)` — even for HTML elements (the >99% case),
and even when `options` would be `undefined`. Two effects compound:
1. **Route HTML elements through `createElement`** — Blink has a fast
path that skips the namespace lookup `createElementNS` always performs.
2. **Omit the trailing `undefined` argument** — V8/Blink take a slower
path for `createElementNS(ns, tag, undefined)` (and `createElement(tag,
undefined)`) than for the bare 2-arg form. This applies symmetrically to
the SVG/MathML branch, where the wrapper now also avoids the `undefined`
3rd arg.
The wrapper dispatches to the fastest call shape for every input —
`{HTML, non-HTML}` × `{with is, without is}` × no `undefined` ever.
## Affects
Every place Svelte constructs a DOM element internally:
`<svelte:element>`, `run_scripts`, the per-component `<style>` injector,
the `{@html}` wrapper, and the `<template>` element used to clone string
templates.
## Numbers
Measured in headless Chromium (Chromium 145) using the browser bench
harness from #18261, 2–3 runs, median. Lower per-call is better; higher
hz is better.
### Raw call shapes (what each shape costs in the browser)
| | hz | per-call |
| ------------------------------------------- | -------: | -------: |
| `createElement(tag)` | ~1,210k | ~0.83 µs |
| `createElement(tag, undefined)` | ~901k | ~1.11 µs |
| `createElementNS(NS_HTML, tag)` | ~913k | ~1.10 µs |
| `createElementNS(NS_HTML, tag, undefined)` | ~630k | ~1.59 µs |
| `createElement(tag, { is })` | ~484k | ~2.07 µs |
| `createElementNS(SVG_NS, tag)` | ~333k | ~3.01 µs |
| `createElementNS(SVG_NS, tag, undefined)` | ~303k | ~3.30 µs |
| `createElementNS(SVG_NS, tag, { is })` | ~245k | ~4.08 µs |
Two stable effects fall out:
- **Trailing `undefined` is consistently slower** than the bare form —
~26% on `createElement`, ~31% on `createElementNS` (HTML), ~10% on
`createElementNS` (SVG).
- **`createElement` skips a namespace lookup** that `createElementNS`
always performs — ~32% delta for equal-shape calls (`createElement(tag)`
vs `createElementNS(NS_HTML, tag)`).
### Per-case impact of this PR
| Case (namespace, `is`) | Old wrapper call | Old hz | New wrapper call
| New hz | Speedup |
| ----------------------------- |
--------------------------------------------- | --------: |
------------------------------ | --------: | ------: |
| HTML, no `is` (dominant path) | `createElementNS(NS_HTML, tag,
undefined)` | ~630k | `createElement(tag)` | ~1,210k | **~92%** (1.92×)
|
| HTML, with `is` | `createElementNS(NS_HTML, tag, { is })` | (slow) |
`createElement(tag, { is })` | ~484k | similar to above (just the
NS-skip) |
| SVG/MathML, no `is` | `createElementNS(ns, tag, undefined)` | ~303k |
`createElementNS(ns, tag)` | ~333k | **~10%** |
| SVG/MathML, with `is` | `createElementNS(ns, tag, { is })` | ~245k |
same | ~245k | no change |
No measurable change in JSDOM (both shapes route through the same JS
implementation there).
The headline gain — **~92% on the dominant HTML-no-`is` path** —
combines both effects roughly equally: dropping the `undefined` (~46%)
and switching to `createElement` (~32%).
Wrapper-vs-raw was also verified: the new wrapper measured to within ±2%
of raw `document.createElement(tag)` for the HTML-no-`is` case, so the
function-call indirection adds no measurable overhead.
See #18261 for the benchmark and methodology.
## Test plan
- [x] All 5881 runtime tests still pass (runtime-runes + runtime-legacy)
- [x] `<svelte:element xmlns={null}>` correctly falls back to HTML
(covered by existing `dynamic-element-dynamic-namespace` test)
- [x] SVG/MathML namespaces still go through `createElementNS`
- [x] Custom-element `is` option still honoured on both branches
🤖 Generated with [Claude Code](https://claude.com/claude-code)
---------
Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
|
2 months ago |
|
|
67090e8ee8
|
perf: store current_sources as Set for O(1) membership checks (#18278)
`current_sources` tracks the sources created within the active reaction so that reading or writing them during that same reaction doesn't trigger a re-run. It was an `Array` checked with `Array.prototype.includes.call(...)` in three hot places: the `state_unsafe_mutation` guard, `set()`'s destruction check, and `schedule_possible_effect_self_invalidation`. --------- Co-authored-by: Rich Harris <rich.harris@vercel.com> |
2 months ago |
|
|
0bb715d3cf
|
Version Packages (#18255)
This PR was opened by the [Changesets release](https://github.com/changesets/action) GitHub action. When you're ready to do a release, you can merge this and the packages will be published to npm automatically. If you're not ready to do a release yet, that's fine, whenever you add more changesets to main, this PR will be updated. # Releases ## svelte@5.55.10 ### Patch Changes - fix: unlink errored and otherwise finished batch ([#18264](https://github.com/sveltejs/svelte/pull/18264)) - perf: walk composedPath() directly in delegated event propagation ([#18268](https://github.com/sveltejs/svelte/pull/18268)) - fix: transfer effects when merging batches ([#18254](https://github.com/sveltejs/svelte/pull/18254)) - fix: allow `$derived(await ...)` in disconnected effect roots ([#18273](https://github.com/sveltejs/svelte/pull/18273)) - fix: remove temporary raw-text hydration markers ([#18269](https://github.com/sveltejs/svelte/pull/18269)) - fix: propagate async `@const` blockers through closure references so template expressions like `{(() => host)()}` correctly wait for the awaited value ([#18309](https://github.com/sveltejs/svelte/pull/18309)) - fix: properly unlink batches ([#18298](https://github.com/sveltejs/svelte/pull/18298)) - fix: settle discarded batch ([#18290](https://github.com/sveltejs/svelte/pull/18290)) - fix: declare `let:` directives before `{@const}` declarations on slotted elements ([#18271](https://github.com/sveltejs/svelte/pull/18271)) - fix: resume outro-ed branches if they were kept around ([#18291](https://github.com/sveltejs/svelte/pull/18291)) - fix: avoid waterfall-warning when async resolves to same value ([#18297](https://github.com/sveltejs/svelte/pull/18297)) - fix: correctly coordinate component-level effects inside async blocks ([#18260](https://github.com/sveltejs/svelte/pull/18260)) - fix: make unnecessary commit work less likely ([#18263](https://github.com/sveltejs/svelte/pull/18263)) - chore: add tag name to `a11y_click_events_have_key_events` warning ([#18272](https://github.com/sveltejs/svelte/pull/18272)) - fix: catch rejected promises while merging/committing ([#18266](https://github.com/sveltejs/svelte/pull/18266)) Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> |
2 months ago |
|
|
e705369dee
|
fix: propagate async @const blockers through closure references (#18309)
Right now, if you have the following:
```svelte
{@const data = await foo}
<p>{(() => data)()}<p>
```
It will blow up during CSR, because it tries to read `data` before it
exists. The solution to this is to consider references inside closures
as blockers for those closures. This _does_ mean we'll overblock in some
circumstances, such as:
```svelte
{@const data = await foo}
<button onclick={() => data}>foo<button>
```
But I wonder if that's actually incorrect? If the user were to click
`onclick` before `data` is ready, it would blow up.
---------
Co-authored-by: Rich Harris <rich.harris@vercel.com>
|
2 months ago |
|
|
ec08dbc7ee
|
fix: only unlink batch if we're done with it (#18298)
alternative to #18296 — no need to make batches relinkable if we only unlink them when we're fully done with them |
2 months ago |
|
|
c01e598fff
|
fix: avoid waterfall-warning when async resolves to same value (#18297)
|
2 months ago |
|
|
070a0c4f77
|
Revert "perf: use Set instead of Array for constant lookups in utils.js" (#18294)
Reverts sveltejs/svelte#18250 |
2 months ago |
|
|
60eaa92b0b
|
fix: resume outro-ed branches if they were kept around (#18291)
If a branch is removed from the visible dom, it may be kept around because a subsequent batch will intro it again. If we don't resume the effects it will stay inert and therefore not react to updates anymore |
2 months ago |
|
|
871e590c59
|
fix: settle discarded batch (#18290)
Without this the promise would never resolve |
2 months ago |
|
|
e6110d31c5
|
perf: use Set instead of Array for constant lookups in utils.js (#18250)
Several constant lookup tables in `utils.js` were arrays searched with `Array.prototype.includes`, which is O(n). They're queried often — per attribute during attribute setup and SSR, per event during event delegation, and per identifier during compilation. Switching them to `Set` makes each lookup O(1) without changing any public behaviour. |
2 months ago |
|
|
fe9ab936b6
|
fix: allow `$derived(await ...)` in disconnected effect roots (#18273)
If `$effect.root` is created outside the component tree, the boundary property is null Fixes #18188 |
2 months ago |
|
|
f023e8d7c8
|
chore: add tag name to a11y_click_events_have_key_events warning (#18272)
Ref: https://github.com/sveltejs/svelte/issues/15100 Adds the tag name to the `a11y_click_events_have_key_events` warning given when a non-interactive element has a click handler but no keyboard events. This already happens in `a11y_no_static_element_interactions`, and should probably happen in many more messages. |
2 months ago |
|
|
bb69f9c44c
|
fix: declare `let:` directives before `{@const}` on slotted elements (#18271)
Fixes #18119 (missed a spot in #16985) |
3 months ago |
|
|
8b961be0b1
|
fix: remove raw-text hydration markers (#18269)
Fixes #14413. This keeps the temporary raw-text hydration sentinel used by dynamic `<svelte:element>` from becoming part of the final DOM. Hydration still gets a marker to advance through for raw-text children, but the marker is removed after the child renderer runs, so `<style>` and `<script>` contents stay identical to SSR output. Tests: - `pnpm test hydration -t svelte-head-dynamic-style` - `pnpm test hydration` - `pnpm test runtime-runes -t svelte-element` - `pnpm lint` - `git diff --check` --------- Co-authored-by: Puneet Dixit <236133619+puneetdixit200@users.noreply.github.com> Co-authored-by: Simon H <5968653+dummdidumm@users.noreply.github.com> |
3 months ago |
|
|
04d408b29d
|
perf: walk composedPath() directly in delegated event propagation (#18268)
## Summary The propagation walk in `handle_event_propagation` already calls `event.composedPath()` at the start to find the entry index, but then re-derives the same chain step-by-step via `current_target.assignedSlot || current_target.parentNode || .host`. Three property reads per iteration is measurable on the hot event path. Walk the captured `path` array by index instead. ## Notes on behavior `composedPath()` is the spec-compliant snapshot of the dispatch chain: - Same shadow-DOM crossings (slots and shadow roots are included for composed events). - Same `host` traversal (composed-path crosses shadow boundaries when appropriate). - Differs from the previous walk in one edge case: if a handler removes a parent mid-dispatch, the snapshot-based walk continues through the captured chain (matches native browser semantics — the previous `parentNode` walk would have stopped at a null parent). ## Performance Measured in real Chromium on a click through a 30-deep tree with five delegated handlers: **~245k hz → ~277k hz** (~+13%, ~−12% per-event time). ## Test plan - [x] All 6006 runtime tests pass (runtime-runes + runtime-legacy + runtime-browser) - [x] Native shadow-DOM event tests (in runtime-browser) pass unchanged 🤖 Generated with [Claude Code](https://claude.com/claude-code) --------- Co-authored-by: Claude Opus 4.7 (1M context) <noreply@anthropic.com> |
3 months ago |
|
|
078f901f61
|
fix: catch rejected promises while merging/committing (#18266)
A committing/merging batch can have promises that were rejected (e.g. as obsolete). We gotta "forward" this rejection, too, instead of just the successful promise. At best it results in a uncaught rejection (`async-branch-merge-obsolete`), at worst it means error boundaries are not correctly displayed (`async-later-promise-fails-first`). Solves the reproduction in https://github.com/sveltejs/svelte/issues/18221#issuecomment-4507803845 |
3 months ago |
|
|
a6002b587c
|
fix: unlink errored and otherwise finished batch (#18264)
This fixes the issue in https://github.com/sveltejs/svelte/issues/18221#issuecomment-4497918414 where an error can create follup-up invariant errors. The batch errors, has no chance to run otherwise (no more pending work) and is therefore "dead". That means we need to unlink it otherwise it's becoming a "zombie" and hangs around, causing unnecessary and potentially buggy (as seen in the reproduction) merge/commit work. I was not able to reduce the reproduction down to a test case that fails without the fix, but it does make a related error test from #17888 work more correctly. |
3 months ago |
|
|
4656e6895d
|
fix: make unnecessary commit work less likely (#18263)
While looking at https://github.com/sveltejs/svelte/issues/18221#issuecomment-4497918414 and trying to understand how the invariant can happen I noticed that we are not correctly filtering during commit. - we were not ignoring deriveds - we were not comparing the correct values (checking `source.v` instead of the saved value) and not checking if their "is a derived" state differs I'm not able to come up with a test where something fails without these (possibly because it's more about an optimization to do less reruns and not about correctness) fixes, but they do make sense. |
3 months ago |
|
|
91a42e2ed6
|
fix: correctly coordinate component-level effects inside async blocks (#18260)
While looking at the reproduction in https://github.com/sveltejs/svelte/issues/18221#issuecomment-4497918414 I immediately got greeted with a runtime error when running it in the playground (weirdly not in the Stackblitz version). The error was that a component expected a binding to be set in onMount, but the timing of onMount was wrong. Turns out it's because our logic to determine whether or not to defer top level effects is flawed. `REACTION_RAN`, which was used previously, is already set if the initialized component is inside an async block. We instead check for `component_context.i` which is set to `true` on `pop()`. |
3 months ago |
|
|
65283bc13a
|
fix: transfer effects when merging batches (#18254)
An effect could be gated behind a branch. If we don't defer + transfer them upon merge, the branch would still be marked clean but the effect behind it is dirty but no longer reachable. It's not reachable via mark either because that one only concerns itself with block/async effects, and the branch gating the effect is not guaranteed to be touched by that. Fixes #18249 Little sad side-effect: Since we cannot reliably know _before_ traversal if we have no blocking pending work left (the traversal could mark an if block falsy which contains the last blocker), we gotta undo a performance optimization. |
3 months ago |
|
|
b65a3f3fc5
|
Version Packages (#18240)
This PR was opened by the [Changesets release](https://github.com/changesets/action) GitHub action. When you're ready to do a release, you can merge this and the packages will be published to npm automatically. If you're not ready to do a release yet, that's fine, whenever you add more changesets to main, this PR will be updated. # Releases ## svelte@5.55.9 ### Patch Changes - fix: don't unset batch when calling `{#await ...}` promise ([#18243](https://github.com/sveltejs/svelte/pull/18243)) - fix: promise-ify `{#await await ...}` expressions on the server and correctly hydrate them on the client ([#18243](https://github.com/sveltejs/svelte/pull/18243)) - fix: deduplicate dependencies that are added outside the init/update cycle ([#18243](https://github.com/sveltejs/svelte/pull/18243)) - fix: avoid false-positive batch invariant error ([#18246](https://github.com/sveltejs/svelte/pull/18246)) - fix: inline primitive constants in attribute values during SSR ([#18232](https://github.com/sveltejs/svelte/pull/18232)) Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> |
3 months ago |
|
|
d654db83ef
|
fix: avoid false-positive batch invariant error (#18246)
Thanks to https://github.com/sveltejs/svelte/issues/17940#issuecomment-4480016550 I was finally able to isolate and reproduce a false-positive invariant error. I had a hunch this could happen and this shows it. Essentially, you can end up in situations where two batches are scheduled to run in the same microtask queue flush, and if the first rebases the second the invariant will throw, which is wrong. We can avoid this by checking if a decrement is queued. |
3 months ago |
|
|
000c594e05
|
fix: `{#await await ...}` and async dependencies fixes (#18243)
This started out as an investigation to get rid of the runtime code for
`{#await ...}` that deactivated a batch prior to reading the promise
function. That can result in a new batch being created if the promise
invocation happens to write a source.
Through that I discovered two other bugs:
1. The way we handle `{#await await ...}` was flawed around
SSR/hydration: On the server it would await the expression (which it
should not; `{#await await ...}` is kind of a weird special case here)
and during hydration it did not produce matching nodes, leading to
hydration fails.
2. When reading a dependency after an await expression which we add to
the current reaction, we did not deduplicate those reads. That can lead
to duplicate dependencies, which in turn can lead to bugs when
`remove_reaction` later runs. Conside this: You have `deps = [count,
unrelated, count]`. Now you do `remove_reactions(deps, 1)`, i.e. "remove
all reactions after the first one". That means the "disconnect these
from each other" logic runs for `count`, too, because it's also in the
third position, but that is wrong because it is also in the first
position, i.e. the connection should be kept.
---------
Co-authored-by: Rich Harris <rich.harris@vercel.com>
|
3 months ago |
|
|
a5df6616ea
|
fix: avoid unnecessary stringify in server attributes (#18232)
### Before submitting the PR, please make sure you do the following - [x] It's really useful if your PR references an issue where it is discussed ahead of time. Fixes #10031. - [x] Prefix your PR title with `feat:`, `fix:`, `chore:`, or `docs:`. - [x] This message body should clearly illustrate what problems it solves. - [x] Ideally, include a test that fails without this PR but passes with it. - [x] If this PR changes code within `packages/svelte/src`, add a changeset (`npx changeset`). ### What this changes Server attribute template generation currently wraps each dynamic expression in `$.stringify`, even when the compiler can prove the expression is a string or a known constant. This reuses the existing scope evaluation metadata so server output can avoid `$.stringify` for proven string/constant chunks while keeping it for possibly nullish unknown values. The updated snapshot covers a mixed attribute with a known string, mutable state, `null`, numeric/undefined constants, a known string-producing `typeof`, and an unknown prop value. ### Tests and linting - [x] `pnpm test snapshot -t nullish-coallescence-omittance` - [x] `pnpm test snapshot` - [x] `pnpm --filter svelte check` - [x] `pnpm lint` - [x] `pnpm prettier --check .changeset/slow-bikes-serve.md` --------- Co-authored-by: Rich Harris <hello@rich-harris.dev> |
3 months ago |
|
|
f9440dc3ed
|
Version Packages (#18239)
This PR was opened by the [Changesets release](https://github.com/changesets/action) GitHub action. When you're ready to do a release, you can merge this and the packages will be published to npm automatically. If you're not ready to do a release yet, that's fine, whenever you add more changesets to main, this PR will be updated. # Releases ## svelte@5.55.8 ### Patch Changes - fix(print): handle `svelte:body` and fix keyframe percentage double-printing ([#18234](https://github.com/sveltejs/svelte/pull/18234)) - fix: execute uninitialized derived even if it's destroyed ([#18228](https://github.com/sveltejs/svelte/pull/18228)) - fix: use named symbols everywhere ([#18238](https://github.com/sveltejs/svelte/pull/18238)) - fix: don't run teardown effects when deriveds are unfreezed ([#18227](https://github.com/sveltejs/svelte/pull/18227)) - fix: unset context synchronously in `run` ([#18236](https://github.com/sveltejs/svelte/pull/18236)) Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> |
3 months ago |
|
|
ca3f35bf7d
|
fix(print): handle svelte:body and fix keyframe percentage double-printing (#18234)
Fixes #18206 and fixes #18207 — both are printer bugs in `packages/svelte/src/compiler/print/index.js`. ## Changes ### Fix 1: `svelte:body` crashes the printer (#18206) `SvelteBody` was missing from the visitor map, causing a crash with `Error: Not implemented: SvelteBody`. Added the handler (same one-liner pattern as `SvelteDocument`, `SvelteHead`, etc.) and added `SvelteBody` to the `is_block_element` check so whitespace is handled consistently. ### Fix 2: Keyframe percent stops print as `0%%` (#18207) `Percentage.value` already includes the `%` sign (captured by `/\d+(\.\d+)?%/y`), but the printer was writing `` `${node.value}%` `` — appending a second `%`. Changed to `context.write(node.value)` to match the `Nth` printer pattern directly above it. Also updated the existing `style` snapshot which had `50%%` (the bug was silently baked in), and added dedicated test samples for both fixes. |
3 months ago |
|
|
2bc3592eb1
|
fix: use named symbols everywhere (#18238)
This isn't _really_ a fix since these should never surface to the user, but it's useful for debugging when they do, as in https://github.com/sveltejs/kit/pull/15779. Instead of seeing `Symbol()` we see e.g. `Symbol(uninitialized)` which makes it easier to understand where a bug is coming from. |
3 months ago |
|
|
dc1f037fa6
|
fix: don't run teardown effects when deriveds are unfreezed (#18227)
The logic was flawed - a teardown effect only has a teardown function but not `fn` property, but unfreeze thought that everything with a `teardown` needs to be unfreezed Helps with #18221 (though likely doesn't fix it completely, at least not the more general `batch.#roots`problems) |
3 months ago |
|
|
1e899cba35
|
fix: execute uninitialized derived even if it's destroyed (#18228)
Turns out there are a few unavoidable cases where we have to execute the derived even if we otherwise wouldn't, because of its lazy nature. Fixes #18139 |
3 months ago |
|
|
eb10a70cf1
|
fix: unset context synchronously in `run` (#18236)
Our `run` function which executes top level awaits (and synchronous statements in-between/after) did not unset the context in time in case the function returns an async value. In that case the context was still around until the that promise resolves, which can be too late because unrelated things can be intertwined with the batch. The test shows this: Without the fix, the unrelated count incrementation would not update the view until the top level awaits in the child are done. In the test this just shows as a delayed visual update, but it also can result in stale roots as shown in https://github.com/sveltejs/svelte/issues/18221#issuecomment-4470921077 |
3 months ago |
|
|
4d8f99a270
|
Version Packages (#18220)
This PR was opened by the [Changesets release](https://github.com/changesets/action) GitHub action. When you're ready to do a release, you can merge this and the packages will be published to npm automatically. If you're not ready to do a release yet, that's fine, whenever you add more changesets to main, this PR will be updated. # Releases ## svelte@5.55.7 ### Patch Changes - fix: prevent XSS on `hydratable` from user contents ([`a16ebc67bbcf8f708360195687e1b2719463e1a4`]( |
3 months ago |
|
|
0552308817
|
chore: bump devalue (#18219)
|
3 months ago |
|
|
e1cbbd9644
|
Merge commit from fork
* fix: move Svelte runtime properties to symbols Prevents DOM clobbering * shorten names --------- Co-authored-by: Simon Holthausen <simon.holthausen@vercel.com> |
3 months ago |
|
|
a16ebc67bb
|
Merge commit from fork
https://github.com/sveltejs/svelte/security/advisories/GHSA-f3cj-j4f6-wq85 Co-authored-by: Simon Holthausen <simon.holthausen@vercel.com> |
3 months ago |
|
|
d2375e2ebc
|
Merge commit from fork
|
3 months ago |
|
|
547853e240
|
Merge commit from fork
* fix: disallow empty attribute names during SSR * Update packages/svelte/tests/server-side-rendering/samples/spread-attributes-event-handler-xss/main.svelte Co-authored-by: Conduitry <git@chor.date> --------- Co-authored-by: Elliott Johnson <hello@ell.iott.dev> Co-authored-by: Conduitry <git@chor.date> |
3 months ago |
|
|
55f9c85c09
|
Version Packages (#18158)
This PR was opened by the [Changesets release](https://github.com/changesets/action) GitHub action. When you're ready to do a release, you can merge this and the packages will be published to npm automatically. If you're not ready to do a release yet, that's fine, whenever you add more changesets to main, this PR will be updated. # Releases ## svelte@5.55.6 ### Patch Changes - fix: leave stale promises to wait for a later resolution, instead of rejecting ([#18180](https://github.com/sveltejs/svelte/pull/18180)) - fix: keep dependencies of `$state.eager/pending` ([#18218](https://github.com/sveltejs/svelte/pull/18218)) - fix: reapply context after transforming error during SSR ([#18099](https://github.com/sveltejs/svelte/pull/18099)) - fix: don't rebase just-created batches ([#18117](https://github.com/sveltejs/svelte/pull/18117)) - chore: allow `null` for `pending` in typings ([#18201](https://github.com/sveltejs/svelte/pull/18201)) - fix: flush eager effects in production ([#18107](https://github.com/sveltejs/svelte/pull/18107)) - fix: rethrow error of failed iterable after calling `return()` ([#18169](https://github.com/sveltejs/svelte/pull/18169)) - fix: account for proxified instance when updating `bind:this` ([#18147](https://github.com/sveltejs/svelte/pull/18147)) - fix: ensure scheduled batch is flushed if not obsolete ([#18131](https://github.com/sveltejs/svelte/pull/18131)) - fix: resolve stale deriveds with latest value ([#18167](https://github.com/sveltejs/svelte/pull/18167)) - chore: remove unnecessary `increment_pending` calls ([#18183](https://github.com/sveltejs/svelte/pull/18183)) - fix: correctly compile component member expressions for SSR ([#18192](https://github.com/sveltejs/svelte/pull/18192)) - fix: reset `source.updated` stack traces after `flush` ([#18196](https://github.com/sveltejs/svelte/pull/18196)) - fix: replacing async 'blocking' strategy with 'merging' ([#18205](https://github.com/sveltejs/svelte/pull/18205)) - fix: allow `@debug` tags to reference awaited variables ([#18138](https://github.com/sveltejs/svelte/pull/18138)) - fix: re-run fallback props if dependencies update ([#18146](https://github.com/sveltejs/svelte/pull/18146)) - fix: abort running obsolete async branches ([#18118](https://github.com/sveltejs/svelte/pull/18118)) - fix: ignore comments when reading CSS values ([#18153](https://github.com/sveltejs/svelte/pull/18153)) - fix: wrap `Promise.all` in `save` during SSR ([#18178](https://github.com/sveltejs/svelte/pull/18178)) - fix: ignore false-positive errors of `$inspect` dependencies ([#18106](https://github.com/sveltejs/svelte/pull/18106)) Co-authored-by: github-actions[bot] <41898282+github-actions[bot]@users.noreply.github.com> |
3 months ago |
|
|
a10e8e47a5
|
fix: keep dependencies of `$state.eager`/`pending` (alternative approach) (#18218)
#18108, with two differences: - we use a global map - we use the parent reaction as the key, rather than traversing upwards for a branch I think this has the same outcome? ### Before submitting the PR, please make sure you do the following - [x] It's really useful if your PR references an issue where it is discussed ahead of time. In many cases, features are absent for a reason. For large changes, please create an RFC: https://github.com/sveltejs/rfcs - [x] Prefix your PR title with `feat:`, `fix:`, `chore:`, or `docs:`. - [x] This message body should clearly illustrate what problems it solves. - [x] Ideally, include a test that fails without this PR but passes with it. - [x] If this PR changes code within `packages/svelte/src`, add a changeset (`npx changeset`). ### Tests and linting - [x] Run the tests with `pnpm test` and lint the project with `pnpm lint` --------- Co-authored-by: Simon Holthausen <simon.holthausen@vercel.com> Co-authored-by: Simon H <5968653+dummdidumm@users.noreply.github.com> |
3 months ago |
|
|
5122936edb
|
fix: treat batches as a linked list (#18205)
This is another attempt to address some of the tricky edge cases that
arise when async batches resolve out of order. The idea is this:
Essentially, when a batch resolves:
1. we find the latest batch it shares changes with
2. if none exists (either because this is the earliest batch, or because
it is independent of any earlier batches):
- we commit it: effects are flushed, `oncommit` callbacks are run
- we restart any async work in later batches that depends on both the
committed values and the later batch's changes
3. otherwise, we don't commit the batch. instead:
- we merge the changes from the later batch onto the earlier batch. in
some cases this may mean restarting async work on the earlier batch, but
we avoid doing so unnecessarily.
- we then `#process()` the earlier batch. if it resolves, goto 1
This feels like it ought to work. There are still two failing tests,
which I'm currently looking into.
Notable changes:
- Instead of having a `batches` set, we have a linked list. When a batch
resolves, this makes it easy to find the batch that it should be merged
into
- The `#is_deferred` logic now takes account of skipped effects —
there's no need to wait for a promise inside a falsy `if` block (this
accounts for the change in the `async-inner-after-outer` test)
- We no longer care about `#blockers`
I would like to believe that this approach will allow us to simplify and
delete some code, for example the `rebase` logic, though that remains to
be seen. It also feels like some version of #18035 would be helpful.
- closes #18189
- closes #18162
- fixes https://github.com/sveltejs/kit/issues/15431
### Before submitting the PR, please make sure you do the following
- [x] It's really useful if your PR references an issue where it is
discussed ahead of time. In many cases, features are absent for a
reason. For large changes, please create an RFC:
https://github.com/sveltejs/rfcs
- [x] Prefix your PR title with `feat:`, `fix:`, `chore:`, or `docs:`.
- [x] This message body should clearly illustrate what problems it
solves.
- [x] Ideally, include a test that fails without this PR but passes with
it.
- [x] If this PR changes code within `packages/svelte/src`, add a
changeset (`npx changeset`).
### Tests and linting
- [x] Run the tests with `pnpm test` and lint the project with `pnpm
lint`
---------
Co-authored-by: Simon H <5968653+dummdidumm@users.noreply.github.com>
Co-authored-by: Simon Holthausen <simon.holthausen@vercel.com>
|
3 months ago |
|
|
1688c84be9
|
chore: allow `null` for `pending` in typings (#18201)
Closes #18166 We handle all falsy values at runtime already and for basically every other dom attribute also allow `null`, so no reason not to do this. |
3 months ago |
|
|
9ffc13d7c3
|
fix: remove `source.updated` stack traces after `flush` (#18196)
Noticed that we're not actually doing anything with `source_stacks` — we shadow the module-level declaration in `flush`, which means we just keep appending to it and then clearing a different (and empty) set. As a result, any source that ever gets an `updated` property never gets rid of it. This probably causes a memory leak? Anyway, this fixes it. ### Before submitting the PR, please make sure you do the following - [ ] It's really useful if your PR references an issue where it is discussed ahead of time. In many cases, features are absent for a reason. For large changes, please create an RFC: https://github.com/sveltejs/rfcs - [x] Prefix your PR title with `feat:`, `fix:`, `chore:`, or `docs:`. - [x] This message body should clearly illustrate what problems it solves. - [ ] Ideally, include a test that fails without this PR but passes with it. - [x] If this PR changes code within `packages/svelte/src`, add a changeset (`npx changeset`). ### Tests and linting - [x] Run the tests with `pnpm test` and lint the project with `pnpm lint` |
3 months ago |
|
|
e00944ffd1
|
fix: correctly compile component member expressions for SSR (#18192)
Fixes #18191 |
3 months ago |
|
|
908c9d0312
|
fix: leave stale promises to wait for a later resolution, instead of rejecting (#18180)
This incorporates some of the fixes and insights from #18177, but gets rid of the `skip` logic. Instead, we differentiate between _stale_ and _obsolete_ promises. A promise is stale if it has been overtaken by a subsequent update, and was rejected with `STALE_REACTION`: ```ts async function search(query: string) { return fetch(`/search?q=${query}`, { signal: getAbortSignal() }).then((r) => r.json()); } ``` In this case, if we start typing `pot`, and then finish typing `potato`, the first promise will eventually resolve with the results for `/search?q=potato`, instead of the batch entering a weird limbo/zombie state. A promise is obsolete if it belongs to a now-destroyed effect, meaning that toggling `show` doesn't result in an accumulation of never-resolving batches: ```svelte {#if show} {await neverResolves()} {/if} ``` Fixes part of https://github.com/sveltejs/kit/issues/15431 --------- Co-authored-by: Simon Holthausen <simon.holthausen@vercel.com> Co-authored-by: Simon H <5968653+dummdidumm@users.noreply.github.com> |
3 months ago |
|
|
1c150a460f
|
fix: abort running obsolete async branches (#18118)
We shouldn't continue executing async work where we know the surrounding
branch is destroyed already, it can leave to noisy "derived inter"
warnings or even runtime errors ("cannot stringify symbol" when running
a template effect with an uninitialized source). Neither should we warn
about waterfalls on an already-destroyed async effect.
Fixes #18097 (though strictly speaking that particular instance is also
fixed by #18117 which fixes the underlying cause for the reruns; this
one is necessary in itself though, as shown by the new test)
---------
Co-authored-by: Rich Harris <rich.harris@vercel.com>
|
3 months ago |