You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
svelte/packages/svelte/CHANGELOG.md

261 KiB

svelte

5.57.2

Patch Changes

  • fix: don't create async deriveds for a component destroyed while waiting for its top-level await (#18931)

  • fix: prevent untracked derived reads from retaining disconnected dependencies (#18829)

  • fix: error if {:else} is followed by another {:else} or {:else if ...} (#18900)

  • fix: avoid tracking SvelteURLSearchParams during URL updates (#18791)

  • fix: restore hydration state when custom element attribute updates throw (#18467)

  • fix: attach event handlers that are assigned after a top-level await in production (#18933)

  • fix: flush anything pending before invoking flushSync callback function (#18878)

  • fix: preserve location information for await wrappers (#18859)

  • fix: keep a reactive assignment with no dependencies when migrate cannot turn it into a declaration (#18817)

  • fix: don't hang migrate on a declaration that shares a line with its script tag (#18816)

  • fix: prevent duplicate subscriptions when reconnecting deriveds (#18899)

  • fix: recover when an unexpected node replaces a nested boundary comment during hydration (#18925)

  • fix: print {#await} blocks that only have a pending branch (#18908)

  • fix: don't warn about a redundant link role on <area> elements without an href (#18872)

  • fix: don't throw state_unsafe_mutation when the focused element is removed while bind:activeElement is used (#18921)

  • fix: don't overwrite an unchanged spread value, preserving incomplete number input (#18864)

  • fix: read batch-local array on each-block commit (#18879)

  • fix: error at compile time when a declaration in a snippet redeclares one of its parameters (#18842)

  • fix: error when using let: directives on a component with a children snippet (#18873)

  • fix: ignore stale boundary reset callbacks (#18886)

  • fix: handle deferred transitions aborted before initialization (#18776)

  • fix: prevent hydration mismatch recovery from being intercepted by error boundaries (#18841)

  • fix: preserve dynamic element connections during hydration (#18855)

5.57.1

Patch Changes

  • fix: cancel deferred event listeners during cleanup (#18749)

  • fix: preserve global CSS in components without scopable elements (#18793)

  • fix: reduce SSR render result garbage collection (#18798)

  • fix: resolve the fallback of an each block in the enclosing scope (#18803)

  • perf: speed up parser interactions with Acorn or avoid them where possible (#18740)

  • fix: prevent effect tree of batches from interfering with each other (#18508)

  • fix: serialize input default values during server rendering (#18733)

  • fix: remove WAS_MARKED flag in favor of Set (#18127)

  • fix: throw set_context_after_init when setContext is called after an await during SSR (#18739)

  • fix: make Object.hasOwn reactive for state proxy ownership changes (#18838)

  • fix: keep $state.eager when used as a variable initializer (#18809)

  • perf: avoid regex matching in parser where possible (#18736)

  • fix: in non-async mode, only push variable to current_sources when active_reaction is updating (#18550)

  • fix: recognise aria-braillelabel and aria-brailleroledescription as known ARIA attributes (#18765)

5.57.0

Minor Changes

  • feat: export RenderOutput, SyncRenderOutput, Csp and Sha256Source from svelte/server (#18648)

  • feat: add has function to createContext (#18472)

  • feat: support defaultValue on <select> (#18591)

  • feat: add getOrInsert/getOrInsertComputed to SvelteMap (#18728)

Patch Changes

  • fix: block template store subscriptions on the promise that assigns the store (#18582)

  • fix: route $derived teardown errors through invoke_error_boundary (#18486)

  • fix: track SvelteDate snapshots in reactions (#18700)

  • fix: remove <svelte:head> anchors on unmount (#18697)

  • fix: warn on undeclared shorthand event handlers on <svelte:window>, <svelte:document> and <svelte:body> (#18480)

  • perf: reuse the cached value in the <option>/<select> value guard (#18713)

  • fix: prevent malformed AST output for <select> with static value attribute (#18449)

  • fix: apply ownership mutation ignores to binding assignments (#18718)

  • fix: prevent onoutroend from firing twice when compilerOptions.hmr is true (#18655)

  • fix: preserve whitespace after inline elements when printing (#18685)

  • perf: fold SSR block-open markers into the branch's first push (#18712)

  • fix: run onDestroy callbacks when a server render throws (#18585)

  • fix: report derived_invalid_export for export let x = $derived(...) in runes mode (#18692)

  • fix: never apply class hash to elements inside <svelte:head> (#18160)

  • fix: keep defaultChecked on hydrated radio inputs with spread attributes (#18701)

  • fix: accept onfocusin/onfocusout in a11y_mouse_events_have_key_events (#18689)

  • perf: O(n²)→O(n) Map lookups for legacy $: reactive statement ordering (#18602)

  • fix: distinct memoizer on style/class directives (#18466)

  • fix: measure nested transitions before applying their starting styles (#18647)

  • fix: don't turn component instances stored in $state into state proxies (#18646)

  • perf: emit $.only_child for elements with a single child (#18717)

  • fix: omit bind:focused from SSR output (it has no HTML attribute) (#18724)

  • fix: more robust rendering of Svelte custom element slots (#18710)

  • perf: optimize simple object destructuring in @const tags (#18390)

  • fix: properly apply static textarea value attribute during CSR (#18727)

  • fix: end a restored reaction context at the end of its synchronous segment (#18694)

  • fix: keep the dependencies of a reaction that throws, so deriveds it read are neither leaked nor stuck in their error (#18703)

  • fix: don't resurrect outroing elements when an ancestor block is paused and resumed (#18431)

  • perf: use $.comment() for single-comment templates (#18714)

  • chore: move @types/trusted-types to devDependencies (#18730)

  • perf: store setters cache as Set instead of Array (#18251)

  • fix: transform derived assignments and select function bindings correctly during server-side rendering (#18669)

  • fix: keep boolean attributes with an empty string value when rendering attribute objects on the server (#18721)

  • fix: sync SvelteURL port signal when the protocol setter clears the port (#18705)

  • fix: block declaration tags and {@const} on async values read inside closures (#18533)

  • fix: avoid css tree-shaking for exported Snippet (#18540)

  • perf: treat <img loading> as a static element again (#18711)

  • fix: prevent selectedcontent mutation from changing the selected option (#18495)

  • fix: avoid NaN keyframe values in slide transition for elements without a layout box (#18430)

  • fix: preserve line feed character references in attribute values (#18691)

  • fix: decode uppercase-X hex numeric character references (&#X...;) (#18708)

  • chore: clarify when $effect.pre runs relative to DOM updates (#18534)

  • fix: scope SSR boundary failed snippets to their boundary (#18593)

5.56.10

Patch Changes

  • fix: preserve CSS escape sequences when printing selectors (#18667)

  • fix: parse :nth-child(2n of.foo) where of is not followed by whitespace (#18611)

  • fix: transform expressions inside labeled statements during server compilation (#18617)

  • docs: clarify that context lookup includes the current component and all ancestors (#18581)

  • fix: apply CSS custom properties with falsy values on components (#18634)

  • fix: correctly print {#await ... catch x} et al (#18645)

  • fix: ignore comments of Program node during migration script (#18656)

  • fix: reliably resolve append_style to its correct root (#18614)

  • fix: clean up removed capture event handlers from spread attributes (#18618)

  • fix: don't corrupt renderer type during SSR's legacy bind: retry loop (#18616)

  • fix: treat concise arrow function bodies as implicit returns when calculating blockers (#18613)

  • fix: give effect teardowns the value from before the first write in a flush (#18620)

  • fix: avoid double-calling a derived reference when destructuring $derived of another $derived during server-side rendering (#18668)

  • fix: preserve namespaces in CSS type selectors (#18678)

  • fix: increment private state fields through a non-this receiver (#18622)

  • chore: deduplicate client and server context helpers (#18580)

  • fix: release last_propagated_event after event propagation settles so it no longer retains the last event's target subtree (#18569)

  • fix: allow custom elements to receive async values as props (#18661)

  • fix: strip comments from inline style values in linear time (#18553)

  • fix: prevent declaration comments from breaking server derived references (#18641)

  • perf: make async blocker analysis scale linearly with the number of top-level references (#18549)

  • fix: preserve short-circuiting for logical assignments to private state fields (#18594)

5.56.9

Patch Changes

  • fix: skip controlled each fast path while another batch is pending (#18625)

  • fix: better whitespace handling inside printer (#18638)

  • fix: don't duplicate comments in attributes (#18636)

  • fix: preserve CSS comments in the AST printer (#18637)

5.56.8

Patch Changes

  • fix: call onerror and provide a working reset when hydrating a failed boundary (#18556)

  • fix: preserve select selection when spread attributes omit value (#18561)

5.56.7

Patch Changes

  • chore: provide indent option for print (#18474)

5.56.6

Patch Changes

  • perf: skip unnecessary blocker analysis when compiling components without top-level await (#18548)

  • fix: rerun derived that had an abort controller on reconnection (#18551)

5.56.5

Patch Changes

  • chore: drop dead code that make TSGO fail (#18496)

  • fix: don't (re)connect deriveds when read inside branch/root effects (#18527)

  • fix: skip unnecessary derived effect in earlier batch (#18525)

  • fix: avoid declaration tag warning in event handlers (#18500)

  • fix: abort deriveds own AbortSignal when it disconnects (#18400)

  • fix: ensure $state.eager() is correctly transormed for SSR output (#18530)

  • fix: correctly transform declaration tags during SSR (#18492)

  • fix: transform computed keys in keyed {#each} destructuring patterns (#18521)

  • fix: chain preprocessor sourcemaps with an empty sources[0] instead of dropping them (#18518)

  • fix: clear previous_task reference after abort in Tween to prevent memory leak on interrupted tweens (#18541)

  • fix: don't treat declaration tags as parts inside each blocks (#18507)

5.56.4

Patch Changes

  • fix: include wrapping parentheses in {@const} declarator end position (#18436)

  • fix: always unset reactivity context after restoring it (#18453)

  • fix: don't notify searchParams subscribers when the URL changes without affecting the search string (#18425)

  • fix: strip ? from optional parameters in <script lang="ts"> so generated JavaScript is valid (#18448)

5.56.3

Patch Changes

  • fix: ignore errors that occur in destroyed effects (#18384)

  • fix: type BigInts in $state.snapshot(...) return values (#18388)

5.56.2

Patch Changes

  • fix: properly track effect end node for async sibling component (#18371)

  • fix: prevent false-positive reactivity loss warning (#18373)

  • chore: bump esrap dependency (#18372)

  • fix: ignore declaration tags for animation directive (#18366)

  • fix: reject pending async deriveds on discard (#18308)

5.56.1

Patch Changes

  • fix: error at compile time on duplicate snippet/declaration tag definitions (#18351)

  • fix: parse declaration tag contents more robustly (#18353)

  • fix: correctly transform references to earlier declarators in a declaration tag (e.g. {let a = $state(0), b = $derived(a * 2)}) (#18348)

  • fix: avoid spurious state_referenced_locally warnings for $derived declarations in declaration tags (#18348)

  • fix: tolerate whitespace before let/const in declaration tags (#18348)

  • fix: prevent infinite loop when a tag's expression ends with a trailing / at the end of the input (#18350)

  • fix: more robust parsing of declaration tags with regards to type (#18330)

  • fix: preserve newlines in spread input values when the type attribute is applied after value (#18345)

  • fix: update SvelteURLSearchParams when setting duplicate keys to the same joined value (#18336)

  • fix: check references for blockers on server, too (#18352)

5.56.0

Minor Changes

  • feat: allow declarations in the template (#18282)

Patch Changes

  • perf: use createElement instead of createElementNS for HTML elements (#18262)

  • perf: store current_sources as a Set for O(1) membership checks (#18278)

  • perf: deduplicate identical hoisted templates within a component (#18320)

  • perf: hoist rest_props exclude list as a module-scope Set (#18252)

5.55.10

Patch Changes

  • fix: unlink errored and otherwise finished batch (#18264)

  • perf: walk composedPath() directly in delegated event propagation (#18268)

  • fix: transfer effects when merging batches (#18254)

  • fix: allow $derived(await ...) in disconnected effect roots (#18273)

  • fix: remove temporary raw-text hydration markers (#18269)

  • fix: propagate async @const blockers through closure references so template expressions like {(() => host)()} correctly wait for the awaited value (#18309)

  • fix: properly unlink batches (#18298)

  • fix: settle discarded batch (#18290)

  • fix: declare let: directives before {@const} declarations on slotted elements (#18271)

  • fix: resume outro-ed branches if they were kept around (#18291)

  • fix: avoid waterfall-warning when async resolves to same value (#18297)

  • fix: correctly coordinate component-level effects inside async blocks (#18260)

  • fix: make unnecessary commit work less likely (#18263)

  • chore: add tag name to a11y_click_events_have_key_events warning (#18272)

  • fix: catch rejected promises while merging/committing (#18266)

5.55.9

Patch Changes

  • fix: don't unset batch when calling {#await ...} promise (#18243)

  • fix: promise-ify {#await await ...} expressions on the server and correctly hydrate them on the client (#18243)

  • fix: deduplicate dependencies that are added outside the init/update cycle (#18243)

  • fix: avoid false-positive batch invariant error (#18246)

  • fix: inline primitive constants in attribute values during SSR (#18232)

5.55.8

Patch Changes

  • fix(print): handle svelte:body and fix keyframe percentage double-printing (#18234)

  • fix: execute uninitialized derived even if it's destroyed (#18228)

  • fix: use named symbols everywhere (#18238)

  • fix: don't run teardown effects when deriveds are unfreezed (#18227)

  • fix: unset context synchronously in run (#18236)

5.55.7

Patch Changes

5.55.6

Patch Changes

  • fix: leave stale promises to wait for a later resolution, instead of rejecting (#18180)

  • fix: keep dependencies of $state.eager/pending (#18218)

  • fix: reapply context after transforming error during SSR (#18099)

  • fix: don't rebase just-created batches (#18117)

  • chore: allow null for pending in typings (#18201)

  • fix: flush eager effects in production (#18107)

  • fix: rethrow error of failed iterable after calling return() (#18169)

  • fix: account for proxified instance when updating bind:this (#18147)

  • fix: ensure scheduled batch is flushed if not obsolete (#18131)

  • fix: resolve stale deriveds with latest value (#18167)

  • chore: remove unnecessary increment_pending calls (#18183)

  • fix: correctly compile component member expressions for SSR (#18192)

  • fix: reset source.updated stack traces after flush (#18196)

  • fix: replacing async 'blocking' strategy with 'merging' (#18205)

  • fix: allow @debug tags to reference awaited variables (#18138)

  • fix: re-run fallback props if dependencies update (#18146)

  • fix: abort running obsolete async branches (#18118)

  • fix: ignore comments when reading CSS values (#18153)

  • fix: wrap Promise.all in save during SSR (#18178)

  • fix: ignore false-positive errors of $inspect dependencies (#18106)

5.55.5

Patch Changes

  • fix: don't mark deriveds while an effect is updating (#18124)

  • fix: do not dispatch introstart event with animation of animate directive (#18122)

5.55.4

Patch Changes

  • fix: never mark a child effect root as inert (#18111)

  • fix: reset context after waiting on blockers of @const expressions (#18100)

  • fix: keep flushing new eager effects (#18102)

5.55.3

Patch Changes

  • fix: ensure proper HMR updates for dynamic components (#18079)

  • fix: correctly calculate @const blockers (#18039)

  • fix: freeze deriveds once their containing effects are destroyed (#17921)

  • fix: defer error boundary rendering in forks (#18076)

  • fix: avoid false positives for reactivity loss warning (#18088)

5.55.2

Patch Changes

  • fix: invalidate @const tags based on visible references in legacy mode (#18041)

  • fix: handle parens in template expressions more robustly (#18075)

  • fix: disallow -- in idPrefix (#18038)

  • fix: correct types for ontoggle on <details> elements (#18063)

  • fix: don't override $destroy/set/on instance methods in dev mode (#18034)

  • fix: unskip branches of earlier batches after commit (#18048)

  • fix: never set derived.v inside fork (#18037)

  • fix: skip rebase logic in non-async mode (#18040)

  • fix: don't reset status of uninitialized deriveds (#18054)

5.55.1

Patch Changes

  • fix: correctly handle bindings on the server (#18009)

  • fix: prevent hydration error on async {@html ...} (#17999)

  • fix: cleanup superTypeParameters in ClassDeclarations/ClassExpression (#18015)

  • fix: improve duplicate module import error message (#18016)

  • fix: reschedule new effects in prior batches (#18021)

5.55.0

Minor Changes

  • feat: export TweenOptions, SpringOptions, SpringUpdateOptions and Updater from svelte/motion (#17967)

Patch Changes

  • fix: ensure HMR wrapper forwards correct start/end nodes to active effect (#17985)

5.54.1

Patch Changes

  • fix: hydration comments during hmr (#17975)

  • fix: null out effect.b in destroy_effect (#17980)

  • fix: group sync statements (#17977)

  • fix: defer batch resolution until earlier intersecting batches have committed (#17162)

  • fix: properly invoke iterator.return() during reactivity loss check (#17966)

  • fix: remove trailing semicolon from {@const} tag printer (#17962)

5.54.0

Minor Changes

  • feat: allow css, runes, customElement compiler options to be functions (#17951)

Patch Changes

  • fix: reinstate reactivity loss tracking (#17801)

5.53.13

Patch Changes

  • fix: ensure $inspect after top level await doesn't break builds (#17943)

  • fix: resume inert effects when they come from offscreen (#17942)

  • fix: don't eagerly access not-yet-initialized functions in template (#17938)

  • fix: discard batches made obsolete by commit (#17934)

  • fix: ensure "is standalone child" is correctly reset (#17944)

  • fix: remove nodes in boundary when work is pending and HMR is active (#17932)

5.53.12

Patch Changes

  • fix: update select.__value on change (#17745)

  • chore: add invariant helper for debugging (#17929)

  • fix: ensure deriveds values are correct across batches (#17917)

  • fix: handle async RHS in assignment_value_stale (#17925)

  • fix: avoid traversing clean roots (#17928)

5.53.11

Patch Changes

  • fix: remove untrack circular dependency (#17910)

  • fix: recover from errors that leave a corrupted effect tree (#17888)

  • fix: properly lazily evaluate RHS when checking for assignment_value_stale (#17906)

  • fix: resolve boundary in correct batch when hydrating (#17914)

  • chore: rebase batches after process, not during (#17900)

5.53.10

Patch Changes

  • fix: re-process batch if new root effects were scheduled (#17895)

5.53.9

Patch Changes

  • fix: better bind:this cleanup timing (#17885)

5.53.8

Patch Changes

  • fix: {@html} no longer duplicates content inside contenteditable elements (#17853)

  • fix: don't access inert block effects (#17882)

  • fix: handle asnyc updates within pending boundary (#17873)

  • perf: avoid re-traversing the effect tree after $: assignments (#17848)

  • chore: simplify scheduling logic (#17805)

5.53.7

Patch Changes

  • fix: correctly add __svelte_meta after else-if chains (#17830)

  • perf: cache element interactivity and source line splitting in compiler (#17839)

  • chore: avoid rescheduling effects during branch commit (#17837)

  • perf: optimize CSS selector pruning (#17846)

  • fix: preserve original boundary errors when keyed each rows are removed during async updates (#17843)

  • perf: avoid O(n²) name scanning in scope generate and unique (#17844)

  • fix: preserve each items that are needed by pending batches (#17819)

5.53.6

Patch Changes

  • perf: optimize parser hot paths for faster compilation (#17811)

  • fix: SvelteMap incorrectly handles keys with undefined values (#17826)

  • fix: SvelteURL search setter now returns the normalized value, matching native URL behavior (#17828)

  • fix: visit synthetic value node during ssr (#17824)

  • fix: always case insensitive event handlers during ssr (#17822)

  • chore: more efficient effect scheduling (#17808)

  • perf: optimize compiler analysis phase (#17823)

  • fix: skip redundant batch.apply (#17816)

  • chore: null out current_batch before committing branches (#17809)

5.53.5

Patch Changes

5.53.4

Patch Changes

  • fix: set server context after async transformError (#17799)

  • fix: hydrate if blocks correctly (#17784)

  • fix: handle default parameters scope leaks (#17788)

  • fix: prevent flushed effects from running again (#17787)

5.53.3

Patch Changes

  • fix: render :catch of #await block with correct key (#17769)

  • chore: pin aria-query@5.3.1 (#17772)

  • fix: make string coercion consistent to toString (#17774)

5.53.2

Patch Changes

  • fix: update expressions on server deriveds (#17767)

  • fix: further obfuscate node:crypto import from overzealous static analysis (#17763)

5.53.1

Patch Changes

  • fix: handle shadowed function names correctly (#17753)

5.53.0

Minor Changes

  • feat: allow comments in tags (#17671)

  • feat: allow error boundaries to work on the server (#17672)

Patch Changes

  • fix: use TrustedHTML to test for customizable <select> support, where necessary (#17743)

  • fix: ensure head effects are kept in the effect tree (#17746)

  • chore: deactivate current_batch by default in unset_context (#17738)

5.52.0

Minor Changes

  • feat: support TrustedHTML in {@html} expressions (#17701)

Patch Changes

  • fix: repair dynamic component truthy/falsy hydration mismatches (#17737)

  • fix: re-run non-render-bound deriveds on the server (#17674)

5.51.5

Patch Changes

5.51.4

Patch Changes

  • chore: proactively defer effects in pending boundary (#17734)

  • fix: detect and error on non-idempotent each block keys in dev mode (#17732)

5.51.3

Patch Changes

  • fix: prevent event delegation logic conflicting between svelte instances (#17728)

  • fix: treat CSS attribute selectors as case-insensitive for HTML enumerated attributes (#17712)

  • fix: locate Rollup annontaion friendly to JS downgraders (#17724)

  • fix: run effects in pending snippets (#17719)

5.51.2

Patch Changes

  • fix: take async into consideration for dev delegated handlers (#17710)

  • fix: emit state_referenced_locally warning for non-destructured props (#17708)

5.51.1

Patch Changes

  • fix: don't crash on undefined document.contentType (#17707)

  • fix: use symbols for encapsulated event delegation (#17703)

5.51.0

Minor Changes

  • feat: Use TrustedTypes for HTML handling where supported (#16271)

Patch Changes

  • fix: sanitize template-literal-special-characters in SSR attribute values (#17692)

  • fix: follow-up formatting in print() — flush block-level elements into separate sequences (#17699)

  • fix: preserve delegated event handlers as long as one or more root components are using them (#17695)

5.50.3

Patch Changes

  • fix: take into account nodeName case sensitivity on XHTML pages (#17689)

  • fix: render multiple and selected attributes as empty strings for XHTML compliance (#17689)

  • fix: always lowercase HTML elements, for XHTML compliance (#17664)

  • fix: freeze effects-inside-deriveds when disconnecting, unfreeze on reconnect (#17682)

  • fix: propagate $effect errors to <svelte:boundary> (#17684)

5.50.2

Patch Changes

  • fix: resolve effect_update_depth_exceeded when using bind:value on <select> with derived state in legacy mode (#17645)

  • fix: don't swallow DOMException when media.play() fails in bind:paused (#17656)

  • chore: provide proper public type for parseCss result (#17654)

  • fix: robustify blocker calculation (#17676)

  • fix: reduce if block nesting (#17662)

5.50.1

Patch Changes

  • fix: render boolean attribute values as empty strings for XHTML compliance (#17648)

  • fix: prevent async render tag hydration mismatches (#17652)

5.50.0

Minor Changes

  • feat: allow use of createContext when instantiating components programmatically (#17575)

Patch Changes

  • fix: ensure infinite effect loops are cleared after flushing (#17601)

  • fix: allow {#key NaN} (#17642)

  • fix: detect store in each block expression regardless of AST shape (#17636)

  • fix: treat <menu> like <ul>/<ol> for a11y role checks (#17638)

  • fix: add vite-ignore comment inside dynamic crypto import (#17623)

  • chore: wrap JSDoc URLs in @see and @link tags (#17617)

  • fix: properly hydrate already-resolved async blocks (#17641)

  • fix: emit each_key_duplicate error in production (#16724)

  • fix: exit resolved async blocks on correct node when hydrating (#17640)

5.49.2

Patch Changes

  • chore: remove SvelteKit data attributes from elements.d.ts (#17613)

  • fix: avoid erroneous async derived expressions for blocks (#17604)

  • fix: avoid Cloudflare warnings about not having the "node:crypto" module (#17612)

  • fix: reschedule effects inside unskipped branches (#17604)

5.49.1

Patch Changes

  • fix: merge consecutive large text nodes (#17587)

  • fix: only create async functions in SSR output when necessary (#17593)

  • fix: properly separate multiline html blocks from each other in print() (#17319)

  • fix: prevent unhandled exceptions arising from dangling promises in