Packages

SCSS/Sass compiler for Elixir that uses Dart Sass.

Current section

Files

Jump to
sass_ex lib sass_ex.ex
Raw

lib/sass_ex.ex

defmodule SassEx do
@moduledoc ~S"""
Sass/SCSS compiler for elixir that leverages the embedded sass protocol to
interoperate with Dart Sass.
## Basic Usage
iex> SassEx.compile(".example { color: red; }")
{:ok, %SassEx.Response{css: ".example {\n color: red;\n}", source_map: ""}}
"""
use Application
alias SassEx.Processor
alias Sass.EmbeddedProtocol.OutboundMessage.CompileResponse.{
CompileFailure,
CompileSuccess
}
@spec compile(binary, Processor.compile_opts()) ::
{:ok, SassEx.Response.t()} | {:error, String.t(), CompileFailure.t()}
@doc ~S"""
Compile the `content` string.
## Examples
SassEx.compile(content, source_map: true, style: :expanded)
## Options
* `:style` - Either `:expanded` or `:compressed`. Defaults to `:expanded`
* `:source_map` - True if the compilation should include a source map. Defaults to `false`
* `:syntax` - Either `:css` for raw CSS, `:scss` for SCSS format, or `:sass` for SASS/embedded format. Defaults to `:scss`
* `:importers` - List of custom importers. See `SassEx.Importer` for more information
"""
def compile(content, opts \\ []) do
Processor
|> Processor.compile(content, opts)
|> from_compile_response()
end
@doc false
def start(_type, _args) do
children = [
# Define workers and child supervisors to be supervised
{SassEx.Processor, []}
]
Supervisor.start_link(children, strategy: :one_for_one, name: SassEx)
end
@doc false
defp from_compile_response(%CompileSuccess{css: css, source_map: source_map}) do
{:ok,
%SassEx.Response{
css: css,
source_map: source_map
}}
end
defp from_compile_response(%CompileFailure{message: message} = failure) do
{:error, message, failure}
end
end