Skip to main content

lib/vize/native.ex

defmodule Vize.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_vize,
    crate: "vize_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("VIZE_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_sfc_nif(String.t()) :: {:ok, map()} | {:error, String.t()}
  def parse_sfc_nif(_source), do: :erlang.nif_error(:nif_not_loaded)

  @spec analyze_sfc_nif(String.t(), String.t()) :: {:ok, map()} | {:error, String.t()}
  def analyze_sfc_nif(_source, _mode), do: :erlang.nif_error(:nif_not_loaded)

  @spec compile_sfc_nif(
          String.t(),
          String.t(),
          String.t(),
          boolean(),
          boolean(),
          boolean(),
          boolean()
        ) :: {:ok, map()} | {:error, String.t()}
  def compile_sfc_nif(
        _source,
        _filename,
        _scope_id,
        _vapor,
        _ssr,
        _custom_renderer,
        _strip_types
      ),
      do: :erlang.nif_error(:nif_not_loaded)

  @spec compile_template_nif(String.t(), String.t(), boolean()) ::
          {:ok, map()} | {:error, list()}
  def compile_template_nif(_source, _mode, _ssr), do: :erlang.nif_error(:nif_not_loaded)

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

  @spec compile_vapor_nif(String.t(), boolean(), boolean(), String.t()) ::
          {:ok, map()} | {:error, list()}
  def compile_vapor_nif(_source, _ssr, _diagnostics, _template_syntax),
    do: :erlang.nif_error(:nif_not_loaded)

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

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

  @spec lint_nif(String.t(), String.t()) :: {:ok, list()}
  def lint_nif(_source, _filename), do: :erlang.nif_error(:nif_not_loaded)

  @spec select_css_nif(String.t(), String.t(), boolean(), boolean(), list()) ::
          {:ok, [map()]} | {:error, [String.t()]}
  def select_css_nif(_source, _filename, _custom_media, _css_modules, _selector),
    do: :erlang.nif_error(:nif_not_loaded)

  @spec parse_css_ast_nif(String.t(), String.t(), boolean(), boolean()) :: {:ok, map()}
  def parse_css_ast_nif(_source, _filename, _custom_media, _css_modules),
    do: :erlang.nif_error(:nif_not_loaded)

  @spec print_css_ast_nif(map(), boolean(), integer(), integer(), integer()) :: {:ok, map()}
  def print_css_ast_nif(_ast, _minify, _chrome, _firefox, _safari),
    do: :erlang.nif_error(:nif_not_loaded)

  @spec compile_css_nif(
          String.t(),
          boolean(),
          boolean(),
          String.t(),
          String.t(),
          integer(),
          integer(),
          integer(),
          boolean()
        ) :: {:ok, map()}
  def compile_css_nif(
        _source,
        _minify,
        _scoped,
        _scope_id,
        _filename,
        _chrome,
        _firefox,
        _safari,
        _css_modules
      ),
      do: :erlang.nif_error(:nif_not_loaded)

  @spec bundle_css_nif(
          String.t(),
          boolean(),
          integer(),
          integer(),
          integer(),
          boolean()
        ) :: {:ok, map()}
  def bundle_css_nif(_entry_path, _minify, _chrome, _firefox, _safari, _css_modules),
    do: :erlang.nif_error(:nif_not_loaded)

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