Skip to main content

lib/oxc/bundle/entry.ex

defmodule OXC.Bundle.Entry do
  @moduledoc "Bundle entry configuration."

  defstruct name: nil, import: nil, source: nil

  @type t :: %__MODULE__{name: String.t() | nil, import: String.t(), source: iodata() | nil}

  def new(%__MODULE__{} = entry), do: entry
  def new(import) when is_binary(import), do: %__MODULE__{import: import}

  def new({name, import}) when is_binary(name) and is_binary(import),
    do: %__MODULE__{name: name, import: import}

  def new({name, import, source}), do: %__MODULE__{name: name, import: import, source: source}

  def new(%{import: import} = map) do
    %__MODULE__{
      name: Map.get(map, :name),
      import: import,
      source: Map.get(map, :source)
    }
  end

  def to_native(%__MODULE__{} = entry) do
    %{name: entry.name, import: entry.import, source: entry.source}
  end
end