Skip to main content

lib/mix/tasks/npm.config.ex

defmodule Mix.Tasks.Npm.Config do
  @shortdoc "Show npm configuration"

  @moduledoc """
  Display the current npm configuration.

      mix npm.config

  Shows registry URL, cache directory, auth status, and other settings.
  """

  use Mix.Task

  alias NPM.Config

  @impl true
  def run([]) do
    Application.ensure_all_started(:req)

    Mix.shell().info("registry: #{NPM.Registry.registry_url()}")
    Mix.shell().info("cache: #{NPM.Cache.dir()}")
    Mix.shell().info("auth: #{auth_status()}")
    Mix.shell().info("link strategy: #{link_strategy()}")
    Mix.shell().info("compromised db: #{Config.compromised_db_path()}")
    Mix.shell().info("compromised policy: #{Config.compromised_policy()}")
    Mix.shell().info("compromised sources: #{Enum.join(Config.compromised_sources(), ",")}")
  end

  def run(_) do
    Mix.shell().error("Usage: mix npm.config")
  end

  defp auth_status do
    if System.get_env("NPM_TOKEN"), do: "token set", else: "none"
  end

  defp link_strategy do
    case :os.type() do
      {:unix, _} -> "symlink"
      _ -> "copy"
    end
  end
end