Packages
fermo
0.16.5
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.{
ChangeHandler,
Dependencies,
Server,
Socket,
SocketRegistry,
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 = app_live_mode_servers() ++ [
cowboy,
{Watcher, dirs: ["lib", "priv/source"]},
{ChangeHandler, []},
{Dependencies, [app_module: app_module]},
{SocketRegistry, []},
{Webpack.DevServer, []}
]
{:ok, pid} = Supervisor.start_link(children, strategy: :one_for_one)
{:ok, pid}
end
def stop(_state) do
Application.stop(:webpack_dev_server)
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
# Allow projects to add children
defp app_live_mode_servers() do
case Application.fetch_env(:fermo, :live_mode_servers) do
:error -> []
{:ok, servers} -> servers
end
end
end