Packages
surface
0.8.2
0.12.3
0.12.2
0.12.1
0.12.0
0.11.5
0.11.4
0.11.3
0.11.2
0.11.1
0.11.0
0.10.0
0.9.5
0.9.4
0.9.3
0.9.2
0.9.1
0.9.0
0.8.4
0.8.3
0.8.2
0.8.1
0.8.0
0.7.6
0.7.5
0.7.4
0.7.3
0.7.2
0.7.1
0.7.0
0.6.1
0.6.0
0.5.2
0.5.1
0.5.0
0.4.1
0.4.0
0.3.2
0.3.1
0.3.0
0.2.1
0.2.0
0.1.1
0.1.0
0.1.0-alpha.2
0.1.0-alpha.1
0.1.0-alpha.0
A component based library for Phoenix LiveView
Current section
Files
Jump to
Current section
Files
lib/mix/tasks/surface/surface.init/project_patchers/common.ex
defmodule Mix.Tasks.Surface.Init.ProjectPatchers.Common do
@moduledoc false
alias Mix.Tasks.Surface.Init.FilePatchers
@behaviour Mix.Tasks.Surface.Init.ProjectPatcher
@impl true
def specs(assigns) do
%{
context_app: context_app,
web_module: web_module,
web_module_path: web_module_path,
web_path: web_path
} = assigns
[
{:patch, "mix.exs", [add_surface_to_mix_compilers()]},
{:patch, "config/dev.exs",
[
add_surface_live_reload_pattern_to_endpoint_config(context_app, web_module, web_path),
add_surface_live_reload_template_pattern_to_endpoint_config(context_app, web_module, web_path)
]},
{:patch, web_module_path,
[
add_import_surface_to_view_macro(web_module)
]}
]
end
def add_surface_to_mix_compilers() do
%{
name: "Add :surface to compilers",
patch: &FilePatchers.MixExs.add_compiler(&1, ":surface"),
instructions: """
Append `:surface` to the list of compilers.
# Example
```
def project do
[
...
compilers: Mix.compilers() ++ [:surface],
...
]
end
```
"""
}
end
def add_surface_live_reload_pattern_to_endpoint_config(context_app, web_module, web_path) do
%{
name: "Update patterns in :reload_patterns",
patch:
&FilePatchers.Phoenix.replace_live_reload_pattern_in_endpoint_config(
&1,
~s[~r"#{web_path}/(live|views)/.*(ex)$"],
~s[~r"#{web_path}/(live|views|components)/.*(ex|sface|js)$"],
"ex|sface|js",
context_app,
web_module
),
instructions: """
Update the :reload_patterns entry to include surface related files.
# Example
```
config :my_app, MyAppWeb.Endpoint,
live_reload: [
patterns: [
~r"lib/my_app_web/(live|views|components)/.*(ex|sface|js)$",
...
]
]
```
"""
}
end
def add_surface_live_reload_template_pattern_to_endpoint_config(context_app, web_module, web_path) do
%{
name: "Update template patterns in :reload_patterns",
patch:
&FilePatchers.Phoenix.replace_live_reload_pattern_in_endpoint_config(
&1,
~s[~r"#{web_path}/templates/.*(eex)$"],
~s[~r"#{web_path}/templates/.*(eex|sface)$"],
"eex|sface",
context_app,
web_module
),
instructions: """
Update the :reload_patterns template entry to include surface related files.
# Example
```
config :my_app, MyAppWeb.Endpoint,
live_reload: [
patterns: [
~r"lib/my_app_web/templates/.*(eex|sface)$"
...
]
]
```
"""
}
end
def add_import_surface_to_view_macro(web_module) do
%{
name: "Add `import Surface` to view config",
patch: &FilePatchers.Phoenix.add_import_to_view_macro(&1, Surface, web_module),
instructions: """
In order to have `~F` available for any Phoenix view, you can import surface.
# Example
```elixir
def view do
quote do
...
import Surface
end
end
```
"""
}
end
end