Packages
surface
0.12.0
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/file_patchers/component.ex
defmodule Mix.Tasks.Surface.Init.FilePatchers.Component do
@moduledoc false
alias Mix.Tasks.Surface.Init.ExPatcher
import ExPatcher
def add_config(code, component, config) do
config_entry = "{#{component}, #{config}}"
patcher =
code
|> parse_string!()
|> find_call_with_args(:config, &match?([":surface", ":components", _], &1))
|> last_arg()
case patcher do
%ExPatcher{node: nil} ->
code
|> parse_string!()
|> find_call_with_args(:import, &(&1 == ["Config"]))
|> append_code("""
config :surface, :components, [
#{config_entry}
]\
""")
components_patcher ->
components_patcher
|> halt_if(&find_list_item_containing(&1, component), :already_patched)
|> append_list_item(config_entry)
end
end
end