Skip to main content

lib/quickbeam/script.ex

defmodule QuickBEAM.Script do
  @moduledoc false

  alias QuickBEAM.JS.Bundler

  def read(path) do
    case File.read(path) do
      {:ok, source} ->
        cond do
          has_imports?(source, path) ->
            Bundler.bundle_file(path)

          typescript?(path) ->
            OXC.transform(source, Path.basename(path))

          true ->
            {:ok, source}
        end

      {:error, _} = error ->
        error
    end
  end

  defp typescript?(path), do: String.ends_with?(path, ".ts") or String.ends_with?(path, ".tsx")

  defp has_imports?(source, path) do
    case OXC.select(source, Path.basename(path), :import_specifiers) do
      {:ok, [_ | _]} -> true
      _ -> false
    end
  end
end