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