From 93ca39c2e13739743c834cbea67303b30adac29b Mon Sep 17 00:00:00 2001 From: Denis Donici Date: Fri, 10 Apr 2026 00:20:29 +0300 Subject: [PATCH] chore: fix igniter installer --- lib/mix/tasks/live_svelte.install.ex | 189 +++++++++++++++++++++++++-- 1 file changed, 179 insertions(+), 10 deletions(-) diff --git a/lib/mix/tasks/live_svelte.install.ex b/lib/mix/tasks/live_svelte.install.ex index 17f4ee0..686afa9 100644 --- a/lib/mix/tasks/live_svelte.install.ex +++ b/lib/mix/tasks/live_svelte.install.ex @@ -197,14 +197,14 @@ defmodule Mix.Tasks.LiveSvelte.Install do if Igniter.exists?(igniter, "assets/css/app.css") do Igniter.update_file(igniter, "assets/css/app.css", fn source -> Rewrite.Source.update(source, :content, fn content -> - if String.contains?(content, "@source \"../svelte\";") do + if String.contains?(content, "@source \"../svelte/**/*.svelte\";") do content else result = String.replace( content, "@source \"../js\";", - ~s(@source "../js";\n@source "../svelte";) + ~s(@source "../js";\n@source "../svelte/**/*.svelte";) ) # Fallback: single-quote variant used by some generators @@ -212,7 +212,7 @@ defmodule Mix.Tasks.LiveSvelte.Install do String.replace( content, "@source '../js';", - ~s(@source '../js';\n@source "../svelte";) + ~s(@source '../js';\n@source "../svelte/**/*.svelte";) ) else result @@ -298,6 +298,8 @@ defmodule Mix.Tasks.LiveSvelte.Install do |> add_svelte_dependency() |> add_svelte_dev_dependencies() |> add_phoenix_vite_dev_dependency() + |> upgrade_vite_version() + |> fix_deps_paths() end) end) end @@ -334,7 +336,7 @@ defmodule Mix.Tasks.LiveSvelte.Install do if String.contains?(content, "\"@sveltejs/vite-plugin-svelte\"") do content else - svelte_deps = ~s("@sveltejs/vite-plugin-svelte": "^5.0.0",\n "svelte": "^5.0.0",\n ) + svelte_deps = ~s("@sveltejs/vite-plugin-svelte": "^7.0.0",\n "svelte": "^5.0.0",\n ) result = String.replace(content, ~s("typescript":), svelte_deps <> ~s("typescript":)) @@ -347,6 +349,19 @@ defmodule Mix.Tasks.LiveSvelte.Install do end end + defp upgrade_vite_version(content) do + # @sveltejs/vite-plugin-svelte@7 requires vite@^8; upgrade from the ^6.x + # default that phoenix_vite.install writes so the peer dep is satisfied. + String.replace(content, ~s("vite": "^6.3.0"), ~s("vite": "^8.0.0")) + end + + defp fix_deps_paths(content) do + # phoenix_vite.install creates assets/package.json with "file:../deps/" paths + # (relative to assets/). After moving the file to the project root, those paths + # must become "file:./deps/" so Node can resolve them. + String.replace(content, "\"file:../deps/", "\"file:./deps/") + end + defp add_module_type(content) do if String.contains?(content, "\"type\": \"module\"") do content @@ -525,15 +540,169 @@ defmodule Mix.Tasks.LiveSvelte.Install do defp demo_svelte_content do """ -
-

LiveSvelte Demo

-

Count: {count}

- - +
+
LiveSvelte
+

End-to-end reactivity

+

This counter is powered by a Phoenix LiveView server — no page reload needed.

+ +
+ + {count} + +
+ +

Click the buttons to update server state via the LiveView websocket.

+ + """ end