Skip to main content

lib/oxc/native.ex

defmodule OXC.Native do
  native_version = Mix.Project.config()[:version]
  local_dev? = Mix.env() == :dev and Mix.Project.config()[:build_path] == "../../_build"

  build_from_source =
    local_dev? or System.get_env("DUSKMOON_BUILD_NATIVE_FROM_SOURCE") in ["1", "true"]

  use RustlerPrecompiled,
    otp_app: :duskmoon_oxc,
    crate: "oxc_ex_nif",
    base_url:
      "https://github.com/duskmoon-dev/phoenix-duskmoon-ui/releases/download/v#{native_version}",
    force_build: build_from_source or System.get_env("OXC_EX_BUILD") in ["1", "true"],
    targets: ~w(
      aarch64-apple-darwin
      aarch64-unknown-linux-gnu
      x86_64-apple-darwin
      x86_64-pc-windows-gnu
      x86_64-unknown-freebsd
      x86_64-unknown-linux-gnu
    ),
    version: native_version

  @spec parse(iodata(), String.t()) :: {:ok, map()} | {:error, list()}
  def parse(_source, _filename), do: :erlang.nif_error(:nif_not_loaded)

  @spec valid(iodata(), String.t()) :: boolean()
  def valid(_source, _filename), do: :erlang.nif_error(:nif_not_loaded)

  @spec transform(iodata(), String.t(), map()) :: {:ok, String.t() | map()} | {:error, list()}
  def transform(_source, _filename, _opts), do: :erlang.nif_error(:nif_not_loaded)

  @spec minify(iodata(), String.t(), map()) :: {:ok, String.t()} | {:error, list()}
  def minify(_source, _filename, _opts), do: :erlang.nif_error(:nif_not_loaded)

  @spec bundle([{String.t(), iodata()}], map()) ::
          {:ok, String.t() | map()} | {:error, [String.t()]}
  def bundle(_files, _opts), do: :erlang.nif_error(:nif_not_loaded)

  @spec bundle_entry(String.t(), map()) :: {:ok, String.t() | map()} | {:error, [String.t()]}
  def bundle_entry(_entry, _opts), do: :erlang.nif_error(:nif_not_loaded)

  @spec bundle_run(map()) :: {:ok, map()} | {:error, [map()]}
  def bundle_run(_opts), do: :erlang.nif_error(:nif_not_loaded)

  @spec select(iodata(), String.t(), list()) :: {:ok, list()} | {:error, [String.t()]}
  def select(_source, _filename, _spec), do: :erlang.nif_error(:nif_not_loaded)

  @spec transform_many([{iodata(), String.t()}], map()) :: list()
  def transform_many(_inputs, _opts), do: :erlang.nif_error(:nif_not_loaded)

  @spec codegen(map()) :: {:ok, String.t()} | {:error, list()}
  def codegen(_ast), do: :erlang.nif_error(:nif_not_loaded)
end