lib/tasks/deps/get.ex

defmodule Mix.Tasks.DenoEx.Deps.Get do
  @moduledoc """
  A mix task for loading deno dependencies cache

  This delegates to `deno cache`
  """
  use Mix.Task

  @shortdoc """
  Creates a lock file of the dependecies for deno
  """

  @requirements ["app.config"]

  @doc false
  @impl Mix.Task
  def run(args) do
    app = Keyword.get(Mix.Project.config(), :app)
    lock_file_path = DenoEx.lock_file_path(app)
    lock_file_dir = Path.dirname(lock_file_path)

    unless File.exists?(lock_file_dir) do
      File.mkdir_p!(lock_file_dir)
    end

    scripts =
      Application.get_env(:deno_ex, :scripts_path)
      |> List.wrap()
      |> Enum.flat_map(&Path.wildcard/1)

    :ok = DenoEx.lock_dependencies(scripts, lock_file_path, args)
    Mix.shell().info("Created #{lock_file_path}")
  end
end