def update_package_json_deps(igniter, deps, options \\ []) do
package_json_path = "assets/package.json"
parsed_deps = parse_deps(deps)
deps_key = if options[:dev], do: "devDependencies", else: "dependencies"
new_igniter =
igniter
|> Igniter.update_file(package_json_path, fn source ->
original_content = Rewrite.Source.get(source, :content)
case Jason.decode(original_content) do
{:ok, json} ->
existing_deps = Map.get(json, deps_key, %{})
formatted =
Enum.reduce(parsed_deps, existing_deps, fn {name, version}, acc ->
Map.put(acc, name, version)
end)
|> then(&Map.put(json, deps_key, &1))
|> Jason.encode!(pretty: true)
Rewrite.Source.update(source, :content, formatted)
{:error, _} ->
igniter
|> Igniter.add_issue("Failed to parse package.json. Ensure it contains valid JSON.")
end
end)
new_igniter
end
def update_package_json_deps(igniter, deps, options \\ []) do
package_json_path = "assets/package.json"
parsed_deps = parse_deps(deps)
deps_key = if options[:dev], do: "devDependencies", else: "dependencies"
new_igniter =
igniter
|> Igniter.update_file(package_json_path, fn source ->
original_content = Rewrite.Source.get(source, :content)
case Jason.decode(original_content) do
{:ok, json} ->
existing_deps = Map.get(json, deps_key, %{})
formatted =
Enum.reduce(parsed_deps, existing_deps, fn {name, version}, acc ->
Map.put(acc, name, version)
end)
|> then(&Map.put(json, deps_key, &1))
|> Jason.encode!(pretty: true)
Rewrite.Source.update(source, :content, formatted)
{:error, _} ->
igniter
|> Igniter.add_issue("Failed to parse package.json. Ensure it contains valid JSON.")
end
end)
new_igniter
end