diff --git a/.formatter.exs b/.formatter.exs index 8c0683e..17fe611 100644 --- a/.formatter.exs +++ b/.formatter.exs @@ -5,7 +5,7 @@ locals_without_parens = [ [ locals_without_parens: locals_without_parens, - import_deps: [:plug], + import_deps: [], plugins: [Styler], inputs: ["{mix,.formatter}.exs", "{config,lib,test}/**/*.{ex,exs}"], export: [locals_without_parens: locals_without_parens] diff --git a/lib/mix/tasks/tableau.build.ex b/lib/mix/tasks/tableau.build.ex index cffa01b..eef830d 100644 --- a/lib/mix/tasks/tableau.build.ex +++ b/lib/mix/tasks/tableau.build.ex @@ -52,7 +52,7 @@ defmodule Mix.Tasks.Tableau.Build do Map.merge(page, %{body: content, permalink: permalink}) rescue exception -> - reraise TableauDevServer.BuildException, [page: page, exception: exception], __STACKTRACE__ + reraise Tableau.BuildException, [page: page, exception: exception], __STACKTRACE__ end end) |> Stream.map(fn diff --git a/lib/mix/tasks/tableau.server.ex b/lib/mix/tasks/tableau.server.ex deleted file mode 100644 index bdf99ea..00000000 --- a/lib/mix/tasks/tableau.server.ex +++ /dev/null @@ -1,24 +0,0 @@ -defmodule Mix.Tasks.Tableau.Server do - @shortdoc "Starts the tableau dev server" - - @moduledoc "Starts the tableau dev server" - use Mix.Task - - require Logger - - @impl Mix.Task - def run(_args) do - Application.put_env(:tableau, :server, true) - Code.put_compiler_option(:ignore_module_conflict, true) - - Logger.debug("server started on http://localhost:4999#{basepath()}") - - Mix.Task.run("app.start", ["--preload-modules"]) - - Mix.Tasks.Run.run(["--no-halt"]) - end - - defp basepath do - Path.join("/", Application.get_env(:tableau, :config)[:base_path] || "") - end -end diff --git a/lib/tableau.ex b/lib/tableau.ex index 49c2ff4..a3b0619 100644 --- a/lib/tableau.ex +++ b/lib/tableau.ex @@ -48,15 +48,6 @@ defmodule Tableau do ``` """ - @doc """ - Component to connect to the development server via websocket to broadcast that the page should reload. - - By default, connects to `'ws://' + location.host + '/ws'`. - - See `WebDevUtils.Components.live_reload/1` for configuration options. - """ - defdelegate live_reload(assigns), to: WebDevUtils.Components - @doc """ Convert markdown content to HTML using `MDEx.to_html!/2`. diff --git a/lib/tableau_dev_server/build_exception.ex b/lib/tableau/build_exception.ex similarity index 93% rename from lib/tableau_dev_server/build_exception.ex rename to lib/tableau/build_exception.ex index eb4560f..ca89cbf 100644 --- a/lib/tableau_dev_server/build_exception.ex +++ b/lib/tableau/build_exception.ex @@ -1,4 +1,4 @@ -defmodule TableauDevServer.BuildException do +defmodule Tableau.BuildException do @moduledoc false @type t :: %__MODULE__{ page: map(), diff --git a/lib/tableau_dev_server/application.ex b/lib/tableau_dev_server/application.ex deleted file mode 100644 index 63a2fa4..00000000 --- a/lib/tableau_dev_server/application.ex +++ /dev/null @@ -1,13 +0,0 @@ -defmodule TableauDevServer.Application do - @moduledoc false - - use Application - - @impl true - def start(_type, _args) do - children = [TableauDevServer.ServerSupervisor] - - opts = [strategy: :one_for_one, name: TableauDevServer.Supervisor] - Supervisor.start_link(children, opts) - end -end diff --git a/lib/tableau_dev_server/index_html.ex b/lib/tableau_dev_server/index_html.ex deleted file mode 100644 index 4a35298..00000000 --- a/lib/tableau_dev_server/index_html.ex +++ /dev/null @@ -1,42 +0,0 @@ -defmodule TableauDevServer.IndexHtml do - @moduledoc false - - @behaviour Plug - - @doc ~S""" - Initialize plug options - - - at: The request path to reach for static assets, defaults to "/" - - default_file: Filename to serve when request path is a directory, defaults to "index.html" - - ## Example - - iex> Plug.Static.IndexHtml.init(at: "/doc") - [matcher: ~r|^/doc/(.*/)?$|, default_file: "index.html"] - """ - def init(opts), do: Keyword.merge([default_file: "index.html"], opts) - - @doc """ - Invokes the plug, adding default_file to request_path and path_info for directory paths - - ## Example - - iex> opts = Plug.Static.IndexHtml.init(at: "/doc") - iex> conn = %Plug.Conn{request_path: "/doc/a/", path_info: ["doc", "a"]} - iex> Plug.Static.IndexHtml.call(conn, opts) |> Map.take([:request_path, :path_info]) - %{path_info: ["doc", "a", "index.html"], request_path: "/doc/a/index.html"} - """ - def call(conn, default_file: filename) do - case Path.extname(conn.request_path) do - "" -> - %{ - conn - | request_path: String.replace_suffix(conn.request_path, "/", "") <> "/#{filename}", - path_info: conn.path_info ++ [filename] - } - - _ -> - conn - end - end -end diff --git a/lib/tableau_dev_server/router.ex b/lib/tableau_dev_server/router.ex deleted file mode 100644 index 8e236ac..00000000 --- a/lib/tableau_dev_server/router.ex +++ /dev/null @@ -1,66 +0,0 @@ -defmodule TableauDevServer.Router do - @moduledoc false - use Plug.Router, init_mode: :runtime - use Plug.Debugger - - require Logger - - @base_path Path.join("/", Application.compile_env(:tableau, [:config, :base_path], "")) - @out_dir Application.compile_env(:tableau, [:config, :out_dir], "_site") - - @not_found ~s''' - Not Found - ''' - - plug :recompile - plug :rerender - - plug TableauDevServer.IndexHtml - plug Plug.Static, at: @base_path, from: @out_dir, cache_control_for_etags: "no-cache" - - plug :match - plug :dispatch - - get "/ws/index.html" do - conn - |> WebSockAdapter.upgrade(TableauDevServer.Websocket, [], timeout: 60_000) - |> halt() - end - - match _ do - Logger.error("File not found: #{conn.request_path}") - - send_resp(conn, 404, @not_found) - end - - defp recompile(conn, _) do - if conn.request_path == "/ws" do - conn - else - case WebDevUtils.CodeReloader.reload() do - {:error, errors} -> - errors = Enum.filter(errors, &(&1.severity == :error)) - - message = - errors - |> Enum.map_join("\n", & &1.message) - |> String.replace(~r/\x1B\[[0-9;]*m/, "") - - stacktrace = List.first(errors).stacktrace - - reraise CompileError, [description: message], stacktrace - - _ -> - conn - end - end - end - - defp rerender(conn, _) do - if conn.request_path != "/ws" do - Mix.Task.rerun("tableau.build", ["--out", @out_dir]) - end - - conn - end -end diff --git a/lib/tableau_dev_server/server.ex b/lib/tableau_dev_server/server.ex deleted file mode 100644 index 9da5c08..00000000 --- a/lib/tableau_dev_server/server.ex +++ /dev/null @@ -1,9 +0,0 @@ -defmodule TableauDevServer.Server do - @moduledoc false - def child_spec(_) do - Supervisor.child_spec( - {Bandit, scheme: :http, plug: TableauDevServer.Router, port: 4999}, - [] - ) - end -end diff --git a/lib/tableau_dev_server/server_supervisor.ex b/lib/tableau_dev_server/server_supervisor.ex deleted file mode 100644 index b3cf271..00000000 --- a/lib/tableau_dev_server/server_supervisor.ex +++ /dev/null @@ -1,29 +0,0 @@ -defmodule TableauDevServer.ServerSupervisor do - @moduledoc false - use Supervisor - - def start_link(init_arg) do - Supervisor.start_link(__MODULE__, init_arg, name: __MODULE__) - end - - @impl true - def init(_init_arg) do - if Application.get_env(:tableau, :server) do - children = [ - WebDevUtils.FileSystem, - TableauDevServer.Server, - WebDevUtils.CodeReloader - ] - - Supervisor.init(children ++ asset_children(), strategy: :one_for_one) - else - :ignore - end - end - - def asset_children do - for conf <- Application.get_env(:tableau, :assets, []) do - {WebDevUtils.Assets, conf} - end - end -end diff --git a/lib/tableau_dev_server/websocket.ex b/lib/tableau_dev_server/websocket.ex deleted file mode 100644 index 2ab4555..00000000 --- a/lib/tableau_dev_server/websocket.ex +++ /dev/null @@ -1,31 +0,0 @@ -defmodule TableauDevServer.Websocket do - @moduledoc false - require Logger - - def init(_args) do - :ok = WebDevUtils.LiveReload.init() - {:ok, %{reloader: Application.get_env(:tableau, :reloader, patterns: [])}} - end - - def handle_in({"subscribe", [opcode: :text]}, state) do - {:push, {:text, "subscribed"}, state} - end - - def handle_info(:reload, state) do - {:push, {:text, "reload"}, state} - end - - def handle_info({:file_event, watcher_pid, {path, event}}, state) do - WebDevUtils.LiveReload.reload!({:file_event, watcher_pid, {Path.relative_to_cwd(path), event}}, - patterns: state.reloader[:patterns] - ) - - {:ok, state} - end - - def handle_info(message, state) do - Logger.warning("Unhandled message: #{inspect(message)}") - - {:ok, state} - end -end diff --git a/mix.exs b/mix.exs index 77b4045..a14124c 100644 --- a/mix.exs +++ b/mix.exs @@ -21,8 +21,7 @@ defmodule Tableau.MixProject do # Run "mix help compile.app" to learn about applications. def application do [ - extra_applications: [:logger, :inets], - mod: {TableauDevServer.Application, []} + extra_applications: [:logger] ] end @@ -33,7 +32,6 @@ defmodule Tableau.MixProject do # Run "mix help deps" to learn about dependencies. defp deps do [ - {:bandit, "~> 1.0"}, {:date_time_parser, "~> 1.2"}, {:html_entities, "~> 0.5.2"}, {:libgraph, "~> 0.16.0"}, @@ -41,8 +39,6 @@ defmodule Tableau.MixProject do {:schematic, "~> 0.5.1"}, {:slugify, "~> 1.3"}, {:tz, "~> 0.28.1"}, - {:web_dev_utils, "~> 0.3"}, - {:websock_adapter, "~> 0.5"}, {:yaml_elixir, "~> 2.9"}, # dev diff --git a/mix.lock b/mix.lock index 7c899a1..38c835c 100644 --- a/mix.lock +++ b/mix.lock @@ -1,36 +1,25 @@ %{ - "bandit": {:hex, :bandit, "1.12.0", "6c5214daa2469644ac4ab0113b98abc24f75e348378e6a974c6343b3e5da22ef", [:mix], [{:hpax, "~> 1.0", [hex: :hpax, repo: "hexpm", optional: false]}, {:plug, "~> 1.18", [hex: :plug, repo: "hexpm", optional: false]}, {:telemetry, "~> 0.4 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}, {:thousand_island, "~> 1.5", [hex: :thousand_island, repo: "hexpm", optional: false]}, {:websock, "~> 0.5", [hex: :websock, repo: "hexpm", optional: false]}], "hexpm", "45dac82dc86f45cf4a196dee9cc5a8b791d9c9469d996055f055e6ee36c66e20"}, "date_time_parser": {:hex, :date_time_parser, "1.3.0", "6ba16850b5ab83dd126576451023ab65349e29af2336ca5084aa1e37025b476e", [:mix], [{:kday, "~> 1.0", [hex: :kday, repo: "hexpm", optional: false]}], "hexpm", "93c8203a8ddc66b1f1531fc0e046329bf0b250c75ffa09567ef03d2c09218e8c"}, "earmark_parser": {:hex, :earmark_parser, "1.4.45", "cba8369ab2a1342e419bc2760eec731b17be828941dcf494045d44766227e1d5", [:mix], [], "hexpm", "d3ec045bf122965db20c0bdb420e19ee1415843135327124918473feb4b328e8"}, "ex_doc": {:hex, :ex_doc, "0.40.3", "4a972ffe64bc07dc605af487e98fc19b72a4185f55ca031b94c0552d6071c1d9", [:mix], [{:earmark_parser, "~> 1.4.44", [hex: :earmark_parser, repo: "hexpm", optional: false]}, {:makeup_c, ">= 0.1.0", [hex: :makeup_c, repo: "hexpm", optional: true]}, {:makeup_elixir, "~> 0.14 or ~> 1.0", [hex: :makeup_elixir, repo: "hexpm", optional: false]}, {:makeup_erlang, "~> 0.1 or ~> 1.0", [hex: :makeup_erlang, repo: "hexpm", optional: false]}, {:makeup_html, ">= 0.1.0", [hex: :makeup_html, repo: "hexpm", optional: true]}], "hexpm", "2756e357742fecd9749b489b85d67c9ce99c465f2e75728d9e6dc8d704b973de"}, - "file_system": {:hex, :file_system, "1.1.1", "31864f4685b0148f25bd3fbef2b1228457c0c89024ad67f7a81a3ffbc0bbad3a", [:mix], [], "hexpm", "7a15ff97dfe526aeefb090a7a9d3d03aa907e100e262a0f8f7746b78f8f87a5d"}, "floki": {:hex, :floki, "0.38.4", "10f98971e892aed2c2f1b3a0f928e488e3797e1c6dd3dfd98db40b14e9a78bcf", [:mix], [], "hexpm", "bdb34645eee8e79845c7edaca2d4099a52804ee4d4a3ecc683a69451f0244973"}, - "hpax": {:hex, :hpax, "1.0.3", "ed67ef51ad4df91e75cc6a1494f851850c0bd98ebc0be6e81b026e765ee535aa", [:mix], [], "hexpm", "8eab6e1cfa8d5918c2ce4ba43588e894af35dbd8e91e6e55c817bca5847df34a"}, "html_entities": {:hex, :html_entities, "0.5.2", "9e47e70598da7de2a9ff6af8758399251db6dbb7eebe2b013f2bbd2515895c3c", [:mix], [], "hexpm", "c53ba390403485615623b9531e97696f076ed415e8d8058b1dbaa28181f4fdcc"}, "jason": {:hex, :jason, "1.4.5", "2e3a008590b0b8d7388c20293e9dcc9cf3e5d642fd2a114e4cbbb52e595d940a", [:mix], [{:decimal, "~> 1.0 or ~> 2.0 or ~> 3.0", [hex: :decimal, repo: "hexpm", optional: true]}], "hexpm", "b0c823996102bcd0239b3c2444eb00409b72f6a140c1950bc8b457d836b30684"}, "kday": {:hex, :kday, "1.1.0", "64efac85279a12283eaaf3ad6f13001ca2dff943eda8c53288179775a8c057a0", [:mix], [{:ex_doc, "~> 0.21", [hex: :ex_doc, repo: "hexpm", optional: true]}], "hexpm", "69703055d63b8d5b260479266c78b0b3e66f7aecdd2022906cd9bf09892a266d"}, "libgraph": {:hex, :libgraph, "0.16.0", "3936f3eca6ef826e08880230f806bfea13193e49bf153f93edcf0239d4fd1d07", [:mix], [], "hexpm", "41ca92240e8a4138c30a7e06466acc709b0cbb795c643e9e17174a178982d6bf"}, - "lumis": {:hex, :lumis, "0.6.1", "2ccc82748dd2ae1d955367c3dfa2d216e311dbde732ede01688b1269a4510137", [:mix], [{:nimble_options, "~> 1.0", [hex: :nimble_options, repo: "hexpm", optional: false]}, {:rustler, "~> 0.29", [hex: :rustler, repo: "hexpm", optional: true]}, {:rustler_precompiled, "~> 0.6", [hex: :rustler_precompiled, repo: "hexpm", optional: false]}], "hexpm", "9ccb48fad46452631e57c6cbcc96d4181e5e8479b4340192478ca360380eeaa2"}, + "lumis": {:hex, :lumis, "0.6.3", "a14ea311298e45f31f3dff17d3b41b9717c0757ce1aa5275e190e46aa95ea04d", [:mix], [{:nimble_options, "~> 1.0", [hex: :nimble_options, repo: "hexpm", optional: false]}, {:rustler, "~> 0.29", [hex: :rustler, repo: "hexpm", optional: true]}, {:rustler_precompiled, "~> 0.6", [hex: :rustler_precompiled, repo: "hexpm", optional: false]}], "hexpm", "c0b3dd853f5d44a604202a732fe8c4d0575c4cca263d4e2b4a6f7794d00fab6e"}, "makeup": {:hex, :makeup, "1.2.2", "882d46dc0905e9ff7abf2aab61a7e6b3dcc555533977d8a23b06019e6c89ac94", [:mix], [{:nimble_parsec, "~> 1.4", [hex: :nimble_parsec, repo: "hexpm", optional: false]}], "hexpm", "9a1a24e5b343b8ae16abea0822c10a6f75da27af7fa802ada5251f7579bfccfa"}, "makeup_elixir": {:hex, :makeup_elixir, "1.0.1", "e928a4f984e795e41e3abd27bfc09f51db16ab8ba1aebdba2b3a575437efafc2", [:mix], [{:makeup, "~> 1.0", [hex: :makeup, repo: "hexpm", optional: false]}, {:nimble_parsec, "~> 1.2.3 or ~> 1.3", [hex: :nimble_parsec, repo: "hexpm", optional: false]}], "hexpm", "7284900d412a3e5cfd97fdaed4f5ed389b8f2b4cb49efc0eb3bd10e2febf9507"}, "makeup_erlang": {:hex, :makeup_erlang, "1.1.0", "835f7e60792e08824cda445639555d7bf1bbbddb1b60b306e33cb6f6db24dc74", [:mix], [{:makeup, "~> 1.0", [hex: :makeup, repo: "hexpm", optional: false]}], "hexpm", "1cd6780fb1dd1a03979abaed0fe82712b0625118fd5257d3ebbf73f960c73c3c"}, "mdex": {:hex, :mdex, "0.11.7", "583b35c7160c4e26deab6233f967669d51de6f8b5f7b605adc55037abf7a20d2", [:mix], [{:jason, "~> 1.0", [hex: :jason, repo: "hexpm", optional: false]}, {:lumis, "~> 0.1", [hex: :lumis, repo: "hexpm", optional: false]}, {:nimble_options, "~> 1.0", [hex: :nimble_options, repo: "hexpm", optional: false]}, {:nimble_parsec, "~> 1.0", [hex: :nimble_parsec, repo: "hexpm", optional: false]}, {:phoenix_live_view, "~> 1.0", [hex: :phoenix_live_view, repo: "hexpm", optional: true]}, {:rustler, "~> 0.32", [hex: :rustler, repo: "hexpm", optional: true]}, {:rustler_precompiled, "~> 0.7", [hex: :rustler_precompiled, repo: "hexpm", optional: false]}], "hexpm", "6dac3deb3ecb1a0a5ac9f383c9c57e46510b0a519e6fb21883d9ead34d0e4ffd"}, - "mdex_native": {:hex, :mdex_native, "0.2.4", "a74b9d799d3fc487b1f97b70ee9b04108c7af0514920d56828e173d19312c2a9", [:mix], [{:rustler, "~> 0.32", [hex: :rustler, repo: "hexpm", optional: true]}, {:rustler_precompiled, "~> 0.7", [hex: :rustler_precompiled, repo: "hexpm", optional: false]}], "hexpm", "d71185c43c5209c6939f4b65f903f71c892512c93ea6843171227855d2d976f5"}, - "mime": {:hex, :mime, "2.0.7", "b8d739037be7cd402aee1ba0306edfdef982687ee7e9859bee6198c1e7e2f128", [:mix], [], "hexpm", "6171188e399ee16023ffc5b76ce445eb6d9672e2e241d2df6050f3c771e80ccd"}, "nimble_options": {:hex, :nimble_options, "1.1.1", "e3a492d54d85fc3fd7c5baf411d9d2852922f66e69476317787a7b2bb000a61b", [:mix], [], "hexpm", "821b2470ca9442c4b6984882fe9bb0389371b8ddec4d45a9504f00a66f650b44"}, "nimble_parsec": {:hex, :nimble_parsec, "1.4.2", "8efba0122db06df95bfaa78f791344a89352ba04baedd3849593bfce4d0dc1c6", [:mix], [], "hexpm", "4b21398942dda052b403bbe1da991ccd03a053668d147d53fb8c4e0efe09c973"}, - "plug": {:hex, :plug, "1.20.2", "adbee2441232412e37fbb357fd5e4cd533fdd253b29f2e1992262b0f1fb01462", [:mix], [{:mime, "~> 1.0 or ~> 2.0", [hex: :mime, repo: "hexpm", optional: false]}, {:plug_crypto, "~> 1.1.1 or ~> 1.2 or ~> 2.0", [hex: :plug_crypto, repo: "hexpm", optional: false]}, {:telemetry, "~> 0.4.3 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "b16baf55877d60891002ffc1ce0b3ff7d6f30a38a23e02e4d4293c4ac266f136"}, - "plug_crypto": {:hex, :plug_crypto, "2.1.1", "19bda8184399cb24afa10be734f84a16ea0a2bc65054e23a62bb10f06bc89491", [:mix], [], "hexpm", "6470bce6ffe41c8bd497612ffde1a7e4af67f36a15eea5f921af71cf3e11247c"}, "rustler_precompiled": {:hex, :rustler_precompiled, "0.9.0", "3a052eda09f3d2436364645cc1f13279cf95db310eb0c17b0d8f25484b233aa0", [:mix], [{:rustler, "~> 0.23", [hex: :rustler, repo: "hexpm", optional: true]}], "hexpm", "471d97315bd3bf7b64623418b3693eedd8e47de3d1cb79a0ac8f9da7d770d94c"}, "schematic": {:hex, :schematic, "0.5.2", "07b666b971b780bcfbae7a5032945886dc9fb7e31834d7438c6e572ef80c2866", [:mix], [{:telemetry, "~> 0.4 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "cef597a88260823a806c106071213bd85670b855007cd70e21284a716fe44348"}, "slugify": {:hex, :slugify, "1.3.1", "0d3b8b7e5c1eeaa960e44dce94382bee34a39b3ea239293e457a9c5b47cc6fd3", [:mix], [], "hexpm", "cb090bbeb056b312da3125e681d98933a360a70d327820e4b7f91645c4d8be76"}, "styler": {:hex, :styler, "1.11.0", "35010d970689a23c2bcc8e97bd8bf7d20e3561d60c49be84654df5c37d051a9c", [:mix], [], "hexpm", "70f36165d0cf238a32b7a456fdef6a9c72e77e657d7ac4a0ace33aeba3f2b8c0"}, "telemetry": {:hex, :telemetry, "1.4.2", "a0cb522801dffb1c49fe6e30561badffc7b6d0e180db1300df759faa22062855", [:rebar3], [], "hexpm", "928f6495066506077862c0d1646609eed891a4326bee3126ba54b60af61febb1"}, - "thousand_island": {:hex, :thousand_island, "1.5.0", "f50a213cac97262b6d5ebb85745aa2c00fec1413191e6e66834788d45425cecb", [:mix], [{:telemetry, "~> 0.4 or ~> 1.0", [hex: :telemetry, repo: "hexpm", optional: false]}], "hexpm", "708923d40523e43cf99041ab37a0d4b0ec426ac6438fa3716ab23d919eaeb412"}, "tz": {:hex, :tz, "0.28.2", "6c47f3d1a8ee5c33a1d8f0ba49e5a851b0a30c408a587d907aff6e71228b3b32", [:mix], [{:castore, "~> 0.1 or ~> 1.0", [hex: :castore, repo: "hexpm", optional: true]}, {:mint, "~> 1.6", [hex: :mint, repo: "hexpm", optional: true]}], "hexpm", "a6bf7355a33f0a7511602ab4566432ac0901d8abff81e94e455bca19708a0c87"}, - "web_dev_utils": {:hex, :web_dev_utils, "0.3.0", "463f3695dcdee9a6f18dbc783ee76f0ecdd1c9a489a6482aadcf166b3e5fee12", [:mix], [{:file_system, "~> 1.0", [hex: :file_system, repo: "hexpm", optional: false]}], "hexpm", "c239d4d24bfc61110a98b7d75bb7bbbb1752a5d8fcb5a2d369c5d4f64d1d7aec"}, - "websock": {:hex, :websock, "0.5.3", "2f69a6ebe810328555b6fe5c831a851f485e303a7c8ce6c5f675abeb20ebdadc", [:mix], [], "hexpm", "6105453d7fac22c712ad66fab1d45abdf049868f253cf719b625151460b8b453"}, - "websock_adapter": {:hex, :websock_adapter, "0.6.0", "73db5ab8aaefd1a876a97ce3e6afc96562625de69ef17a4e04426e034849d0b8", [:mix], [{:bandit, ">= 0.6.0", [hex: :bandit, repo: "hexpm", optional: true]}, {:plug, "~> 1.14", [hex: :plug, repo: "hexpm", optional: false]}, {:plug_cowboy, "~> 2.6", [hex: :plug_cowboy, repo: "hexpm", optional: true]}, {:websock, "~> 0.5", [hex: :websock, repo: "hexpm", optional: false]}], "hexpm", "50021a85bce8f203b086705d9e0c5415e2c7eb05d319111b0428fe71f9934617"}, "yamerl": {:hex, :yamerl, "0.10.0", "4ff81fee2f1f6a46f1700c0d880b24d193ddb74bd14ef42cb0bcf46e81ef2f8e", [:rebar3], [], "hexpm", "346adb2963f1051dc837a2364e4acf6eb7d80097c0f53cbdc3046ec8ec4b4e6e"}, "yaml_elixir": {:hex, :yaml_elixir, "2.12.2", "9dd1330fb4cd9a36a7b0f502e5b12486eff632792ee4a5f0eba52a4d4ec32c9c", [:mix], [{:yamerl, "~> 0.10", [hex: :yamerl, repo: "hexpm", optional: false]}], "hexpm", "e7c1b10122f973e6558462d51c39026ba0e14afbc6745318e990ea82cfe9e159"}, }