Packages
fermo
0.17.0
0.20.1
0.20.0
0.19.2
0.19.1
0.19.0
0.18.1
0.18.0
0.17.1
0.17.0
0.16.7
0.16.6
0.16.5
0.16.4
0.16.3
0.16.2
0.16.1
0.16.0
0.15.0
0.14.9
0.14.8
0.14.7
0.14.6
0.14.5
0.14.4
0.14.3
0.14.2
0.14.1
0.14.0
0.13.9
0.13.8
0.13.7
0.13.6
0.13.5
0.13.4
0.13.2
0.13.1
0.13.0
0.12.1
0.12.0
0.11.1
0.11.0
0.10.0
0.9.1
0.9.0
0.8.4
0.8.3
0.8.2
0.8.1
0.8.0
0.7.1
0.7.0
0.6.4
0.6.3
0.6.2
0.6.1
0.6.0
0.5.1
0.5.0
0.4.0
0.3.0
0.2.4
0.2.2
0.2.1
0.2.0
0.1.8
0.1.7
0.1.6
0.1.5
0.1.4
0.1.3
0.1.2
0.1.1
0.1.0
A static site generator
Current section
Files
Jump to
Current section
Files
lib/fermo/live/app.ex
defmodule Fermo.Live.App do
@moduledoc false
use Application
alias Fermo.Live.{
AssetPipeline,
Dependencies,
LibChangeHandler,
Server,
Socket,
SocketRegistry,
TemplateChangeHandler,
Watcher
}
def start(_type, _args) do
Application.ensure_all_started(:telemetry)
Application.ensure_all_started(:cowboy)
cowboy = {
Plug.Cowboy,
scheme: :http,
plug: Server,
options: [dispatch: dispatch(), port: port()]
}
app_module = Mix.Fermo.Module.module!()
children =
live_mode_servers() ++
[
cowboy,
{Dependencies, [app_module: app_module]},
{SocketRegistry, []}
] ++
live_watchers() ++
live_asset_pipelines()
{:ok, pid} = Supervisor.start_link(children, strategy: :one_for_one)
{:ok, pid}
end
def stop(_state) do
Application.stop(:cowboy)
Application.stop(:telemetry)
end
def port do
String.to_integer(System.get_env("PORT") || "4001")
end
defp dispatch() do
[
{
:_,
[
{"/__fermo/ws/[...]", Socket, [name: :fermo_live_socket]},
{:_, Plug.Cowboy.Handler, {Server, Server.init([])}}
]
}
]
end
defp live_asset_pipelines() do
Application.get_env(:fermo, :live_asset_pipelines, [])
|> Enum.map(&{AssetPipeline, &1})
end
defp live_watchers() do
[
[dir: "lib", notify: LibChangeHandler],
[dir: "priv/source", notify: TemplateChangeHandler],
] ++ Application.get_env(:fermo, :live_watchers, [])
|> Enum.map(&{Watcher, &1})
end
# Allow projects to add children
defp live_mode_servers() do
Application.get_env(:fermo, :live_mode_servers, [])
end
end