From d4be4e297365030b5cbcb676bda133f2840816b2 Mon Sep 17 00:00:00 2001 From: Simon H <5968653+dummdidumm@users.noreply.github.com> Date: Wed, 27 May 2026 21:02:19 +0200 Subject: [PATCH 1/6] chore: ensure treeshaking test runs during CI (#18302) Would've caught the regression in #18250 - without this the tests were all green, giving a false sense of "this is correct" --- packages/svelte/package.json | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/packages/svelte/package.json b/packages/svelte/package.json index b9bb48aa72..a5af1e6ee9 100644 --- a/packages/svelte/package.json +++ b/packages/svelte/package.json @@ -138,7 +138,7 @@ "templating" ], "scripts": { - "build": "rollup -c && pnpm generate", + "build": "rollup -c && pnpm generate && node scripts/check-treeshakeability.js", "dev": "node scripts/process-messages -w & rollup -cw", "check": "tsc --project tsconfig.runtime.json && tsc && cd ./tests/types && tsc", "check:tsgo": "tsgo --project tsconfig.runtime.json --skipLibCheck && tsgo --skipLibCheck", @@ -146,7 +146,7 @@ "generate": "node scripts/process-messages && node ./scripts/generate-types.js", "generate:version": "node ./scripts/generate-version.js", "generate:types": "node ./scripts/generate-types.js && tsc -p tsconfig.generated.json", - "prepublishOnly": "pnpm build && node scripts/check-treeshakeability.js", + "prepublishOnly": "pnpm build", "knip": "pnpm dlx knip" }, "devDependencies": { From 0da9f9e2ab515da16d624c5bc48b554beb179f92 Mon Sep 17 00:00:00 2001 From: Rich Harris Date: Wed, 27 May 2026 15:58:57 -0400 Subject: [PATCH 2/6] fix: disallow effect creation after `await` (#18299) We incorrectly restore effect context after an`$derived(await ...)` if it occurs inside an async function, but only for those, no other `await` expressions. This is buggy and wrong. We only want to restore context _inside_ an async derived expression (including template expressions)` so that `await a + b` works correctly. It's possible that this will be a breaking change (albeit not semver-violating, because `experimental`) for some people if they are creating effects after an `await` (other than at the top level of a component). This is regrettable, but it should never have worked in the first place. --- .../docs/98-reference/.generated/client-errors.md | 4 ++++ packages/svelte/messages/client-errors/errors.md | 4 ++++ .../phases/2-analyze/visitors/AwaitExpression.js | 3 +-- .../client/visitors/VariableDeclaration.js | 11 ++--------- packages/svelte/src/compiler/utils/ast.js | 5 ++--- .../src/internal/client/reactivity/async.js | 15 +-------------- .../async-disconnected-effect-root/main.svelte | 3 +-- .../samples/async-effect-orphan/_config.js | 12 ++++++++++++ .../samples/async-effect-orphan/main.svelte | 14 ++++++++++++++ .../async-unset-context-after-restore/_config.js | 14 -------------- .../async-unset-context-after-restore/main.svelte | 15 --------------- 11 files changed, 41 insertions(+), 59 deletions(-) create mode 100644 packages/svelte/tests/runtime-runes/samples/async-effect-orphan/_config.js create mode 100644 packages/svelte/tests/runtime-runes/samples/async-effect-orphan/main.svelte delete mode 100644 packages/svelte/tests/runtime-runes/samples/async-unset-context-after-restore/_config.js delete mode 100644 packages/svelte/tests/runtime-runes/samples/async-unset-context-after-restore/main.svelte diff --git a/documentation/docs/98-reference/.generated/client-errors.md b/documentation/docs/98-reference/.generated/client-errors.md index 7fccac5808..2ab442afc3 100644 --- a/documentation/docs/98-reference/.generated/client-errors.md +++ b/documentation/docs/98-reference/.generated/client-errors.md @@ -88,6 +88,10 @@ Effect cannot be created inside a `$derived` value that was not itself created i `%rune%` can only be used inside an effect (e.g. during component initialisation) ``` +Effects can only be created while a parent effect is running. This means that they cannot, for example, be created inside an event handler or after an `await` expression (unless the `await` occurs directly inside a component's ` diff --git a/packages/svelte/tests/runtime-runes/samples/async-effect-orphan/_config.js b/packages/svelte/tests/runtime-runes/samples/async-effect-orphan/_config.js new file mode 100644 index 0000000000..b76ea85bfd --- /dev/null +++ b/packages/svelte/tests/runtime-runes/samples/async-effect-orphan/_config.js @@ -0,0 +1,12 @@ +import { tick } from 'svelte'; +import { test } from '../../test'; + +export default test({ + async test({ assert, logs }) { + await tick(); + + assert.deepEqual(logs, [ + `effect_orphan\n\`$effect\` can only be used inside an effect (e.g. during component initialisation)\nhttps://svelte.dev/e/effect_orphan` + ]); + } +}); diff --git a/packages/svelte/tests/runtime-runes/samples/async-effect-orphan/main.svelte b/packages/svelte/tests/runtime-runes/samples/async-effect-orphan/main.svelte new file mode 100644 index 0000000000..086a048025 --- /dev/null +++ b/packages/svelte/tests/runtime-runes/samples/async-effect-orphan/main.svelte @@ -0,0 +1,14 @@ + diff --git a/packages/svelte/tests/runtime-runes/samples/async-unset-context-after-restore/_config.js b/packages/svelte/tests/runtime-runes/samples/async-unset-context-after-restore/_config.js deleted file mode 100644 index ad543e91ae..0000000000 --- a/packages/svelte/tests/runtime-runes/samples/async-unset-context-after-restore/_config.js +++ /dev/null @@ -1,14 +0,0 @@ -import { tick } from 'svelte'; -import { test } from '../../test'; - -export default test({ - async test({ assert, logs }) { - await new Promise((resolve) => setTimeout(resolve, 10)); - assert.deepEqual(logs, [1, 1]); - const [button] = document.querySelectorAll('button'); - - button.click(); - await tick(); - assert.deepEqual(logs, [1, 1, 2]); - } -}); diff --git a/packages/svelte/tests/runtime-runes/samples/async-unset-context-after-restore/main.svelte b/packages/svelte/tests/runtime-runes/samples/async-unset-context-after-restore/main.svelte deleted file mode 100644 index a39c75fb94..0000000000 --- a/packages/svelte/tests/runtime-runes/samples/async-unset-context-after-restore/main.svelte +++ /dev/null @@ -1,15 +0,0 @@ - - - From 638ab370a561f97552229589f2f334655426fe5c Mon Sep 17 00:00:00 2001 From: Simon H <5968653+dummdidumm@users.noreply.github.com> Date: Wed, 27 May 2026 22:52:40 +0200 Subject: [PATCH 3/6] fix: prevent batch unlinking twice (#18303) Merged #18298 a bit too soon - there's still a situation which can corrput the linked list: If we merge one batch into another, it will unlink the batch immediately. But `discard` also calls it, running the unlink logic again, which can corrupt the linked list. Sketch: 1. Batch A is pending. 2. Batch B starts later, intersects A, resolves first, and merges into A. 3. B is unlinked immediately, but `A.oncommit(() => B.discard())` remains. 4. Independent batch C is created while A is still pending and is linked after A. 5. A commits, calls `B.discard()`, and B's stale `#prev`/`#next` can set `A.#next = null` / `last_batch = A`, disconnecting C. Not able to produce a failing test from it but it's definitely a fix we need to make. Also moved `#link` into a constructor, because it is (and should be) used only once. Also made the action after an error `discard` instead of just `#unlink` because this batch is done for and e.g. pending `settled` should resolve, too. --- .../src/internal/client/reactivity/batch.js | 32 +++++++++++-------- 1 file changed, 18 insertions(+), 14 deletions(-) diff --git a/packages/svelte/src/internal/client/reactivity/batch.js b/packages/svelte/src/internal/client/reactivity/batch.js index 21e2cc6922..74448da03a 100644 --- a/packages/svelte/src/internal/client/reactivity/batch.js +++ b/packages/svelte/src/internal/client/reactivity/batch.js @@ -214,6 +214,18 @@ export class Batch { #decrement_queued = false; + constructor() { + // link batch + if (last_batch === null) { + first_batch = last_batch = this; + } else { + last_batch.#next = this; + this.#prev = last_batch; + } + + last_batch = this; + } + #is_deferred() { if (this.is_fork) return true; @@ -327,11 +339,11 @@ export class Batch { } catch (e) { reset_all(root); // If there's no async work left, this branch is now dead and needs - // to be unlinked to not become a zombie that is never cleaned up. + // to be discarded to not become a zombie that is never cleaned up. // See https://github.com/sveltejs/svelte/issues/18221#issuecomment-4497918414 // for a (non-minimal) reproduction that demonstrates a case where this is necessary // to not get follow-up false-positives via "batch has scheduled roots" invariant errors. - if (!this.#is_deferred()) this.#unlink(); + if (!this.#is_deferred()) this.discard(); throw e; } } @@ -852,7 +864,6 @@ export class Batch { static ensure() { if (current_batch === null) { const batch = (current_batch = new Batch()); - batch.#link(); if (!is_processing && !is_flushing_sync) { queue_micro_task(() => { @@ -972,18 +983,11 @@ export class Batch { this.#roots.push(e); } - #link() { - if (last_batch === null) { - first_batch = last_batch = this; - } else { - last_batch.#next = this; - this.#prev = last_batch; - } - - last_batch = this; - } - #unlink() { + // #merge calls #unlink, discard later on does it again - prevent + // running it multiple times to not corrupt the linked list + if (!this.linked) return; + var prev = this.#prev; var next = this.#next; From 49538608356eabc74fc182b03449112a4fa1f12d Mon Sep 17 00:00:00 2001 From: Simon H <5968653+dummdidumm@users.noreply.github.com> Date: Wed, 27 May 2026 22:53:15 +0200 Subject: [PATCH 4/6] chore: remove unused class property (#18307) remnant of blocker approach --- packages/svelte/src/internal/client/reactivity/batch.js | 7 ------- 1 file changed, 7 deletions(-) diff --git a/packages/svelte/src/internal/client/reactivity/batch.js b/packages/svelte/src/internal/client/reactivity/batch.js index 74448da03a..8dbcacf429 100644 --- a/packages/svelte/src/internal/client/reactivity/batch.js +++ b/packages/svelte/src/internal/client/reactivity/batch.js @@ -127,13 +127,6 @@ export class Batch { */ previous = new Map(); - /** - * Async effects which this batch doesn't take into account anymore when calculating blockers, - * as it has a value for it already. - * @type {Set} - */ - unblocked = new Set(); - /** * When the batch is committed (and the DOM is updated), we need to remove old branches * and append new ones by calling the functions added inside (if/each/key/etc) blocks From 688671ec2328ed1739a2fb0ecf74a98d35d5e2b9 Mon Sep 17 00:00:00 2001 From: Rich Harris Date: Wed, 27 May 2026 17:20:15 -0400 Subject: [PATCH 5/6] chore: fix printing in sandbox (#18311) when `PRINT` is true, the sandbox should write out the printed code. at present it doesn't do this if `AST` is not also true --- playgrounds/sandbox/run.js | 20 +++++++++++--------- 1 file changed, 11 insertions(+), 9 deletions(-) diff --git a/playgrounds/sandbox/run.js b/playgrounds/sandbox/run.js index f79243d4e7..3b0602f716 100644 --- a/playgrounds/sandbox/run.js +++ b/playgrounds/sandbox/run.js @@ -59,19 +59,21 @@ for (const generate of /** @type {const} */ (['client', 'server'])) { mkdirp(path.dirname(output_js)); if (generate === 'client') { - if (AST) { + if (AST || PRINT) { const ast = parse(source, { modern: true }); - write( - `${cwd}/output/ast/${file}.json`, - JSON.stringify( - ast, - (key, value) => (typeof value === 'bigint' ? ['BigInt', value.toString()] : value), - '\t' - ) - ); + if (AST) { + write( + `${cwd}/output/ast/${file}.json`, + JSON.stringify( + ast, + (key, value) => (typeof value === 'bigint' ? ['BigInt', value.toString()] : value), + '\t' + ) + ); + } if (PRINT) { const printed = print(ast); From 0bb715d3cfe51134756e79b6193dacccfa77361f Mon Sep 17 00:00:00 2001 From: "github-actions[bot]" <41898282+github-actions[bot]@users.noreply.github.com> Date: Wed, 27 May 2026 17:47:19 -0400 Subject: [PATCH 6/6] 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> --- .changeset/beige-bobcats-eat.md | 5 ---- .changeset/event-walk-composed-path.md | 5 ---- .changeset/evil-stars-wave.md | 5 ---- .changeset/fine-corners-lay.md | 5 ---- .changeset/gentle-styles-hydrate.md | 5 ---- .changeset/iife-await-const-blocker.md | 5 ---- .changeset/khaki-states-train.md | 5 ---- .changeset/neat-groups-grin.md | 5 ---- .changeset/quiet-rivers-melt.md | 5 ---- .changeset/sad-shoes-help.md | 5 ---- .changeset/swift-terms-exist.md | 5 ---- .changeset/tasty-tires-wait.md | 5 ---- .changeset/tired-socks-brake.md | 5 ---- .changeset/true-dancers-tell.md | 5 ---- .changeset/true-pigs-go.md | 5 ---- packages/svelte/CHANGELOG.md | 34 ++++++++++++++++++++++++++ packages/svelte/package.json | 2 +- packages/svelte/src/version.js | 2 +- 18 files changed, 36 insertions(+), 77 deletions(-) delete mode 100644 .changeset/beige-bobcats-eat.md delete mode 100644 .changeset/event-walk-composed-path.md delete mode 100644 .changeset/evil-stars-wave.md delete mode 100644 .changeset/fine-corners-lay.md delete mode 100644 .changeset/gentle-styles-hydrate.md delete mode 100644 .changeset/iife-await-const-blocker.md delete mode 100644 .changeset/khaki-states-train.md delete mode 100644 .changeset/neat-groups-grin.md delete mode 100644 .changeset/quiet-rivers-melt.md delete mode 100644 .changeset/sad-shoes-help.md delete mode 100644 .changeset/swift-terms-exist.md delete mode 100644 .changeset/tasty-tires-wait.md delete mode 100644 .changeset/tired-socks-brake.md delete mode 100644 .changeset/true-dancers-tell.md delete mode 100644 .changeset/true-pigs-go.md diff --git a/.changeset/beige-bobcats-eat.md b/.changeset/beige-bobcats-eat.md deleted file mode 100644 index 95390c3c2e..0000000000 --- a/.changeset/beige-bobcats-eat.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'svelte': patch ---- - -fix: unlink errored and otherwise finished batch diff --git a/.changeset/event-walk-composed-path.md b/.changeset/event-walk-composed-path.md deleted file mode 100644 index 8b24573930..0000000000 --- a/.changeset/event-walk-composed-path.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'svelte': patch ---- - -perf: walk composedPath() directly in delegated event propagation diff --git a/.changeset/evil-stars-wave.md b/.changeset/evil-stars-wave.md deleted file mode 100644 index b199afe1dd..0000000000 --- a/.changeset/evil-stars-wave.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'svelte': patch ---- - -fix: transfer effects when merging batches diff --git a/.changeset/fine-corners-lay.md b/.changeset/fine-corners-lay.md deleted file mode 100644 index badbc6f81f..0000000000 --- a/.changeset/fine-corners-lay.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'svelte': patch ---- - -fix: allow `$derived(await ...)` in disconnected effect roots diff --git a/.changeset/gentle-styles-hydrate.md b/.changeset/gentle-styles-hydrate.md deleted file mode 100644 index f63d4e274c..0000000000 --- a/.changeset/gentle-styles-hydrate.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'svelte': patch ---- - -fix: remove temporary raw-text hydration markers diff --git a/.changeset/iife-await-const-blocker.md b/.changeset/iife-await-const-blocker.md deleted file mode 100644 index 2b5c4f0323..0000000000 --- a/.changeset/iife-await-const-blocker.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'svelte': patch ---- - -fix: propagate async `@const` blockers through closure references so template expressions like `{(() => host)()}` correctly wait for the awaited value diff --git a/.changeset/khaki-states-train.md b/.changeset/khaki-states-train.md deleted file mode 100644 index 5d4054fb15..0000000000 --- a/.changeset/khaki-states-train.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'svelte': patch ---- - -fix: properly unlink batches diff --git a/.changeset/neat-groups-grin.md b/.changeset/neat-groups-grin.md deleted file mode 100644 index 1d615216f0..0000000000 --- a/.changeset/neat-groups-grin.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'svelte': patch ---- - -fix: settle discarded batch diff --git a/.changeset/quiet-rivers-melt.md b/.changeset/quiet-rivers-melt.md deleted file mode 100644 index 7ce1b9b2d3..0000000000 --- a/.changeset/quiet-rivers-melt.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'svelte': patch ---- - -fix: declare `let:` directives before `{@const}` declarations on slotted elements diff --git a/.changeset/sad-shoes-help.md b/.changeset/sad-shoes-help.md deleted file mode 100644 index 76db87ba95..0000000000 --- a/.changeset/sad-shoes-help.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'svelte': patch ---- - -fix: resume outro-ed branches if they were kept around diff --git a/.changeset/swift-terms-exist.md b/.changeset/swift-terms-exist.md deleted file mode 100644 index cc69f1b3b1..0000000000 --- a/.changeset/swift-terms-exist.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'svelte': patch ---- - -fix: avoid waterfall-warning when async resolves to same value diff --git a/.changeset/tasty-tires-wait.md b/.changeset/tasty-tires-wait.md deleted file mode 100644 index 0f3fd2d671..0000000000 --- a/.changeset/tasty-tires-wait.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'svelte': patch ---- - -fix: correctly coordinate component-level effects inside async blocks diff --git a/.changeset/tired-socks-brake.md b/.changeset/tired-socks-brake.md deleted file mode 100644 index 1d302ffa60..0000000000 --- a/.changeset/tired-socks-brake.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'svelte': patch ---- - -fix: make unnecessary commit work less likely diff --git a/.changeset/true-dancers-tell.md b/.changeset/true-dancers-tell.md deleted file mode 100644 index bd50b2ddc9..0000000000 --- a/.changeset/true-dancers-tell.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -"svelte": patch ---- - -chore: add tag name to `a11y_click_events_have_key_events` warning diff --git a/.changeset/true-pigs-go.md b/.changeset/true-pigs-go.md deleted file mode 100644 index b4900b38fa..0000000000 --- a/.changeset/true-pigs-go.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -'svelte': patch ---- - -fix: catch rejected promises while merging/committing diff --git a/packages/svelte/CHANGELOG.md b/packages/svelte/CHANGELOG.md index 1f3f9d1149..ef40c5d159 100644 --- a/packages/svelte/CHANGELOG.md +++ b/packages/svelte/CHANGELOG.md @@ -1,5 +1,39 @@ # 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)) + ## 5.55.9 ### Patch Changes diff --git a/packages/svelte/package.json b/packages/svelte/package.json index a5af1e6ee9..bd10bf5966 100644 --- a/packages/svelte/package.json +++ b/packages/svelte/package.json @@ -2,7 +2,7 @@ "name": "svelte", "description": "Cybernetically enhanced web apps", "license": "MIT", - "version": "5.55.9", + "version": "5.55.10", "type": "module", "types": "./types/index.d.ts", "engines": { diff --git a/packages/svelte/src/version.js b/packages/svelte/src/version.js index ee05138797..638534d369 100644 --- a/packages/svelte/src/version.js +++ b/packages/svelte/src/version.js @@ -4,5 +4,5 @@ * The current version, as set in package.json. * @type {string} */ -export const VERSION = '5.55.9'; +export const VERSION = '5.55.10'; export const PUBLIC_VERSION = '5';