mirror of https://github.com/sveltejs/svelte
server-type-exports
changeset-release/main
main
svelte0/svelte-15053-fix-stop-currenttime-binding-updates-during-outros
custom-condition
add-custom-renderer-flag
fix-interleaving
svelte-custom-renderer
fix/gh-18615
selectedcontent-oninput-interfere
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
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.9
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 }
1 Commits (batch-branches-fix)
| Author | SHA1 | Message | Date |
|---|---|---|---|
|
|
146cb5ea6c
|
fix: lazy props reactivity (#18146)
Fix #18132 This PR treat lazy fallbacks on `prop()` as derived. Now a default function that uses a $state is recalculated whenever its dependents changes. This change implies that this lazy functions cannot mutate a state anymore (because it is derived), causing a `state_unsafe_mutation`error. This implies on a breaking change, but reasonable. --- ### New breaking change here - **Who does this affect**: Everyone that has updated a $state on a default lazy prop. Example: ```html <script> let myValue = $state(0); let callCount = $state(0); function getValue() { callCount++; // causes a state_unsafe_mutation error return myValue; // returning a state doesn't cause an error, and now it is tracked as a dependency } let { value = getValue() } = $props(); </script> ``` **Why make this breaking change** This encourages people to not update states on a function that fundamentaly, is readonly. When someone wants to use a default function expecting that it should be tracked, its not likely that this function will change some state. It is anti-pattern to change some state inside a getter function. But what if someone wants to do it, like in the code above? The code above doesn't make sense before this PR, the old way to calculate lazy functions is to execute it one time, and only one, so the `callCount` variable will never change. But let's assume that someone did it, how to migrate? The migration in same example is easy, since the `callCount` is executed only once, it will not be executed after the component is mounted. So the `callCount` doesn't need to be a state, the `callCount` will be in a valid state when the component is created. So here is the migrated code: ```html <script> let myValue = $state(0); let callCount = 0; function getValue() { callCount++; // doesn't causes an error return myValue; } let { value = getValue() } = $props(); </script> ``` As we can see, there is no reason for the variable `callCount` in this example (before this PR), and if someone did it, it is more likely that they used a constant instead: ```html <script> let myValue = $state(0); let callCount = 1; function getValue() { return myValue; } let { value = getValue() } = $props(); </script> ``` There is another example that causes the `state_unsafe_mutation` and how to fix (this happened on the tests that i changed): ```html <script> let log = $state([]); function fallbackExample => { log.push('fallback called'); return 1; // any value, just to show the issue with the log } let { value = fallbackExample() } = $props(); </script> ``` Here, we can see that `log` variable is a state. Before this PR, as i said, this function `fallbackExample` will be executed once. So the logs will be computed when the component is mounted. So there is no reason to make the `log` a state. The simplest way to fix this is to make it a normal variable: ```html <script> let log = []; </script> ``` But with this PR, the function might be recalculated at some point, and the `log` with a state makes sense now, so how to migrate in this case? As i said, changing a state inside a lazy prop function is not a good practice, we can think in a way to invert this dependency, and change the approach from push (imperative mutation) to pull (declarative derivation). If a developer really needs to track how many times a fallback is executed or react to its changes, they should use a $derived or an $effect that observes the same dependencies as the fallback, or simply observe the property itself: ```html <script> let { value = fallbackExample() } = $props(); let log = $state([]); $effect(() => { const message = `${value}`; untrack(() => { // we don't want to track changes on the log variable log.push(message); }); }); </script> ``` ### After all, how to migrate? 1. **If there is no state mutation inside the prop function, no need to changes**; 2. **If there is a state mutation inside the prop function, but the value muted is declared inside the same component:** remove the state from it. Before this PR the method will be executed only once, and to get the same result, you do not need the variable to be a state; **Before** ```html <script> let log = $state([]); const fallback_fn = () => { log.push('fallback_fn'); return 1; } const { myProp = fallback_fn() } = $props(); </script> ``` **After** ```html <script> let log = []; const fallback_fn = () => { log.push('fallback_fn'); return 1; } const { myProp = fallback_fn() } = $props(); </script> ``` 3. **If there is a state mutation inside the prop function, and the value is read in multiple places:** change your approach, use a effect to detect the change on the prop, and apply your mutation inside the effect; Before: ```html <script> import { setLog } from './logs.js'; // setLog apply a mutation on a state const fallback_fn = () => { setLog('fallback_fn'); return 1; } const { myProp = fallback_fn() } = $props(); </script> ``` After ```html <script> import { setLog } from './logs.js'; // setLog apply a mutation on a state const fallback_fn = () => { return 1; } const { myProp = fallback_fn() } = $props(); $effect(() => { const message = `${myProp}`; untrack(() => { setLog(message); }); }); </script> ``` ### Severity (number of people affected x effort): Low - **Affected Users:** Minimal. Mutating state inside a property initializer is a rare edge case and considered an anti-pattern (because its a side effect inside a getter). Most users use constants or pure functions for fallbacks. - **Migration Effort:** Low. As demonstrated in the examples above, the fix usually involves either removing an unnecessary $state or moving the side effect to its proper place, the $effect ### Conclusion This PR encourages users to program in a better way. Forcing a clean separation between data and their side effects. The developer can use this new feature mainly in i18n services, providing better usability and experience. Also, this PR makes the properties more predictable, since the expected behavior is that it works reactively, eliminating this bug for future developers. Even though this PR adds a breaking change, it's easily solvable, and the chance of any user facing this problem is low. **Full example to test reactivity in props** (won't work on web, you can get the PR and test localy to see it working): https://svelte.dev/playground/a6608434d8c642179f0e2b72468c74d7?version=latest *A unit test for this reactivity was created: runtime-runes/props-default-value-reactivity*. --------- Co-authored-by: Rich Harris <rich.harris@vercel.com> Co-authored-by: Rich Harris <hello@rich-harris.dev> |
4 months ago |