From 63cec9796758183a606187989ab601e6deceeee2 Mon Sep 17 00:00:00 2001 From: Rich Harris Date: Tue, 2 Jun 2026 13:01:20 -0400 Subject: [PATCH 1/5] chore: remove `{@const ...}` tags from template --- .../demo/src/routes/sverdle/+page.svelte | 18 ++++++++++-------- 1 file changed, 10 insertions(+), 8 deletions(-) diff --git a/packages/sv/src/create/templates/demo/src/routes/sverdle/+page.svelte b/packages/sv/src/create/templates/demo/src/routes/sverdle/+page.svelte index 34f19eb8b..8b2800fdd 100644 --- a/packages/sv/src/create/templates/demo/src/routes/sverdle/+page.svelte +++ b/packages/sv/src/create/templates/demo/src/routes/sverdle/+page.svelte @@ -116,17 +116,19 @@
(shake = false)}> {#each Array.from(Array(6).keys()) as row (row)} - {@const current = row === i} + {const current = $derived(row === i)} +

Row {row + 1}

{#each Array.from(Array(5).keys()) as column (column)} - {@const guess = current ? currentGuess : data.guesses[row]} - {@const answer = data.answers[row]?.[column]} - {@const value = guess?.[column] ?? ''} - {@const selected = current && column === guess.length} - {@const exact = answer === 'x'} - {@const close = answer === 'c'} - {@const missing = answer === '_'} + {const guess = $derived(current ? currentGuess : data.guesses[row])} + {const answer = $derived(data.answers[row]?.[column])} + {const value = $derived(guess?.[column] ?? '')} + {const selected = $derived(current && column === guess.length)} + {const exact = $derived(answer === 'x')} + {const close = $derived(answer === 'c')} + {const missing = $derived(answer === '_')} +
{value} From a4d6ce72e56035e26708476a9b9a313184631f9a Mon Sep 17 00:00:00 2001 From: jycouet Date: Tue, 2 Jun 2026 21:09:18 +0200 Subject: [PATCH 2/5] bump desp for new syntax --- .changeset/demo-const-tags.md | 5 + package.json | 6 +- packages/migrate/package.json | 2 +- packages/sv-utils/package.json | 2 +- packages/sv/package.json | 2 +- packages/sv/src/addons/eslint.ts | 2 +- packages/sv/src/addons/prettier.ts | 2 +- .../tests/snapshots/create-only/package.json | 2 +- .../create-with-all-addons/package.json | 6 +- .../templates/demo/package.template.json | 2 +- .../templates/library/package.template.json | 2 +- .../templates/minimal/package.template.json | 2 +- pnpm-lock.yaml | 152 +++++++++--------- 13 files changed, 96 insertions(+), 91 deletions(-) create mode 100644 .changeset/demo-const-tags.md diff --git a/.changeset/demo-const-tags.md b/.changeset/demo-const-tags.md new file mode 100644 index 000000000..df293f846 --- /dev/null +++ b/.changeset/demo-const-tags.md @@ -0,0 +1,5 @@ +--- +'sv': patch +--- + +chore(sv): demo template uses the new `{const ...}` declaration tags ([sveltejs/svelte#18282](https://github.com/sveltejs/svelte/pull/18282)) diff --git a/package.json b/package.json index 185d9c51b..e2355cdf4 100644 --- a/package.json +++ b/package.json @@ -30,13 +30,13 @@ "@typescript/native-preview": "7.0.0-dev.20251212.1", "@vitest/ui": "4.1.1", "eslint": "^10.4.0", - "eslint-plugin-svelte": "^3.17.0", + "eslint-plugin-svelte": "^3.19.0", "magic-string": "^0.30.21", "prettier": "^3.8.1", "prettier-plugin-packagejson": "^2.5.22", - "prettier-plugin-svelte": "^3.4.1", + "prettier-plugin-svelte": "^4.1.0", "sv": "workspace:*", - "svelte": "^5.53.0", + "svelte": "^5.56.1", "tsdown": "^0.21.7", "typescript": "^6.0.0", "typescript-eslint": "^8.58.1", diff --git a/packages/migrate/package.json b/packages/migrate/package.json index 30e45db6c..b66a60d88 100644 --- a/packages/migrate/package.json +++ b/packages/migrate/package.json @@ -43,7 +43,7 @@ "@types/node": "^20.14.8", "@types/prompts": "^2.4.9", "@types/semver": "^7.7.1", - "svelte": "^5.53.0" + "svelte": "^5.56.1" }, "keywords": [ "migration", diff --git a/packages/sv-utils/package.json b/packages/sv-utils/package.json index 63e3dff42..b887df0b8 100644 --- a/packages/sv-utils/package.json +++ b/packages/sv-utils/package.json @@ -34,7 +34,7 @@ "semver": "^7.7.4", "silver-fleece": "^1.2.1", "smol-toml": "^1.5.2", - "svelte": "^5.53.0", + "svelte": "^5.56.1", "yaml": "^2.8.2", "zimmerframe": "^1.1.4" }, diff --git a/packages/sv/package.json b/packages/sv/package.json index 42ad4ce02..f95f5e13a 100644 --- a/packages/sv/package.json +++ b/packages/sv/package.json @@ -43,7 +43,7 @@ "gitignore-parser": "^0.0.2", "ps-tree": "^1.2.0", "sucrase": "^3.35.1", - "svelte": "^5.53.0", + "svelte": "^5.56.1", "tar-fs": "^3.1.1", "tiny-glob": "^0.2.9", "tinyexec": "^1.0.2", diff --git a/packages/sv/src/addons/eslint.ts b/packages/sv/src/addons/eslint.ts index a7f353206..b3c6ae789 100644 --- a/packages/sv/src/addons/eslint.ts +++ b/packages/sv/src/addons/eslint.ts @@ -13,7 +13,7 @@ export default defineAddon({ const prettierInstalled = Boolean(dependencyVersion('prettier')); sv.devDependency('eslint', ESLINT_VERSION); - sv.devDependency('eslint-plugin-svelte', '^3.17.0'); + sv.devDependency('eslint-plugin-svelte', '^3.19.0'); sv.devDependency('globals', '^17.4.0'); sv.devDependency('@eslint/js', '^10.0.1'); sv.devDependency('@types/node', getNodeTypesVersion()); diff --git a/packages/sv/src/addons/prettier.ts b/packages/sv/src/addons/prettier.ts index 59a18410c..957e4d0eb 100644 --- a/packages/sv/src/addons/prettier.ts +++ b/packages/sv/src/addons/prettier.ts @@ -13,7 +13,7 @@ export default defineAddon({ if (tailwindcssInstalled) sv.devDependency('prettier-plugin-tailwindcss', '^0.7.2'); sv.devDependency('prettier', '^3.8.1'); - sv.devDependency('prettier-plugin-svelte', '^3.5.1'); + sv.devDependency('prettier-plugin-svelte', '^4.1.0'); sv.file( '.prettierignore', diff --git a/packages/sv/src/cli/tests/snapshots/create-only/package.json b/packages/sv/src/cli/tests/snapshots/create-only/package.json index 6fb97483a..06621428f 100644 --- a/packages/sv/src/cli/tests/snapshots/create-only/package.json +++ b/packages/sv/src/cli/tests/snapshots/create-only/package.json @@ -15,7 +15,7 @@ "@sveltejs/adapter-auto": "^7.0.1", "@sveltejs/kit": "^2.57.0", "@sveltejs/vite-plugin-svelte": "^7.0.0", - "svelte": "^5.55.2", + "svelte": "^5.56.1", "svelte-check": "^4.4.6", "typescript": "^6.0.2", "vite": "^8.0.7" diff --git a/packages/sv/src/cli/tests/snapshots/create-with-all-addons/package.json b/packages/sv/src/cli/tests/snapshots/create-with-all-addons/package.json index 65dd572b6..bfe34a066 100644 --- a/packages/sv/src/cli/tests/snapshots/create-with-all-addons/package.json +++ b/packages/sv/src/cli/tests/snapshots/create-with-all-addons/package.json @@ -39,14 +39,14 @@ "drizzle-orm": "^0.45.2", "eslint": "^10.4.0", "eslint-config-prettier": "^10.1.8", - "eslint-plugin-svelte": "^3.17.0", + "eslint-plugin-svelte": "^3.19.0", "globals": "^17.4.0", "mdsvex": "^0.12.7", "playwright": "^1.60.0", "prettier": "^3.8.1", - "prettier-plugin-svelte": "^3.5.1", + "prettier-plugin-svelte": "^4.1.0", "prettier-plugin-tailwindcss": "^0.7.2", - "svelte": "^5.55.2", + "svelte": "^5.56.1", "svelte-check": "^4.4.6", "tailwindcss": "^4.2.2", "typescript": "^6.0.2", diff --git a/packages/sv/src/create/templates/demo/package.template.json b/packages/sv/src/create/templates/demo/package.template.json index ae4ef0ac2..b015c2727 100644 --- a/packages/sv/src/create/templates/demo/package.template.json +++ b/packages/sv/src/create/templates/demo/package.template.json @@ -15,7 +15,7 @@ "@sveltejs/adapter-auto": "^7.0.1", "@sveltejs/kit": "^2.57.0", "@sveltejs/vite-plugin-svelte": "^7.0.0", - "svelte": "^5.55.2", + "svelte": "^5.56.1", "vite": "^8.0.7" } } diff --git a/packages/sv/src/create/templates/library/package.template.json b/packages/sv/src/create/templates/library/package.template.json index ab2872037..95c1cd4aa 100644 --- a/packages/sv/src/create/templates/library/package.template.json +++ b/packages/sv/src/create/templates/library/package.template.json @@ -28,7 +28,7 @@ "@sveltejs/package": "^2.5.7", "@sveltejs/vite-plugin-svelte": "^7.0.0", "publint": "^0.3.18", - "svelte": "^5.55.2", + "svelte": "^5.56.1", "typescript": "^6.0.2", "vite": "^8.0.7" }, diff --git a/packages/sv/src/create/templates/minimal/package.template.json b/packages/sv/src/create/templates/minimal/package.template.json index 9a30d72e1..690eb69a4 100644 --- a/packages/sv/src/create/templates/minimal/package.template.json +++ b/packages/sv/src/create/templates/minimal/package.template.json @@ -13,7 +13,7 @@ "@sveltejs/adapter-auto": "^7.0.1", "@sveltejs/kit": "^2.57.0", "@sveltejs/vite-plugin-svelte": "^7.0.0", - "svelte": "^5.55.2", + "svelte": "^5.56.1", "vite": "^8.0.7" } } diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml index ebde45b8f..7d46a8d31 100644 --- a/pnpm-lock.yaml +++ b/pnpm-lock.yaml @@ -16,13 +16,13 @@ importers: version: 1.60.0 '@sveltejs/eslint-config': specifier: ^9.0.0 - version: 9.0.0(@eslint/js@10.0.1(eslint@10.4.0))(@stylistic/eslint-plugin-js@4.4.1(eslint@10.4.0))(eslint-config-prettier@10.1.8(eslint@10.4.0))(eslint-plugin-n@17.24.0(eslint@10.4.0)(typescript@6.0.2))(eslint-plugin-svelte@3.17.0(eslint@10.4.0)(svelte@5.54.0))(eslint@10.4.0)(typescript-eslint@8.58.1(eslint@10.4.0)(typescript@6.0.2))(typescript@6.0.2) + version: 9.0.0(@eslint/js@10.0.1(eslint@10.4.0))(@stylistic/eslint-plugin-js@4.4.1(eslint@10.4.0))(eslint-config-prettier@10.1.8(eslint@10.4.0))(eslint-plugin-n@17.24.0(eslint@10.4.0)(typescript@6.0.2))(eslint-plugin-svelte@3.19.0(eslint@10.4.0)(svelte@5.56.1(@typescript-eslint/types@8.58.1)))(eslint@10.4.0)(typescript-eslint@8.58.1(eslint@10.4.0)(typescript@6.0.2))(typescript@6.0.2) '@svitejs/changesets-changelog-github-compact': specifier: ^1.2.0 version: 1.2.0 '@trivago/prettier-plugin-sort-imports': specifier: ^6.0.2 - version: 6.0.2(prettier-plugin-svelte@3.5.1(prettier@3.8.1)(svelte@5.54.0))(prettier@3.8.1)(svelte@5.54.0) + version: 6.0.2(prettier-plugin-svelte@4.1.0(prettier@3.8.1)(svelte@5.56.1(@typescript-eslint/types@8.58.1)))(prettier@3.8.1)(svelte@5.56.1(@typescript-eslint/types@8.58.1)) '@types/node': specifier: ^20.19.30 version: 20.19.37 @@ -36,8 +36,8 @@ importers: specifier: ^10.4.0 version: 10.4.0 eslint-plugin-svelte: - specifier: ^3.17.0 - version: 3.17.0(eslint@10.4.0)(svelte@5.54.0) + specifier: ^3.19.0 + version: 3.19.0(eslint@10.4.0)(svelte@5.56.1(@typescript-eslint/types@8.58.1)) magic-string: specifier: ^0.30.21 version: 0.30.21 @@ -48,14 +48,14 @@ importers: specifier: ^2.5.22 version: 2.5.22(prettier@3.8.1) prettier-plugin-svelte: - specifier: ^3.4.1 - version: 3.5.1(prettier@3.8.1)(svelte@5.54.0) + specifier: ^4.1.0 + version: 4.1.0(prettier@3.8.1)(svelte@5.56.1(@typescript-eslint/types@8.58.1)) sv: specifier: workspace:* version: link:packages/sv svelte: - specifier: ^5.53.0 - version: 5.54.0 + specifier: ^5.56.1 + version: 5.56.1(@typescript-eslint/types@8.58.1) tsdown: specifier: ^0.21.7 version: 0.21.7(@typescript/native-preview@7.0.0-dev.20251212.1)(typescript@6.0.2) @@ -112,8 +112,8 @@ importers: specifier: ^7.7.1 version: 7.7.1 svelte: - specifier: ^5.53.0 - version: 5.54.0 + specifier: ^5.56.1 + version: 5.56.1(@typescript-eslint/types@8.58.1) packages/sv: dependencies: @@ -152,8 +152,8 @@ importers: specifier: ^3.35.1 version: 3.35.1 svelte: - specifier: ^5.53.0 - version: 5.54.0 + specifier: ^5.56.1 + version: 5.56.1(@typescript-eslint/types@8.58.1) tar-fs: specifier: ^3.1.1 version: 3.1.2 @@ -197,8 +197,8 @@ importers: specifier: ^1.5.2 version: 1.6.0 svelte: - specifier: ^5.53.0 - version: 5.54.0 + specifier: ^5.56.1 + version: 5.56.1(@typescript-eslint/types@8.58.1) yaml: specifier: ^2.8.2 version: 2.8.2 @@ -678,8 +678,8 @@ packages: peerDependencies: eslint: '>=9.0.0' - '@sveltejs/acorn-typescript@1.0.9': - resolution: {integrity: sha512-lVJX6qEgs/4DOcRTpo56tmKzVPtoWAaVbL4hfO7t7NVwl9AAXzQR6cihesW1BmNMPl+bK6dreu2sOKBP2Q9CIA==} + '@sveltejs/acorn-typescript@1.0.10': + resolution: {integrity: sha512-4WfKk68eTih+MiJD4fSbxN7E8kVBmTMPWHUPYjvl2N0rMs53YLTT8/YjKU5Dtnz5LqDjl7LEw4U7lXR2W3J5WA==} peerDependencies: acorn: ^8.9.0 @@ -1122,8 +1122,8 @@ packages: resolution: {integrity: sha512-qE3Veg1YXzGHQhlA6jzebZN2qVf6NX+A7m7qlhCGG30dJixrAQhYOsJjsnBjJkCSmuOPpCk30145fr8FV0bzog==} engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0} - devalue@5.6.4: - resolution: {integrity: sha512-Gp6rDldRsFh/7XuouDbxMH3Mx8GMCcgzIb1pDTvNyn8pZGQ22u+Wa+lGV9dQCltFQ7uVw0MhRyb8XDskNFOReA==} + devalue@5.8.1: + resolution: {integrity: sha512-4CXDYRBGqN+57wVJkuXBYmpAVUSg3L6JAQa/DFqm238G73E1wuyc/JhGQJzN7vUf/CMphYau2zXbfWzDR5aTEw==} dir-glob@3.0.1: resolution: {integrity: sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA==} @@ -1191,8 +1191,8 @@ packages: peerDependencies: eslint: '>=8.23.0' - eslint-plugin-svelte@3.17.0: - resolution: {integrity: sha512-sF6wgd5FLS2P8CCaOy2HdYYYEcZ6TwL251dLHUkNmtLnWECk1Dwc+j6VeulmmnFxr7Xs0WNtjweOA+bJ0PnaFw==} + eslint-plugin-svelte@3.19.0: + resolution: {integrity: sha512-t3rNaZeXz4d2gG4uJyMEYfJCFKf22+SWbSizIIXIWKu4wM+XPLiMWuSSr/C5821JmFeN9ogK+eExbG+z+twyxw==} engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0} peerDependencies: eslint: ^8.57.1 || ^9.0.0 || ^10.0.0 @@ -1251,6 +1251,14 @@ packages: resolution: {integrity: sha512-Ap6G0WQwcU/LHsvLwON1fAQX9Zp0A2Y6Y/cJBl9r/JbW90Zyg4/zbG6zzKa2OTALELarYHmKu0GhpM5EO+7T0g==} engines: {node: '>=0.10'} + esrap@2.2.10: + resolution: {integrity: sha512-HUTyxhhAQBl1hhsyLlHD1sh9xF6o6vaejzLxK5sge+LzrdEflQPQaNhC+n98d+OVB8v3LCCF+y80x/4bACjjJw==} + peerDependencies: + '@typescript-eslint/types': ^8.2.0 + peerDependenciesMeta: + '@typescript-eslint/types': + optional: true + esrap@2.2.4: resolution: {integrity: sha512-suICpxAmZ9A8bzJjEl/+rLJiDKC0X4gYWUxT6URAWBLvlXmtbZd5ySMu/N2ZGEtMCAmflUDPSehrP9BQcsGcSg==} @@ -1645,11 +1653,6 @@ packages: mz@2.7.0: resolution: {integrity: sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==} - nanoid@3.3.11: - resolution: {integrity: sha512-N8SpfPUnUp1bK+PMYW8qSWdl9U+wwNWI4QKxOYDy9JAro3WMX7p2OeVRF9v+347pnakNevPmiHhNmZ2HbFA76w==} - engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} - hasBin: true - nanoid@3.3.12: resolution: {integrity: sha512-ZB9RH/39qpq5Vu6Y+NmUaFhQR6pp+M2Xt76XBnEwDaGcVAqhlvxrl3B2bKS5D3NH3QR76v3aSrKaF/Kiy7lEtQ==} engines: {node: ^10 || ^12 || ^13.7 || ^14 || >=15.0.1} @@ -1810,10 +1813,6 @@ packages: resolution: {integrity: sha512-SoSL4+OSEtR99LHFZQiJLkT59C5B1amGO1NzTwj7TT1qCUgUO6hxOvzkOYxD+vMrXBM3XJIKzokoERdqQq/Zmg==} engines: {node: ^10 || ^12 || >=14} - postcss@8.5.8: - resolution: {integrity: sha512-OW/rX8O/jXnm82Ey1k44pObPtdblfiuWnrd8X7GJ7emImCOstunGbXUpp7HdBrFQX6rJzn3sPT397Wp5aCwCHg==} - engines: {node: ^10 || ^12 || >=14} - prelude-ls@1.2.1: resolution: {integrity: sha512-vkcDPrRZo1QZLbn5RLGPpg/WmIQ65qoWWhcGKf/b5eplkkarX0m9z8ppCat4mlOqUsWpyNuYgO3VRyrYHSzX5g==} engines: {node: '>= 0.8.0'} @@ -1826,11 +1825,12 @@ packages: prettier: optional: true - prettier-plugin-svelte@3.5.1: - resolution: {integrity: sha512-65+fr5+cgIKWKiqM1Doum4uX6bY8iFCdztvvp2RcF+AJoieaw9kJOFMNcJo/bkmKYsxFaM9OsVZK/gWauG/5mg==} + prettier-plugin-svelte@4.1.0: + resolution: {integrity: sha512-YZkhA2Q9oOerFFG9tq+2f98WYT7Z2JgrybJrAyrB78jpsH9i/DdgplXemehuFPgsldetFNCcR/yCcYlDjPy94Q==} + engines: {node: '>=20'} peerDependencies: prettier: ^3.0.0 - svelte: ^3.2.0 || ^4.0.0-next.0 || ^5.0.0-next.0 + svelte: ^5.0.0 prettier@2.8.8: resolution: {integrity: sha512-tdN8qQGvNjw4CHbY+XXk0JgCXn9QiF21a55rBe5LJAU+kDyC4WQn4+awm2Xfk2lQMk5fKup9XgzTZtGkjBdP9Q==} @@ -2002,17 +2002,17 @@ packages: engines: {node: '>=16 || 14 >=14.17'} hasBin: true - svelte-eslint-parser@1.6.0: - resolution: {integrity: sha512-qoB1ehychT6OxEtQAqc/guSqLS20SlA53Uijl7x375s8nlUT0lb9ol/gzraEEatQwsyPTJo87s2CmKL9Xab+Uw==} - engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0, pnpm: 10.30.3} + svelte-eslint-parser@1.7.0: + resolution: {integrity: sha512-TU3DQx7IjUrrxKbET/U639xofp044xLXGGvFaLH9PKQOY5g5iRtmYy2rZB7gOeGRRTP7255AE8fUtIwsp/yOjQ==} + engines: {node: ^18.18.0 || ^20.9.0 || >=21.1.0, pnpm: 10.34.1} peerDependencies: svelte: ^3.37.0 || ^4.0.0 || ^5.0.0 peerDependenciesMeta: svelte: optional: true - svelte@5.54.0: - resolution: {integrity: sha512-TTDxwYnHkova6Wsyj1PGt9TByuWqvMoeY1bQiuAf2DM/JeDSMw7FjRKzk8K/5mJ99vGOKhbCqTDpyAKwjp4igg==} + svelte@5.56.1: + resolution: {integrity: sha512-eArsJmvl3xZVuTYD852PzIEdg2wgDdIZ1NEsIPbzAukHwi284B18No4nK2rCO9AwsWUDza4Cjvmoa4HaojTl5g==} engines: {node: '>=18'} tapable@2.3.3: @@ -2794,18 +2794,18 @@ snapshots: eslint-visitor-keys: 4.2.1 espree: 10.4.0 - '@sveltejs/acorn-typescript@1.0.9(acorn@8.16.0)': + '@sveltejs/acorn-typescript@1.0.10(acorn@8.16.0)': dependencies: acorn: 8.16.0 - '@sveltejs/eslint-config@9.0.0(@eslint/js@10.0.1(eslint@10.4.0))(@stylistic/eslint-plugin-js@4.4.1(eslint@10.4.0))(eslint-config-prettier@10.1.8(eslint@10.4.0))(eslint-plugin-n@17.24.0(eslint@10.4.0)(typescript@6.0.2))(eslint-plugin-svelte@3.17.0(eslint@10.4.0)(svelte@5.54.0))(eslint@10.4.0)(typescript-eslint@8.58.1(eslint@10.4.0)(typescript@6.0.2))(typescript@6.0.2)': + '@sveltejs/eslint-config@9.0.0(@eslint/js@10.0.1(eslint@10.4.0))(@stylistic/eslint-plugin-js@4.4.1(eslint@10.4.0))(eslint-config-prettier@10.1.8(eslint@10.4.0))(eslint-plugin-n@17.24.0(eslint@10.4.0)(typescript@6.0.2))(eslint-plugin-svelte@3.19.0(eslint@10.4.0)(svelte@5.56.1(@typescript-eslint/types@8.58.1)))(eslint@10.4.0)(typescript-eslint@8.58.1(eslint@10.4.0)(typescript@6.0.2))(typescript@6.0.2)': dependencies: '@eslint/js': 10.0.1(eslint@10.4.0) '@stylistic/eslint-plugin-js': 4.4.1(eslint@10.4.0) eslint: 10.4.0 eslint-config-prettier: 10.1.8(eslint@10.4.0) eslint-plugin-n: 17.24.0(eslint@10.4.0)(typescript@6.0.2) - eslint-plugin-svelte: 3.17.0(eslint@10.4.0)(svelte@5.54.0) + eslint-plugin-svelte: 3.19.0(eslint@10.4.0)(svelte@5.56.1(@typescript-eslint/types@8.58.1)) globals: 17.4.0 typescript: 6.0.2 typescript-eslint: 8.58.1(eslint@10.4.0)(typescript@6.0.2) @@ -2817,7 +2817,7 @@ snapshots: transitivePeerDependencies: - encoding - '@trivago/prettier-plugin-sort-imports@6.0.2(prettier-plugin-svelte@3.5.1(prettier@3.8.1)(svelte@5.54.0))(prettier@3.8.1)(svelte@5.54.0)': + '@trivago/prettier-plugin-sort-imports@6.0.2(prettier-plugin-svelte@4.1.0(prettier@3.8.1)(svelte@5.56.1(@typescript-eslint/types@8.58.1)))(prettier@3.8.1)(svelte@5.56.1(@typescript-eslint/types@8.58.1))': dependencies: '@babel/generator': 7.29.1 '@babel/parser': 7.29.2 @@ -2829,8 +2829,8 @@ snapshots: parse-imports-exports: 0.2.4 prettier: 3.8.1 optionalDependencies: - prettier-plugin-svelte: 3.5.1(prettier@3.8.1)(svelte@5.54.0) - svelte: 5.54.0 + prettier-plugin-svelte: 4.1.0(prettier@3.8.1)(svelte@5.56.1(@typescript-eslint/types@8.58.1)) + svelte: 5.56.1(@typescript-eslint/types@8.58.1) transitivePeerDependencies: - supports-color @@ -3215,7 +3215,7 @@ snapshots: detect-newline@4.0.1: {} - devalue@5.6.4: {} + devalue@5.8.1: {} dir-glob@3.0.1: dependencies: @@ -3278,7 +3278,7 @@ snapshots: transitivePeerDependencies: - typescript - eslint-plugin-svelte@3.17.0(eslint@10.4.0)(svelte@5.54.0): + eslint-plugin-svelte@3.19.0(eslint@10.4.0)(svelte@5.56.1(@typescript-eslint/types@8.58.1)): dependencies: '@eslint-community/eslint-utils': 4.9.1(eslint@10.4.0) '@jridgewell/sourcemap-codec': 1.5.5 @@ -3286,13 +3286,13 @@ snapshots: esutils: 2.0.3 globals: 16.5.0 known-css-properties: 0.37.0 - postcss: 8.5.8 - postcss-load-config: 3.1.4(postcss@8.5.8) - postcss-safe-parser: 7.0.1(postcss@8.5.8) - semver: 7.7.4 - svelte-eslint-parser: 1.6.0(svelte@5.54.0) + postcss: 8.5.14 + postcss-load-config: 3.1.4(postcss@8.5.14) + postcss-safe-parser: 7.0.1(postcss@8.5.14) + semver: 7.8.0 + svelte-eslint-parser: 1.7.0(svelte@5.56.1(@typescript-eslint/types@8.58.1)) optionalDependencies: - svelte: 5.54.0 + svelte: 5.56.1(@typescript-eslint/types@8.58.1) transitivePeerDependencies: - ts-node @@ -3369,6 +3369,12 @@ snapshots: dependencies: estraverse: 5.3.0 + esrap@2.2.10(@typescript-eslint/types@8.58.1): + dependencies: + '@jridgewell/sourcemap-codec': 1.5.5 + optionalDependencies: + '@typescript-eslint/types': 8.58.1 + esrap@2.2.4: dependencies: '@jridgewell/sourcemap-codec': 1.5.5 @@ -3702,8 +3708,6 @@ snapshots: object-assign: 4.1.1 thenify-all: 1.6.0 - nanoid@3.3.11: {} - nanoid@3.3.12: {} natural-compare@1.4.0: {} @@ -3801,20 +3805,20 @@ snapshots: optionalDependencies: fsevents: 2.3.2 - postcss-load-config@3.1.4(postcss@8.5.8): + postcss-load-config@3.1.4(postcss@8.5.14): dependencies: lilconfig: 2.1.0 yaml: 1.10.2 optionalDependencies: - postcss: 8.5.8 + postcss: 8.5.14 - postcss-safe-parser@7.0.1(postcss@8.5.8): + postcss-safe-parser@7.0.1(postcss@8.5.14): dependencies: - postcss: 8.5.8 + postcss: 8.5.14 - postcss-scss@4.0.9(postcss@8.5.8): + postcss-scss@4.0.9(postcss@8.5.14): dependencies: - postcss: 8.5.8 + postcss: 8.5.14 postcss-selector-parser@7.1.1: dependencies: @@ -3827,12 +3831,6 @@ snapshots: picocolors: 1.1.1 source-map-js: 1.2.1 - postcss@8.5.8: - dependencies: - nanoid: 3.3.11 - picocolors: 1.1.1 - source-map-js: 1.2.1 - prelude-ls@1.2.1: {} prettier-plugin-packagejson@2.5.22(prettier@3.8.1): @@ -3841,10 +3839,10 @@ snapshots: optionalDependencies: prettier: 3.8.1 - prettier-plugin-svelte@3.5.1(prettier@3.8.1)(svelte@5.54.0): + prettier-plugin-svelte@4.1.0(prettier@3.8.1)(svelte@5.56.1(@typescript-eslint/types@8.58.1)): dependencies: prettier: 3.8.1 - svelte: 5.54.0 + svelte: 5.56.1(@typescript-eslint/types@8.58.1) prettier@2.8.8: {} @@ -4036,36 +4034,38 @@ snapshots: tinyglobby: 0.2.15 ts-interface-checker: 0.1.13 - svelte-eslint-parser@1.6.0(svelte@5.54.0): + svelte-eslint-parser@1.7.0(svelte@5.56.1(@typescript-eslint/types@8.58.1)): dependencies: eslint-scope: 8.4.0 eslint-visitor-keys: 4.2.1 espree: 10.4.0 - postcss: 8.5.8 - postcss-scss: 4.0.9(postcss@8.5.8) + postcss: 8.5.14 + postcss-scss: 4.0.9(postcss@8.5.14) postcss-selector-parser: 7.1.1 - semver: 7.7.4 + semver: 7.8.0 optionalDependencies: - svelte: 5.54.0 + svelte: 5.56.1(@typescript-eslint/types@8.58.1) - svelte@5.54.0: + svelte@5.56.1(@typescript-eslint/types@8.58.1): dependencies: '@jridgewell/remapping': 2.3.5 '@jridgewell/sourcemap-codec': 1.5.5 - '@sveltejs/acorn-typescript': 1.0.9(acorn@8.16.0) + '@sveltejs/acorn-typescript': 1.0.10(acorn@8.16.0) '@types/estree': 1.0.8 '@types/trusted-types': 2.0.7 acorn: 8.16.0 aria-query: 5.3.1 axobject-query: 4.1.0 clsx: 2.1.1 - devalue: 5.6.4 + devalue: 5.8.1 esm-env: 1.2.2 - esrap: 2.2.4 + esrap: 2.2.10(@typescript-eslint/types@8.58.1) is-reference: 3.0.3 locate-character: 3.0.0 magic-string: 0.30.21 zimmerframe: 1.1.4 + transitivePeerDependencies: + - '@typescript-eslint/types' tapable@2.3.3: {} From c849991b76792fe3ee53907c9435595084d5b39f Mon Sep 17 00:00:00 2001 From: jycouet Date: Wed, 3 Jun 2026 08:25:22 +0200 Subject: [PATCH 3/5] chore: nicer logs --- packages/sv/src/cli/tests/cli.ts | 7 ++++++- packages/sv/src/create/tests/check.ts | 14 +++++++++++--- packages/sv/src/pnpm-install-error.ts | 11 +++++++++++ packages/sv/src/testing.ts | 9 ++++++++- 4 files changed, 36 insertions(+), 5 deletions(-) create mode 100644 packages/sv/src/pnpm-install-error.ts diff --git a/packages/sv/src/cli/tests/cli.ts b/packages/sv/src/cli/tests/cli.ts index 5c2fe109a..eb1f24501 100644 --- a/packages/sv/src/cli/tests/cli.ts +++ b/packages/sv/src/cli/tests/cli.ts @@ -4,6 +4,7 @@ import path from 'node:path'; import process from 'node:process'; import { exec } from 'tinyexec'; import { beforeAll, describe, expect, it } from 'vitest'; +import { pnpmInstallErrorMessage } from '../../pnpm-install-error.ts'; const monoRepoPath = path.resolve(__dirname, '..', '..', '..', '..', '..'); const svBinPath = path.resolve(monoRepoPath, 'packages', 'sv', 'dist', 'bin.mjs'); @@ -129,9 +130,13 @@ describe('cli', () => { } if (projectName === 'create-with-all-addons' && process.platform !== 'win32') { - await exec('pnpm', ['install', '--no-frozen-lockfile'], { + const installResult = await exec('pnpm', ['install', '--no-frozen-lockfile'], { nodeOptions: { stdio: 'pipe', cwd: testOutputPath } }); + expect( + installResult.exitCode, + pnpmInstallErrorMessage(testOutputPath, installResult.stdout, installResult.stderr) + ).toBe(0); await exec('pnpm', ['build'], { nodeOptions: { stdio: 'pipe', cwd: testOutputPath } }); diff --git a/packages/sv/src/create/tests/check.ts b/packages/sv/src/create/tests/check.ts index c214a375b..f56a80b48 100644 --- a/packages/sv/src/create/tests/check.ts +++ b/packages/sv/src/create/tests/check.ts @@ -5,6 +5,7 @@ import { fileURLToPath } from 'node:url'; import { promisify } from 'node:util'; import { beforeAll, describe, expect, test } from 'vitest'; import { add, officialAddons } from '../../../../sv/src/index.ts'; +import { pnpmInstallErrorMessage } from '../../pnpm-install-error.ts'; import { type LanguageType, type TemplateType, create } from '../index.ts'; // Resolve the given path relative to the current file @@ -22,9 +23,16 @@ fs.writeFileSync(path.join(test_workspace_dir, 'pnpm-workspace.yaml'), 'packages const exec_async = promisify(exec); beforeAll(async () => { - await exec_async('pnpm install --no-frozen-lockfile', { - cwd: test_workspace_dir - }); + try { + await exec_async('pnpm install --no-frozen-lockfile', { + cwd: test_workspace_dir + }); + } catch (e) { + const err = e as { stdout?: string; stderr?: string }; + throw new Error(pnpmInstallErrorMessage(test_workspace_dir, err.stdout, err.stderr), { + cause: e + }); + } }, 60000); /** diff --git a/packages/sv/src/pnpm-install-error.ts b/packages/sv/src/pnpm-install-error.ts new file mode 100644 index 000000000..a83ed98b1 --- /dev/null +++ b/packages/sv/src/pnpm-install-error.ts @@ -0,0 +1,11 @@ +/** Readable error for a failed test `pnpm install`, surfacing pnpm's output. */ +export function pnpmInstallErrorMessage( + cwd: string, + stdout: string | Buffer = '', + stderr: string | Buffer = '' +): string { + const output = `${stdout}${stderr}`; + const tooRecent = output.includes('ERR_PNPM_NO_MATURE_MATCHING_VERSION'); + const hint = tooRecent ? ' (a dependency was published too recently, minimumReleaseAge)' : ''; + return `pnpm install failed in ${cwd}${hint}\n\n${output}`; +} diff --git a/packages/sv/src/testing.ts b/packages/sv/src/testing.ts index 20d6f2ab8..9da606498 100644 --- a/packages/sv/src/testing.ts +++ b/packages/sv/src/testing.ts @@ -9,6 +9,7 @@ import type { TestProject } from 'vitest/node'; import { add, type AddonMap, type OptionMap } from './core/engine.ts'; import { addPnpmAllowBuilds } from './core/package-manager.ts'; import { create } from './create/index.ts'; +import { pnpmInstallErrorMessage } from './pnpm-install-error.ts'; export type ProjectVariant = 'kit-js' | 'kit-ts' | 'vite-js' | 'vite-ts'; export const variants: ProjectVariant[] = ['kit-js', 'kit-ts', 'vite-js', 'vite-ts']; @@ -364,7 +365,13 @@ export function createSetupTest( addPnpmAllowBuilds(cwd, 'pnpm', 'esbuild'); } - execSync('pnpm install', { cwd: path.resolve(cwd, testName), stdio: 'pipe' }); + const installDir = path.resolve(cwd, testName); + try { + execSync('pnpm install', { cwd: installDir, stdio: 'pipe' }); + } catch (e) { + const err = e as { stdout?: Buffer; stderr?: Buffer }; + throw new Error(pnpmInstallErrorMessage(installDir, err.stdout, err.stderr), { cause: e }); + } }); beforeEach(async (ctx) => { From aa7c4a872e6e0e60ef577500f7430ca1e5448b6d Mon Sep 17 00:00:00 2001 From: jycouet Date: Wed, 3 Jun 2026 11:20:30 +0200 Subject: [PATCH 4/5] cleanup --- packages/sv/src/cli/tests/cli.ts | 3 +-- packages/sv/src/create/tests/check.ts | 22 ++++++++++------------ packages/sv/src/pnpm-install-error.ts | 11 ----------- packages/sv/src/testing.ts | 13 +++++++------ 4 files changed, 18 insertions(+), 31 deletions(-) delete mode 100644 packages/sv/src/pnpm-install-error.ts diff --git a/packages/sv/src/cli/tests/cli.ts b/packages/sv/src/cli/tests/cli.ts index eb1f24501..8908fd040 100644 --- a/packages/sv/src/cli/tests/cli.ts +++ b/packages/sv/src/cli/tests/cli.ts @@ -4,7 +4,6 @@ import path from 'node:path'; import process from 'node:process'; import { exec } from 'tinyexec'; import { beforeAll, describe, expect, it } from 'vitest'; -import { pnpmInstallErrorMessage } from '../../pnpm-install-error.ts'; const monoRepoPath = path.resolve(__dirname, '..', '..', '..', '..', '..'); const svBinPath = path.resolve(monoRepoPath, 'packages', 'sv', 'dist', 'bin.mjs'); @@ -135,7 +134,7 @@ describe('cli', () => { }); expect( installResult.exitCode, - pnpmInstallErrorMessage(testOutputPath, installResult.stdout, installResult.stderr) + `pnpm install failed:\n stdout: ${installResult.stdout}\n stderr: ${installResult.stderr}` ).toBe(0); await exec('pnpm', ['build'], { nodeOptions: { stdio: 'pipe', cwd: testOutputPath } diff --git a/packages/sv/src/create/tests/check.ts b/packages/sv/src/create/tests/check.ts index f56a80b48..455a2a3a9 100644 --- a/packages/sv/src/create/tests/check.ts +++ b/packages/sv/src/create/tests/check.ts @@ -1,11 +1,11 @@ -import { type PromiseWithChild, exec } from 'node:child_process'; +import { type PromiseWithChild, exec as nodeExec } from 'node:child_process'; import fs from 'node:fs'; import path from 'node:path'; import { fileURLToPath } from 'node:url'; import { promisify } from 'node:util'; +import { exec } from 'tinyexec'; import { beforeAll, describe, expect, test } from 'vitest'; import { add, officialAddons } from '../../../../sv/src/index.ts'; -import { pnpmInstallErrorMessage } from '../../pnpm-install-error.ts'; import { type LanguageType, type TemplateType, create } from '../index.ts'; // Resolve the given path relative to the current file @@ -20,18 +20,16 @@ fs.mkdirSync(test_workspace_dir, { recursive: true }); fs.writeFileSync(path.join(test_workspace_dir, 'pnpm-workspace.yaml'), 'packages:\n - ./*\n'); -const exec_async = promisify(exec); +const exec_async = promisify(nodeExec); beforeAll(async () => { - try { - await exec_async('pnpm install --no-frozen-lockfile', { - cwd: test_workspace_dir - }); - } catch (e) { - const err = e as { stdout?: string; stderr?: string }; - throw new Error(pnpmInstallErrorMessage(test_workspace_dir, err.stdout, err.stderr), { - cause: e - }); + const install = await exec('pnpm', ['install', '--no-frozen-lockfile'], { + nodeOptions: { cwd: test_workspace_dir, stdio: 'pipe' } + }); + if (install.exitCode !== 0) { + throw new Error( + `pnpm install failed in ${test_workspace_dir}\n stdout: ${install.stdout}\n stderr: ${install.stderr}` + ); } }, 60000); diff --git a/packages/sv/src/pnpm-install-error.ts b/packages/sv/src/pnpm-install-error.ts deleted file mode 100644 index a83ed98b1..000000000 --- a/packages/sv/src/pnpm-install-error.ts +++ /dev/null @@ -1,11 +0,0 @@ -/** Readable error for a failed test `pnpm install`, surfacing pnpm's output. */ -export function pnpmInstallErrorMessage( - cwd: string, - stdout: string | Buffer = '', - stderr: string | Buffer = '' -): string { - const output = `${stdout}${stderr}`; - const tooRecent = output.includes('ERR_PNPM_NO_MATURE_MATCHING_VERSION'); - const hint = tooRecent ? ' (a dependency was published too recently, minimumReleaseAge)' : ''; - return `pnpm install failed in ${cwd}${hint}\n\n${output}`; -} diff --git a/packages/sv/src/testing.ts b/packages/sv/src/testing.ts index 9da606498..5301b2516 100644 --- a/packages/sv/src/testing.ts +++ b/packages/sv/src/testing.ts @@ -9,7 +9,6 @@ import type { TestProject } from 'vitest/node'; import { add, type AddonMap, type OptionMap } from './core/engine.ts'; import { addPnpmAllowBuilds } from './core/package-manager.ts'; import { create } from './create/index.ts'; -import { pnpmInstallErrorMessage } from './pnpm-install-error.ts'; export type ProjectVariant = 'kit-js' | 'kit-ts' | 'vite-js' | 'vite-ts'; export const variants: ProjectVariant[] = ['kit-js', 'kit-ts', 'vite-js', 'vite-ts']; @@ -366,11 +365,13 @@ export function createSetupTest( } const installDir = path.resolve(cwd, testName); - try { - execSync('pnpm install', { cwd: installDir, stdio: 'pipe' }); - } catch (e) { - const err = e as { stdout?: Buffer; stderr?: Buffer }; - throw new Error(pnpmInstallErrorMessage(installDir, err.stdout, err.stderr), { cause: e }); + const install = await exec('pnpm', ['install'], { + nodeOptions: { cwd: installDir, stdio: 'pipe' } + }); + if (install.exitCode !== 0) { + throw new Error( + `pnpm install failed in ${installDir}\n stdout: ${install.stdout}\n stderr: ${install.stderr}` + ); } }); From ed42c99c1ebee88a514e14c5ecd264b02ff97598 Mon Sep 17 00:00:00 2001 From: jycouet Date: Thu, 4 Jun 2026 08:34:04 +0200 Subject: [PATCH 5/5] 3 to 6 minutes (it was the case before but hidden by exec!) --- packages/sv/src/addons/vitest.config.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/sv/src/addons/vitest.config.ts b/packages/sv/src/addons/vitest.config.ts index 682942b7c..370f05c71 100644 --- a/packages/sv/src/addons/vitest.config.ts +++ b/packages/sv/src/addons/vitest.config.ts @@ -10,7 +10,7 @@ export default defineProject({ include: ['tests/**/test.{js,ts}'], globalSetup: ['tests/_setup/global.ts'], testTimeout: ONE_MINUTE * (isWindows ? 5 : 3), - hookTimeout: ONE_MINUTE * (isWindows ? 5 : 3), + hookTimeout: ONE_MINUTE * 6, retry: env.CI ? 3 : 0, maxConcurrency: 4, expect: {